const options: PeertubePlayerManagerOptions = {
common: {
autoplay: this.isAutoplay(),
+ nextVideo: () => this.zone.run(() => this.autoplayNext()),
playerElement: this.playerElement,
onPlayerElementChange: (element: HTMLVideoElement) => this.playerElement = element,
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 36 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <path fill="white" d="M 12,24 20.5,18 12,12 V 24 z M 22,12 v 12 h 2 V 12 h -2 z"></path>
+</svg>
\ No newline at end of file
import './upnext/upnext-plugin'
import './bezels/bezels-plugin'
import './peertube-plugin'
+import './videojs-components/next-video-button'
import './videojs-components/peertube-link-button'
import './videojs-components/resolution-menu-button'
import './videojs-components/settings-menu-button'
onPlayerElementChange: (element: HTMLVideoElement) => void
autoplay: boolean
+ nextVideo?: Function
videoDuration: number
enableHotkeys: boolean
inactivityTimeout: number
children: this.getControlBarChildren(mode, {
captions: commonOptions.captions,
peertubeLink: commonOptions.peertubeLink,
- theaterButton: commonOptions.theaterButton
+ theaterButton: commonOptions.theaterButton,
+ nextVideo: commonOptions.nextVideo
})
}
}
private static getControlBarChildren (mode: PlayerMode, options: {
peertubeLink: boolean
theaterButton: boolean,
- captions: boolean
+ captions: boolean,
+ nextVideo?: Function
}) {
const settingEntries = []
const loadProgressBar = mode === 'webtorrent' ? 'peerTubeLoadProgressBar' : 'loadProgressBar'
settingEntries.push('resolutionMenuButton')
const children = {
- 'playToggle': {},
+ 'playToggle': {}
+ }
+
+ if (options.nextVideo) {
+ Object.assign(children, {
+ 'nextVideoButton': {
+ handler: options.nextVideo
+ }
+ })
+ }
+
+ Object.assign(children, {
'currentTimeDisplay': {},
'timeDivider': {},
'durationDisplay': {},
},
entries: settingEntries
}
- }
+ })
if (options.peertubeLink === true) {
Object.assign(children, {
--- /dev/null
+import { VideoJSComponentInterface, videojsUntyped } from '../peertube-videojs-typings'
+// FIXME: something weird with our path definition in tsconfig and typings
+// @ts-ignore
+import { Player } from 'video.js'
+
+const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button')
+
+class NextVideoButton extends Button {
+
+ constructor (player: Player, options: any) {
+ super(player, options)
+ }
+
+ createEl () {
+ const button = videojsUntyped.dom.createEl('button', {
+ className: 'vjs-next-video'
+ })
+ const nextIcon = videojsUntyped.dom.createEl('span', {
+ className: 'icon icon-next'
+ })
+ button.appendChild(nextIcon)
+
+ button.title = this.player_.localize('Next video')
+
+ return button
+ }
+
+ handleClick () {
+ this.options_.handler()
+ }
+
+}
+
+NextVideoButton.prototype.controlText_ = 'Next video'
+
+NextVideoButton.registerComponent('NextVideoButton', NextVideoButton)
cursor: pointer;
font-size: $font-size;
- margin-right: 5px;
+ margin-left: 1em;
+ width: 3em;
}
.vjs-time-control {
font-size: $font-size;
display: inline-block;
padding: 0;
+ margin-left: .5em;
.vjs-current-time-display {
line-height: calc(#{$control-bar-height} + 1px);
width: 100%;
line-height: $control-bar-height;
text-align: right;
+ margin-right: 6px;
.vjs-peertube-displayed {
display: block;
margin-right: 15px;
}
+ .icon {
+ &.icon-download {
+ background-image: url('#{$assets-path}/player/images/arrow-down.svg');
+ }
+
+ &.icon-upload {
+ background-image: url('#{$assets-path}/player/images/arrow-up.svg');
+ }
+ }
+ }
+
+ .vjs-next-video {
+ line-height: $control-bar-height;
+ text-align: right;
+
+ .icon {
+ &.icon-next {
+ mask-image: url('#{$assets-path}/player/images/next.svg');
+ background-color: white;
+ mask-size: cover;
+ transform: scale(2.2);
+ }
+ }
+ }
+
+ .vjs-peertube,
+ .vjs-next-video {
.icon {
display: inline-block;
width: 15px;
background-size: contain;
vertical-align: middle;
background-repeat: no-repeat;
- margin-right: 6px;
position: relative;
top: -1px;
-
- &.icon-download {
- background-image: url('#{$assets-path}/player/images/arrow-down.svg');
- }
-
- &.icon-upload {
- background-image: url('#{$assets-path}/player/images/arrow-up.svg');
- }
}
}