summaryrefslogtreecommitdiff
path: root/animism-align/frontend
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-11-09 15:05:53 +0100
committerJules Laplace <julescarbon@gmail.com>2020-11-09 15:05:53 +0100
commitc63920b43f8adcc27e102b5eefc28e1515f2360f (patch)
treeb014ae1ecc2240592f8a98a4852b22cdca85dad2 /animism-align/frontend
parent8b962053f2af99ece482537b9ac7a1daff1400b9 (diff)
moving carousel arrows and making them larger
Diffstat (limited to 'animism-align/frontend')
-rw-r--r--animism-align/frontend/app/views/media/components/media.formVideo.js12
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.media/media.carousel.js141
-rw-r--r--animism-align/frontend/app/views/viewer/player/components.media/media.css55
-rw-r--r--animism-align/frontend/app/views/viewer/player/player.transcript.css10
4 files changed, 131 insertions, 87 deletions
diff --git a/animism-align/frontend/app/views/media/components/media.formVideo.js b/animism-align/frontend/app/views/media/components/media.formVideo.js
index 493a10c..d85fc4d 100644
--- a/animism-align/frontend/app/views/media/components/media.formVideo.js
+++ b/animism-align/frontend/app/views/media/components/media.formVideo.js
@@ -82,7 +82,7 @@ export default class MediaVideoForm extends Component {
autoComplete="off"
/>
- {data.url &&
+ {data.url && (
<div>
<LabelDescription className='video'>
<VimeoPlayer video={data.url} />
@@ -102,8 +102,16 @@ export default class MediaVideoForm extends Component {
onChange={this.handleUpload}
/>
+ <TextArea
+ title="Subtitles"
+ name="subtitles"
+ required
+ data={data}
+ onChange={this.handleChange}
+ autoComplete="off"
+ />
</div>
- }
+ )}
</div>
)
}
diff --git a/animism-align/frontend/app/views/viewer/player/components.media/media.carousel.js b/animism-align/frontend/app/views/viewer/player/components.media/media.carousel.js
index 40ea3dc..60907e5 100644
--- a/animism-align/frontend/app/views/viewer/player/components.media/media.carousel.js
+++ b/animism-align/frontend/app/views/viewer/player/components.media/media.carousel.js
@@ -64,82 +64,85 @@ const CarouselContainer = ({ element, media, play_ts, withMouseWheel }) => {
const CarouselComponent = ({ media, slider, sliderRef, currentSlide, currentCaption, timelineLookup }) => {
const { image_order, display_lookup } = media.settings
- return [
- <div key={'carousel_' + media.id} ref={sliderRef} className='keen-slider carousel-items'>
- {image_order.map((id, idx) => {
- const image = display_lookup[id]
- // console.log(image)
- return (
- <CarouselItem
- key={id}
- image={image}
- slider={slider}
- seekAnnotation={timelineLookup && timelineLookup[idx]}
- />
- )
- })}
- </div>,
- <MediaCitation key={'caption_' + media.id} media={(currentCaption && currentCaption.caption) ? currentCaption : media} />,
- <CarouselNav
- key={'arrows_' + media.id}
- currentSlide={currentSlide}
- slides={image_order}
- onPrev={() => {
- slider.prev()
- }}
- onNext={() => {
- slider.next()
- }}
- onPick={index => {
- slider.moveToSlideRelative(index)
- }}
- />
- ]
-}
-
-const Carousel = React.memo(CarouselComponent)
-
-const CarouselNav = ({ currentSlide, slides, onPrev, onNext, onPick }) => {
return (
- <div className="carousel-nav">
- <div
- className={currentSlide ? "arrow-prev" : "arrow-prev arrow-disabled"}
- onClick={e => {
- e.stopPropagation()
- onPrev()
- }}
- >
- <Arrow type="left" />
- </div>
- <div
- className={currentSlide < slides.length - 1 ? "arrow-next" : "arrow-next arrow-disabled"}
- onClick={e => {
- e.stopPropagation()
- onNext()
- }}
- >
- <Arrow type="right" />
+ <div className="carousel-component">
+ <div className="carousel-positioning">
+ <div key={'carousel_' + media.id} ref={sliderRef} className='keen-slider carousel-items'>
+ {image_order.map((id, idx) => {
+ const image = display_lookup[id]
+ // console.log(image)
+ return (
+ <CarouselItem
+ key={id}
+ image={image}
+ slider={slider}
+ seekAnnotation={timelineLookup && timelineLookup[idx]}
+ />
+ )
+ })}
+ </div>
+ <CarouselArrow
+ type="prev"
+ disabled={!!currentSlide}
+ onClick={() => {
+ slider.prev()
+ }}
+ />
+ <CarouselArrow
+ type="next"
+ disabled={currentSlide < image_order.length - 1}
+ onClick={() => {
+ slider.next()
+ }}
+ />
</div>
- <div className="dots">
- {[...slides.keys()].map(idx => {
- return (
- <div
- key={idx}
- onClick={() => {
- onPick(idx)
- }}
- className={"dot-item" + (Math.round(currentSlide) === idx ? " active" : "")}
- >
- <div className="dot-circle" />
- </div>
- )
- })}
+ <MediaCitation key={'caption_' + media.id} media={(currentCaption && currentCaption.caption) ? currentCaption : media} />
+ <div className="carousel-nav" key={'arrows_' + media.id}>
+ <CarouselDots
+ currentSlide={currentSlide}
+ slides={image_order}
+ onPick={index => {
+ slider.moveToSlideRelative(index)
+ }}
+ />
</div>
</div>
-
)
}
+const Carousel = React.memo(CarouselComponent)
+
+const CarouselArrow = ({ disabled, type, onClick }) => ((
+ <div
+ className={(disabled ? "nav-arrow" : "nav-arrow arrow-disabled") + " " + type}
+ tabIndex={0}
+ onClick={e => {
+ e.stopPropagation()
+ onClick()
+ }}
+ >
+ <Arrow type={type === 'prev' ? 'left' : 'right'} />
+ </div>
+))
+const CarouselDots = ({ slides, currentSlide, onPick }) => ((
+ <div className="dots">
+ {[...slides.keys()].map(idx => {
+ return (
+ <div
+ key={idx}
+ onClick={() => {
+ onPick(idx)
+ }}
+ tabIndex={idx}
+ className={"dot-item" + (Math.round(currentSlide) === idx ? " active" : "")}
+ >
+ <div className="dot-circle" />
+ </div>
+ )
+ })}
+ </div>
+))
+
const CarouselItem = ({ image, slider, seekAnnotation }) => {
return (
<div className='keen-slider__slide carousel-item'>
diff --git a/animism-align/frontend/app/views/viewer/player/components.media/media.css b/animism-align/frontend/app/views/viewer/player/components.media/media.css
index 5f4b84f..fea25ec 100644
--- a/animism-align/frontend/app/views/viewer/player/components.media/media.css
+++ b/animism-align/frontend/app/views/viewer/player/components.media/media.css
@@ -33,30 +33,50 @@
/* arrows and dots */
-.carousel-nav .arrow-prev {
- position: absolute;
- left: 1rem;
- top: 50%;
- margin-top: -3.5rem;
- transform: translateY(-50%);
- cursor: pointer;
+.carousel-positioning {
+ position: relative;
}
-.carousel-nav .arrow-next {
+.carousel-component .nav-arrow {
position: absolute;
- right: 1rem;
- top: 50%;
- margin-top: -3.5rem;
- transform: translateY(-50%);
+ top: 0;
+ height: 100%;
+ max-height: calc(100vh - 19rem);
+ width: 8rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
cursor: pointer;
+ transition: background 0.2s, backdrop-filter 0.2s;
}
-.carousel-nav .arrow {
+.viewer-fullscreen .carousel-component .nav-arrow {
+ max-height: calc(100vh - 19rem);
+}
+.carousel-component .nav-arrow.prev {
+ left: 0;
+}
+.carousel-component .nav-arrow.next {
+ right: 0;
+}
+.carousel-component .nav-arrow:focus {
+ background: transparent;
+ outline: 0;
+}
+.carousel-component .nav-arrow:hover {
+ backdrop-filter: contrast(344%) grayscale(100%);
+ background: rgba(255,255,255,0.9)
+}
+/*.white .carousel-component .nav-arrow { background: rgba(255,255,255,0.0); }
+.white .carousel-component .nav-arrow:hover { background: rgba(255,255,255,0.0); }
+*/.black .carousel-component .nav-arrow { background: rgba(0,0,0,0.0); }
+.black .carousel-component .nav-arrow:hover { background: rgba(0,0,0,0.0); }
+.carousel-component .arrow {
width: 4rem;
}
-.carousel-nav .arrow-disabled {
+.carousel-component .arrow-disabled {
cursor: default;
opacity: 0.2;
}
-.carousel-nav .dots {
+.carousel-component .dots {
position: absolute;
bottom: 6rem;
left: 0;
@@ -94,6 +114,9 @@
/* carousel */
+.inline-element:nth-child(2) .carousel-container {
+ padding-top: 0rem;
+}
.inline-element .carousel-container {
padding-top: 1.5rem;
margin-bottom: 1.5rem;
@@ -155,7 +178,7 @@
height: 9rem;
padding-top: 4rem;
}
-.player-transcript .carousel-nav .dots {
+.player-transcript .carousel-component .dots {
bottom: 5rem;
}
diff --git a/animism-align/frontend/app/views/viewer/player/player.transcript.css b/animism-align/frontend/app/views/viewer/player/player.transcript.css
index 15a02b6..24b677b 100644
--- a/animism-align/frontend/app/views/viewer/player/player.transcript.css
+++ b/animism-align/frontend/app/views/viewer/player/player.transcript.css
@@ -134,6 +134,16 @@
color: #000;
transition: all 0.1s;
}
+.player-transcript .pullquote .current {
+ box-shadow: -3px -2px 0 #e8e8e8,
+ 3px -2px 0 #e8e8e8,
+ -3px 2px 0 #e8e8e8,
+ 3px 2px 0 #e8e8e8;
+ box-decoration-break: clone;
+ background: #e8e8e8;
+ color: #000;
+ transition: all 0.1s;
+}
.player-transcript .paragraph {
position: relative;