summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/views/viewer/player
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align/frontend/app/views/viewer/player')
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.fullscreen/fullscreen.gallery.js41
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.fullscreen/index.js6
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.inline/inline.image.js27
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.inline/inline.video.js7
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.utility/index.js14
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.utility/media.citation.js29
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.utility/media.vitrine.js30
-rw-r--r--animism-align/frontend/app/views/viewer/player/player.fullscreen.css65
8 files changed, 189 insertions, 30 deletions
diff --git a/animism-align/frontend/app/views/viewer/player/components.fullscreen/fullscreen.gallery.js b/animism-align/frontend/app/views/viewer/player/components.fullscreen/fullscreen.gallery.js
new file mode 100644
index 0000000..31a4176
--- /dev/null
+++ b/animism-align/frontend/app/views/viewer/player/components.fullscreen/fullscreen.gallery.js
@@ -0,0 +1,41 @@
+import React from 'react'
+
+import { MediaCitation, Vitrine } from '../components.utility'
+
+export const FullscreenVitrine = ({ element, media, transitionDuration }) => {
+ const { color } = element
+ const item = media.lookup[element.settings.media_id]
+ const style = {
+ backgroundColor: color.backgroundColor,
+ color: color.textColor,
+ transitionDuration,
+ }
+ console.log(item)
+ return (
+ <div
+ className='fullscreen-element vitrine'
+ style={style}
+ >
+ {element.settings.title && <div className='heading'>{element.settings.title}</div>}
+ <Vitrine media={item} />
+ <MediaCitation media={item} />
+ </div>
+ )
+}
+
+export const FullscreenGallery = ({ element, media, transitionDuration }) => {
+ const { color } = element
+ const item = media.lookup[element.settings.media_id]
+ const style = {
+ backgroundColor: color.backgroundColor,
+ color: color.textColor,
+ transitionDuration,
+ }
+ return (
+ <div
+ className='fullscreen-element gallery'
+ style={style}
+ >
+ </div>
+ )
+}
diff --git a/animism-align/frontend/app/views/viewer/player/components.fullscreen/index.js b/animism-align/frontend/app/views/viewer/player/components.fullscreen/index.js
index f533123..538632f 100644
--- a/animism-align/frontend/app/views/viewer/player/components.fullscreen/index.js
+++ b/animism-align/frontend/app/views/viewer/player/components.fullscreen/index.js
@@ -9,6 +9,10 @@ import {
} from './fullscreen.video'
import {
+ FullscreenVitrine
+} from './fullscreen.gallery'
+
+import {
FullscreenCurtain
} from './fullscreen.utility'
@@ -16,4 +20,6 @@ export const fullscreenComponents = {
curtain: React.memo(FullscreenCurtain),
video: React.memo(FullscreenVideo),
image: React.memo(FullscreenImage),
+ // gallery: React.memo(FullscreenGallery),
+ vitrine: React.memo(FullscreenVitrine),
}
diff --git a/animism-align/frontend/app/views/viewer/player/components.inline/inline.image.js b/animism-align/frontend/app/views/viewer/player/components.inline/inline.image.js
index 0312a8f..0e2d205 100644
--- a/animism-align/frontend/app/views/viewer/player/components.inline/inline.image.js
+++ b/animism-align/frontend/app/views/viewer/player/components.inline/inline.image.js
@@ -1,31 +1,6 @@
import React, { Component } from 'react'
-export const MediaCitation = ({ media }) => {
- if (media.citation) {
- return (
- <div className='citation' dangerouslySetInnerHTML={{ _html: media.citation }} />
- )
- }
- return (
- <div className='citation'>
- {media.author}
- {', '}
- {media.pre_title}
- <i>{media.title}</i>
- {media.post_title}
- {'. '}
- {media.date && (
- ' ' + media.date + '.'
- )}
- {media.medium && (
- ' ' + media.medium + '.'
- )}
- {media.source && (
- ' ' + media.source.trim()
- )}
- </div>
- )
-}
+import { MediaCitation } from '../components.utility'
export const MediaImage = ({ paragraph, media, currentParagraph, currentAnnotation, onAnnotationClick, onDoubleClick }) => {
if (!media.lookup) return <div />
diff --git a/animism-align/frontend/app/views/viewer/player/components.inline/inline.video.js b/animism-align/frontend/app/views/viewer/player/components.inline/inline.video.js
index 2b3449c..fc24f9e 100644
--- a/animism-align/frontend/app/views/viewer/player/components.inline/inline.video.js
+++ b/animism-align/frontend/app/views/viewer/player/components.inline/inline.video.js
@@ -1,9 +1,8 @@
import React, { Component } from 'react'
import VimeoPlayer from '@u-wave/react-vimeo'
-import {
- CURTAIN_COLOR_LOOKUP,
-} from 'app/constants'
-import { MediaCitation } from './inline.image'
+
+import { CURTAIN_COLOR_LOOKUP } from 'app/constants'
+import { MediaCitation } from '../components.utility'
export const MediaVideo = ({ paragraph, media, currentParagraph, currentAnnotation, onAnnotationClick, onDoubleClick }) => {
if (!media.lookup) return <div />
diff --git a/animism-align/frontend/app/views/viewer/player/components.utility/index.js b/animism-align/frontend/app/views/viewer/player/components.utility/index.js
new file mode 100644
index 0000000..be38cac
--- /dev/null
+++ b/animism-align/frontend/app/views/viewer/player/components.utility/index.js
@@ -0,0 +1,14 @@
+import React from 'react'
+
+import {
+ MediaCitation
+} from './media.citation'
+
+import {
+ Vitrine
+} from './media.vitrine'
+
+export {
+ MediaCitation,
+ Vitrine,
+} \ No newline at end of file
diff --git a/animism-align/frontend/app/views/viewer/player/components.utility/media.citation.js b/animism-align/frontend/app/views/viewer/player/components.utility/media.citation.js
new file mode 100644
index 0000000..7b3212d
--- /dev/null
+++ b/animism-align/frontend/app/views/viewer/player/components.utility/media.citation.js
@@ -0,0 +1,29 @@
+import React, { Component } from 'react'
+
+export const MediaCitation = ({ media }) => {
+ if (media.settings.bibliography) {
+ return (
+ <div className='citation' dangerouslySetInnerHTML={{ __html: media.settings.bibliography }} />
+ )
+ }
+ return (
+ <div className='citation'>
+ {media.author}
+ {', '}
+ {media.pre_title}
+ <i>{media.title}</i>
+ {media.post_title}
+ {'. '}
+ {media.date && (
+ ' ' + media.date + '.'
+ )}
+ {media.medium && (
+ ' ' + media.medium + '.'
+ )}
+ {media.source && (
+ ' ' + media.source.trim()
+ )}
+ </div>
+ )
+}
+
diff --git a/animism-align/frontend/app/views/viewer/player/components.utility/media.vitrine.js b/animism-align/frontend/app/views/viewer/player/components.utility/media.vitrine.js
new file mode 100644
index 0000000..abe0241
--- /dev/null
+++ b/animism-align/frontend/app/views/viewer/player/components.utility/media.vitrine.js
@@ -0,0 +1,30 @@
+import React, { Component } from 'react'
+
+import { ZoomPlus } from '../../nav/viewer.icons.js'
+
+export const Vitrine = ({ media }) => {
+ const { image_order, image_lookup, thumbnail_lookup } = media.settings
+ const width = (Math.floor(100 / image_order.length * 2) - 2) + 'vw'
+ console.log(width)
+ return (
+ <div className='vitrine-items'>
+ {image_order.map(id => {
+ const thumbnail = thumbnail_lookup[id]
+ return (
+ <VitrineItem key={id} image={thumbnail} width={width} />
+ )
+ })}
+ </div>
+ )
+}
+
+const VitrineItem = ({ image, width }) => {
+ return (
+ <div className='vitrine-item' style={{ width }}>
+ <div className='vitrine-image'>
+ <img src={image.url} />
+ </div>
+ {ZoomPlus}
+ </div>
+ )
+}
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 8d38fa0..29f68c2 100644
--- a/animism-align/frontend/app/views/viewer/player/player.fullscreen.css
+++ b/animism-align/frontend/app/views/viewer/player/player.fullscreen.css
@@ -53,3 +53,68 @@
background-repeat: no-repeat;
background-position: center center;
}
+
+/* vitrine */
+
+.viewer-fullscreen .fullscreen-element.vitrine {
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+}
+.vitrine .heading {
+ font-family: "Freight Text", serif;
+ font-size: 3rem;
+ line-height: 1.28;
+ width: 80%;
+ margin: 0 auto;
+ padding-bottom: 2rem;
+ text-align: center;
+}
+.vitrine .citation {
+ width: 45rem;
+ margin: 0 auto;
+ padding: 1rem 0;
+ font-family: "Neue Haas Unica";
+ color: #888;
+}
+
+.viewer-fullscreen .fullscreen-element.vitrine .heading {
+ margin-top: 4rem;
+}
+.viewer-fullscreen .fullscreen-element.vitrine .citation {
+ margin-bottom: 3rem;
+}
+
+.vitrine-items {
+ display: flex;
+ flex-flow: row wrap;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 1rem;
+}
+.vitrine-items .vitrine-item {
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ justify-content: space-between;
+ height: calc(45vh - 7rem);
+}
+.vitrine-items .vitrine-item .vitrine-image {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 80%;
+ cursor: pointer;
+}
+.vitrine-items .vitrine-item .vitrine-image img {
+ max-width: 100%;
+ max-height: 100%;
+ pointer-events: none;
+}
+.vitrine-items .vitrine-item .zoomPlus {
+ cursor: pointer;
+}
+.vitrine-items .vitrine-item:hover .zoomPlus path {
+ stroke: #000;
+}