]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/videos/+video-watch/modal/video-share.component.ts
Fix scrolling with hash in url
[github/Chocobozzz/PeerTube.git] / client / src / app / videos / +video-watch / modal / video-share.component.ts
index 17e2b31e1bb8e4b3c974fc064ee4e22162aa39f9..3550556a0273ff483b2acf3dcea767004f091a47 100644 (file)
@@ -1,10 +1,27 @@
 import { Component, ElementRef, Input, ViewChild } from '@angular/core'
-import { NotificationsService } from 'angular2-notifications'
 import { VideoDetails } from '../../../shared/video/video-details.model'
 import { buildVideoEmbed, buildVideoLink } from '../../../../assets/player/utils'
-import { I18n } from '@ngx-translate/i18n-polyfill'
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
-import { durationToString } from '@app/shared/misc/utils'
+import { VideoCaption } from '@shared/models'
+import { VideoPlaylist } from '@app/shared/video-playlist/video-playlist.model'
+
+type Customizations = {
+  startAtCheckbox: boolean
+  startAt: number
+
+  stopAtCheckbox: boolean
+  stopAt: number
+
+  subtitleCheckbox: boolean
+  subtitle: string
+
+  loop: boolean
+  autoplay: boolean
+  muted: boolean
+  title: boolean
+  warningTitle: boolean
+  controls: boolean
+}
 
 @Component({
   selector: 'my-video-share',
@@ -12,53 +29,102 @@ import { durationToString } from '@app/shared/misc/utils'
   styleUrls: [ './video-share.component.scss' ]
 })
 export class VideoShareComponent {
-  @ViewChild('modal') modal: ElementRef
+  @ViewChild('modal', { static: true }) modal: ElementRef
 
   @Input() video: VideoDetails = null
+  @Input() videoCaptions: VideoCaption[] = []
+  @Input() playlist: VideoPlaylist = null
 
-  startAtCheckbox = false
-  currentVideoTimestampString: string
+  activeId: 'url' | 'qrcode' | 'embed' = 'url'
+  customizations: Customizations
+  isAdvancedCustomizationCollapsed = true
+  includeVideoInPlaylist = false
 
   private currentVideoTimestamp: number
 
-  constructor (
-    private modalService: NgbModal,
-    private notificationsService: NotificationsService,
-    private i18n: I18n
-  ) { }
+  constructor (private modalService: NgbModal) { }
 
   show (currentVideoTimestamp?: number) {
-    this.currentVideoTimestamp = Math.floor(currentVideoTimestamp)
-    this.currentVideoTimestampString = durationToString(this.currentVideoTimestamp)
+    this.currentVideoTimestamp = currentVideoTimestamp
+
+    let subtitle: string
+    if (this.videoCaptions.length !== 0) {
+      subtitle = this.videoCaptions[0].language.id
+    }
+
+    this.customizations = {
+      startAtCheckbox: false,
+      startAt: currentVideoTimestamp ? Math.floor(currentVideoTimestamp) : 0,
+
+      stopAtCheckbox: false,
+      stopAt: this.video.duration,
+
+      subtitleCheckbox: false,
+      subtitle,
+
+      loop: false,
+      autoplay: false,
+      muted: false,
 
-    this.modalService.open(this.modal)
+      // Embed options
+      title: true,
+      warningTitle: true,
+      controls: true
+    }
+
+    this.modalService.open(this.modal, { centered: true })
   }
 
   getVideoIframeCode () {
-    const embedUrl = buildVideoLink(this.getVideoTimestampIfEnabled(), this.video.embedUrl)
+    const options = this.getOptions(this.video.embedUrl)
 
+    const embedUrl = buildVideoLink(options)
     return buildVideoEmbed(embedUrl)
   }
 
   getVideoUrl () {
-    return buildVideoLink(this.getVideoTimestampIfEnabled())
+    const baseUrl = window.location.origin + '/videos/watch/' + this.video.uuid
+    const options = this.getOptions(baseUrl)
+
+    return buildVideoLink(options)
+  }
+
+  getPlaylistUrl () {
+    const base = window.location.origin + '/videos/watch/playlist/' + this.playlist.uuid
+
+    if (!this.includeVideoInPlaylist) return base
+
+    return base + '?videoId=' + this.video.uuid
   }
 
   notSecure () {
     return window.location.protocol === 'http:'
   }
 
-  activateCopiedMessage () {
-    this.notificationsService.success(this.i18n('Success'), this.i18n('Copied'))
+  isInEmbedTab () {
+    return this.activeId === 'embed'
   }
 
-  getStartCheckboxLabel () {
-    return this.i18n('Start at {{timestamp}}', { timestamp: this.currentVideoTimestampString })
+  hasPlaylist () {
+    return !!this.playlist
   }
 
-  private getVideoTimestampIfEnabled () {
-    if (this.startAtCheckbox === true) return this.currentVideoTimestamp
+  private getOptions (baseUrl?: string) {
+    return {
+      baseUrl,
+
+      startTime: this.customizations.startAtCheckbox ? this.customizations.startAt : undefined,
+      stopTime: this.customizations.stopAtCheckbox ? this.customizations.stopAt : undefined,
+
+      subtitle: this.customizations.subtitleCheckbox ? this.customizations.subtitle : undefined,
+
+      loop: this.customizations.loop,
+      autoplay: this.customizations.autoplay,
+      muted: this.customizations.muted,
 
-    return undefined
+      title: this.customizations.title,
+      warningTitle: this.customizations.warningTitle,
+      controls: this.customizations.controls
+    }
   }
 }