diff options
| -rw-r--r-- | cli/app/site/export.py | 2 | ||||
| -rw-r--r-- | frontend/app/views/tile/components/tile.form.js | 2 | ||||
| -rw-r--r-- | frontend/site/viewer/viewer.container.js | 25 |
3 files changed, 26 insertions, 3 deletions
diff --git a/cli/app/site/export.py b/cli/app/site/export.py index 67b9538..aa74165 100644 --- a/cli/app/site/export.py +++ b/cli/app/site/export.py @@ -102,7 +102,7 @@ def sanitize_graph(graph): if 'url' in tile['settings'] and tile['settings']['url'].startswith('/static'): tile['settings']['url'] = '/' + graph['path'] + tile['settings']['url'] if len(tile['settings'].get('appear_after', "")): - tile['settings']['appear_after'] = timestampToSeconds(tile['settings']['appear_after']) + tile['settings']['appear_after'] = timestampToSeconds(tile['settings']['appear_after']) or 0 sanitize_tile(tile) page_path = page_path_lookup[page['id']] page_lookup[page_path] = page diff --git a/frontend/app/views/tile/components/tile.form.js b/frontend/app/views/tile/components/tile.form.js index c2f2f60..c2a8f79 100644 --- a/frontend/app/views/tile/components/tile.form.js +++ b/frontend/app/views/tile/components/tile.form.js @@ -811,7 +811,7 @@ class TileForm extends Component { </div> )} {(temporaryTile.target_page_id === OPEN_POPUP_LINK || temporaryTile.target_page_id === CLOSE_POPUP_LINK) && ( - <div> + <div className='row single'> <Select title="Popup" name='target_popup' diff --git a/frontend/site/viewer/viewer.container.js b/frontend/site/viewer/viewer.container.js index d1fa885..f68a1d3 100644 --- a/frontend/site/viewer/viewer.container.js +++ b/frontend/site/viewer/viewer.container.js @@ -16,6 +16,8 @@ class ViewerContainer extends Component { bounds: { width: window.innerWidth, height: window.innerHeight }, roadblock: false, popups: {}, + time: 0, + maxDeferTime: 0, } constructor(props) { @@ -24,6 +26,7 @@ class ViewerContainer extends Component { this.handleMouseDown = this.handleMouseDown.bind(this) this.handleResize = this.handleResize.bind(this) this.removeRoadblock = this.removeRoadblock.bind(this) + this.updateTimer = this.updateTimer.bind(this) window.addEventListener('resize', this.handleResize) } @@ -50,6 +53,24 @@ class ViewerContainer extends Component { this.setState({ page, popups: {}, roadblock: false }) actions.site.interact() this.props.audio.player.playPage(page) + this.resetTimer(page) + } + } + + resetTimer(page) { + clearTimeout(this.timeout) + const maxDeferTime = page.tiles.reduce((max_time, tile) => Math.max(tile.settings.appear_after || 0, max_time), 0) + if (maxDeferTime) { + this.setState({ time: 0, maxDeferTime }) + this.timeout = setTimeout(this.updateTimer, 500) + } + } + + updateTimer() { + clearTimeout(this.timeout) + this.setState({ time: this.state.time + 0.500 }) + if (this.state.time < this.state.maxDeferTime) { + this.timeout = setTimeout(this.updateTimer, 500) } } @@ -103,7 +124,7 @@ class ViewerContainer extends Component { } render() { - const { page, audio, popups } = this.state + const { page, audio, popups, time } = this.state if (this.state.roadblock) { return this.renderRoadblock() } @@ -130,6 +151,7 @@ class ViewerContainer extends Component { <div className='page' ref={this.pageRef} style={pageStyle}> {page.tiles.map(tile => { if (tile.settings.is_popup && !popups[tile.settings.popup_group]) return + if (tile.settings.appear_after && time < tile.settings.appear_after) return return ( <TileHandle viewing @@ -154,6 +176,7 @@ class ViewerContainer extends Component { actions.site.interact() this.setState({ roadblock: false }) this.props.audio.player.playPage(this.state.page) + this.resetTimer(this.state.page) } renderRoadblock() { |
