]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/standalone/videos/test-embed.ts
Add ability to update embed captions
[github/Chocobozzz/PeerTube.git] / client / src / standalone / videos / test-embed.ts
index 72151448883ad9c137bcd68e10af64923dd65ab6..24cb62230bcf1b6b35df0e7613aca8a12514f51e 100644 (file)
@@ -1,57 +1,56 @@
 import './test-embed.scss'
-import { PeerTubePlayer } from '../player/player';
-import { PlayerEventType } from '../player/definitions';
+import { PeerTubePlayer } from '../player/player'
+import { PeerTubeResolution, PlayerEventType, PeerTubeTextTrack } 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]
+  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);
+  const iframe = document.createElement('iframe')
+  iframe.src = `/videos/embed/${videoId}?api=1`
+
+  const mainElement = document.querySelector('#host')
+  mainElement.appendChild(iframe)
 
   console.log(`Document finished loading.`)
-  let player = new PeerTubePlayer(document.querySelector('iframe'))
+  const player = new PeerTubePlayer(document.querySelector('iframe'))
 
-  window['player'] = player
+  window[ 'player' ] = player
 
   console.log(`Awaiting player ready...`)
   await player.ready
   console.log(`Player is ready.`)
 
-  let monitoredEvents = [
-    'pause', 'play', 
-    'playbackStatusUpdate', 
+  const monitoredEvents = [
+    'pause',
+    'play',
+    'playbackStatusUpdate',
     'playbackStatusChange'
   ]
 
   monitoredEvents.forEach(e => {
-    player.addEventListener(<PlayerEventType>e, () => console.log(`PLAYER: event '${e}' received`))
+    player.addEventListener(e as PlayerEventType, (param) => console.log(`PLAYER: event '${e}' received`, param))
     console.log(`PLAYER: now listening for event '${e}'`)
   })
 
-  let playbackRates = []
-  let activeRate = 1
+  let playbackRates: number[] = []
   let currentRate = await player.getPlaybackRate()
 
-  let updateRates = async () => {
-
-    let rateListEl = document.querySelector('#rate-list')
+  const updateRates = async () => {
+    const rateListEl = document.querySelector('#rate-list')
     rateListEl.innerHTML = ''
-    
+
     playbackRates.forEach(rate => {
-      if (currentRate == rate) {
-        let itemEl = document.createElement('strong')
+      if (currentRate === rate) {
+        const itemEl = document.createElement('strong')
         itemEl.innerText = `${rate} (active)`
         itemEl.style.display = 'block'
         rateListEl.appendChild(itemEl)
       } else {
-        let itemEl = document.createElement('a')
+        const itemEl = document.createElement('a')
         itemEl.href = 'javascript:;'
-        itemEl.innerText = rate
+        itemEl.innerText = rate.toString()
         itemEl.addEventListener('click', () => {
           player.setPlaybackRate(rate)
           currentRate = rate
@@ -68,18 +67,48 @@ window.addEventListener('load', async () => {
     updateRates()
   })
 
-  let updateResolutions = resolutions => {
-    let resolutionListEl = document.querySelector('#resolution-list')
+  const updateCaptions = async () => {
+    const captions = await player.getCaptions()
+
+    const captionEl = document.querySelector('#caption-list')
+    captionEl.innerHTML = ''
+
+    captions.forEach(c => {
+      console.log(c)
+
+      if (c.mode === 'showing') {
+        const itemEl = document.createElement('strong')
+        itemEl.innerText = `${c.label} (active)`
+        itemEl.style.display = 'block'
+        captionEl.appendChild(itemEl)
+      } else {
+        const itemEl = document.createElement('a')
+        itemEl.href = 'javascript:;'
+        itemEl.innerText = c.label
+        itemEl.addEventListener('click', () => {
+          player.setCaption(c.id)
+          updateCaptions()
+        })
+        itemEl.style.display = 'block'
+        captionEl.appendChild(itemEl)
+      }
+    })
+  }
+
+  updateCaptions()
+
+  const updateResolutions = ((resolutions: PeerTubeResolution[]) => {
+    const resolutionListEl = document.querySelector('#resolution-list')
     resolutionListEl.innerHTML = ''
 
     resolutions.forEach(resolution => {
       if (resolution.active) {
-        let itemEl = document.createElement('strong')
+        const itemEl = document.createElement('strong')
         itemEl.innerText = `${resolution.label} (active)`
         itemEl.style.display = 'block'
         resolutionListEl.appendChild(itemEl)
       } else {
-        let itemEl = document.createElement('a')
+        const itemEl = document.createElement('a')
         itemEl.href = 'javascript:;'
         itemEl.innerText = resolution.label
         itemEl.addEventListener('click', () => {
@@ -89,10 +118,18 @@ window.addEventListener('load', async () => {
         resolutionListEl.appendChild(itemEl)
       }
     })
-  }
+  })
 
   player.getResolutions().then(
     resolutions => updateResolutions(resolutions))
-  player.addEventListener('resolutionUpdate', 
+  player.addEventListener('resolutionUpdate',
     resolutions => updateResolutions(resolutions))
-})
\ No newline at end of file
+
+  const updateVolume = (volume: number) => {
+    const volumeEl = document.getElementById('volume')
+    volumeEl.innerText = (volume * 100) + '%'
+  }
+
+  player.getVolume().then(volume => updateVolume(volume))
+  player.addEventListener('volumeChange', volume => updateVolume(volume))
+})