summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/views/viewer
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align/frontend/app/views/viewer')
-rw-r--r--animism-align/frontend/app/views/viewer/nav/eflux.chrome.js7
-rw-r--r--animism-align/frontend/app/views/viewer/player/player.fullscreen.css6
-rw-r--r--animism-align/frontend/app/views/viewer/player/player.fullscreen.js17
-rw-r--r--animism-align/frontend/app/views/viewer/viewer.actions.js5
4 files changed, 24 insertions, 11 deletions
diff --git a/animism-align/frontend/app/views/viewer/nav/eflux.chrome.js b/animism-align/frontend/app/views/viewer/nav/eflux.chrome.js
index bc7e4e7..d2462b2 100644
--- a/animism-align/frontend/app/views/viewer/nav/eflux.chrome.js
+++ b/animism-align/frontend/app/views/viewer/nav/eflux.chrome.js
@@ -59,7 +59,7 @@ class EfluxChrome extends Component {
const {
navStyle, navGradient,
playing, transcriptOpen,
- isFullscreen, fullscreenVisible,
+ isFullscreen, fullscreenVisible, isFullscreenSingleton,
growlOpen, growlMessage,
atEndOfSection, currentSection
} = this.props
@@ -68,6 +68,7 @@ class EfluxChrome extends Component {
if (navGradient) className += ' gradient'
if (transcriptOpen) className += ' transcript-open'
if (isFullscreen) className += ' is-fullscreen'
+ const fullscreenWantsCloseButton = isFullscreen && fullscreenVisible && !isFullscreenSingleton
return (
<div className={className}>
<div className="eflux-gradient" />
@@ -83,9 +84,9 @@ class EfluxChrome extends Component {
<div className={growlOpen ? "growl-tooltip growl-message open" : "growl-tooltip growl-message"}>
{growlMessage}
</div>
- {isFullscreen && fullscreenVisible && isHandheld && this.renderCloseButton()}
+ {fullscreenWantsCloseButton && isHandheld && this.renderCloseButton()}
<div className="eflux-nav">
- {isFullscreen && fullscreenVisible && !isHandheld && this.renderCloseButton()}
+ {fullscreenWantsCloseButton && !isHandheld && this.renderCloseButton()}
<span
onMouseEnter={() => this.handleMouseEnter('play')}
onMouseLeave={() => this.handleMouseLeave('play')}
diff --git a/animism-align/frontend/app/views/viewer/player/player.fullscreen.css b/animism-align/frontend/app/views/viewer/player/player.fullscreen.css
index cf3c697..6faa60b 100644
--- a/animism-align/frontend/app/views/viewer/player/player.fullscreen.css
+++ b/animism-align/frontend/app/views/viewer/player/player.fullscreen.css
@@ -7,7 +7,11 @@
overflow: hidden;
pointer-events: none;
user-select: none;
- opacity: 0.0;
+ opacity: 1.0;
+ transition: opacity 0.5s;
+}
+.viewer-fullscreen.seeked {
+ transition: opacity 0.0s;
}
.viewer-fullscreen.active {
pointer-events: auto;
diff --git a/animism-align/frontend/app/views/viewer/player/player.fullscreen.js b/animism-align/frontend/app/views/viewer/player/player.fullscreen.js
index 04421de..a1cc235 100644
--- a/animism-align/frontend/app/views/viewer/player/player.fullscreen.js
+++ b/animism-align/frontend/app/views/viewer/player/player.fullscreen.js
@@ -13,6 +13,8 @@ class PlayerFullscreen extends Component {
state = {
elements: [],
video: false,
+ isSingleton: false,
+ atChapterStart: false,
}
componentDidMount() {
@@ -33,11 +35,12 @@ class PlayerFullscreen extends Component {
let { play_ts, seek_ts } = audio
play_ts = clamp(play_ts, currentSection.start_ts, currentSection.end_ts)
- let elements;
+ let elements, isSingleton = false, atChapterStart = false
// console.log(timeline)
// some classes can be singleton media for an entire chapter, like vitrines
if (timeline.length === 1 && timeline[0].type === 'vitrine') {
elements = timeline
+ isSingleton = true
}
else {
// get elements at this play position
@@ -66,6 +69,7 @@ class PlayerFullscreen extends Component {
// also any elements starting at this point should transition immediately,
// to prevent flash of the underlying content.
if (justSeeked && seekedElements.length) {
+ atChapterStart = true
// console.log(play_ts, seek_ts, 'seeked', seekedElements)
elements = seekedElements.map(e => {
if (e.start_ts === seek_ts && e.type !== 'curtain') {
@@ -113,18 +117,18 @@ class PlayerFullscreen extends Component {
actions.viewer.setNavStyle(currentSection.color)
actions.viewer.setMediaTitle(null)
}
- // elements.reverse()
- this.setState({ elements, persist })
// if fullscreen mode started or ended...
if (!!elements.length !== this.props.isFullscreen) {
- actions.viewer.updateFullscreenStatus(!!elements.length, persist)
+ actions.viewer.updateFullscreenStatus(!!elements.length, persist, isSingleton)
}
+ // elements.reverse()
+ this.setState({ elements, persist, isSingleton, atChapterStart })
}
render() {
const { audio, media, currentSection, fullscreenVisible } = this.props
const { play_ts, playing } = audio
- const { elements, persist } = this.state
+ const { elements, persist, atChapterStart } = this.state
let className = "viewer-fullscreen";
if (elements.length) {
className += " active"
@@ -135,6 +139,9 @@ class PlayerFullscreen extends Component {
if (persist) {
className += " persist"
}
+ if (atChapterStart) {
+ className += " seeked"
+ }
className += playing ? " playing" : " paused"
return (
<div className={className}>
diff --git a/animism-align/frontend/app/views/viewer/viewer.actions.js b/animism-align/frontend/app/views/viewer/viewer.actions.js
index def0e54..0995982 100644
--- a/animism-align/frontend/app/views/viewer/viewer.actions.js
+++ b/animism-align/frontend/app/views/viewer/viewer.actions.js
@@ -307,10 +307,11 @@ export const toggleNavGradient = value => dispatch => {
dispatch({ type: types.viewer.toggle_component, key: 'navGradient', value: value })
}
-export const updateFullscreenStatus = (value, persist) => dispatch => {
- console.log('fullscreen', value, persist)
+export const updateFullscreenStatus = (value, persist, isSingleton) => dispatch => {
+ console.log('fullscreen', value, persist, isSingleton)
dispatch({ type: types.viewer.toggle_component, key: 'isFullscreen', value: value })
dispatch({ type: types.viewer.toggle_component, key: 'isFullscreenPersist', value: persist })
+ dispatch({ type: types.viewer.toggle_component, key: 'isFullscreenSingleton', value: isSingleton })
}
export const toggleFullscreenVisible = value => dispatch => {