Fix player progress bar

pull/612/head
Chocobozzz 2018-05-31 09:51:51 +02:00
parent 0bf1f26523
commit 77728efa62
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 82 additions and 34 deletions

View File

@ -0,0 +1,36 @@
import * as Bitfield from 'bitfield'
import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Component')
class PeerTubeLoadProgressBar extends Component {
constructor (player, options) {
super(player, options)
this.partEls_ = []
this.on(player, 'progress', this.update)
}
createEl () {
return super.createEl('div', {
className: 'vjs-load-progress',
innerHTML: `<span class="vjs-control-text"><span>${this.localize('Loaded')}</span>: 0%</span>`
})
}
dispose () {
this.partEls_ = null
super.dispose()
}
update () {
const torrent = this.player().peertube().getTorrent()
if (!torrent) return
this.el_.style.width = (torrent.progress * 100) + '%'
}
}
Component.registerComponent('PeerTubeLoadProgressBar', PeerTubeLoadProgressBar)

View File

@ -9,6 +9,7 @@ import './resolution-menu-button'
import './settings-menu-button'
import './webtorrent-info-button'
import './peertube-videojs-plugin'
import './peertube-load-progress-bar'
import { videojsUntyped } from './peertube-videojs-typings'
import { buildVideoEmbed, buildVideoLink, copyToClipboard } from './utils'
@ -94,7 +95,16 @@ function getControlBarChildren (options: {
'liveDisplay': {},
'flexibleWidthSpacer': {},
'progressControl': {},
'progressControl': {
children: {
'seekBar': {
children: {
'peerTubeLoadProgressBar': {},
'playProgressBar': {}
}
}
}
},
'webTorrentButton': {},

View File

@ -272,6 +272,10 @@ class PeerTubePlugin extends Plugin {
return this.currentVideoFile
}
getTorrent () {
return this.torrent
}
private tryToPlay (done?: Function) {
if (!done) done = function () { /* empty */ }

View File

@ -130,39 +130,6 @@ $context-menu-width: 350px;
background-color: rgba($primary-background-color, 0.5);
}
.vjs-slider {
background-color: rgba(255, 255, 255, .3);
border-radius: 2px;
height: 5px;
.vjs-slider-bar {
background: $primary-foreground-color;
}
}
.vjs-play-progress {
&::before {
top: -0.3em;
&:hover {
top: -0.372em;
}
}
.vjs-time-tooltip {
display: none;
}
}
.vjs-load-progress {
background: rgba($slider-bg-color, 0.5);
div {
background: rgba($slider-bg-color, 0.75);
}
}
.vjs-poster {
outline: none; /* Remove Blue Outline on Click*/
outline: 0;
@ -197,6 +164,37 @@ $context-menu-width: 350px;
opacity: $primary-foreground-opacity;
}
.vjs-slider {
background-color: rgba(255, 255, 255, .2);
border-radius: 2px;
height: 5px;
.vjs-slider-bar {
background: $primary-foreground-color;
}
}
.vjs-play-progress {
&::before {
top: -0.3em;
&:hover {
top: -0.372em;
}
}
.vjs-time-tooltip {
display: none;
}
}
.vjs-load-progress {
&, & div {
background: rgba(255, 255, 255, .2);
}
}
.vjs-progress-control {
bottom: 34px;
width: 100%;