import { ZOOM_STEPS } from 'app/constants' import { clamp } from 'app/utils' import actions from 'app/actions' import { HEADER_MARGIN, INNER_HEIGHT } from 'app/constants' export const positionToTime = (y, { start_ts, zoom, duration }) => { y -= HEADER_MARGIN const secondsPerPixel = ZOOM_STEPS[zoom] * 0.1 const widthTimeDuration = INNER_HEIGHT * secondsPerPixel const timeMin = start_ts const timeMax = Math.min(start_ts + widthTimeDuration, duration) const timeWidth = timeMax - timeMin return clamp(y * secondsPerPixel + start_ts, 0, timeMax) } export const timeToPosition = (ts, { start_ts, zoom, duration }) => { const secondsPerPixel = ZOOM_STEPS[zoom] * 0.1 const widthTimeDuration = INNER_HEIGHT * secondsPerPixel const timeMin = start_ts const timeMax = Math.min(start_ts + widthTimeDuration, duration) const timeWidth = timeMax - timeMin const timeHalfHeight = INNER_HEIGHT * secondsPerPixel / 2 if (ts < timeMin - timeHalfHeight) { return -9999 } if (ts > timeMax) { return -9999 } return (ts - timeMin) / timeWidth * INNER_HEIGHT } export const getFirstPunctuationMarkIndex = text => { const indexes = [ text.indexOf('. '), text.indexOf('? '), text.indexOf('! '), text.indexOf('." '), text.indexOf('?" '), text.indexOf('!" '), text.indexOf('.” '), text.indexOf('?” '), text.indexOf('!” '), ] return indexes.reduce((a, b) => { if (b < 0) return a return Math.min(a, b) }, Infinity) + 1 } export const cutFirstSentence = text => { const textToCrop = text.trim().replace("\n", " ").split("\n")[0] let cropIndex = getFirstPunctuationMarkIndex(textToCrop) if (!cropIndex) cropIndex = textToCrop.length const croppedText = textToCrop.substr(0, cropIndex).trim() const updatedText = text.trim().replace(croppedText, '').trim() actions.site.updateText(updatedText) return croppedText } export const thumbnailURL = data => { if (data.type === 'video') return data.settings.video.thumbnail_url if (data.type === 'image') return data.settings.thumbnail.url }