summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/utils/annotation.utils.js
blob: b1f93d18976408ecd55aacb70c17064b7f0f0186 (plain)
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
import { clamp, timestampToSeconds } from 'app/utils'

export const annotationFadeTimings = annotation => {
  const fadeInDuration = timestampToSeconds(annotation.settings.fade_in_duration || '0') || 0.1
  const fadeOutDuration = timestampToSeconds(annotation.settings.fade_out_duration || '0') || 0.1
  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 => {
  // 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
      }
      const image_id = media.settings.image_order[0]
      return media.settings.thumbnail_lookup[image_id].url

    default:
      return null
  }
}

export const posterURL = data => {
  if (!data.settings.video) return null
  if (data.settings.poster) return data.settings.poster.url
  return data.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 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 }
}