diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2020-11-21 18:43:41 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2020-11-21 18:43:41 +0100 |
| commit | 49a4646c13b4b722d06f94f738fc3ad3d55f81e7 (patch) | |
| tree | f888df4f8070088dc8bbf78301d087a2077511ef | |
| parent | d8170c608a7110361b5cd0fce4540c459f480293 (diff) | |
handheld warning modal at the end of the first chapter
| -rw-r--r-- | animism-align/frontend/app/common/modal.css | 6 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/viewer/modals/modals.handheld.css | 46 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/viewer/modals/modals.handheld.js | 43 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/viewer/modals/modals.vitrine.css (renamed from animism-align/frontend/app/views/viewer/modals/modals.css) | 0 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/viewer/player/player.transcript.js | 7 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/viewer/sections/viewer.sections.list.js | 2 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/viewer/viewer.container.js | 7 | ||||
| -rw-r--r-- | animism-align/frontend/app/views/viewer/viewer.mobile.css | 18 |
8 files changed, 116 insertions, 13 deletions
diff --git a/animism-align/frontend/app/common/modal.css b/animism-align/frontend/app/common/modal.css index 98e2d05..eb93354 100644 --- a/animism-align/frontend/app/common/modal.css +++ b/animism-align/frontend/app/common/modal.css @@ -4,7 +4,7 @@ left: 0; width: 100%; height: 100%; - z-index: 100; + z-index: 20; background: rgba(0,0,0,0.8); display: none; } @@ -14,7 +14,5 @@ align-items: center; } .modal > div { - background: #338; - padding: 1rem; - box-shadow: 0 2px 4px rgba(0,0,0,0.8); + background: #fff; } diff --git a/animism-align/frontend/app/views/viewer/modals/modals.handheld.css b/animism-align/frontend/app/views/viewer/modals/modals.handheld.css new file mode 100644 index 0000000..26f875b --- /dev/null +++ b/animism-align/frontend/app/views/viewer/modals/modals.handheld.css @@ -0,0 +1,46 @@ +.modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10; + background: rgba(0,0,0,0.8); + display: flex; + justify-content: center; + align-items: center; + opacity: 0.0; + transition: opacity 1.0s; + pointer-events: none; +} +.modal.visible { + opacity: 1.0; + pointer-events: auto; +} +.modal.handheld-modal { + background: #fff; +} +.modal.handheld-modal > div { + background: transparent; + padding: 1.5rem; +} +.modal.handheld-modal p { + font-family: "Freight Text", serif; + font-size: 1.6rem; + text-align: center; + line-height: 1.1; + color: #000; +} +.modal.handheld-modal .ok { + position: absolute; + bottom: 0; + right: 0; + width: 100%; + height: 3rem; + padding-right: 1rem; + font-family: "Neue Haas Unica", sans-serif; + font-size: 18px; + text-align: right; + color: #000; + cursor: pointer; +}
\ No newline at end of file diff --git a/animism-align/frontend/app/views/viewer/modals/modals.handheld.js b/animism-align/frontend/app/views/viewer/modals/modals.handheld.js new file mode 100644 index 0000000..a8b40b8 --- /dev/null +++ b/animism-align/frontend/app/views/viewer/modals/modals.handheld.js @@ -0,0 +1,43 @@ +import React, { Component } from 'react' +import { connect } from 'react-redux' + +import actions from 'app/actions' + +import { EfluxClose } from '../nav/eflux.icons' +import { Arrow } from '../nav/viewer.icons' + +class HandheldModal extends Component { + state = { + visible: false, + } + componentDidUpdate(prevProps) { + if (prevProps.showAtEndOfSection !== this.props.showAtEndOfSection && this.props.showAtEndOfSection) { + this.setState({ visible: true }) + } + } + render() { + const { showAtEndOfSection } = this.props + const { visible } = this.state + console.log(showAtEndOfSection, visible) + return ( + <div className={(showAtEndOfSection && visible) ? "modal handheld-modal visible" : "modal handheld-modal"}> + <div> + <p> + {"The full episode is not currently supported on mobile devices."} + </p> + <p> + {"To continue viewing, please switch to your computer."} + </p> + <div onClick={() => this.setState({ visible: false })} className='ok'>OK</div> + </div> + </div> + ) + } +} + +const mapStateToProps = state => ({ + showAtEndOfSection: state.viewer.onlyEnableFirstSection && state.viewer.atEndOfSection, +}) + +export default connect(mapStateToProps)(HandheldModal) + diff --git a/animism-align/frontend/app/views/viewer/modals/modals.css b/animism-align/frontend/app/views/viewer/modals/modals.vitrine.css index c541962..c541962 100644 --- a/animism-align/frontend/app/views/viewer/modals/modals.css +++ b/animism-align/frontend/app/views/viewer/modals/modals.vitrine.css diff --git a/animism-align/frontend/app/views/viewer/player/player.transcript.js b/animism-align/frontend/app/views/viewer/player/player.transcript.js index 1743350..4f3361b 100644 --- a/animism-align/frontend/app/views/viewer/player/player.transcript.js +++ b/animism-align/frontend/app/views/viewer/player/player.transcript.js @@ -67,16 +67,17 @@ class PlayerTranscript extends Component { } handleScroll(e) { + const { viewer } = this.props if (isHandheld) { const isScrolledPastIntro = this.containerRef.current.scrollTop > 100 - if (xor(this.props.viewer.navGradient, isScrolledPastIntro)) { + if (xor(viewer.navGradient, isScrolledPastIntro)) { // console.log('toggle nav gradient', isScrolledPastIntro) actions.viewer.toggleNavGradient(isScrolledPastIntro) } } - if (this.props.viewer.growlOpen) { + if (viewer.growlOpen && !viewer.atEndOfSection) { actions.viewer.closeGrowl() - if (this.props.viewer.currentSection.index === 0) { + if (viewer.currentSection.index === 0) { actions.audio.play() } } diff --git a/animism-align/frontend/app/views/viewer/sections/viewer.sections.list.js b/animism-align/frontend/app/views/viewer/sections/viewer.sections.list.js index 8fc1238..800cef4 100644 --- a/animism-align/frontend/app/views/viewer/sections/viewer.sections.list.js +++ b/animism-align/frontend/app/views/viewer/sections/viewer.sections.list.js @@ -37,7 +37,7 @@ class ViewerSectionsList extends Component { this.scrollRef.current.scrollLeft += delta } handleSectionClick(e, section) { - if (this.props.onlyEnableFirstSection) { + if (this.props.onlyEnableFirstSection && section.index !== 0) { this.setState({ selectedSectionIndex: section.index }) clearTimeout(this.warningFadeTimeout) this.warningFadeTimeout = setTimeout(() => { diff --git a/animism-align/frontend/app/views/viewer/viewer.container.js b/animism-align/frontend/app/views/viewer/viewer.container.js index 67592ca..5bc95f0 100644 --- a/animism-align/frontend/app/views/viewer/viewer.container.js +++ b/animism-align/frontend/app/views/viewer/viewer.container.js @@ -13,7 +13,8 @@ import './sections/footnotes.css' import './transcript/transcript.css' import './checklist/checklist.css' import './checklist/credits.css' -import './modals/modals.css' +import './modals/modals.vitrine.css' +import './modals/modals.handheld.css' import './forms/forms.css' import './player/player.container.css' import './player/player.fullscreen.css' @@ -23,6 +24,7 @@ import './viewer.mobile.css' import { Loader } from 'app/common/loader.component' import { ENV_DEVELOPMENT } from 'app/constants' +import { isHandheld } from 'app/utils' import NavParent from './nav/nav.parent' import ViewerSections from './sections/viewer.sections' @@ -32,6 +34,7 @@ import Player from './player/player.container' import Transcript from './transcript/transcript.container' import Checklist from './checklist/checklist.container' import VitrineModal from './modals/modals.vitrine' +import HandheldModal from './modals/modals.handheld' class ViewerContainer extends Component { render() { @@ -65,7 +68,6 @@ class ViewerContainer extends Component { if (viewer.onlyEnableFirstSection) { className += ' first-section-only' } - viewer.onlyEnableFirstSection && viewer.atEndOfSection return ( <div> <div className='viewer-parent'> @@ -79,6 +81,7 @@ class ViewerContainer extends Component { {ENV_DEVELOPMENT && <Route exact path='/viewer/:component/' component={ViewerRouter} />} </div> <VitrineModal /> + {isHandheld && <HandheldModal />} </div> </div> ) diff --git a/animism-align/frontend/app/views/viewer/viewer.mobile.css b/animism-align/frontend/app/views/viewer/viewer.mobile.css index 5f3eebb..9694df6 100644 --- a/animism-align/frontend/app/views/viewer/viewer.mobile.css +++ b/animism-align/frontend/app/views/viewer/viewer.mobile.css @@ -81,7 +81,6 @@ .eflux-header .transcript-icon { width: 2.5rem; height: 2.5rem; - box-shadow: 0.3px 0.6px 2.6px rgba(0,0,0,0.3); } .eflux-logo { left: 50%; @@ -95,7 +94,6 @@ top: 1rem; left: 1.25rem; margin-left: 0; - box-shadow: 0 0 0 rgba(0,0,0,0.0); background: transparent; } .eflux-header .fullscreen-close svg { @@ -141,7 +139,11 @@ /* checklist */ - .checklist-dropdown-column { + .checklist-dropdown-container { + position: static; + left: auto; + width: calc(100% - 2rem); + margin: 1rem 1rem 0 1rem; } .checklist-inner { width: 100%; @@ -262,6 +264,16 @@ } } +/* mobile landscape mode */ + +@media (max-device-width: 760px) and (orientation: landscape) { + .viewer-fullscreen .video .videoPlayer { + padding-top: 4rem; + } + .site-intro { + background-size: 100% auto; + } +} /* if the introduction is the only section that's enabled... */ |
