import { clamp, timestampToSeconds } from 'app/utils' export const annotationFadeTimings = annotation => { const fadeInDuration = timestampToSeconds(annotation.settings.fade_in_duration || '0') || 0.0 const fadeOutDuration = timestampToSeconds(annotation.settings.fade_out_duration || '0') || 0.0 const duration = timestampToSeconds(annotation.settings.duration || '0') || 0.1 const start_ts = annotation.start_ts const end_ts = start_ts + duration const fade_in_end_ts = start_ts + fadeInDuration const fade_out_start_ts = end_ts - fadeOutDuration return { fadeInDuration, fadeOutDuration, duration, start_ts, end_ts, fade_in_end_ts, fade_out_start_ts, } } export const thumbnailURL = media => { let image_id // console.log(media) switch (media.type) { case 'video': if (media.settings.poster) { return media.settings.poster.url } return media.settings.video.thumbnail_url case 'image': return media.settings.thumbnail.url case 'gallery': if (media.settings.thumbnail) { return media.settings.thumbnail.url } if (!media.settings.image_order || !media.settings.image_order.length) { return null } image_id = media.settings.image_order[0] return media.settings.thumbnail_lookup[image_id].url default: return null } } export const displayThumbnailURL = media => { if (!media) return null let image_id switch (media.type) { case 'video': if (media.settings.poster) { return media.settings.poster.url } return media.settings.video.thumbnail_url case 'image': return media.settings.display.url case 'gallery': if (media.settings.display) { return media.settings.display.url } if (media.settings.thumbnail) { return media.settings.thumbnail.url } if (!media.settings.image_order || !media.settings.image_order.length) { return null } image_id = media.settings.image_order[0] return media.settings.display_lookup[image_id].url default: return null } } export const displayElementImageURL = (element, mediaItem) => { // console.log(element, mediaItem) if (!element || !mediaItem) return null if (mediaItem.type === 'gallery') { const index = parseInt(element.settings.frame_index) const frame_id = mediaItem.settings.image_order[index] const frame = mediaItem.settings.display_lookup[frame_id] if (!frame) { console.error("Slide not found:", element.settings.frame_index) return null } return frame.url } return mediaItem.settings.display.url } // list all full-size images URLs for the vitrine export const galleryFullsizeImageURLS = media => { const { image_order, image_lookup, display_lookup } = media.settings return image_order.map(id => ( display_lookup[id] || image_lookup[id] )).map(img => img.url) } export const posterURL = media => { if (!media.settings.video) return null if (media.settings.poster) return media.settings.poster.url return media.settings.video.thumbnail_url } export const sectionProgress = (section, play_ts) => { return (clamp(play_ts, section.start_ts, section.end_ts) - section.start_ts) / section.duration } export const sectionProgressPercentage = (section, play_ts) => { return (Math.round(sectionProgress(section, play_ts) * 2000) / 20) + '%' } export const sectionOffsetSeconds = (section, percent) => { return (section.start_ts + section.duration * percent) } export const makeMediaItems = (media, types) => { const { lookup, order } = media if (types instanceof String) { types = new Set([ types ]) } else if (!(types instanceof Set)) { types = new Set(types) } const listItems = order.filter(id => types.has(lookup[id].type)).map(id => { const { title, author, type } = lookup[id] return { name: id, label: '[' + type + '] ' + author + ' - ' + title } }).sort((a,b) => a.label.localeCompare(b.label)) return listItems } export const makeGalleryItems = (annotation, media) => { if (!annotation.settings.media_id) return {} if (!media.lookup[annotation.settings.media_id]) return {} let thumbnail, frame_id const item = media.lookup[annotation.settings.media_id] if (item.type !== 'gallery') return {} const gallery_items = item.settings.image_order.map((id, index) => { const caption = item.settings.caption_lookup && item.settings.caption_lookup[id] // console.log(caption) return { name: index, label: (index + 1) + ") " + (caption ? (caption.title || "") : "") } }) if (annotation.settings.frame_index) { frame_id = item.settings.image_order[annotation.settings.frame_index] thumbnail = item.settings.thumbnail_lookup[frame_id] } return { item, gallery_items, frame_id, thumbnail } }