mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			131 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
import { Video, VideoPlaylist } from '../../models'
 | 
						|
import { secondsToTime } from './date'
 | 
						|
 | 
						|
function buildPlaylistLink (playlist: Pick<VideoPlaylist, 'shortUUID'>, base?: string) {
 | 
						|
  return (base ?? window.location.origin) + buildPlaylistWatchPath(playlist)
 | 
						|
}
 | 
						|
 | 
						|
function buildPlaylistWatchPath (playlist: Pick<VideoPlaylist, 'shortUUID'>) {
 | 
						|
  return '/w/p/' + playlist.shortUUID
 | 
						|
}
 | 
						|
 | 
						|
function buildVideoWatchPath (video: Pick<Video, 'shortUUID'>) {
 | 
						|
  return '/w/' + video.shortUUID
 | 
						|
}
 | 
						|
 | 
						|
function buildVideoLink (video: Pick<Video, 'shortUUID'>, base?: string) {
 | 
						|
  return (base ?? window.location.origin) + buildVideoWatchPath(video)
 | 
						|
}
 | 
						|
 | 
						|
function buildPlaylistEmbedPath (playlist: Pick<VideoPlaylist, 'uuid'>) {
 | 
						|
  return '/video-playlists/embed/' + playlist.uuid
 | 
						|
}
 | 
						|
 | 
						|
function buildPlaylistEmbedLink (playlist: Pick<VideoPlaylist, 'uuid'>, base?: string) {
 | 
						|
  return (base ?? window.location.origin) + buildPlaylistEmbedPath(playlist)
 | 
						|
}
 | 
						|
 | 
						|
function buildVideoEmbedPath (video: Pick<Video, 'uuid'>) {
 | 
						|
  return '/videos/embed/' + video.uuid
 | 
						|
}
 | 
						|
 | 
						|
function buildVideoEmbedLink (video: Pick<Video, 'uuid'>, base?: string) {
 | 
						|
  return (base ?? window.location.origin) + buildVideoEmbedPath(video)
 | 
						|
}
 | 
						|
 | 
						|
function decorateVideoLink (options: {
 | 
						|
  url: string
 | 
						|
 | 
						|
  startTime?: number
 | 
						|
  stopTime?: number
 | 
						|
 | 
						|
  subtitle?: string
 | 
						|
 | 
						|
  loop?: boolean
 | 
						|
  autoplay?: boolean
 | 
						|
  muted?: boolean
 | 
						|
 | 
						|
  // Embed options
 | 
						|
  title?: boolean
 | 
						|
  warningTitle?: boolean
 | 
						|
  controls?: boolean
 | 
						|
  peertubeLink?: boolean
 | 
						|
}) {
 | 
						|
  const { url } = options
 | 
						|
 | 
						|
  const params = generateParams(window.location.search)
 | 
						|
 | 
						|
  if (options.startTime !== undefined && options.startTime !== null) {
 | 
						|
    const startTimeInt = Math.floor(options.startTime)
 | 
						|
    params.set('start', secondsToTime(startTimeInt))
 | 
						|
  }
 | 
						|
 | 
						|
  if (options.stopTime) {
 | 
						|
    const stopTimeInt = Math.floor(options.stopTime)
 | 
						|
    params.set('stop', secondsToTime(stopTimeInt))
 | 
						|
  }
 | 
						|
 | 
						|
  if (options.subtitle) params.set('subtitle', options.subtitle)
 | 
						|
 | 
						|
  if (options.loop === true) params.set('loop', '1')
 | 
						|
  if (options.autoplay === true) params.set('autoplay', '1')
 | 
						|
  if (options.muted === true) params.set('muted', '1')
 | 
						|
  if (options.title === false) params.set('title', '0')
 | 
						|
  if (options.warningTitle === false) params.set('warningTitle', '0')
 | 
						|
  if (options.controls === false) params.set('controls', '0')
 | 
						|
  if (options.peertubeLink === false) params.set('peertubeLink', '0')
 | 
						|
 | 
						|
  return buildUrl(url, params)
 | 
						|
}
 | 
						|
 | 
						|
function decoratePlaylistLink (options: {
 | 
						|
  url: string
 | 
						|
 | 
						|
  playlistPosition?: number
 | 
						|
}) {
 | 
						|
  const { url } = options
 | 
						|
 | 
						|
  const params = generateParams(window.location.search)
 | 
						|
 | 
						|
  if (options.playlistPosition) params.set('playlistPosition', '' + options.playlistPosition)
 | 
						|
 | 
						|
  return buildUrl(url, params)
 | 
						|
}
 | 
						|
 | 
						|
// ---------------------------------------------------------------------------
 | 
						|
 | 
						|
export {
 | 
						|
  buildPlaylistLink,
 | 
						|
  buildVideoLink,
 | 
						|
 | 
						|
  buildVideoWatchPath,
 | 
						|
  buildPlaylistWatchPath,
 | 
						|
 | 
						|
  buildPlaylistEmbedPath,
 | 
						|
  buildVideoEmbedPath,
 | 
						|
 | 
						|
  buildPlaylistEmbedLink,
 | 
						|
  buildVideoEmbedLink,
 | 
						|
 | 
						|
  decorateVideoLink,
 | 
						|
  decoratePlaylistLink
 | 
						|
}
 | 
						|
 | 
						|
function buildUrl (url: string, params: URLSearchParams) {
 | 
						|
  let hasParams = false
 | 
						|
  params.forEach(() => { hasParams = true })
 | 
						|
 | 
						|
  if (hasParams) return url + '?' + params.toString()
 | 
						|
 | 
						|
  return url
 | 
						|
}
 | 
						|
 | 
						|
function generateParams (url: string) {
 | 
						|
  const params = new URLSearchParams(window.location.search)
 | 
						|
  // Unused parameters in embed
 | 
						|
  params.delete('videoId')
 | 
						|
  params.delete('resume')
 | 
						|
 | 
						|
  return params
 | 
						|
}
 |