From 96aa72052df5a7be56063496c8386e49681e047f Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Wed, 17 Mar 2021 19:51:44 +0100 Subject: autoadvanc --- frontend/app/views/page/components/tile.handle.js | 240 ++++++++++++---------- 1 file changed, 131 insertions(+), 109 deletions(-) (limited to 'frontend/app/views/page/components/tile.handle.js') diff --git a/frontend/app/views/page/components/tile.handle.js b/frontend/app/views/page/components/tile.handle.js index d7b5d05..917be74 100644 --- a/frontend/app/views/page/components/tile.handle.js +++ b/frontend/app/views/page/components/tile.handle.js @@ -1,120 +1,144 @@ import React, { Component } from 'react' import { Link } from 'react-router-dom' -const TileHandle = ({ tile, bounds, box, viewing, onMouseDown, onDoubleClick }) => { - // console.log(tile) - const { width, height } = tile.settings - const style = { - transform: generateTransform(tile, box), - opacity: tile.settings.opacity, +export default class TileHandle extends Component { + constructor(props) { + super(props) + if (props.tile.type === 'video') { + this.videoRef = React.createRef() + } + this.handleEnded = this.handleEnded.bind(this) } - // console.log(generateTransform(tile)) - let content; - let className = ['tile', tile.type].join(' ') - if (tile.target_page_id || (viewing && tile.href)) { - className += ' ' + (tile.settings.cursor || 'hand_up') + componentDidMount() { + if (this.props.tile.type === 'video') { + this.videoRef.current.addEventListener('ended', this.handleEnded) + } } - // console.log(tile.settings) - switch (tile.type) { - case 'image': - if (!tile.settings.url) { - return null - } - if (tile.settings.is_tiled) { - style.backgroundImage = 'url(' + tile.settings.url + ')' - style.backgroundPosition = tile.settings.align.replace('_', ' ') - switch (tile.settings.tile_style) { - default: - case 'tile': - break - case 'cover': - style.backgroundSize = 'cover' - break - case 'contain': - style.backgroundSize = 'contain' - break - case 'contain no-repeat': - style.backgroundSize = 'contain' - style.backgroundRepeat = 'no-repeat' - break + componentWillUnmount() { + if (this.props.tile.type === 'video') { + this.videoRef.current.removeEventListener('ended', this.handleEnded) + } + } + handleEnded() { + this.props.onPlaybackEnded(this.props.tile) + } + render() { + let { tile, bounds, box, viewing, onMouseDown, onDoubleClick } = this.props + // console.log(tile) + const { width, height } = tile.settings + const style = { + transform: generateTransform(tile, box), + opacity: tile.settings.opacity, + } + // console.log(generateTransform(tile)) + let content; + let className = ['tile', tile.type].join(' ') + if (tile.target_page_id || (viewing && tile.href)) { + className += ' ' + (tile.settings.cursor || 'hand_up') + } + // console.log(tile.settings) + switch (tile.type) { + case 'image': + if (!tile.settings.url) { + return null } - className += ' is_tiled' - } else { - className += ' ' + tile.settings.align - content = - } - break + if (tile.settings.is_tiled) { + style.backgroundImage = 'url(' + tile.settings.url + ')' + style.backgroundPosition = tile.settings.align.replace('_', ' ') + switch (tile.settings.tile_style) { + default: + case 'tile': + break + case 'cover': + style.backgroundSize = 'cover' + break + case 'contain': + style.backgroundSize = 'contain' + break + case 'contain no-repeat': + style.backgroundSize = 'contain' + style.backgroundRepeat = 'no-repeat' + break + } + className += ' is_tiled' + } else { + className += ' ' + tile.settings.align + content = + } + break - case 'video': - if (!tile.settings.url) { - return null - } - className += ' ' + tile.settings.align - content = ( -