-const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem')
-class ResolutionMenuItem extends MenuItem {
-
- constructor (player: videojs.Player, options) {
- options.selectable = true
- super(player, options)
-
- const currentResolutionId = this.player_.peertube().getCurrentResolutionId()
- this.selected(this.options_.id === currentResolutionId)
- }
-
- handleClick (event) {
- super.handleClick(event)
-
- this.player_.peertube().updateResolution(this.options_.id)
- }
-}
-MenuItem.registerComponent('ResolutionMenuItem', ResolutionMenuItem)
-
-const MenuButton: VideoJSComponentInterface = videojsUntyped.getComponent('MenuButton')
-class ResolutionMenuButton extends MenuButton {
- label: HTMLElement
-
- constructor (player: videojs.Player, options) {
- options.label = 'Quality'
- super(player, options)
-
- this.label = document.createElement('span')
-
- this.el().setAttribute('aria-label', 'Quality')
- this.controlText('Quality')
-
- videojsUntyped.dom.addClass(this.label, 'vjs-resolution-button-label')
- this.el().appendChild(this.label)
-
- player.peertube().on('videoFileUpdate', () => this.update())
- }
-
- createItems () {
- const menuItems = []
- for (const videoFile of this.player_.peertube().videoFiles) {
- menuItems.push(new ResolutionMenuItem(
- this.player_,
- {
- id: videoFile.resolution.id,
- label: videoFile.resolution.label,
- src: videoFile.magnetUri,
- selected: videoFile.resolution.id === this.currentSelectionId
- })
- )
- }
-
- return menuItems
- }
-
- update () {
- if (!this.label) return
-
- this.label.innerHTML = this.player_.peertube().getCurrentResolutionLabel()
- this.hide()
- return super.update()
- }
-
- buildCSSClass () {
- return super.buildCSSClass() + ' vjs-resolution-button'
- }
-}
-MenuButton.registerComponent('ResolutionMenuButton', ResolutionMenuButton)
-
-const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button')
-class PeerTubeLinkButton extends Button {
-
- createEl () {
- const link = document.createElement('a')
- link.href = window.location.href.replace('embed', 'watch')
- link.innerHTML = 'PeerTube'
- link.title = 'Go to the video page'
- link.className = 'vjs-peertube-link'
- link.target = '_blank'
-
- return link
- }
-
- handleClick () {
- this.player_.pause()
- }
-}
-Button.registerComponent('PeerTubeLinkButton', PeerTubeLinkButton)
-
-class WebTorrentButton extends Button {
- createEl () {
- const div = document.createElement('div')
- const subDivWebtorrent = document.createElement('div')
- div.appendChild(subDivWebtorrent)
-
- const downloadIcon = document.createElement('span')
- downloadIcon.classList.add('icon', 'icon-download')
- subDivWebtorrent.appendChild(downloadIcon)
-
- const downloadSpeedText = document.createElement('span')
- downloadSpeedText.classList.add('download-speed-text')
- const downloadSpeedNumber = document.createElement('span')
- downloadSpeedNumber.classList.add('download-speed-number')
- const downloadSpeedUnit = document.createElement('span')
- downloadSpeedText.appendChild(downloadSpeedNumber)
- downloadSpeedText.appendChild(downloadSpeedUnit)
- subDivWebtorrent.appendChild(downloadSpeedText)
-
- const uploadIcon = document.createElement('span')
- uploadIcon.classList.add('icon', 'icon-upload')
- subDivWebtorrent.appendChild(uploadIcon)
-
- const uploadSpeedText = document.createElement('span')
- uploadSpeedText.classList.add('upload-speed-text')
- const uploadSpeedNumber = document.createElement('span')
- uploadSpeedNumber.classList.add('upload-speed-number')
- const uploadSpeedUnit = document.createElement('span')
- uploadSpeedText.appendChild(uploadSpeedNumber)
- uploadSpeedText.appendChild(uploadSpeedUnit)
- subDivWebtorrent.appendChild(uploadSpeedText)
-
- const peersText = document.createElement('span')
- peersText.classList.add('peers-text')
- const peersNumber = document.createElement('span')
- peersNumber.classList.add('peers-number')
- subDivWebtorrent.appendChild(peersNumber)
- subDivWebtorrent.appendChild(peersText)
-
- div.className = 'vjs-peertube'
- // Hide the stats before we get the info
- subDivWebtorrent.className = 'vjs-peertube-hidden'
-
- const subDivHttp = document.createElement('div')
- subDivHttp.className = 'vjs-peertube-hidden'
- const subDivHttpText = document.createElement('span')
- subDivHttpText.classList.add('peers-number')
- subDivHttpText.textContent = 'HTTP'
- const subDivFallbackText = document.createElement('span')
- subDivFallbackText.classList.add('peers-text')
- subDivFallbackText.textContent = ' fallback'
-
- subDivHttp.appendChild(subDivHttpText)
- subDivHttp.appendChild(subDivFallbackText)
- div.appendChild(subDivHttp)
-
- this.player_.peertube().on('torrentInfo', (event, data) => {
- // We are in HTTP fallback
- if (!data) {
- subDivHttp.className = 'vjs-peertube-displayed'
- subDivWebtorrent.className = 'vjs-peertube-hidden'
-
- return
- }
-
- const downloadSpeed = bytes(data.downloadSpeed)
- const uploadSpeed = bytes(data.uploadSpeed)
- const numPeers = data.numPeers
-
- downloadSpeedNumber.textContent = downloadSpeed[ 0 ]
- downloadSpeedUnit.textContent = ' ' + downloadSpeed[ 1 ]
-
- uploadSpeedNumber.textContent = uploadSpeed[ 0 ]
- uploadSpeedUnit.textContent = ' ' + uploadSpeed[ 1 ]
-
- peersNumber.textContent = numPeers
- peersText.textContent = ' peers'
-
- subDivHttp.className = 'vjs-peertube-hidden'
- subDivWebtorrent.className = 'vjs-peertube-displayed'
- })
-
- return div
- }
-}
-Button.registerComponent('WebTorrentButton', WebTorrentButton)
-