aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/standalone/videos/test-embed.ts
blob: 72151448883ad9c137bcd68e10af64923dd65ab6 (plain) (blame)
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
import './test-embed.scss'
import { PeerTubePlayer } from '../player/player';
import { PlayerEventType } from '../player/definitions';

window.addEventListener('load', async () => {
  
  const urlParts = window.location.href.split('/')
  const lastPart = urlParts[urlParts.length - 1]
  const videoId = lastPart.indexOf('?') === -1 ? lastPart : lastPart.split('?')[0]

  let iframe = document.createElement('iframe')
  iframe.src = `/videos/embed/${videoId}?autoplay=1&controls=0&api=1`
  let mainElement = document.querySelector('#host')
  mainElement.appendChild(iframe);

  console.log(`Document finished loading.`)
  let player = new PeerTubePlayer(document.querySelector('iframe'))

  window['player'] = player

  console.log(`Awaiting player ready...`)
  await player.ready
  console.log(`Player is ready.`)

  let monitoredEvents = [
    'pause', 'play', 
    'playbackStatusUpdate', 
    'playbackStatusChange'
  ]

  monitoredEvents.forEach(e => {
    player.addEventListener(<PlayerEventType>e, () => console.log(`PLAYER: event '${e}' received`))
    console.log(`PLAYER: now listening for event '${e}'`)
  })

  let playbackRates = []
  let activeRate = 1
  let currentRate = await player.getPlaybackRate()

  let updateRates = async () => {

    let rateListEl = document.querySelector('#rate-list')
    rateListEl.innerHTML = ''
    
    playbackRates.forEach(rate => {
      if (currentRate == rate) {
        let itemEl = document.createElement('strong')
        itemEl.innerText = `${rate} (active)`
        itemEl.style.display = 'block'
        rateListEl.appendChild(itemEl)
      } else {
        let itemEl = document.createElement('a')
        itemEl.href = 'javascript:;'
        itemEl.innerText = rate
        itemEl.addEventListener('click', () => {
          player.setPlaybackRate(rate)
          currentRate = rate
          updateRates()
        })
        itemEl.style.display = 'block'
        rateListEl.appendChild(itemEl)
      }
    })
  }

  player.getPlaybackRates().then(rates => {
    playbackRates = rates
    updateRates()
  })

  let updateResolutions = resolutions => {
    let resolutionListEl = document.querySelector('#resolution-list')
    resolutionListEl.innerHTML = ''

    resolutions.forEach(resolution => {
      if (resolution.active) {
        let itemEl = document.createElement('strong')
        itemEl.innerText = `${resolution.label} (active)`
        itemEl.style.display = 'block'
        resolutionListEl.appendChild(itemEl)
      } else {
        let itemEl = document.createElement('a')
        itemEl.href = 'javascript:;'
        itemEl.innerText = resolution.label
        itemEl.addEventListener('click', () => {
          player.setResolution(resolution.id)
        })
        itemEl.style.display = 'block'
        resolutionListEl.appendChild(itemEl)
      }
    })
  }

  player.getResolutions().then(
    resolutions => updateResolutions(resolutions))
  player.addEventListener('resolutionUpdate', 
    resolutions => updateResolutions(resolutions))
})