]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/assets/player/videojs-components/peertube-link-button.ts
Refactor video links building
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / videojs-components / peertube-link-button.ts
CommitLineData
512decf3 1import videojs from 'video.js'
9162fdd3
C
2import { PeerTubeLinkButtonOptions } from '../peertube-videojs-typings'
3import { buildVideoLink, decorateVideoLink } from '../utils'
c6352f2c 4
f5fcd9f7 5const Button = videojs.getComponent('Button')
c6352f2c 6class PeerTubeLinkButton extends Button {
9162fdd3 7 private shortUUID: string
c6352f2c 8
9162fdd3
C
9 constructor (player: videojs.Player, options?: PeerTubeLinkButtonOptions) {
10 super(player, options as any)
960a11e8
C
11 }
12
c6352f2c 13 createEl () {
fc73684a
C
14 return this.buildElement()
15 }
16
17 updateHref () {
9162fdd3 18 this.el().setAttribute('href', this.buildLink())
fc73684a
C
19 }
20
21 handleClick () {
f5fcd9f7 22 this.player().pause()
fc73684a
C
23 }
24
25 private buildElement () {
f5fcd9f7 26 const el = videojs.dom.createEl('a', {
9162fdd3 27 href: this.buildLink(),
c6352f2c 28 innerHTML: 'PeerTube',
d6d951dd 29 title: this.player().localize('Video page (new window)'),
c6352f2c
C
30 className: 'vjs-peertube-link',
31 target: '_blank'
32 })
fc73684a
C
33
34 el.addEventListener('mouseenter', () => this.updateHref())
35
f5fcd9f7 36 return el as HTMLButtonElement
c6352f2c 37 }
9162fdd3
C
38
39 private buildLink () {
40 const url = buildVideoLink({ shortUUID: this.shortUUID })
41
42 return decorateVideoLink({ url, startTime: this.player().currentTime() })
43 }
c6352f2c 44}
f5fcd9f7
C
45
46videojs.registerComponent('PeerTubeLinkButton', PeerTubeLinkButton)