1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
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.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 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 }
}
|