diff options
10 files changed, 227 insertions, 104 deletions
diff --git a/animism-align/frontend/app/views/viewer/nav/viewer.nav.js b/animism-align/frontend/app/views/viewer/nav/viewer.nav.js index e1613b4..7b5a4c7 100644 --- a/animism-align/frontend/app/views/viewer/nav/viewer.nav.js +++ b/animism-align/frontend/app/views/viewer/nav/viewer.nav.js @@ -1,18 +1,18 @@ import React, { Component } from 'react' // import { Link } from 'react-router-dom' -// import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import actions from 'app/actions' -// import * as uploadActions from './upload.actions' class ViewerNav extends Component { componentDidMount() { } + render() { const { } = this.props return ( - <div className="viewerNav"> + <div className="viewer-nav"> + Viewer nav </div> ) } @@ -21,8 +21,10 @@ class ViewerNav extends Component { const mapStateToProps = state => ({ }) -const mapDispatchToProps = dispatch => ({ - // uploadActions: bindActionCreators({ ...uploadActions }, dispatch), -}) +export default connect(mapStateToProps)(ViewerNav) -export default connect(mapStateToProps, mapDispatchToProps)(ViewerNav) +/* +- section name, number +- next link +- player +*/ diff --git a/animism-align/frontend/app/views/viewer/player/player.container.js b/animism-align/frontend/app/views/viewer/player/player.container.js new file mode 100644 index 0000000..86b8896 --- /dev/null +++ b/animism-align/frontend/app/views/viewer/player/player.container.js @@ -0,0 +1,30 @@ +import React, { Component } from 'react' +// import { Link } from 'react-router-dom' +import { connect } from 'react-redux' + +import actions from 'app/actions' + +class PlayerContainer extends Component { + componentDidMount() { + } + + render() { + const { } = this.props + return ( + <div className="player"> + Player container + </div> + ) + } +} + +const mapStateToProps = state => ({ +}) + +export default connect(mapStateToProps)(PlayerContainer) + +/* +- section name, number +- next link +- player +*/ diff --git a/animism-align/frontend/app/views/viewer/transcript/components/elementTypes.image.js b/animism-align/frontend/app/views/viewer/transcript/components/elementTypes.image.js index c2477ee..f005fc0 100644 --- a/animism-align/frontend/app/views/viewer/transcript/components/elementTypes.image.js +++ b/animism-align/frontend/app/views/viewer/transcript/components/elementTypes.image.js @@ -6,7 +6,6 @@ export const MediaCitation = ({ media }) => { <span dangerouslySetInnerHTML={{ _html: media.citation }} /> ) } - console.log(media) return ( <span> {media.author} diff --git a/animism-align/frontend/app/views/viewer/transcript/transcript.container.js b/animism-align/frontend/app/views/viewer/transcript/transcript.container.js index a5e25dd..e6d7d09 100644 --- a/animism-align/frontend/app/views/viewer/transcript/transcript.container.js +++ b/animism-align/frontend/app/views/viewer/transcript/transcript.container.js @@ -8,14 +8,18 @@ import actions from 'app/actions' import ParagraphList from 'app/views/paragraph/components/paragraph.list' import { transcriptElementLookup } from './components' -const noop = () => {} - class Transcript extends Component { constructor(props){ super(props) this.handleClose = this.handleClose.bind(this) + this.handleAnnotationClick = this.handleAnnotationClick.bind(this) + this.handleParagraphDoubleClick = this.handleParagraphDoubleClick.bind(this) + } + handleAnnotationClick(e, annotation) { + console.log(annotation) } - componentDidMount() { + handleParagraphDoubleClick(e, paragraph) { + return } handleClose() { actions.viewer.hideSection('transcript') @@ -27,8 +31,8 @@ class Transcript extends Component { <div className='content'> <ParagraphList paragraphElementLookup={transcriptElementLookup} - onAnnotationClick={noop} - onParagraphDoubleClick={noop} + onAnnotationClick={this.handleAnnotationClick} + onParagraphDoubleClick={this.handleParagraphDoubleClick} /> </div> <div diff --git a/animism-align/frontend/app/views/viewer/transcript/transcript.css b/animism-align/frontend/app/views/viewer/transcript/transcript.css new file mode 100644 index 0000000..38af9f5 --- /dev/null +++ b/animism-align/frontend/app/views/viewer/transcript/transcript.css @@ -0,0 +1,108 @@ +/* transcript */ + +.transcript { + position: absolute; + top: 0; + right: 0; + width: 31.875rem; + max-width: 100vw; + height: 100%; + overflow: hidden; + background: white; + color: black; + border-left: 1px solid #000; + font-size: 18px; + line-height: 1.45; + transform: translateZ(0) translateX(100%); + transition: transform 0.2s; + pointer-events: none; + user-select: none; +} +.transcript.visible { + pointer-events: auto; + user-select: auto; + transform: translateZ(0) translateX(0); +} + +/* general paragraph styles */ + +.transcript .content { + overflow-x: hidden; + overflow-y: hidden; + width: 100%; + height: 100%; + padding: 1.5rem 2rem 6rem 1.5rem; + position: relative; +} +.transcript.visible .content { + overflow-y: scroll; +} + +.transcript .content > div { + margin-bottom: 16px; +} + +/* transcript scroll bar */ + +.transcript .content::-webkit-scrollbar { + cursor: pointer; + user-select: none; + width: 4px +} +.transcript .content::-webkit-scrollbar-button { + display: block; + width: 0; + height: 0; +} +.transcript .content::-webkit-scrollbar-track-piece { + background:rgba(211,211,211,0.8); +} +.transcript .content::-webkit-scrollbar-thumb { + display: block; + background: #000; +} + +/* paragraph subtypes */ + +.transcript .header { + text-align: center; + padding-top: 2rem; +} +.transcript .header:first-of-type { + padding-top: 0; +} +.transcript .header span { + border-bottom: 1px solid; +} + +.transcript .paragraph, +.transcript .hidden { +} + +.transcript .blockquote { + padding-left: 2rem; + line-height: 1.45; +} + +/* sentences */ + +.transcript span { + margin-right: 4px; + box-shadow: 0 0 0 rgba(255,255,255,0.0); +} +.transcript .media span { + margin-right: 0; + border-bottom: 1px solid; + cursor: pointer; +} + +.transcript .paragraph .current { + box-shadow: -2px -1px 0 #e8e8e8, + 2px -1px 0 #e8e8e8, + -2px 1px 0 #e8e8e8, + 2px 1px 0 #e8e8e8; + box-decoration-break: clone; + background: #e8e8e8; + color: #000; + transition: all 0.2s; +} diff --git a/animism-align/frontend/app/views/viewer/viewer.container.js b/animism-align/frontend/app/views/viewer/viewer.container.js index ea2f08c..779ec93 100644 --- a/animism-align/frontend/app/views/viewer/viewer.container.js +++ b/animism-align/frontend/app/views/viewer/viewer.container.js @@ -5,12 +5,16 @@ import { connect } from 'react-redux' import './viewer.fonts.css' import './viewer.css' +import './viewer.nav.css' +import './transcript/transcript.css' import actions from 'app/actions' import { Loader } from 'app/common' import Transcript from './transcript/transcript.container' +import ViewerNav from './nav/viewer.nav' import ViewerRouter from './nav/viewer.router' +import Player from './player/player.container' class ViewerContainer extends Component { constructor(props) { @@ -46,13 +50,20 @@ class ViewerContainer extends Component { } } render() { - if (!this.props.loaded) { - return <div className='viewer body loading'><Loader /></div> + const { loaded, viewer } = this.props + if (!loaded) { + return <div className='viewer loading'><Loader /></div> } return ( - <div className='viewer body'> - <Transcript /> - <Route exact path='/viewer/:component/' component={ViewerRouter} /> + <div> + <div className='viewer'> + <div className={viewer.transcript ? 'viewer-container transcript-open' : 'viewer-container'}> + <Player /> + <ViewerNav /> + </div> + <Transcript /> + <Route exact path='/viewer/:component/' component={ViewerRouter} /> + </div> </div> ) } @@ -63,7 +74,8 @@ const mapStateToProps = state => ({ !!state.annotation.index.lookup && !!state.paragraph.index.lookup && !!state.media.index.lookup - ) + ), + viewer: state.viewer, }) const mapDispatchToProps = dispatch => ({ diff --git a/animism-align/frontend/app/views/viewer/viewer.css b/animism-align/frontend/app/views/viewer/viewer.css index 87506f6..d22da10 100644 --- a/animism-align/frontend/app/views/viewer/viewer.css +++ b/animism-align/frontend/app/views/viewer/viewer.css @@ -1,101 +1,36 @@ -.body.viewer { - height: calc(100% - 3.125rem); +.viewer { + position: relative; + overflow: hidden; + width: 100vw; + height: calc(100vh - 3.125rem); background: #fff; color: #000; font-family: "Neue Haas Unica", sans-serif; } +.viewer.loading { + display: flex; + justify-content: center; + align-items: center; +} .close { position: absolute; - top: 1.5rem; right: 1rem; - width: 2rem; - height: 2rem; - background-image: url('/static/img/close-black.png'); + top: 2rem; right: 2rem; + width: 1.375rem; + height: 1.375rem; + background-image: url('/static/img/close_black.svg'); background-color: rgba(255,255,255,1.0); - background-size: 1.5rem 1.5rem; + background-size: 1.375rem 1.375rem; background-position: center center; background-repeat: no-repeat; cursor: pointer; } -/* transcript */ - -.transcript { - position: absolute; - top: 0; - right: 0; - width: 30rem; - max-width: 100vw; - height: 100%; - overflow: hidden; - background: white; - color: black; - border-left: 1px solid #000; - font-size: 16px; - line-height: 1.45; - transform: translateZ(0) translateX(100%); - transition: transform 0.2s; -} - -.transcript.visible { +.viewer-container { transform: translateZ(0) translateX(0); + transition: transform 0.2s; } -/* general paragraph styles */ - -.transcript .content { - overflow: scroll; - width: 100%; - height: 100%; - padding: 1.5rem 2rem 6rem 1.5rem; - position: relative; -} - -.transcript .content > div { - margin-bottom: 16px; -} - -/* paragraph subtypes */ - -.transcript .header { - text-align: center; - padding-top: 2rem; -} -.transcript .header:first-of-type { - padding-top: 0; -} -.transcript .header span { - border-bottom: 1px solid; -} - -.transcript .paragraph, -.transcript .hidden { -} - -.transcript .blockquote { - padding-left: 3rem; - line-height: 1.45; -} - -/* sentences */ - -.transcript span { - margin-right: 4px; - box-shadow: 0 0 0 rgba(255,255,255,0.0); -} -.transcript .media span { - margin-right: 0; - border-bottom: 1px solid; - cursor: pointer; -} - -.transcript .paragraph .current { - box-shadow: -2px -1px 0 #e8e8e8, - 2px -1px 0 #e8e8e8, - -2px 1px 0 #e8e8e8, - 2px 1px 0 #e8e8e8; - box-decoration-break: clone; - background: #e8e8e8; - color: #000; - transition: all 0.2s; -} +.viewer-container.transcript-open { + transform: translateZ(0) translateX(-31.875rem); +}
\ No newline at end of file diff --git a/animism-align/frontend/app/views/viewer/viewer.nav.css b/animism-align/frontend/app/views/viewer/viewer.nav.css new file mode 100644 index 0000000..377a4bb --- /dev/null +++ b/animism-align/frontend/app/views/viewer/viewer.nav.css @@ -0,0 +1,3 @@ +.viewer-nav { + +} diff --git a/animism-align/static/img/close_black.svg b/animism-align/static/img/close_black.svg new file mode 100644 index 0000000..a4a47b8 --- /dev/null +++ b/animism-align/static/img/close_black.svg @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 22.3 22.3" enable-background="new 0 0 22.3 22.3" xml:space="preserve"> +<g> + <defs> + <rect id="SVGID_1_" width="22.3" height="22.3"/> + </defs> + <clipPath id="SVGID_2_"> + <use xlink:href="#SVGID_1_" overflow="visible"/> + </clipPath> + <line clip-path="url(#SVGID_2_)" fill="none" stroke="#000000" stroke-width="2" x1="0.7" y1="21.6" x2="21.6" y2="0.7"/> + <line clip-path="url(#SVGID_2_)" fill="none" stroke="#000000" stroke-width="2" x1="0.7" y1="0.7" x2="21.6" y2="21.6"/> +</g> +</svg> diff --git a/animism-align/static/img/close_white.svg b/animism-align/static/img/close_white.svg new file mode 100644 index 0000000..a0a3b12 --- /dev/null +++ b/animism-align/static/img/close_white.svg @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 22.3 22.3" enable-background="new 0 0 22.3 22.3" xml:space="preserve"> +<g> + <defs> + <rect id="SVGID_1_" width="22.3" height="22.3"/> + </defs> + <clipPath id="SVGID_2_"> + <use xlink:href="#SVGID_1_" overflow="visible"/> + </clipPath> + <line clip-path="url(#SVGID_2_)" fill="none" stroke="#ffffff" stroke-width="2" x1="0.7" y1="21.6" x2="21.6" y2="0.7"/> + <line clip-path="url(#SVGID_2_)" fill="none" stroke="#ffffff" stroke-width="2" x1="0.7" y1="0.7" x2="21.6" y2="21.6"/> +</g> +</svg> |
