@clickview/curator 1.101.0-rc.4 → 1.101.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +475 -475
- package/dist/Assets/js/dist/scripts/{Bs1Y6-vh.chunk.js → -OUl3n-W.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Bs1Y6-vh.chunk.js.map → -OUl3n-W.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/5FGdlWcH.chunk.js +9 -0
- package/dist/Assets/js/dist/scripts/5FGdlWcH.chunk.js.map +1 -0
- package/dist/Assets/js/dist/scripts/B0UOCPE6.chunk.js +2 -0
- package/dist/Assets/js/dist/scripts/{r-zw-56e.chunk.js.map → B0UOCPE6.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Ds6WvphR2.chunk.js → BD2aIccu2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Ds6WvphR2.chunk.js.map → BD2aIccu2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BwpzKPd12.chunk.js → BJJeLngO2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BwpzKPd12.chunk.js.map → BJJeLngO2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CaG8Cjey2.chunk.js → BKQIzKcF2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CaG8Cjey2.chunk.js.map → BKQIzKcF2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BEw27Jf3.chunk.js → BOrAaHLK.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BEw27Jf3.chunk.js.map → BOrAaHLK.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/BSMzg7zU.chunk.js.map +1 -1
- package/dist/Assets/js/dist/scripts/{CO69n5GB2.chunk.js → BUWsFXQp2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CO69n5GB2.chunk.js.map → BUWsFXQp2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BZU4ADoQ2.chunk.js → C1xOGHlL2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BZU4ADoQ2.chunk.js.map → C1xOGHlL2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CbaobIxf2.chunk.js → CAo_C8em2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CbaobIxf2.chunk.js.map → CAo_C8em2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{D_e7ctVq.chunk.js → COH92JF5.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{D_e7ctVq.chunk.js.map → COH92JF5.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CJpr073K.chunk.js → CR-5nCWm.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CJpr073K.chunk.js.map → CR-5nCWm.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CqhZ98rZ2.chunk.js → CW1ea_Kx2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CqhZ98rZ2.chunk.js.map → CW1ea_Kx2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DPA1azNU2.chunk.js → Cbwl04yH2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DPA1azNU2.chunk.js.map → Cbwl04yH2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DsHVJvUP.chunk.js → CpqMUVVi.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DsHVJvUP.chunk.js.map → CpqMUVVi.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{I_gdFDV7.chunk.js → CqZqlJSF.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{I_gdFDV7.chunk.js.map → CqZqlJSF.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CofA9RRF.chunk.js → CzCUe0Ej.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CofA9RRF.chunk.js.map → CzCUe0Ej.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DhN_Jc2z.chunk.js → DTUkmChD.chunk.js} +3 -3
- package/dist/Assets/js/dist/scripts/{DhN_Jc2z.chunk.js.map → DTUkmChD.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{C8YkY0we.chunk.js → DW7-la-i.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{C8YkY0we.chunk.js.map → DW7-la-i.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{ecehd0o7.chunk.js → Dhnl-PB5.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{ecehd0o7.chunk.js.map → Dhnl-PB5.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{jdQzplq1.chunk.js → DuU4GBw5.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{jdQzplq1.chunk.js.map → DuU4GBw5.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CvMpxc4j2.chunk.js → LmwQmHZz2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CvMpxc4j2.chunk.js.map → LmwQmHZz2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{app-D2seXuq-.js → app-DHtN6XkT.js} +3 -3
- package/dist/Assets/js/dist/scripts/{app-D2seXuq-.js.map → app-DHtN6XkT.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DUsXdKYh.chunk.js → eKSK4iyn.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DUsXdKYh.chunk.js.map → eKSK4iyn.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BdXsbiX1.chunk.js → esASf9N4.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BdXsbiX1.chunk.js.map → esASf9N4.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{De-ohgjE.chunk.js → x1pOfdJd.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/x1pOfdJd.chunk.js.map +1 -0
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/package.json +1 -1
- package/dist/Assets/js/dist/scripts/C7Rwn3_U.chunk.js +0 -9
- package/dist/Assets/js/dist/scripts/C7Rwn3_U.chunk.js.map +0 -1
- package/dist/Assets/js/dist/scripts/De-ohgjE.chunk.js.map +0 -1
- package/dist/Assets/js/dist/scripts/r-zw-56e.chunk.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CJpr073K.chunk.js","names":[],"sources":["../../../../../../../libs/shared/src/apps/clips/components/clip-time-form/ClipTimeForm.tsx","../../../../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle.ts","../../../../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector.ts","../../../../../../player/src/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator.ts","../../../../../../player/src/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar.ts","../../../../../../player/src/plugins/create-clip-plugin/create-clip-plugin.ts","../../../../../../player/src/players/create-clip-player.ts","../../../../../../player/src/react/CreateClipPlayer.tsx","../../../../../src/apps/clips/views/create-clip/CreateClipView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TimeInput } from 'libs/shared/components/time-input/TimeInput';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nconst namespace = 'shared.clipTimeForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * All times are in seconds.\n */\ninterface ClipTimeFormProps {\n startTime: number;\n endTime: number;\n setStartTime: (time: number) => void;\n setEndTime: (time: number) => void;\n onSubmit: () => void;\n onCancel: () => void;\n duration: number;\n}\n\nexport function ClipTimeForm(props: ClipTimeFormProps): JSX.Element {\n if (isNaN(props.startTime) || isNaN(props.endTime))\n return <></>;\n\n /**\n * DurationHelper.ToDisplayDuration in TimeInput will truncate as decimals\n * so we floor the times when displaying the duration.\n */\n const duration = Math.floor(props.endTime) - Math.floor(props.startTime);\n\n return (\n <div className='px-3'>\n <form className='d-flex align-items-center justify-content-center pb-4'>\n <div>\n <TimeInput\n value={props.startTime}\n setTime={props.setStartTime}\n duration={props.duration}\n />\n </div>\n <span className='px-2'>-</span>\n <div className='me-2'>\n <TimeInput\n value={props.endTime}\n setTime={props.setEndTime}\n duration={props.duration}\n />\n </div>\n <span>\n <strong><Text namespace={namespace} phrase='duration' /></strong>\n \n {DurationHelper.ToDisplayDuration((duration) * 1000)}\n </span>\n </form>\n <div className='d-flex justify-content-end'>\n <button className='btn btn-link' onClick={props.onCancel}>\n {getPhrase('cancel')}\n </button>\n <button className='btn btn-dark' onClick={props.onSubmit}>\n {getPhrase('next')}\n </button>\n </div>\n </div>\n );\n}\n","import videojs from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\n// tslint:disable-next-line\nconst handleSvg = '<svg viewBox=\"0 0 5 14\" pointer-events=\"none\"><g id=\"Clips\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"><g id=\"Clip-2\" transform=\"translate(-835.000000, -632.000000)\" fill=\"#FFFFFF\"><g id=\"Video-Copy\" transform=\"translate(275.000000, 96.000000)\"><g id=\"Handles\" transform=\"translate(560.000000, 536.000000)\"><circle id=\"Oval\" cx=\"1\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-2\" cx=\"1\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-4\" cx=\"1\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-8\" cx=\"1\" cy=\"13\" r=\"1\"></circle><circle id=\"Oval-Copy\" cx=\"4\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-3\" cx=\"4\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-5\" cx=\"4\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-9\" cx=\"4\" cy=\"13\" r=\"1\"></circle></g></g></g></g></svg>';\n\nexport class ClipTimepointSelectorHandle extends Component {\n public buildCSSClass(): string {\n return `cv-clip-timepoint-handle ${super.buildCSSClass()}`;\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: this.buildCSSClass(),\n innerHTML: handleSvg\n }, attributes);\n }\n\n public isEventTarget(e: videojs.EventTarget.Event): boolean {\n return this.el().contains(e.target as Node);\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport {\n ClipTimepointSelectorHandle\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle';\n\nimport './clip-timepoint-selector.scss';\n\nexport interface ClipTimepointSelectorOptions extends videojs.ComponentOptions {\n startTime: number;\n endTime: number;\n minDuration: number;\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n}\n\nexport class ClipTimepointSelector extends Component {\n // tslint:disable-next-line\n public options_: ClipTimepointSelectorOptions;\n\n // tslint:disable-next-line\n public el_: HTMLElement;\n\n private minDuration: number;\n\n /**\n * These variables shouldn't be set directly.\n * setStartTime and setEndTime should be used.\n */\n private startTime: number;\n private endTime: number;\n\n private startHandle: ClipTimepointSelectorHandle;\n private endHandle: ClipTimepointSelectorHandle;\n\n private dragStartActive: boolean = false;\n private dragEndActive: boolean = false;\n private dragSliderActive: boolean = false;\n\n private dragSliderCurrentPosition: number = null;\n\n constructor(player: VideoJsPlayer, options: ClipTimepointSelectorOptions) {\n super(player, options);\n\n this.minDuration = Math.min(player.duration(), this.options_.minDuration);\n\n this.setStartTime(options.startTime, false);\n this.setEndTime(options.endTime, false);\n\n this.startHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.startHandle.addClass('cv-clip-start-handle');\n this.addChild(this.startHandle);\n\n this.endHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.endHandle.addClass('cv-clip-end-handle');\n this.addChild(this.endHandle);\n\n this.on(this.player(), 'update:clip:start:time', ({ time }) => this.setStartTime(time));\n this.on(this.player(), 'update:clip:end:time', ({ time }) => this.setEndTime(time));\n\n this.bindListeners();\n this.update();\n }\n\n public createEl(): Element {\n return super.createEl('div', {\n className: 'cv-clip-timepoint-selector'\n }, {});\n }\n\n private update(): void {\n this.options_.onChangeStartTime(this.startTime);\n this.options_.onChangeEndTime(this.endTime);\n\n this.requestAnimationFrame(() => {\n this.setStartOffset();\n this.setWidth();\n });\n }\n\n private setStartTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const maxStartTime = this.player().duration() - this.minDuration;\n\n if (time > maxStartTime)\n time = maxStartTime;\n\n if (time < 0)\n time = 0;\n\n this.startTime = time;\n\n if (this.endTime && (this.endTime - this.startTime < this.minDuration)) {\n const newEndTime = typeof currentDuration === 'number' ?\n this.startTime + currentDuration :\n this.startTime + this.minDuration;\n\n this.setEndTime(newEndTime);\n }\n\n /**\n * Seek player to the clip start time.\n */\n this.player().currentTime(this.startTime);\n\n if (shouldUpdate)\n this.update();\n }\n\n private setEndTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const minEndTime = this.minDuration;\n\n if (time < minEndTime)\n time = minEndTime;\n\n if (time > this.player().duration())\n time = this.player().duration();\n\n this.endTime = time;\n\n if (this.startTime && (this.endTime - this.startTime < this.minDuration)) {\n const newStartTime = typeof currentDuration === 'number' ?\n this.endTime - currentDuration :\n this.endTime - this.minDuration;\n\n this.setStartTime(newStartTime);\n }\n\n if (shouldUpdate)\n this.update();\n }\n\n private bindListeners(): void {\n this.onTimeupdate = this.onTimeupdate.bind(this);\n this.player().on('timeupdate', this.onTimeupdate);\n\n this.on('mousedown', this.dragStart);\n this.on('touchstart', this.dragStart);\n\n this.player().on('dispose', () => {\n this.player().off('timeupdate', this.onTimeupdate);\n this.off('mousedown', this.dragStart);\n this.off('touchstart', this.dragStart);\n });\n }\n\n private hasStartTime(): boolean {\n return typeof this.startTime === 'number';\n }\n\n private hasEndTime(): boolean {\n return typeof this.endTime === 'number';\n }\n\n private onTimeupdate(): void {\n /**\n * Pause the player if it plays past the end point\n */\n const currentTime = this.player().currentTime();\n if (currentTime > this.endTime && currentTime < (this.endTime + 0.5))\n this.player().pause();\n }\n\n private dragStart(e: videojs.EventTarget.Event): void {\n if (this.startHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragStartActive = true;\n }\n\n if (this.endHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragEndActive = true;\n }\n\n if (e.target === this.el()) {\n e.stopImmediatePropagation();\n this.dragSliderActive = true;\n this.dragSliderCurrentPosition = this.getPosition(e);\n }\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.on(doc, 'mousemove', this.drag);\n this.on(doc, 'mouseup', this.dragEnd);\n this.on(doc, 'touchmove', this.drag);\n this.on(doc, 'touchend', this.dragEnd);\n\n this.drag(e);\n }\n\n private dragEnd(): void {\n this.dragStartActive = false;\n this.dragEndActive = false;\n this.dragSliderActive = false;\n this.dragSliderCurrentPosition = null;\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.off(doc, 'mousemove', this.drag);\n this.off(doc, 'mouseup', this.dragEnd);\n this.off(doc, 'touchmove', this.drag);\n this.off(doc, 'touchend', this.dragEnd);\n }\n\n private drag(e: videojs.EventTarget.Event): void {\n if (!this.dragStartActive && !this.dragEndActive && !this.dragSliderActive || !videojs.dom.isSingleLeftClick(e))\n return;\n \n const position = this.getPosition(e);\n\n const timepoint = position * this.player().duration();\n\n if (this.dragStartActive)\n this.handleStartHandleDrag(timepoint);\n\n if (this.dragEndActive)\n this.handleEndHandleDrag(timepoint);\n\n if (this.dragSliderActive)\n this.handleSliderDrag(position);\n }\n\n private handleStartHandleDrag(timepoint: number): void {\n this.setStartTime(timepoint);\n }\n\n private handleEndHandleDrag(timepoint: number): void {\n this.setEndTime(timepoint);\n }\n\n private handleSliderDrag(position: number): void {\n const timeDifference = (position - this.dragSliderCurrentPosition) * this.player().duration();\n const newStartTime = this.startTime + timeDifference;\n const newEndTime = this.endTime + timeDifference;\n\n /**\n * Don't move if the clip is already at the beginning and/or end\n * of the video.\n */\n if (newStartTime <= 0 || newEndTime >= this.player().duration())\n return;\n\n this.dragSliderCurrentPosition = position;\n this.setStartTime(newStartTime);\n this.setEndTime(newEndTime);\n }\n\n private getPosition(e: videojs.EventTarget.Event): number {\n return videojs.dom.getPointerPosition(this.el_.parentNode as HTMLElement, e).x;\n }\n\n private setStartOffset(): void {\n this.el_.style.marginLeft = `${this.getPercentage(this.startTime)}%`;\n }\n\n private setWidth(): void {\n this.el_.style.width = `${this.getPercentage(this.endTime - this.startTime)}%`;\n }\n\n private getPercentage(time: number): number {\n return +((time / this.player().duration() * 100).toFixed(4));\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport './create-clip-progress-indicator.scss';\n\ninterface CreateClipProgressIndicatorOptions extends videojs.ComponentOptions {\n seekBar: videojs.Component;\n playProgressBar: videojs.Component;\n}\n\nexport class CreateClipProgressIndicator extends Component {\n private el_: HTMLDivElement;\n private seekBar_: videojs.Component;\n private playProgressBar_: videojs.Component;\n private videoWasPlaying_: boolean;\n\n constructor(player: VideoJsPlayer, options: CreateClipProgressIndicatorOptions) {\n super(player, options);\n\n this.seekBar_ = options.seekBar;\n this.playProgressBar_ = options.playProgressBar;\n\n this.bindListeners();\n this.player_.one('dispose', () => {\n this.unbindListeners();\n });\n }\n\n public createEl(tagName?: string, properties?: any, attribtues?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: 'cv-create-clip-progress-indicator'\n }, attribtues);\n }\n\n private bindListeners(): void {\n this.on('mousedown', this.handleMouseDown);\n this.on('touchstart', this.handleMouseDown);\n }\n\n private unbindListeners(): void {\n const doc = (this.el_ as any).ownerDocument;\n\n this.off('mousedown', this.handleMouseDown);\n this.off('touchstart', this.handleMouseDown);\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n }\n\n private handleMouseDown(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n event.stopPropagation();\n if (event.type === 'mousedown')\n event.preventDefault();\n\n /**\n * Comment below copied over from videojs - Sha\n * \n * Do not call preventDefault() on touchstart in Chrome\n * to avoid console warnings. Use a 'touch-action: none' style\n * instead to prevent unintented scrolling.\n * https://developers.google.com/web/updates/2017/01/scrolling-intervention\n */\n if (event.type === 'touchstart' && !videojs.browser.IS_CHROME)\n event.preventDefault();\n\n this.player_.scrubbing(true);\n this.videoWasPlaying_ = !this.player_.paused();\n this.player_.pause();\n\n videojs.dom.blockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.on(doc, 'mousemove', this.handleMouseMove);\n this.on(doc, 'mouseup', this.handleMouseUp);\n this.on(doc, 'touchmove', this.handleMouseMove);\n this.on(doc, 'touchend', this.handleMouseUp);\n\n this.handleMouseMove(event);\n\n this.player_.addClass('cv-hide-mouse-time');\n }\n\n private handleMouseMove(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n const distance = videojs.dom.getPointerPosition((this.seekBar_ as any).el_, event).x;\n\n let newTime = distance * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration())\n newTime = newTime - 0.1;\n\n this.player_.currentTime(newTime);\n (this.playProgressBar_ as any).update();\n }\n\n private handleMouseUp(event: videojs.EventTarget.Event): void {\n videojs.dom.unblockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n\n event?.stopPropagation();\n this.player_.scrubbing(false);\n this.player_.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n if (this.videoWasPlaying_) {\n this.player_.play();\n }\n\n (this.seekBar_ as any).update();\n this.player_.removeClass('cv-hide-mouse-time');\n }\n}\n\nvideojs.registerComponent('CreateClipProgressIndicator', CreateClipProgressIndicator);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n ClipTimepointSelector,\n ClipTimepointSelectorOptions\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector';\nimport { CreateClipProgressIndicator } from 'projects/player/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator';\n\nimport './create-clip-seek-bar.scss';\n\nconst SeekBar = videojs.getComponent('SeekBar') as unknown as typeof videojs.SeekBar;\n\ninterface CreateClipSeekBarOptions extends ClipTimepointSelectorOptions {}\n\nexport class CreateClipSeekBar extends SeekBar {\n constructor(player: VideoJsPlayer, options: any) {\n super(player, options);\n\n this.addClass('cv-create-clip-seek-bar');\n }\n\n public initialize(options: CreateClipSeekBarOptions): void {\n const timepointSelector = new ClipTimepointSelector(this.player(), options);\n\n this.addChild(timepointSelector);\n\n const playProgressBar = this.getChild('playProgressBar');\n const indicator = new CreateClipProgressIndicator(this.player_, {\n seekBar: this,\n playProgressBar\n });\n playProgressBar.addChild(indicator);\n }\n}\n\nCreateClipSeekBar.prototype.options_ = {\n children: ['playProgressBar'],\n barName: 'playProgressBar'\n};\n\n// MouseTimeDisplay tooltips should not be added to a player on mobile devices\nif (!videojs.browser.IS_IOS && !videojs.browser.IS_ANDROID) {\n CreateClipSeekBar.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay');\n}\n\nvideojs.registerComponent('CreateClipSeekBar', CreateClipSeekBar);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n CreateClipSeekBar\n} from 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nimport 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nconst Plugin = videojs.getPlugin('plugin');\n\nconst DEFAULT_MIN_CLIP_DURATION = 5; // seconds;\n\ninterface CreateClipPluginOptions {\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nclass CreateClipPlugin extends Plugin {\n private options: CreateClipPluginOptions;\n\n constructor(player: VideoJsPlayer, options: CreateClipPluginOptions) {\n super(player, options);\n\n this.options = options;\n\n this.initCreateClipSeekBar = this.initCreateClipSeekBar.bind(this);\n\n this.player.one('loadedmetadata', () => this.player.ready(this.initCreateClipSeekBar));\n }\n\n private initCreateClipSeekBar(): void {\n const seekBar = this.player.controlBar.getChild('ProgressControl')?.getChild('SeekBar') as CreateClipSeekBar;\n\n if (!seekBar)\n return;\n\n const startTime = (!isNaN(this.options.startTime) && this.options.startTime >= 0) ?\n this.options.startTime :\n 0;\n\n const endTime = (!isNaN(this.options.endTime) && this.options.endTime <= this.player.duration()) ?\n this.options.endTime :\n this.player.duration();\n\n const minDuration = Math.min(this.options.minDuration || DEFAULT_MIN_CLIP_DURATION, this.player.duration());\n\n seekBar.initialize({\n startTime,\n endTime,\n minDuration,\n onChangeStartTime: this.options.onChangeStartTime,\n onChangeEndTime: this.options.onChangeEndTime\n });\n }\n\n public dispose(): void {\n this.player.off('loadedmetadata', this.initCreateClipSeekBar);\n super.dispose();\n }\n}\n\nvideojs.registerPlugin('createClipPlugin', CreateClipPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n createClipPlugin(options: CreateClipPluginOptions): void;\n }\n}\n","/* eslint simple-import-sort/imports: 0 */\n\nimport { VideoJsPlayerOptions } from 'video.js';\nimport { BasePlayer, BasePlayerOptions } from './base-player';\n\nimport { AnalyticsPlayerType } from 'projects/player/services/analytics-service';\n\nimport 'projects/player/plugins/create-clip-plugin/create-clip-plugin';\n\nexport interface CreateClipPlayerOptions extends Omit<BasePlayerOptions, 'playbackRates'> {\n onChangeEndTime: (endTime: number) => void;\n onChangeStartTime: (startTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nexport class CreateClipPlayer extends BasePlayer {\n declare protected options: CreateClipPlayerOptions;\n\n constructor(id: string | Element, options: CreateClipPlayerOptions) {\n super(id, {\n allowFullscreen: true,\n ...options,\n playbackRates: null,\n enableLocalCache: false\n });\n }\n\n protected getPlayerClassName(): string {\n return 'cv-create-clip-player';\n }\n\n protected configurePlugins(): void {\n const { startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime } = this.options;\n this.player.createClipPlugin({ startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime });\n }\n\n protected getPlayerOptions(): VideoJsPlayerOptions {\n const options = super.getPlayerOptions();\n options.inactivityTimeout = 0;\n return options;\n }\n\n protected getSeekBarName(): string {\n return 'CreateClipSeekBar';\n }\n\n protected getAnalyticsPlayerType(): AnalyticsPlayerType {\n return 'create-clip-player';\n }\n}\n","import React from 'react';\n\nimport { CreateClipPlayer, CreateClipPlayerOptions } from 'projects/player/players/create-clip-player';\nimport { getProxy } from 'projects/player/utils/getProxy';\n\nexport interface ClickViewCreateClipPlayerProps extends CreateClipPlayerOptions {\n onReady?: (player: CreateClipPlayer) => void;\n onDispose?: () => void;\n}\n\nexport function ClickViewCreateClipPlayer(props: ClickViewCreateClipPlayerProps): React.ReactElement {\n const { onReady, onDispose } = props;\n\n const ref = React.useRef(null);\n const playerRef = React.useRef<CreateClipPlayer>(null);\n\n React.useEffect(() => {\n playerRef.current?.dispose();\n\n if (!ref)\n return;\n\n playerRef.current = new CreateClipPlayer(ref.current, props);\n\n if (onReady) {\n playerRef.current.ready(() => {\n onReady(getProxy(playerRef.current));\n });\n }\n\n if (onDispose) {\n playerRef.current.one('dispose', onDispose);\n }\n \n return () => {\n playerRef.current?.dispose();\n };\n }, [props.viewKey]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:start:time', time: props.startTime });\n }, [props.startTime]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:end:time', time: props.endTime });\n }, [props.endTime]);\n\n return (\n <div ref={ref}></div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ClipTimeForm } from 'libs/shared/apps/clips/components/clip-time-form/ClipTimeForm';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { PlayerViewKey, Video } from 'libs/shared/interfaces';\n\nimport { CreateClipPlayer } from 'projects/player/players/create-clip-player';\nimport { ClickViewCreateClipPlayer } from 'projects/player/react/CreateClipPlayer';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\nconst NAV_LOCK_ID = 'clip-nav-lock';\nconst DEFAULT_DURATION = 30;\nconst MIN_DURATION = 5;\n\ninterface CreateClipViewProps {\n videoId: string;\n}\n\nexport function CreateClipView(props: CreateClipViewProps): JSX.Element {\n const playerRef = React.useRef<CreateClipPlayer>(null);\n \n const [ startTime, setStartTime ] = React.useState<number>(0);\n const [ endTime, setEndTime ] = React.useState<number>(0 + DEFAULT_DURATION);\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.videoId, MediaIdType.MasterObject)\n );\n\n const [ duration, setDuration ] = React.useState<number>(0);\n\n const navLock = useNavLock();\n\n React.useEffect(() => {\n navLock.lock({\n id: NAV_LOCK_ID,\n title: 'Are you sure you want to leave?',\n text: 'The clip you are currently creating will not be saved.'\n });\n }, []);\n\n function onReady(player: CreateClipPlayer): void {\n playerRef.current = player;\n\n player.on('durationchange', () => setDuration(player.duration()));\n }\n\n function onSubmit(): void {\n navLock.unlock(NAV_LOCK_ID);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.CREATE_CLIP_DETAILS,\n args: [props.videoId],\n params: { startTime, endTime }\n });\n }\n\n function onCancel(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO_CLIPS,\n args: [props.videoId]\n });\n }\n\n return (\n <div className='px-3'>\n {!!viewKey.data && !!video.data &&\n <div className='pb-3'>\n <div className='mb-3'>\n <ClickViewCreateClipPlayer\n onReady={onReady}\n playerApi={new URL(ClickView.Config.Urls.PlayerApi)}\n viewKey={viewKey.data.viewKey}\n startTime={startTime}\n endTime={endTime}\n onChangeStartTime={setStartTime}\n onChangeEndTime={setEndTime}\n minDuration={MIN_DURATION}\n autoplay\n />\n </div>\n <ClipTimeForm\n startTime={startTime}\n endTime={endTime}\n setStartTime={setStartTime}\n setEndTime={setEndTime}\n onSubmit={onSubmit}\n onCancel={onCancel}\n duration={duration}\n />\n </div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CR-5nCWm.chunk.js","names":[],"sources":["../../../../../../../libs/shared/src/apps/clips/components/clip-time-form/ClipTimeForm.tsx","../../../../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle.ts","../../../../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector.ts","../../../../../../player/src/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator.ts","../../../../../../player/src/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar.ts","../../../../../../player/src/plugins/create-clip-plugin/create-clip-plugin.ts","../../../../../../player/src/players/create-clip-player.ts","../../../../../../player/src/react/CreateClipPlayer.tsx","../../../../../src/apps/clips/views/create-clip/CreateClipView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TimeInput } from 'libs/shared/components/time-input/TimeInput';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nconst namespace = 'shared.clipTimeForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * All times are in seconds.\n */\ninterface ClipTimeFormProps {\n startTime: number;\n endTime: number;\n setStartTime: (time: number) => void;\n setEndTime: (time: number) => void;\n onSubmit: () => void;\n onCancel: () => void;\n duration: number;\n}\n\nexport function ClipTimeForm(props: ClipTimeFormProps): JSX.Element {\n if (isNaN(props.startTime) || isNaN(props.endTime))\n return <></>;\n\n /**\n * DurationHelper.ToDisplayDuration in TimeInput will truncate as decimals\n * so we floor the times when displaying the duration.\n */\n const duration = Math.floor(props.endTime) - Math.floor(props.startTime);\n\n return (\n <div className='px-3'>\n <form className='d-flex align-items-center justify-content-center pb-4'>\n <div>\n <TimeInput\n value={props.startTime}\n setTime={props.setStartTime}\n duration={props.duration}\n />\n </div>\n <span className='px-2'>-</span>\n <div className='me-2'>\n <TimeInput\n value={props.endTime}\n setTime={props.setEndTime}\n duration={props.duration}\n />\n </div>\n <span>\n <strong><Text namespace={namespace} phrase='duration' /></strong>\n \n {DurationHelper.ToDisplayDuration((duration) * 1000)}\n </span>\n </form>\n <div className='d-flex justify-content-end'>\n <button className='btn btn-link' onClick={props.onCancel}>\n {getPhrase('cancel')}\n </button>\n <button className='btn btn-dark' onClick={props.onSubmit}>\n {getPhrase('next')}\n </button>\n </div>\n </div>\n );\n}\n","import videojs from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\n// tslint:disable-next-line\nconst handleSvg = '<svg viewBox=\"0 0 5 14\" pointer-events=\"none\"><g id=\"Clips\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"><g id=\"Clip-2\" transform=\"translate(-835.000000, -632.000000)\" fill=\"#FFFFFF\"><g id=\"Video-Copy\" transform=\"translate(275.000000, 96.000000)\"><g id=\"Handles\" transform=\"translate(560.000000, 536.000000)\"><circle id=\"Oval\" cx=\"1\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-2\" cx=\"1\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-4\" cx=\"1\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-8\" cx=\"1\" cy=\"13\" r=\"1\"></circle><circle id=\"Oval-Copy\" cx=\"4\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-3\" cx=\"4\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-5\" cx=\"4\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-9\" cx=\"4\" cy=\"13\" r=\"1\"></circle></g></g></g></g></svg>';\n\nexport class ClipTimepointSelectorHandle extends Component {\n public buildCSSClass(): string {\n return `cv-clip-timepoint-handle ${super.buildCSSClass()}`;\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: this.buildCSSClass(),\n innerHTML: handleSvg\n }, attributes);\n }\n\n public isEventTarget(e: videojs.EventTarget.Event): boolean {\n return this.el().contains(e.target as Node);\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport {\n ClipTimepointSelectorHandle\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle';\n\nimport './clip-timepoint-selector.scss';\n\nexport interface ClipTimepointSelectorOptions extends videojs.ComponentOptions {\n startTime: number;\n endTime: number;\n minDuration: number;\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n}\n\nexport class ClipTimepointSelector extends Component {\n // tslint:disable-next-line\n public options_: ClipTimepointSelectorOptions;\n\n // tslint:disable-next-line\n public el_: HTMLElement;\n\n private minDuration: number;\n\n /**\n * These variables shouldn't be set directly.\n * setStartTime and setEndTime should be used.\n */\n private startTime: number;\n private endTime: number;\n\n private startHandle: ClipTimepointSelectorHandle;\n private endHandle: ClipTimepointSelectorHandle;\n\n private dragStartActive: boolean = false;\n private dragEndActive: boolean = false;\n private dragSliderActive: boolean = false;\n\n private dragSliderCurrentPosition: number = null;\n\n constructor(player: VideoJsPlayer, options: ClipTimepointSelectorOptions) {\n super(player, options);\n\n this.minDuration = Math.min(player.duration(), this.options_.minDuration);\n\n this.setStartTime(options.startTime, false);\n this.setEndTime(options.endTime, false);\n\n this.startHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.startHandle.addClass('cv-clip-start-handle');\n this.addChild(this.startHandle);\n\n this.endHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.endHandle.addClass('cv-clip-end-handle');\n this.addChild(this.endHandle);\n\n this.on(this.player(), 'update:clip:start:time', ({ time }) => this.setStartTime(time));\n this.on(this.player(), 'update:clip:end:time', ({ time }) => this.setEndTime(time));\n\n this.bindListeners();\n this.update();\n }\n\n public createEl(): Element {\n return super.createEl('div', {\n className: 'cv-clip-timepoint-selector'\n }, {});\n }\n\n private update(): void {\n this.options_.onChangeStartTime(this.startTime);\n this.options_.onChangeEndTime(this.endTime);\n\n this.requestAnimationFrame(() => {\n this.setStartOffset();\n this.setWidth();\n });\n }\n\n private setStartTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const maxStartTime = this.player().duration() - this.minDuration;\n\n if (time > maxStartTime)\n time = maxStartTime;\n\n if (time < 0)\n time = 0;\n\n this.startTime = time;\n\n if (this.endTime && (this.endTime - this.startTime < this.minDuration)) {\n const newEndTime = typeof currentDuration === 'number' ?\n this.startTime + currentDuration :\n this.startTime + this.minDuration;\n\n this.setEndTime(newEndTime);\n }\n\n /**\n * Seek player to the clip start time.\n */\n this.player().currentTime(this.startTime);\n\n if (shouldUpdate)\n this.update();\n }\n\n private setEndTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const minEndTime = this.minDuration;\n\n if (time < minEndTime)\n time = minEndTime;\n\n if (time > this.player().duration())\n time = this.player().duration();\n\n this.endTime = time;\n\n if (this.startTime && (this.endTime - this.startTime < this.minDuration)) {\n const newStartTime = typeof currentDuration === 'number' ?\n this.endTime - currentDuration :\n this.endTime - this.minDuration;\n\n this.setStartTime(newStartTime);\n }\n\n if (shouldUpdate)\n this.update();\n }\n\n private bindListeners(): void {\n this.onTimeupdate = this.onTimeupdate.bind(this);\n this.player().on('timeupdate', this.onTimeupdate);\n\n this.on('mousedown', this.dragStart);\n this.on('touchstart', this.dragStart);\n\n this.player().on('dispose', () => {\n this.player().off('timeupdate', this.onTimeupdate);\n this.off('mousedown', this.dragStart);\n this.off('touchstart', this.dragStart);\n });\n }\n\n private hasStartTime(): boolean {\n return typeof this.startTime === 'number';\n }\n\n private hasEndTime(): boolean {\n return typeof this.endTime === 'number';\n }\n\n private onTimeupdate(): void {\n /**\n * Pause the player if it plays past the end point\n */\n const currentTime = this.player().currentTime();\n if (currentTime > this.endTime && currentTime < (this.endTime + 0.5))\n this.player().pause();\n }\n\n private dragStart(e: videojs.EventTarget.Event): void {\n if (this.startHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragStartActive = true;\n }\n\n if (this.endHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragEndActive = true;\n }\n\n if (e.target === this.el()) {\n e.stopImmediatePropagation();\n this.dragSliderActive = true;\n this.dragSliderCurrentPosition = this.getPosition(e);\n }\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.on(doc, 'mousemove', this.drag);\n this.on(doc, 'mouseup', this.dragEnd);\n this.on(doc, 'touchmove', this.drag);\n this.on(doc, 'touchend', this.dragEnd);\n\n this.drag(e);\n }\n\n private dragEnd(): void {\n this.dragStartActive = false;\n this.dragEndActive = false;\n this.dragSliderActive = false;\n this.dragSliderCurrentPosition = null;\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.off(doc, 'mousemove', this.drag);\n this.off(doc, 'mouseup', this.dragEnd);\n this.off(doc, 'touchmove', this.drag);\n this.off(doc, 'touchend', this.dragEnd);\n }\n\n private drag(e: videojs.EventTarget.Event): void {\n if (!this.dragStartActive && !this.dragEndActive && !this.dragSliderActive || !videojs.dom.isSingleLeftClick(e))\n return;\n \n const position = this.getPosition(e);\n\n const timepoint = position * this.player().duration();\n\n if (this.dragStartActive)\n this.handleStartHandleDrag(timepoint);\n\n if (this.dragEndActive)\n this.handleEndHandleDrag(timepoint);\n\n if (this.dragSliderActive)\n this.handleSliderDrag(position);\n }\n\n private handleStartHandleDrag(timepoint: number): void {\n this.setStartTime(timepoint);\n }\n\n private handleEndHandleDrag(timepoint: number): void {\n this.setEndTime(timepoint);\n }\n\n private handleSliderDrag(position: number): void {\n const timeDifference = (position - this.dragSliderCurrentPosition) * this.player().duration();\n const newStartTime = this.startTime + timeDifference;\n const newEndTime = this.endTime + timeDifference;\n\n /**\n * Don't move if the clip is already at the beginning and/or end\n * of the video.\n */\n if (newStartTime <= 0 || newEndTime >= this.player().duration())\n return;\n\n this.dragSliderCurrentPosition = position;\n this.setStartTime(newStartTime);\n this.setEndTime(newEndTime);\n }\n\n private getPosition(e: videojs.EventTarget.Event): number {\n return videojs.dom.getPointerPosition(this.el_.parentNode as HTMLElement, e).x;\n }\n\n private setStartOffset(): void {\n this.el_.style.marginLeft = `${this.getPercentage(this.startTime)}%`;\n }\n\n private setWidth(): void {\n this.el_.style.width = `${this.getPercentage(this.endTime - this.startTime)}%`;\n }\n\n private getPercentage(time: number): number {\n return +((time / this.player().duration() * 100).toFixed(4));\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport './create-clip-progress-indicator.scss';\n\ninterface CreateClipProgressIndicatorOptions extends videojs.ComponentOptions {\n seekBar: videojs.Component;\n playProgressBar: videojs.Component;\n}\n\nexport class CreateClipProgressIndicator extends Component {\n private el_: HTMLDivElement;\n private seekBar_: videojs.Component;\n private playProgressBar_: videojs.Component;\n private videoWasPlaying_: boolean;\n\n constructor(player: VideoJsPlayer, options: CreateClipProgressIndicatorOptions) {\n super(player, options);\n\n this.seekBar_ = options.seekBar;\n this.playProgressBar_ = options.playProgressBar;\n\n this.bindListeners();\n this.player_.one('dispose', () => {\n this.unbindListeners();\n });\n }\n\n public createEl(tagName?: string, properties?: any, attribtues?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: 'cv-create-clip-progress-indicator'\n }, attribtues);\n }\n\n private bindListeners(): void {\n this.on('mousedown', this.handleMouseDown);\n this.on('touchstart', this.handleMouseDown);\n }\n\n private unbindListeners(): void {\n const doc = (this.el_ as any).ownerDocument;\n\n this.off('mousedown', this.handleMouseDown);\n this.off('touchstart', this.handleMouseDown);\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n }\n\n private handleMouseDown(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n event.stopPropagation();\n if (event.type === 'mousedown')\n event.preventDefault();\n\n /**\n * Comment below copied over from videojs - Sha\n * \n * Do not call preventDefault() on touchstart in Chrome\n * to avoid console warnings. Use a 'touch-action: none' style\n * instead to prevent unintented scrolling.\n * https://developers.google.com/web/updates/2017/01/scrolling-intervention\n */\n if (event.type === 'touchstart' && !videojs.browser.IS_CHROME)\n event.preventDefault();\n\n this.player_.scrubbing(true);\n this.videoWasPlaying_ = !this.player_.paused();\n this.player_.pause();\n\n videojs.dom.blockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.on(doc, 'mousemove', this.handleMouseMove);\n this.on(doc, 'mouseup', this.handleMouseUp);\n this.on(doc, 'touchmove', this.handleMouseMove);\n this.on(doc, 'touchend', this.handleMouseUp);\n\n this.handleMouseMove(event);\n\n this.player_.addClass('cv-hide-mouse-time');\n }\n\n private handleMouseMove(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n const distance = videojs.dom.getPointerPosition((this.seekBar_ as any).el_, event).x;\n\n let newTime = distance * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration())\n newTime = newTime - 0.1;\n\n this.player_.currentTime(newTime);\n (this.playProgressBar_ as any).update();\n }\n\n private handleMouseUp(event: videojs.EventTarget.Event): void {\n videojs.dom.unblockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n\n event?.stopPropagation();\n this.player_.scrubbing(false);\n this.player_.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n if (this.videoWasPlaying_) {\n this.player_.play();\n }\n\n (this.seekBar_ as any).update();\n this.player_.removeClass('cv-hide-mouse-time');\n }\n}\n\nvideojs.registerComponent('CreateClipProgressIndicator', CreateClipProgressIndicator);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n ClipTimepointSelector,\n ClipTimepointSelectorOptions\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector';\nimport { CreateClipProgressIndicator } from 'projects/player/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator';\n\nimport './create-clip-seek-bar.scss';\n\nconst SeekBar = videojs.getComponent('SeekBar') as unknown as typeof videojs.SeekBar;\n\ninterface CreateClipSeekBarOptions extends ClipTimepointSelectorOptions {}\n\nexport class CreateClipSeekBar extends SeekBar {\n constructor(player: VideoJsPlayer, options: any) {\n super(player, options);\n\n this.addClass('cv-create-clip-seek-bar');\n }\n\n public initialize(options: CreateClipSeekBarOptions): void {\n const timepointSelector = new ClipTimepointSelector(this.player(), options);\n\n this.addChild(timepointSelector);\n\n const playProgressBar = this.getChild('playProgressBar');\n const indicator = new CreateClipProgressIndicator(this.player_, {\n seekBar: this,\n playProgressBar\n });\n playProgressBar.addChild(indicator);\n }\n}\n\nCreateClipSeekBar.prototype.options_ = {\n children: ['playProgressBar'],\n barName: 'playProgressBar'\n};\n\n// MouseTimeDisplay tooltips should not be added to a player on mobile devices\nif (!videojs.browser.IS_IOS && !videojs.browser.IS_ANDROID) {\n CreateClipSeekBar.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay');\n}\n\nvideojs.registerComponent('CreateClipSeekBar', CreateClipSeekBar);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n CreateClipSeekBar\n} from 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nimport 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nconst Plugin = videojs.getPlugin('plugin');\n\nconst DEFAULT_MIN_CLIP_DURATION = 5; // seconds;\n\ninterface CreateClipPluginOptions {\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nclass CreateClipPlugin extends Plugin {\n private options: CreateClipPluginOptions;\n\n constructor(player: VideoJsPlayer, options: CreateClipPluginOptions) {\n super(player, options);\n\n this.options = options;\n\n this.initCreateClipSeekBar = this.initCreateClipSeekBar.bind(this);\n\n this.player.one('loadedmetadata', () => this.player.ready(this.initCreateClipSeekBar));\n }\n\n private initCreateClipSeekBar(): void {\n const seekBar = this.player.controlBar.getChild('ProgressControl')?.getChild('SeekBar') as CreateClipSeekBar;\n\n if (!seekBar)\n return;\n\n const startTime = (!isNaN(this.options.startTime) && this.options.startTime >= 0) ?\n this.options.startTime :\n 0;\n\n const endTime = (!isNaN(this.options.endTime) && this.options.endTime <= this.player.duration()) ?\n this.options.endTime :\n this.player.duration();\n\n const minDuration = Math.min(this.options.minDuration || DEFAULT_MIN_CLIP_DURATION, this.player.duration());\n\n seekBar.initialize({\n startTime,\n endTime,\n minDuration,\n onChangeStartTime: this.options.onChangeStartTime,\n onChangeEndTime: this.options.onChangeEndTime\n });\n }\n\n public dispose(): void {\n this.player.off('loadedmetadata', this.initCreateClipSeekBar);\n super.dispose();\n }\n}\n\nvideojs.registerPlugin('createClipPlugin', CreateClipPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n createClipPlugin(options: CreateClipPluginOptions): void;\n }\n}\n","/* eslint simple-import-sort/imports: 0 */\n\nimport { VideoJsPlayerOptions } from 'video.js';\nimport { BasePlayer, BasePlayerOptions } from './base-player';\n\nimport { AnalyticsPlayerType } from 'projects/player/services/analytics-service';\n\nimport 'projects/player/plugins/create-clip-plugin/create-clip-plugin';\n\nexport interface CreateClipPlayerOptions extends Omit<BasePlayerOptions, 'playbackRates'> {\n onChangeEndTime: (endTime: number) => void;\n onChangeStartTime: (startTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nexport class CreateClipPlayer extends BasePlayer {\n declare protected options: CreateClipPlayerOptions;\n\n constructor(id: string | Element, options: CreateClipPlayerOptions) {\n super(id, {\n allowFullscreen: true,\n ...options,\n playbackRates: null,\n enableLocalCache: false\n });\n }\n\n protected getPlayerClassName(): string {\n return 'cv-create-clip-player';\n }\n\n protected configurePlugins(): void {\n const { startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime } = this.options;\n this.player.createClipPlugin({ startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime });\n }\n\n protected getPlayerOptions(): VideoJsPlayerOptions {\n const options = super.getPlayerOptions();\n options.inactivityTimeout = 0;\n return options;\n }\n\n protected getSeekBarName(): string {\n return 'CreateClipSeekBar';\n }\n\n protected getAnalyticsPlayerType(): AnalyticsPlayerType {\n return 'create-clip-player';\n }\n}\n","import React from 'react';\n\nimport { CreateClipPlayer, CreateClipPlayerOptions } from 'projects/player/players/create-clip-player';\nimport { getProxy } from 'projects/player/utils/getProxy';\n\nexport interface ClickViewCreateClipPlayerProps extends CreateClipPlayerOptions {\n onReady?: (player: CreateClipPlayer) => void;\n onDispose?: () => void;\n}\n\nexport function ClickViewCreateClipPlayer(props: ClickViewCreateClipPlayerProps): React.ReactElement {\n const { onReady, onDispose } = props;\n\n const ref = React.useRef(null);\n const playerRef = React.useRef<CreateClipPlayer>(null);\n\n React.useEffect(() => {\n playerRef.current?.dispose();\n\n if (!ref)\n return;\n\n playerRef.current = new CreateClipPlayer(ref.current, props);\n\n if (onReady) {\n playerRef.current.ready(() => {\n onReady(getProxy(playerRef.current));\n });\n }\n\n if (onDispose) {\n playerRef.current.one('dispose', onDispose);\n }\n \n return () => {\n playerRef.current?.dispose();\n };\n }, [props.viewKey]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:start:time', time: props.startTime });\n }, [props.startTime]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:end:time', time: props.endTime });\n }, [props.endTime]);\n\n return (\n <div ref={ref}></div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ClipTimeForm } from 'libs/shared/apps/clips/components/clip-time-form/ClipTimeForm';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { PlayerViewKey, Video } from 'libs/shared/interfaces';\n\nimport { CreateClipPlayer } from 'projects/player/players/create-clip-player';\nimport { ClickViewCreateClipPlayer } from 'projects/player/react/CreateClipPlayer';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\nconst NAV_LOCK_ID = 'clip-nav-lock';\nconst DEFAULT_DURATION = 30;\nconst MIN_DURATION = 5;\n\ninterface CreateClipViewProps {\n videoId: string;\n}\n\nexport function CreateClipView(props: CreateClipViewProps): JSX.Element {\n const playerRef = React.useRef<CreateClipPlayer>(null);\n \n const [ startTime, setStartTime ] = React.useState<number>(0);\n const [ endTime, setEndTime ] = React.useState<number>(0 + DEFAULT_DURATION);\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.videoId, MediaIdType.MasterObject)\n );\n\n const [ duration, setDuration ] = React.useState<number>(0);\n\n const navLock = useNavLock();\n\n React.useEffect(() => {\n navLock.lock({\n id: NAV_LOCK_ID,\n title: 'Are you sure you want to leave?',\n text: 'The clip you are currently creating will not be saved.'\n });\n }, []);\n\n function onReady(player: CreateClipPlayer): void {\n playerRef.current = player;\n\n player.on('durationchange', () => setDuration(player.duration()));\n }\n\n function onSubmit(): void {\n navLock.unlock(NAV_LOCK_ID);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.CREATE_CLIP_DETAILS,\n args: [props.videoId],\n params: { startTime, endTime }\n });\n }\n\n function onCancel(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO_CLIPS,\n args: [props.videoId]\n });\n }\n\n return (\n <div className='px-3'>\n {!!viewKey.data && !!video.data &&\n <div className='pb-3'>\n <div className='mb-3'>\n <ClickViewCreateClipPlayer\n onReady={onReady}\n playerApi={new URL(ClickView.Config.Urls.PlayerApi)}\n viewKey={viewKey.data.viewKey}\n startTime={startTime}\n endTime={endTime}\n onChangeStartTime={setStartTime}\n onChangeEndTime={setEndTime}\n minDuration={MIN_DURATION}\n autoplay\n />\n </div>\n <ClipTimeForm\n startTime={startTime}\n endTime={endTime}\n setStartTime={setStartTime}\n setEndTime={setEndTime}\n onSubmit={onSubmit}\n onCancel={onCancel}\n duration={duration}\n />\n </div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
|