X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fassets%2Fplayer%2Fpeertube-player.ts;h=afc8e0881752292594644ed949dafaa229b68520;hb=054a103b286277708a3a807a52da6cca12e1b0ce;hp=58a8aa26c17ecab57fb6b72cbea2d2c6d985a979;hpb=33d7855229f45d73a767566f1dbcb87709211ebf;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/assets/player/peertube-player.ts b/client/src/assets/player/peertube-player.ts index 58a8aa26c..afc8e0881 100644 --- a/client/src/assets/player/peertube-player.ts +++ b/client/src/assets/player/peertube-player.ts @@ -1,13 +1,19 @@ import { VideoFile } from '../../../../shared/models/videos' import 'videojs-hotkeys' -import 'videojs-dock/dist/videojs-dock.es.js' +import 'videojs-dock' +import 'videojs-contextmenu' +import 'videojs-contextmenu-ui' import './peertube-link-button' import './resolution-menu-button' import './settings-menu-button' import './webtorrent-info-button' import './peertube-videojs-plugin' +import './peertube-load-progress-bar' +import './theater-button' import { videojsUntyped } from './peertube-videojs-typings' +import { buildVideoEmbed, buildVideoLink, copyToClipboard } from './utils' +import { getCompleteLocale, getShortLocale, is18nLocale, isDefaultLocale } from '../../../../shared/models/i18n/i18n' // Change 'Playback Rate' to 'Speed' (smaller for our settings menu) videojsUntyped.getComponent('PlaybackRateMenuButton').prototype.controlText_ = 'Speed' @@ -21,20 +27,24 @@ function getVideojsOptions (options: { enableHotkeys: boolean, inactivityTimeout: number, peertubeLink: boolean, - poster: string + poster: string, + startTime: number + theaterMode: boolean }) { const videojsOptions = { controls: true, poster: options.poster, - autoplay: options.autoplay, + autoplay: false, inactivityTimeout: options.inactivityTimeout, playbackRates: [ 0.5, 1, 1.5, 2 ], plugins: { peertube: { + autoplay: options.autoplay, // Use peertube plugin autoplay because we get the file by webtorrent videoFiles: options.videoFiles, playerElement: options.playerElement, videoViewUrl: options.videoViewUrl, - videoDuration: options.videoDuration + videoDuration: options.videoDuration, + startTime: options.startTime } }, controlBar: { @@ -55,6 +65,7 @@ function getVideojsOptions (options: { function getControlBarChildren (options: { peertubeLink: boolean + theaterMode: boolean }) { const children = { 'playToggle': {}, @@ -64,7 +75,16 @@ function getControlBarChildren (options: { 'liveDisplay': {}, 'flexibleWidthSpacer': {}, - 'progressControl': {}, + 'progressControl': { + children: { + 'seekBar': { + children: { + 'peerTubeLoadProgressBar': {}, + 'playProgressBar': {} + } + } + } + }, 'webTorrentButton': {}, @@ -88,6 +108,12 @@ function getControlBarChildren (options: { }) } + if (options.theaterMode === true) { + Object.assign(children, { + 'theaterButton': {} + }) + } + Object.assign(children, { 'fullscreenToggle': {} }) @@ -95,4 +121,44 @@ function getControlBarChildren (options: { return children } -export { getVideojsOptions } +function addContextMenu (player: any, videoEmbedUrl: string) { + player.contextmenuUI({ + content: [ + { + label: player.localize('Copy the video URL'), + listener: function () { + copyToClipboard(buildVideoLink()) + } + }, + { + label: player.localize('Copy the video URL at the current time'), + listener: function () { + const player = this + copyToClipboard(buildVideoLink(player.currentTime())) + } + }, + { + label: player.localize('Copy embed code'), + listener: () => { + copyToClipboard(buildVideoEmbed(videoEmbedUrl)) + } + } + ] + }) +} + +function loadLocale (serverUrl: string, videojs: any, locale: string) { + const completeLocale = getCompleteLocale(locale) + + if (!is18nLocale(completeLocale) || isDefaultLocale(completeLocale)) return Promise.resolve(undefined) + + return fetch(serverUrl + '/client/locales/' + completeLocale + '/player.json') + .then(res => res.json()) + .then(json => videojs.addLanguage(getShortLocale(completeLocale), json)) +} + +export { + loadLocale, + getVideojsOptions, + addContextMenu +}