cloudinary-video-player 3.2.2-edge.0 → 3.2.2-edge.2
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/adaptive-streaming.js +3 -3
- package/dist/adaptive-streaming.min.js +3 -3
- package/dist/chapters.js +2 -2
- package/dist/chapters.min.js +2 -2
- package/dist/cld-video-player.css +2 -2
- package/dist/cld-video-player.js +74 -30
- package/dist/cld-video-player.light.js +74 -30
- package/dist/cld-video-player.light.min.js +4 -4
- package/dist/cld-video-player.min.css +2 -2
- package/dist/cld-video-player.min.js +4 -4
- package/dist/colors.js +2 -2
- package/dist/colors.min.js +2 -2
- package/dist/dash.js +2 -2
- package/dist/dash.min.js +2 -2
- package/dist/debug.js +2 -2
- package/dist/debug.min.js +2 -2
- package/dist/ima.js +2 -2
- package/dist/ima.min.js +2 -2
- package/dist/interaction-areas.js +2 -2
- package/dist/interaction-areas.min.js +2 -2
- package/dist/node_modules_lodash_throttle_js.js +2 -2
- package/dist/playlist.js +2 -2
- package/dist/playlist.min.js +2 -2
- package/dist/recommendations-overlay.js +2 -2
- package/dist/recommendations-overlay.min.js +2 -2
- package/dist/share.js +2 -2
- package/dist/share.min.js +2 -2
- package/dist/shoppable.js +2 -2
- package/dist/shoppable.min.js +2 -2
- package/dist/visual-search.js +2 -2
- package/dist/visual-search.min.js +2 -2
- package/lib/adaptive-streaming.js +1 -1
- package/lib/all.js +1 -1
- package/lib/cld-video-player.js +1 -1
- package/lib/player.js +1 -1
- package/lib/videoPlayer.js +1 -1
- package/package.json +1 -1
- package/dist/srt-text-tracks.js +0 -37
- package/dist/srt-text-tracks.min.js +0 -6
- package/lib/srt-text-tracks.js +0 -1
package/dist/chapters.js
CHANGED
package/dist/chapters.min.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Cloudinary Video Player v3.2.2-edge.
|
|
3
|
-
* Built on 2025-08-
|
|
2
|
+
* Cloudinary Video Player v3.2.2-edge.2
|
|
3
|
+
* Built on 2025-08-21T07:10:59.631Z
|
|
4
4
|
* https://github.com/cloudinary/cloudinary-video-player
|
|
5
5
|
*/
|
|
6
6
|
"use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[625],{9234:(t,e,r)=>{r.d(e,{default:()=>p});var s=r(6673),a=r.n(s),i=r(8033),o=r(2415);const n=function(){function t(t,e){return this.player=t,this.options=e,this.player.one("loadedmetadata",this.initializeChapters.bind(this)),this}return t.prototype.src=function(t){this.resetPlugin(),this.options=t,this.player.one("loadedmetadata",this.initializeChapters.bind(this))},t.prototype.detach=function(){this.resetPlugin()},t.prototype.resetPlugin=function(){this.chaptersTrack&&(this.player.$(".vjs-control-bar-chapter-display").remove(),this.player.$(".vjs-chapter-display").remove(),this.player.$$(".vjs-chapter-marker").forEach((t=>t.remove())),this.player.removeRemoteTextTrack(this.chaptersTrack),delete this.chaptersTrack)},t.prototype.getChaptersFileUrlByName=function(){const t=this.player.cloudinary.currentPublicId();if(!t)return null;const{type:e}=this.player.cloudinary.source().resourceConfig();return`${`${(0,i.k$)(this.player.cloudinary.cloudinaryConfig())}/_applet_/video_service/chapters/${e}/${(0,o.G)(t)}.vtt`}?t=${Date.now()}`},t.prototype.initializeChapters=async function(){const t=!0===this.options?this.getChaptersFileUrlByName():this.options.url;if(t){const e={kind:"chapters",src:t,default:!0},r=this.player.addRemoteTextTrack(e);r.addEventListener("load",(()=>{this.chaptersTrack=r.track,this.setupChaptersDisplays()}))}else if(Object.entries(this.options).length){const t=this.player.addRemoteTextTrack({kind:"chapters",default:!0}),e=this.player.duration();Object.entries(this.options).forEach(((r,s,a)=>{const i=new VTTCue(parseFloat(r[0]),parseFloat(a[s+1]?a[s+1][0]:e),r[1]);t.track.addCue(i)})),this.chaptersTrack=t.track,this.setupChaptersDisplays(),this.player.controlBar.chaptersButton&&this.player.controlBar.chaptersButton.update()}},t.prototype.setupChaptersDisplays=function(){this.setupProgressBarMarkers(),this.setupProgressBarChapter(),this.setupControlBarChapter()},t.prototype.setupControlBarChapter=function(){const t=this.player.$(".vjs-control-bar-chapter-display")||document.createElement("div");t.setAttribute("class","vjs-control-bar-chapter-display");const e=this.player.$(".vjs-control-bar .vjs-spacer");e.innerHTML="",e.classList.add("vjs-control-bar-chapter-wrapper"),e.appendChild(t),this.chaptersTrack.addEventListener("cuechange",(()=>{const e=Array.from(this.chaptersTrack.activeCues);t.innerText=e.length>0?e[0].text:""}))},t.prototype.setupProgressBarMarkers=function(){const t=this.player.duration(),{seekBar:e}=this.player.controlBar.progressControl;Array.from(this.chaptersTrack.cues).forEach((r=>{if(0!==r.startTime){const s=r.startTime/t*100+"%",i=a().dom.createEl("div",void 0,{class:"vjs-chapter-marker",style:`left: ${s}`});e.el().append(i)}}))},t.prototype.setupProgressBarChapter=function(){const t=a().dom.createEl("div",void 0,{class:"vjs-chapter-display",style:`max-width: ${this.player.$(".vjs-vtt-thumbnail-display")?this.player.$(".vjs-vtt-thumbnail-display").style.width:"160px"}`}),e=this.player.getDescendant(["controlBar","progressControl","seekBar","mouseTimeDisplay"]),r=e.getDescendant(["timeTooltip"]);r.el().parentElement.prepend(t);const s=t=>{const e=t*this.player.duration(),r=Array.from(this.chaptersTrack?.cues||[]).find((t=>e>=t.startTime&&e<=t.endTime));return r?r.text:""};r.update=function(e,r,a){Object.getPrototypeOf(this).update.call(this,e,r,a),t.innerText=s(r)},"object"!=typeof this.player.vttThumbnails&&(e.update=function(e,s){const i=s*this.player_.duration(),o=e.width,n=t.clientWidth/2;r.updateTime(e,s,i,(()=>{e.width*s<n?this.el_.style.left=`${n}px`:e.width*s+n>o?this.el_.style.left=e.width-n+"px":this.el_.style.left=e.width*s+"px"})),r.write(a().time.formatTime(i))})},t}(),p=function(t,e){e.addClass("vjs-chapters"),e.chapters=new n(e,t)}}}]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Cloudinary Video Player v3.2.2-edge.
|
|
3
|
-
* Built on 2025-08-
|
|
2
|
+
* Cloudinary Video Player v3.2.2-edge.2
|
|
3
|
+
* Built on 2025-08-21T07:11:17.882Z
|
|
4
4
|
* https://github.com/cloudinary/cloudinary-video-player
|
|
5
5
|
*/
|
|
6
6
|
/*!*************************************************************************************************!*\
|
package/dist/cld-video-player.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Cloudinary Video Player v3.2.2-edge.
|
|
3
|
-
* Built on 2025-08-
|
|
2
|
+
* Cloudinary Video Player v3.2.2-edge.2
|
|
3
|
+
* Built on 2025-08-21T07:11:17.882Z
|
|
4
4
|
* https://github.com/cloudinary/cloudinary-video-player
|
|
5
5
|
*/
|
|
6
6
|
/*
|
|
@@ -228,7 +228,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
228
228
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
229
229
|
|
|
230
230
|
"use strict";
|
|
231
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isPlainObject */ \"../node_modules/lodash/isPlainObject.js\");\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cloudinary-video-analytics */ \"../node_modules/cloudinary-video-analytics/dist/main.js\");\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/consts */ \"./utils/consts.js\");\n\n\n\nclass CloudinaryAnalytics {\n constructor(player, options) {\n this.player = player;\n this.cloudinaryAnalytics = (0,cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__.connectCloudinaryAnalytics)(this.player.videoElement, {\n playerAdapter: this.getCloudinaryVideoPlayerAdapter()\n });\n this.currentVideoMetadata = {\n cloudName: null,\n publicId: null\n };\n this.analyticsOptions = options;\n }\n getMetadata = () => ({\n cloudName: this.player.cloudinary.cloudinaryConfig().cloud_name,\n publicId: this.player.cloudinary.currentPublicId()\n });\n sourceChanged = (e, _ref) => {\n let {\n source\n } = _ref;\n const metadata = this.getMetadata();\n if (metadata.cloudName && metadata.publicId) {\n const isLiveStream = source?.resourceConfig().type === 'live';\n this.currentVideoMetadata = metadata;\n this.cloudinaryAnalytics.startManualTracking({\n ...metadata,\n ...(isLiveStream ? {\n type: 'live'\n } : {})\n }, {\n ...(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default()(this.analyticsOptions) ? this.analyticsOptions : {}),\n videoPlayerType: 'cloudinary video player',\n videoPlayerVersion: \"3.2.2-edge.
|
|
231
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isPlainObject */ \"../node_modules/lodash/isPlainObject.js\");\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cloudinary-video-analytics */ \"../node_modules/cloudinary-video-analytics/dist/main.js\");\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/consts */ \"./utils/consts.js\");\n\n\n\nclass CloudinaryAnalytics {\n constructor(player, options) {\n this.player = player;\n this.cloudinaryAnalytics = (0,cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__.connectCloudinaryAnalytics)(this.player.videoElement, {\n playerAdapter: this.getCloudinaryVideoPlayerAdapter()\n });\n this.currentVideoMetadata = {\n cloudName: null,\n publicId: null\n };\n this.analyticsOptions = options;\n }\n getMetadata = () => ({\n cloudName: this.player.cloudinary.cloudinaryConfig().cloud_name,\n publicId: this.player.cloudinary.currentPublicId()\n });\n sourceChanged = (e, _ref) => {\n let {\n source\n } = _ref;\n const metadata = this.getMetadata();\n if (metadata.cloudName && metadata.publicId) {\n const isLiveStream = source?.resourceConfig().type === 'live';\n this.currentVideoMetadata = metadata;\n this.cloudinaryAnalytics.startManualTracking({\n ...metadata,\n ...(isLiveStream ? {\n type: 'live'\n } : {})\n }, {\n ...(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default()(this.analyticsOptions) ? this.analyticsOptions : {}),\n videoPlayerType: 'cloudinary video player',\n videoPlayerVersion: \"3.2.2-edge.2\"\n });\n } else if (this.currentVideoMetadata.cloudName !== metadata.cloudName || this.currentVideoMetadata.publicId !== metadata.publicId) {\n this.cloudinaryAnalytics.stopManualTracking();\n }\n };\n getCloudinaryVideoPlayerAdapter = () => {\n const createCldVPEventListener = (eventName, callback) => {\n this.player.on(eventName, callback);\n return () => {\n this.player.off(eventName, callback);\n };\n };\n return {\n onCanPlay: callback => createCldVPEventListener('canplay', callback),\n onCanPlayThrough: callback => createCldVPEventListener('canplaythrough', callback),\n onComplete: callback => createCldVPEventListener('complete', callback),\n onDurationChange: callback => createCldVPEventListener('durationchange', callback),\n onEmptied: callback => createCldVPEventListener('emptied', callback),\n onEnded: callback => createCldVPEventListener('ended', callback),\n onError: callback => createCldVPEventListener('error', callback),\n onLoadedData: callback => createCldVPEventListener('loadeddata', callback),\n onLoadedMetadata: callback => createCldVPEventListener('loadedmetadata', callback),\n onLoadStart: callback => createCldVPEventListener('loadstart', callback),\n onPause: callback => createCldVPEventListener('pause', callback),\n onPlay: callback => createCldVPEventListener('play', callback),\n onPlaying: callback => createCldVPEventListener('playing', callback),\n onProgress: callback => createCldVPEventListener('progress', callback),\n onRateChange: callback => createCldVPEventListener('ratechange', callback),\n onSeeked: callback => createCldVPEventListener('seeked', callback),\n onSeeking: callback => createCldVPEventListener('seeking', callback),\n onStalled: callback => createCldVPEventListener('stalled', callback),\n onSuspend: callback => createCldVPEventListener('suspend', callback),\n onTimeUpdate: callback => createCldVPEventListener('timeupdate', callback),\n onVolumeChange: callback => createCldVPEventListener('volumechange', callback),\n onWaiting: callback => createCldVPEventListener('waiting', callback),\n getCurrentSrc: () => this.player.videoElement.currentSrc,\n getCurrentTime: () => this.player.currentTime(),\n getReadyState: () => this.player.videoElement.readyState,\n getDuration: () => this.player.duration()\n };\n };\n init() {\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_2__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this.sourceChanged);\n }\n}\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n new CloudinaryAnalytics(this, opts).init();\n}\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/cloudinary-analytics/index.js?");
|
|
232
232
|
|
|
233
233
|
/***/ }),
|
|
234
234
|
|
|
@@ -261,7 +261,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
261
261
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
262
262
|
|
|
263
263
|
"use strict";
|
|
264
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONSTRUCTOR_PARAMS: () => (/* binding */ CONSTRUCTOR_PARAMS),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var utils_apply_with_props__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utils/apply-with-props */ \"./utils/apply-with-props.js\");\n/* harmony import */ var utils_slicing__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! utils/slicing */ \"./utils/slicing.js\");\n/* harmony import */ var utils_cloudinary__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! utils/cloudinary */ \"./utils/cloudinary.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _event_handler_registry__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event-handler-registry */ \"./plugins/cloudinary/event-handler-registry.js\");\n/* harmony import */ var _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./models/audio-source/audio-source */ \"./plugins/cloudinary/models/audio-source/audio-source.js\");\n/* harmony import */ var components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! components/recommendations-overlay */ \"./components/recommendations-overlay/index.js\");\n\n\n\n\n\n\n\n\n\nconst DEFAULT_PARAMS = {\n transformation: {},\n sourceTypes: [],\n sourceTransformation: [],\n posterOptions: {}\n};\nconst CONSTRUCTOR_PARAMS = ['cloudinaryConfig', 'transformation', 'sourceTypes', 'sourceTransformation', 'posterOptions', 'autoShowRecommendations'];\nclass CloudinaryContext {\n constructor(player) {\n var _this = this;\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_common__WEBPACK_IMPORTED_MODULE_4__.setupCloudinaryMiddleware)();\n this.player = player;\n options = Object.assign({}, DEFAULT_PARAMS, options);\n let _source = null;\n let _sources = null;\n let _lastSource = null;\n let _lastPlaylist = null;\n let _posterOptions = null;\n let _cloudinaryConfig = null;\n let _transformation = null;\n let _sourceTypes = null;\n let _sourceTransformation = null;\n let _chainTarget = options.chainTarget;\n let _playerEvents = null;\n let _recommendations = null;\n let _autoShowRecommendations = false;\n this.source = function (source) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options = Object.assign({}, options);\n if (!source) {\n return _source;\n }\n let src = null;\n if (source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) {\n src = source;\n } else {\n let {\n publicId,\n options: _options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_4__.normalizeOptions)(source, options);\n src = _this.buildSource(publicId, _options);\n }\n const recommendations = src.recommendations();\n if (recommendations && recommendations.length) {\n let itemBuilder = null;\n let disableAutoShow = false;\n if (options.recommendationOptions) {\n ({\n disableAutoShow,\n itemBuilder\n } = (0,utils_slicing__WEBPACK_IMPORTED_MODULE_2__.sliceAndUnsetProperties)(options.recommendationOptions, 'disableAutoShow', 'itemBuilder'));\n }\n (0,components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(player).then(() => {\n setRecommendations(recommendations, {\n disableAutoShow,\n itemBuilder\n });\n });\n } else {\n unsetRecommendations();\n }\n _source = src;\n _transformation = src.transformation();\n const isDash = options.sourceTypes && options.sourceTypes.some(s => s.includes('dash')) || typeof source === 'string' && source.endsWith('.mpd');\n const isHls = options.sourceTypes && options.sourceTypes.some(s => s.includes('hls')) || typeof source === 'string' && source.endsWith('.m3u8');\n const isAdaptiveStreamingRequired = isDash || isHls;\n if (isAdaptiveStreamingRequired && !_this.player.adaptiveStreamingLoaded) {\n __webpack_require__.e(/*! import() | adaptive-streaming */ \"adaptive-streaming\").then(__webpack_require__.bind(__webpack_require__, /*! ../adaptive-streaming */ \"./plugins/adaptive-streaming/index.js\")).then(() => {\n _this.player.adaptiveStreaming({\n ...options.adaptiveStreaming,\n isDash,\n debug: options.debug\n }).then(() => {\n refresh();\n });\n }).catch(err => {\n console.error('Failed to load adaptive streaming plugin:', err);\n refresh();\n });\n } else if (!options.skipRefresh) {\n refresh();\n }\n _this.player.trigger('cldsourcechanged', {\n source: src,\n sourceOptions: options\n });\n return _chainTarget;\n };\n this.buildSource = function (publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let builtSrc = null;\n ({\n publicId,\n options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_4__.normalizeOptions)(publicId, options));\n options.cloudinaryConfig = (0,_common__WEBPACK_IMPORTED_MODULE_4__.extendCloudinaryConfig)(_this.cloudinaryConfig(), options.cloudinaryConfig || {});\n options.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_4__.mergeTransformations)(_this.transformation(), options.transformation || {});\n options.sourceTransformation = options.sourceTransformation || _this.sourceTransformation();\n options.sourceTypes = options.sourceTypes || _this.sourceTypes();\n options.poster = options.poster || posterOptionsForCurrent();\n options.queryParams = Object.assign(options.queryParams || {}, options.allowUsageReport ? {\n _s: `vp-${\"3.2.2-edge.0\"}`\n } : {});\n if (options.sourceTypes.indexOf('audio') > -1) {\n builtSrc = new _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"](publicId, options);\n } else {\n builtSrc = new _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__[\"default\"](publicId, options);\n }\n return builtSrc;\n };\n this.posterOptions = options => {\n if (!options) {\n return _posterOptions;\n }\n _posterOptions = options;\n return _chainTarget;\n };\n this.disablePoster = posterColor => {\n // https://docs.videojs.com/player.js.html#line3816\n this.player.poster(' ');\n this.player.posterImage.el().style.backgroundColor = posterColor;\n };\n this.cloudinaryConfig = config => {\n if (!config) {\n return _cloudinaryConfig;\n }\n _cloudinaryConfig = config;\n return _chainTarget;\n };\n this.transformation = trans => {\n if (!trans) {\n return _transformation;\n }\n _transformation = trans;\n return _chainTarget;\n };\n this.sourceTypes = types => {\n if (!types) {\n return _sourceTypes;\n }\n _sourceTypes = types;\n return _chainTarget;\n };\n this.getCurrentSources = () => _sources;\n this.sourceTransformation = trans => {\n if (!trans) {\n return _sourceTransformation;\n }\n _sourceTransformation = trans;\n return _chainTarget;\n };\n this.on = function () {\n return _playerEvents.on(...arguments);\n };\n this.one = function () {\n return _playerEvents.one(...arguments);\n };\n this.off = function () {\n return _playerEvents.off(...arguments);\n };\n this.autoShowRecommendations = autoShow => {\n if (autoShow === undefined) {\n return _autoShowRecommendations;\n }\n _autoShowRecommendations = autoShow;\n return _chainTarget;\n };\n this.dispose = () => {\n if (this.playlist && this.playlist()) {\n this.disposePlaylist();\n }\n unsetRecommendations();\n _source = undefined;\n _playerEvents.removeAllListeners();\n };\n const setRecommendations = (recommendations, _ref) => {\n let {\n disableAutoShow = false,\n itemBuilder = null\n } = _ref;\n unsetRecommendations();\n if (!Array.isArray(recommendations) && typeof recommendations !== 'function' && !recommendations.then) {\n throw new Error('\"recommendations\" must be either an array or a function');\n }\n _recommendations = {};\n itemBuilder = itemBuilder || (source => ({\n source: source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__[\"default\"] ? source : this.buildSource(source),\n action: () => this.source(source)\n }));\n _recommendations.sourceChangedHandler = () => {\n const trigger = sources => {\n if (typeof sources !== 'undefined' && sources.length > 0) {\n const items = sources.map(_source => itemBuilder(_source));\n this.player.trigger('recommendationschanged', {\n items\n });\n } else {\n this.player.trigger('recommendationsnoshow');\n }\n _recommendations.sources = sources;\n };\n if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default()(recommendations)) {\n trigger(recommendations());\n } else if (recommendations.then) {\n recommendations.then(trigger);\n } else {\n trigger(recommendations);\n }\n };\n _recommendations.sourceChangedHandler();\n _recommendations.endedHandler = () => {\n if (!disableAutoShow && this.autoShowRecommendations()) {\n this.player.trigger('recommendationsshow');\n }\n };\n this.on('ended', _recommendations.endedHandler);\n };\n const unsetRecommendations = () => {\n if (_recommendations) {\n this.off('cldsourcechanged', _recommendations.sourceChangedHandler);\n this.off('ended', _recommendations.endedHandler);\n delete _recommendations.endedHandler;\n delete _recommendations.sourceChangedHandler;\n }\n _recommendations = null;\n };\n const refresh = () => {\n const src = this.source();\n if (!src) {\n return;\n }\n const posterOptions = Object.assign({}, this.player.cloudinary.posterOptions(), src.getInitOptions().poster);\n if (posterOptions.posterColor) {\n this.disablePoster(posterOptions.posterColor);\n } else if (src.poster()) {\n this.player.poster(src.poster().url());\n }\n _sources = src.generateSources().reduce((srcs, src) => {\n if (src.isAdaptive) {\n let codec = src.type.split('; ')[1] || null;\n if (codec && 'MediaSource' in window) {\n const parts = src.type.split('; ');\n let typeStr = `video/mp4; ${parts[1] || ''}`;\n const canPlay = testCanPlayTypeAndTypeSupported(typeStr);\n if (canPlay) {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n return srcs;\n }, []);\n this.player.src(_sources);\n _lastSource = src;\n if (this.playlist) {\n _lastPlaylist = this.playlist();\n }\n };\n const testCanPlayTypeAndTypeSupported = codec => {\n const v = document.createElement('video');\n return v.canPlayType(codec) || 'MediaSource' in window && MediaSource.isTypeSupported(codec);\n };\n const posterOptionsForCurrent = () => {\n const opts = Object.assign({}, this.posterOptions());\n opts.transformation = opts.transformation || {};\n if ((opts.transformation.width || opts.transformation.height) && !opts.transformation.crop) {\n opts.transformation.crop = 'scale';\n }\n\n // Set poster dimensions to player actual size.\n // (unless they were explicitly set via `posterOptions`)\n const playerEl = this.player.el();\n if (playerEl && playerEl.clientWidth && playerEl.clientHeight && !(0,utils_cloudinary__WEBPACK_IMPORTED_MODULE_3__.isKeyInTransformation)(opts.transformation, 'width') && !(0,utils_cloudinary__WEBPACK_IMPORTED_MODULE_3__.isKeyInTransformation)(opts.transformation, 'height')) {\n const roundUp100 = val => 100 * Math.ceil(val / 100);\n opts.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_4__.mergeTransformations)(opts.transformation, {\n width: roundUp100(playerEl.clientWidth),\n height: roundUp100(playerEl.clientHeight),\n crop: 'limit'\n });\n }\n return opts;\n };\n\n // Handle external (non-cloudinary plugin) source changes (e.g. by ad plugins)\n const syncState = (_, data) => {\n let src = data.to;\n\n // When source is cloudinary's\n if (_lastSource && _lastSource.contains(src)) {\n // If plugin state doesn't have an active VideoSource\n if (!this.source()) {\n // We might have been running a playlist, reset playlist's state.\n if (this.playlist && _lastPlaylist) {\n this.playlist(_lastPlaylist);\n }\n // Rebuild last source state without calling vjs's 'src' and 'poster'\n this.source(_lastSource, {\n skipRefresh: true\n });\n }\n } else {\n // Used by cloudinary-only components\n this.player.trigger('cldsourcechanged', {});\n\n // When source isn't cloudinary's - reset the plugin's state.\n this.dispose();\n }\n };\n _playerEvents = new _event_handler_registry__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this.player);\n const constructorParams = (0,utils_slicing__WEBPACK_IMPORTED_MODULE_2__.sliceAndUnsetProperties)(options, ...CONSTRUCTOR_PARAMS);\n (0,utils_apply_with_props__WEBPACK_IMPORTED_MODULE_1__.applyWithProps)(this, constructorParams);\n this.on('sourcechanged', syncState);\n }\n currentSourceType() {\n return this.source().getType();\n }\n currentPublicId() {\n return this.source() && this.source().publicId();\n }\n currentPoster() {\n return this.source() && this.source().poster();\n }\n}\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n options.chainTarget = options.chainTarget || this;\n this.cloudinary = new CloudinaryContext(this, options);\n}\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/cloudinary/index.js?");
|
|
264
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONSTRUCTOR_PARAMS: () => (/* binding */ CONSTRUCTOR_PARAMS),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var utils_apply_with_props__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utils/apply-with-props */ \"./utils/apply-with-props.js\");\n/* harmony import */ var utils_slicing__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! utils/slicing */ \"./utils/slicing.js\");\n/* harmony import */ var utils_cloudinary__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! utils/cloudinary */ \"./utils/cloudinary.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _event_handler_registry__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event-handler-registry */ \"./plugins/cloudinary/event-handler-registry.js\");\n/* harmony import */ var _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./models/audio-source/audio-source */ \"./plugins/cloudinary/models/audio-source/audio-source.js\");\n/* harmony import */ var components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! components/recommendations-overlay */ \"./components/recommendations-overlay/index.js\");\n\n\n\n\n\n\n\n\n\nconst DEFAULT_PARAMS = {\n transformation: {},\n sourceTypes: [],\n sourceTransformation: [],\n posterOptions: {}\n};\nconst CONSTRUCTOR_PARAMS = ['cloudinaryConfig', 'transformation', 'sourceTypes', 'sourceTransformation', 'posterOptions', 'autoShowRecommendations'];\nclass CloudinaryContext {\n constructor(player) {\n var _this = this;\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_common__WEBPACK_IMPORTED_MODULE_4__.setupCloudinaryMiddleware)();\n this.player = player;\n options = Object.assign({}, DEFAULT_PARAMS, options);\n let _source = null;\n let _sources = null;\n let _lastSource = null;\n let _lastPlaylist = null;\n let _posterOptions = null;\n let _cloudinaryConfig = null;\n let _transformation = null;\n let _sourceTypes = null;\n let _sourceTransformation = null;\n let _chainTarget = options.chainTarget;\n let _playerEvents = null;\n let _recommendations = null;\n let _autoShowRecommendations = false;\n this.source = function (source) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options = Object.assign({}, options);\n if (!source) {\n return _source;\n }\n let src = null;\n if (source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) {\n src = source;\n } else {\n let {\n publicId,\n options: _options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_4__.normalizeOptions)(source, options);\n src = _this.buildSource(publicId, _options);\n }\n const recommendations = src.recommendations();\n if (recommendations && recommendations.length) {\n let itemBuilder = null;\n let disableAutoShow = false;\n if (options.recommendationOptions) {\n ({\n disableAutoShow,\n itemBuilder\n } = (0,utils_slicing__WEBPACK_IMPORTED_MODULE_2__.sliceAndUnsetProperties)(options.recommendationOptions, 'disableAutoShow', 'itemBuilder'));\n }\n (0,components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(player).then(() => {\n setRecommendations(recommendations, {\n disableAutoShow,\n itemBuilder\n });\n });\n } else {\n unsetRecommendations();\n }\n _source = src;\n _transformation = src.transformation();\n const isDash = options.sourceTypes && options.sourceTypes.some(s => s.includes('dash')) || typeof source === 'string' && source.endsWith('.mpd');\n const isHls = options.sourceTypes && options.sourceTypes.some(s => s.includes('hls')) || typeof source === 'string' && source.endsWith('.m3u8');\n const isAdaptiveStreamingRequired = isDash || isHls;\n if (isAdaptiveStreamingRequired && !_this.player.adaptiveStreamingLoaded) {\n __webpack_require__.e(/*! import() | adaptive-streaming */ \"adaptive-streaming\").then(__webpack_require__.bind(__webpack_require__, /*! ../adaptive-streaming */ \"./plugins/adaptive-streaming/index.js\")).then(() => {\n _this.player.adaptiveStreaming({\n ...options.adaptiveStreaming,\n isDash,\n debug: options.debug,\n withCredentials: options.withCredentials\n }).then(() => {\n refresh();\n });\n }).catch(err => {\n console.error('Failed to load adaptive streaming plugin:', err);\n refresh();\n });\n } else if (!options.skipRefresh) {\n refresh();\n }\n _this.player.trigger('cldsourcechanged', {\n source: src,\n sourceOptions: options\n });\n return _chainTarget;\n };\n this.buildSource = function (publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let builtSrc = null;\n ({\n publicId,\n options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_4__.normalizeOptions)(publicId, options));\n options.cloudinaryConfig = (0,_common__WEBPACK_IMPORTED_MODULE_4__.extendCloudinaryConfig)(_this.cloudinaryConfig(), options.cloudinaryConfig || {});\n options.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_4__.mergeTransformations)(_this.transformation(), options.transformation || {});\n options.sourceTransformation = options.sourceTransformation || _this.sourceTransformation();\n options.sourceTypes = options.sourceTypes || _this.sourceTypes();\n options.poster = options.poster || posterOptionsForCurrent();\n options.queryParams = Object.assign(options.queryParams || {}, options.allowUsageReport ? {\n _s: `vp-${\"3.2.2-edge.2\"}`\n } : {});\n if (options.sourceTypes.indexOf('audio') > -1) {\n builtSrc = new _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"](publicId, options);\n } else {\n builtSrc = new _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__[\"default\"](publicId, options);\n }\n return builtSrc;\n };\n this.posterOptions = options => {\n if (!options) {\n return _posterOptions;\n }\n _posterOptions = options;\n return _chainTarget;\n };\n this.disablePoster = posterColor => {\n // https://docs.videojs.com/player.js.html#line3816\n this.player.poster(' ');\n this.player.posterImage.el().style.backgroundColor = posterColor;\n };\n this.cloudinaryConfig = config => {\n if (!config) {\n return _cloudinaryConfig;\n }\n _cloudinaryConfig = config;\n return _chainTarget;\n };\n this.transformation = trans => {\n if (!trans) {\n return _transformation;\n }\n _transformation = trans;\n return _chainTarget;\n };\n this.sourceTypes = types => {\n if (!types) {\n return _sourceTypes;\n }\n _sourceTypes = types;\n return _chainTarget;\n };\n this.getCurrentSources = () => _sources;\n this.sourceTransformation = trans => {\n if (!trans) {\n return _sourceTransformation;\n }\n _sourceTransformation = trans;\n return _chainTarget;\n };\n this.on = function () {\n return _playerEvents.on(...arguments);\n };\n this.one = function () {\n return _playerEvents.one(...arguments);\n };\n this.off = function () {\n return _playerEvents.off(...arguments);\n };\n this.autoShowRecommendations = autoShow => {\n if (autoShow === undefined) {\n return _autoShowRecommendations;\n }\n _autoShowRecommendations = autoShow;\n return _chainTarget;\n };\n this.dispose = () => {\n if (this.playlist && this.playlist()) {\n this.disposePlaylist();\n }\n unsetRecommendations();\n _source = undefined;\n _playerEvents.removeAllListeners();\n };\n const setRecommendations = (recommendations, _ref) => {\n let {\n disableAutoShow = false,\n itemBuilder = null\n } = _ref;\n unsetRecommendations();\n if (!Array.isArray(recommendations) && typeof recommendations !== 'function' && !recommendations.then) {\n throw new Error('\"recommendations\" must be either an array or a function');\n }\n _recommendations = {};\n itemBuilder = itemBuilder || (source => ({\n source: source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_5__[\"default\"] ? source : this.buildSource(source),\n action: () => this.source(source)\n }));\n _recommendations.sourceChangedHandler = () => {\n const trigger = sources => {\n if (typeof sources !== 'undefined' && sources.length > 0) {\n const items = sources.map(_source => itemBuilder(_source));\n this.player.trigger('recommendationschanged', {\n items\n });\n } else {\n this.player.trigger('recommendationsnoshow');\n }\n _recommendations.sources = sources;\n };\n if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default()(recommendations)) {\n trigger(recommendations());\n } else if (recommendations.then) {\n recommendations.then(trigger);\n } else {\n trigger(recommendations);\n }\n };\n _recommendations.sourceChangedHandler();\n _recommendations.endedHandler = () => {\n if (!disableAutoShow && this.autoShowRecommendations()) {\n this.player.trigger('recommendationsshow');\n }\n };\n this.on('ended', _recommendations.endedHandler);\n };\n const unsetRecommendations = () => {\n if (_recommendations) {\n this.off('cldsourcechanged', _recommendations.sourceChangedHandler);\n this.off('ended', _recommendations.endedHandler);\n delete _recommendations.endedHandler;\n delete _recommendations.sourceChangedHandler;\n }\n _recommendations = null;\n };\n const refresh = () => {\n const src = this.source();\n if (!src) {\n return;\n }\n const posterOptions = Object.assign({}, this.player.cloudinary.posterOptions(), src.getInitOptions().poster);\n if (posterOptions.posterColor) {\n this.disablePoster(posterOptions.posterColor);\n } else if (src.poster()) {\n this.player.poster(src.poster().url());\n }\n _sources = src.generateSources().reduce((srcs, src) => {\n if (src.isAdaptive) {\n let codec = src.type.split('; ')[1] || null;\n if (codec && 'MediaSource' in window) {\n const parts = src.type.split('; ');\n let typeStr = `video/mp4; ${parts[1] || ''}`;\n const canPlay = testCanPlayTypeAndTypeSupported(typeStr);\n if (canPlay) {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n return srcs;\n }, []);\n this.player.src(_sources);\n _lastSource = src;\n if (this.playlist) {\n _lastPlaylist = this.playlist();\n }\n };\n const testCanPlayTypeAndTypeSupported = codec => {\n const v = document.createElement('video');\n return v.canPlayType(codec) || 'MediaSource' in window && MediaSource.isTypeSupported(codec);\n };\n const posterOptionsForCurrent = () => {\n const opts = Object.assign({}, this.posterOptions());\n opts.transformation = opts.transformation || {};\n if ((opts.transformation.width || opts.transformation.height) && !opts.transformation.crop) {\n opts.transformation.crop = 'scale';\n }\n\n // Set poster dimensions to player actual size.\n // (unless they were explicitly set via `posterOptions`)\n const playerEl = this.player.el();\n if (playerEl && playerEl.clientWidth && playerEl.clientHeight && !(0,utils_cloudinary__WEBPACK_IMPORTED_MODULE_3__.isKeyInTransformation)(opts.transformation, 'width') && !(0,utils_cloudinary__WEBPACK_IMPORTED_MODULE_3__.isKeyInTransformation)(opts.transformation, 'height')) {\n const roundUp100 = val => 100 * Math.ceil(val / 100);\n opts.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_4__.mergeTransformations)(opts.transformation, {\n width: roundUp100(playerEl.clientWidth),\n height: roundUp100(playerEl.clientHeight),\n crop: 'limit'\n });\n }\n return opts;\n };\n\n // Handle external (non-cloudinary plugin) source changes (e.g. by ad plugins)\n const syncState = (_, data) => {\n let src = data.to;\n\n // When source is cloudinary's\n if (_lastSource && _lastSource.contains(src)) {\n // If plugin state doesn't have an active VideoSource\n if (!this.source()) {\n // We might have been running a playlist, reset playlist's state.\n if (this.playlist && _lastPlaylist) {\n this.playlist(_lastPlaylist);\n }\n // Rebuild last source state without calling vjs's 'src' and 'poster'\n this.source(_lastSource, {\n skipRefresh: true\n });\n }\n } else {\n // Used by cloudinary-only components\n this.player.trigger('cldsourcechanged', {});\n\n // When source isn't cloudinary's - reset the plugin's state.\n this.dispose();\n }\n };\n _playerEvents = new _event_handler_registry__WEBPACK_IMPORTED_MODULE_6__[\"default\"](this.player);\n const constructorParams = (0,utils_slicing__WEBPACK_IMPORTED_MODULE_2__.sliceAndUnsetProperties)(options, ...CONSTRUCTOR_PARAMS);\n (0,utils_apply_with_props__WEBPACK_IMPORTED_MODULE_1__.applyWithProps)(this, constructorParams);\n this.on('sourcechanged', syncState);\n }\n currentSourceType() {\n return this.source().getType();\n }\n currentPublicId() {\n return this.source() && this.source().publicId();\n }\n currentPoster() {\n return this.source() && this.source().poster();\n }\n}\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n options.chainTarget = options.chainTarget || this;\n this.cloudinary = new CloudinaryContext(this, options);\n}\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/cloudinary/index.js?");
|
|
265
265
|
|
|
266
266
|
/***/ }),
|
|
267
267
|
|
|
@@ -382,7 +382,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
382
382
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
383
383
|
|
|
384
384
|
"use strict";
|
|
385
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst contextMenuContent = player => {\n const isLooping = player.loop();\n const isPaused = player.paused();\n const isMuted = player.muted();\n const isFullscreen = player.isFullscreen();\n const aboutMenuItem = {\n class: 'player-version',\n label: 'Cloudinary Player v' + \"3.2.2-edge.
|
|
385
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst contextMenuContent = player => {\n const isLooping = player.loop();\n const isPaused = player.paused();\n const isMuted = player.muted();\n const isFullscreen = player.isFullscreen();\n const aboutMenuItem = {\n class: 'player-version',\n label: 'Cloudinary Player v' + \"3.2.2-edge.2\"\n };\n if (!player.controls()) {\n return [aboutMenuItem];\n }\n return [{\n label: isLooping ? 'Unloop' : 'Loop',\n listener: () => {\n player.loop(!isLooping);\n }\n }, {\n label: isPaused ? 'Play' : 'Pause',\n listener: () => {\n if (isPaused) {\n player.play();\n } else {\n player.pause();\n }\n }\n }, {\n label: isMuted ? 'Unmute' : 'Mute',\n listener: () => {\n player.muted(!isMuted);\n }\n }, {\n label: isFullscreen ? 'Exit Fullscreen' : 'Fullscreen',\n listener: () => {\n if (isFullscreen) {\n player.exitFullscreen();\n } else {\n player.requestFullscreen();\n }\n }\n }, aboutMenuItem];\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (contextMenuContent);\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/context-menu/contextMenuContent.js?");
|
|
386
386
|
|
|
387
387
|
/***/ }),
|
|
388
388
|
|
|
@@ -437,7 +437,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
437
437
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
438
438
|
|
|
439
439
|
"use strict";
|
|
440
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var videojs_per_source_behaviors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! videojs-per-source-behaviors */ \"../node_modules/videojs-per-source-behaviors/dist/videojs-per-source-behaviors.es.js\");\n/* harmony import */ var _ai_highlights_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ai-highlights-graph */ \"./plugins/ai-highlights-graph/index.js\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./analytics */ \"./plugins/analytics/index.js\");\n/* harmony import */ var _autoplay_on_scroll__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./autoplay-on-scroll */ \"./plugins/autoplay-on-scroll/index.js\");\n/* harmony import */ var _cloudinary__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cloudinary */ \"./plugins/cloudinary/index.js\");\n/* harmony import */ var _cloudinary_analytics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cloudinary-analytics */ \"./plugins/cloudinary-analytics/index.js\");\n/* harmony import */ var _context_menu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./context-menu */ \"./plugins/context-menu/index.js\");\n/* harmony import */ var _floating_player__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./floating-player */ \"./plugins/floating-player/index.js\");\n/* harmony import */ var
|
|
440
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var videojs_per_source_behaviors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! videojs-per-source-behaviors */ \"../node_modules/videojs-per-source-behaviors/dist/videojs-per-source-behaviors.es.js\");\n/* harmony import */ var _ai_highlights_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ai-highlights-graph */ \"./plugins/ai-highlights-graph/index.js\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./analytics */ \"./plugins/analytics/index.js\");\n/* harmony import */ var _autoplay_on_scroll__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./autoplay-on-scroll */ \"./plugins/autoplay-on-scroll/index.js\");\n/* harmony import */ var _cloudinary__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cloudinary */ \"./plugins/cloudinary/index.js\");\n/* harmony import */ var _cloudinary_analytics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cloudinary-analytics */ \"./plugins/cloudinary-analytics/index.js\");\n/* harmony import */ var _context_menu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./context-menu */ \"./plugins/context-menu/index.js\");\n/* harmony import */ var _floating_player__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./floating-player */ \"./plugins/floating-player/index.js\");\n/* harmony import */ var _styled_text_tracks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styled-text-tracks */ \"./plugins/styled-text-tracks/index.js\");\n/* harmony import */ var _vtt_thumbnails__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./vtt-thumbnails */ \"./plugins/vtt-thumbnails/index.js\");\n/* harmony import */ var _chapters__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chapters */ \"./plugins/chapters/index.js\");\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./colors */ \"./plugins/colors/index.js\");\n/* harmony import */ var _ima__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ima */ \"./plugins/ima/index.js\");\n/* harmony import */ var _interaction_areas__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./interaction-areas */ \"./plugins/interaction-areas/index.js\");\n/* harmony import */ var _playlist__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./playlist */ \"./plugins/playlist/index.js\");\n/* harmony import */ var _shoppable_plugin__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./shoppable-plugin */ \"./plugins/shoppable-plugin/index.js\");\n/* harmony import */ var _visual_search__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./visual-search */ \"./plugins/visual-search/index.js\");\n/* harmony import */ var _share__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./share */ \"./plugins/share/index.js\");\n/* harmony import */ var _adaptive_streaming__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./adaptive-streaming */ \"./plugins/adaptive-streaming/index.js\");\n/* harmony import */ var _text_tracks_manager__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./text-tracks-manager */ \"./plugins/text-tracks-manager/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n// Lazy loaded plugins\n\n\n\n\n\n\n\n\n\n\nconst plugins = {\n aiHighlightsGraph: _ai_highlights_graph__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n analytics: _analytics__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n autoplayOnScroll: _autoplay_on_scroll__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n cloudinary: _cloudinary__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n cloudinaryAnalytics: _cloudinary_analytics__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n contextMenu: _context_menu__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n floatingPlayer: _floating_player__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n styledTextTracks: _styled_text_tracks__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n vttThumbnails: _vtt_thumbnails__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n // Lazy loaded plugins\n chapters: _chapters__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n colors: _colors__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n imaPlugin: _ima__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n playlist: _playlist__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n shoppable: _shoppable_plugin__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n interactionAreas: _interaction_areas__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n visualSearch: _visual_search__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n share: _share__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n adaptiveStreaming: _adaptive_streaming__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n textTracksManager: _text_tracks_manager__WEBPACK_IMPORTED_MODULE_19__[\"default\"]\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (plugins);\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/index.js?");
|
|
441
441
|
|
|
442
442
|
/***/ }),
|
|
443
443
|
|
|
@@ -452,17 +452,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
452
452
|
|
|
453
453
|
/***/ }),
|
|
454
454
|
|
|
455
|
-
/***/ "./plugins/paced-transcript/index.js":
|
|
456
|
-
/*!*******************************************!*\
|
|
457
|
-
!*** ./plugins/paced-transcript/index.js ***!
|
|
458
|
-
\*******************************************/
|
|
459
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
460
|
-
|
|
461
|
-
"use strict";
|
|
462
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _cloudinary_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _utils_utf8Base64__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/utf8Base64 */ \"./utils/utf8Base64.js\");\n\n\nconst fallbackFetch = async (url, fallback) => {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed fetching from ${url} with status code ${response.status}`);\n }\n return response;\n } catch (error) {\n console.error(error);\n if (fallback) {\n return fallbackFetch(fallback);\n }\n }\n};\nfunction pacedTranscript(config) {\n const player = this;\n const options = {\n kind: config.kind || 'captions',\n label: config.label || 'Captions',\n default: config.default,\n srclang: config.srclang,\n src: config.src,\n maxWords: config.maxWords,\n wordHighlight: config.wordHighlight,\n timeOffset: config.timeOffset || 0\n };\n const classNames = player.textTrackDisplay.el().classList;\n classNames.add('cld-paced-text-tracks');\n const getTranscriptionFileUrl = function (urlPrefix, deliveryType, publicId) {\n let languageCode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n return `${urlPrefix}/_applet_/video_service/transcription/${deliveryType}/${languageCode ? `${languageCode}/` : ''}${(0,_utils_utf8Base64__WEBPACK_IMPORTED_MODULE_1__.utf8ToBase64)(publicId)}.transcript`;\n };\n\n // Load the transcription file\n const initTranscript = async () => {\n let transcriptResponse;\n if (options.src) {\n // Fetch from src, if explicitly provided\n transcriptResponse = await fallbackFetch(options.src);\n } else {\n // If not, and provided language, try fetching translated transcript, fallback to base transcript\n const source = player.cloudinary.source();\n const sourcePublicId = source.publicId();\n const sourceDeliveryType = source.resourceConfig().type;\n const urlPrefix = (0,_cloudinary_common__WEBPACK_IMPORTED_MODULE_0__.getCloudinaryUrlPrefix)(player.cloudinary.cloudinaryConfig());\n const transcriptionFileUrl = getTranscriptionFileUrl(urlPrefix, sourceDeliveryType, sourcePublicId);\n if (options.srclang) {\n const transcriptionTranslationFileUrl = getTranscriptionFileUrl(urlPrefix, sourceDeliveryType, sourcePublicId, options.srclang);\n transcriptResponse = await fallbackFetch(transcriptionTranslationFileUrl, transcriptionFileUrl);\n } else {\n transcriptResponse = await fallbackFetch(transcriptionFileUrl);\n }\n }\n if (!transcriptResponse?.ok) return;\n const transcriptData = await transcriptResponse.json();\n const captions = parseTranscript(transcriptData);\n const captionsTrack = player.addRemoteTextTrack({\n kind: options.kind,\n label: options.label,\n srclang: options.srclang,\n default: options.default,\n mode: options.default ? 'showing' : 'disabled'\n });\n captions.forEach(caption => {\n captionsTrack.track.addCue(new VTTCue(caption.startTime, caption.endTime, caption.text));\n });\n };\n\n // Generate captions from the transcription data\n const parseTranscript = transcriptionData => {\n const captions = [];\n const addCaption = _ref => {\n let {\n startTime,\n endTime,\n text\n } = _ref;\n captions.push({\n startTime: startTime + options.timeOffset,\n endTime: endTime + options.timeOffset,\n text\n });\n };\n transcriptionData.forEach(segment => {\n const words = segment.words;\n if (words) {\n const maxWords = options.maxWords || words.length;\n for (let i = 0; i < words.length; i += maxWords) {\n if (options.wordHighlight) {\n // Create a caption for every word, in which the current word is highlighted\n words.slice(i, Math.min(i + maxWords, words.length)).forEach((word, idx) => {\n addCaption({\n startTime: word.start_time,\n endTime: word.end_time,\n text: words.slice(i, i + maxWords).map(w => w === word ? `<b>${w.word}</b>` : w.word).join(' ')\n });\n\n // if we haven't reached the end of the words array, and there's a gap between the current word end_time and the next word start_time, add a non-highlighted caption to fill the gap\n if (words[idx + 1] && word.end_time < words[idx + 1].start_time) {\n addCaption({\n startTime: word.end_time,\n endTime: words[idx + 1].start_time,\n text: words.slice(i, i + maxWords).map(word => word.word).join(' ')\n });\n }\n });\n } else {\n captions.push({\n startTime: words[i].start_time,\n endTime: words[Math.min(i + maxWords - 1, words.length - 1)].end_time,\n text: words.slice(i, i + maxWords).map(word => word.word).join(' ')\n });\n }\n }\n } else {\n addCaption({\n startTime: segment.start_time,\n endTime: segment.end_time,\n text: segment.transcript\n });\n }\n });\n return captions;\n };\n player.one('loadedmetadata', () => {\n initTranscript();\n });\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (pacedTranscript);\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/paced-transcript/index.js?");
|
|
463
|
-
|
|
464
|
-
/***/ }),
|
|
465
|
-
|
|
466
455
|
/***/ "./plugins/playlist/index.js":
|
|
467
456
|
/*!***********************************!*\
|
|
468
457
|
!*** ./plugins/playlist/index.js ***!
|
|
@@ -496,17 +485,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
496
485
|
|
|
497
486
|
/***/ }),
|
|
498
487
|
|
|
499
|
-
/***/ "./plugins/srt-text-tracks/index.js":
|
|
500
|
-
/*!******************************************!*\
|
|
501
|
-
!*** ./plugins/srt-text-tracks/index.js ***!
|
|
502
|
-
\******************************************/
|
|
503
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
504
|
-
|
|
505
|
-
"use strict";
|
|
506
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lazySrtTextTracksPlugin)\n/* harmony export */ });\nasync function lazySrtTextTracksPlugin(config) {\n const player = this;\n try {\n const {\n default: srtTextTracks\n } = await __webpack_require__.e(/*! import() | srt-text-tracks */ \"srt-text-tracks\").then(__webpack_require__.bind(__webpack_require__, /*! ./srt-text-tracks */ \"./plugins/srt-text-tracks/srt-text-tracks.js\"));\n player.ready(() => srtTextTracks(config, player));\n } catch (error) {\n console.error('Failed to load srt-text-tracks plugin:', error);\n }\n}\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/srt-text-tracks/index.js?");
|
|
507
|
-
|
|
508
|
-
/***/ }),
|
|
509
|
-
|
|
510
488
|
/***/ "./plugins/styled-text-tracks/index.js":
|
|
511
489
|
/*!*********************************************!*\
|
|
512
490
|
!*** ./plugins/styled-text-tracks/index.js ***!
|
|
@@ -529,6 +507,61 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
529
507
|
|
|
530
508
|
/***/ }),
|
|
531
509
|
|
|
510
|
+
/***/ "./plugins/text-tracks-manager/index.js":
|
|
511
|
+
/*!**********************************************!*\
|
|
512
|
+
!*** ./plugins/text-tracks-manager/index.js ***!
|
|
513
|
+
\**********************************************/
|
|
514
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
515
|
+
|
|
516
|
+
"use strict";
|
|
517
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_utf8Base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/utf8Base64 */ \"./utils/utf8Base64.js\");\n/* harmony import */ var _cloudinary_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _parsers_transcriptParser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parsers/transcriptParser */ \"./plugins/text-tracks-manager/parsers/transcriptParser.js\");\n/* harmony import */ var _parsers_srtParser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parsers/srtParser */ \"./plugins/text-tracks-manager/parsers/srtParser.js\");\n/* harmony import */ var _parsers_vttParser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parsers/vttParser */ \"./plugins/text-tracks-manager/parsers/vttParser.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils */ \"./plugins/text-tracks-manager/utils.js\");\n\n\n\n\n\n\nconst getTranscriptionFileUrl = function (urlPrefix, deliveryType, publicId) {\n let languageCode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n return `${urlPrefix}/_applet_/video_service/transcription/${deliveryType}/${languageCode ? `${languageCode}/` : ''}${(0,_utils_utf8Base64__WEBPACK_IMPORTED_MODULE_0__.utf8ToBase64)(publicId)}.transcript`;\n};\nfunction textTracksManager() {\n const player = this;\n const textTracksData = new WeakMap();\n let activeTrack = null;\n const removeAllTextTracks = () => {\n const currentTracks = player.remoteTextTracks();\n if (currentTracks) {\n for (let i = currentTracks.tracks_.length - 1; i >= 0; i--) {\n player.removeRemoteTextTrack(currentTracks.tracks_[i]);\n }\n }\n };\n const createTextTrackData = (textTrack, loadMethod) => {\n const controller = new AbortController();\n textTracksData.set(textTrack, {\n status: 'idle',\n load: async () => {\n const {\n status\n } = textTracksData.get(textTrack);\n if (status === 'idle') {\n await loadMethod(controller.signal);\n (0,_utils__WEBPACK_IMPORTED_MODULE_5__.refreshTextTrack)(textTrack);\n }\n },\n abortLoading: () => {\n const {\n status\n } = textTracksData.get(textTrack);\n if (status === 'pending') {\n controller.abort();\n }\n }\n });\n };\n const updateTextTrackData = (textTrack, dataToUpdate) => {\n const existingData = textTracksData.get(textTrack);\n textTracksData.set(textTrack, {\n ...existingData,\n ...dataToUpdate\n });\n };\n const updateTextTrackStatusToPending = textTrack => updateTextTrackData(textTrack, {\n status: 'pending'\n });\n const updateTextTrackStatusToSuccess = textTrack => updateTextTrackData(textTrack, {\n status: 'success'\n });\n const updateTextTrackStatusToError = (textTrack, error) => updateTextTrackData(textTrack, {\n status: 'error',\n error\n });\n const updateTextTrackStatusToApplied = textTrack => updateTextTrackData(textTrack, {\n status: 'applied'\n });\n const addTextTrack = (type, config) => {\n const {\n kind = type === 'transcript' ? 'captions' : 'subtitles',\n label = type === 'transcript' ? 'Captions' : 'Subtitles',\n default: isDefault,\n srclang,\n src\n } = config;\n if (type === 'transcript') {\n player.textTrackDisplay.el().classList.add('cld-paced-text-tracks');\n }\n const {\n track\n } = player.addRemoteTextTrack({\n kind,\n label,\n srclang,\n default: isDefault,\n mode: isDefault ? 'showing' : 'disabled'\n });\n const createParser = () => {\n if (type === 'srt') return _parsers_srtParser__WEBPACK_IMPORTED_MODULE_3__.srtParser;\n if (type === 'vtt') return _parsers_vttParser__WEBPACK_IMPORTED_MODULE_4__.vttParser;\n return text => (0,_parsers_transcriptParser__WEBPACK_IMPORTED_MODULE_2__.transcriptParser)(text, {\n maxWords: config.maxWords,\n wordHighlight: config.wordHighlight,\n timeOffset: config.timeOffset ?? 0\n });\n };\n const createUrlFallbacks = () => {\n if (src) return [src, undefined];\n if (type !== 'transcript') return [];\n const source = player.cloudinary.source();\n const publicId = source.publicId();\n const deliveryType = source.resourceConfig().type;\n const urlPrefix = (0,_cloudinary_common__WEBPACK_IMPORTED_MODULE_1__.getCloudinaryUrlPrefix)(player.cloudinary.cloudinaryConfig());\n const baseUrl = getTranscriptionFileUrl(urlPrefix, deliveryType, publicId);\n const localizedUrl = srclang ? getTranscriptionFileUrl(urlPrefix, deliveryType, publicId, srclang) : null;\n return localizedUrl ? [localizedUrl, baseUrl] : [baseUrl, undefined];\n };\n createTextTrackData(track, async signal => {\n updateTextTrackStatusToPending(track);\n const urls = createUrlFallbacks();\n const response = await (0,_utils__WEBPACK_IMPORTED_MODULE_5__.fetchFileContent)(...urls, {\n signal,\n polling: type === 'transcript' && !src,\n interval: 2000,\n maxAttempts: 10,\n responseStatusAsPending: 202,\n onSuccess: () => updateTextTrackStatusToSuccess(track),\n onError: error => {\n updateTextTrackStatusToError(track, error);\n (0,_utils__WEBPACK_IMPORTED_MODULE_5__.addNotificationCue)(player.duration(), track, 'Text track could not be loaded');\n },\n onAttempt: type === 'transcript' ? count => {\n if (count === 2) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_5__.addNotificationCue)(player.duration(), track, 'Loading text track...');\n }\n } : undefined\n });\n if (response) {\n const parser = createParser();\n const data = await parser(response);\n (0,_utils__WEBPACK_IMPORTED_MODULE_5__.removeAllTextTrackCues)(track);\n (0,_utils__WEBPACK_IMPORTED_MODULE_5__.addTextTrackCues)(track, data);\n updateTextTrackStatusToApplied(track);\n }\n });\n };\n const addTextTracks = textTracks => {\n textTracks.forEach(textTrackConfig => {\n if (textTrackConfig.src && textTrackConfig.src.endsWith('.vtt')) {\n addTextTrack('vtt', textTrackConfig);\n } else if (textTrackConfig.src && textTrackConfig.src.endsWith('.srt')) {\n addTextTrack('srt', textTrackConfig);\n } else if (!textTrackConfig.src || textTrackConfig.src.endsWith('.transcript')) {\n addTextTrack('transcript', textTrackConfig);\n }\n });\n const defaultTextTrack = Array.from(player.remoteTextTracks()).find(textTrack => textTrack.default);\n if (defaultTextTrack) {\n onChangeActiveTrack(defaultTextTrack);\n }\n };\n const onChangeActiveTrack = textTrack => {\n const prevActiveTrack = activeTrack;\n activeTrack = textTrack;\n const prevTextTrackData = textTracksData.get(prevActiveTrack);\n if (prevTextTrackData) {\n prevTextTrackData.abortLoading();\n }\n const selectedTextTrackData = textTracksData.get(activeTrack);\n if (selectedTextTrackData) {\n selectedTextTrackData.load();\n }\n };\n player.on('texttrackchange', () => {\n const textTracks = player.textTracks();\n let newActiveTrack = null;\n for (let i = 0; i < textTracks.length; i++) {\n const track = textTracks[i];\n if (track.mode === 'showing') {\n newActiveTrack = track;\n break;\n }\n }\n if (activeTrack !== newActiveTrack) {\n onChangeActiveTrack(newActiveTrack);\n }\n });\n return {\n removeAllTextTracks,\n addTextTracks: function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n player.one('loadedmetadata', () => {\n addTextTracks(...args);\n });\n }\n };\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (textTracksManager);\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/text-tracks-manager/index.js?");
|
|
518
|
+
|
|
519
|
+
/***/ }),
|
|
520
|
+
|
|
521
|
+
/***/ "./plugins/text-tracks-manager/parsers/srtParser.js":
|
|
522
|
+
/*!**********************************************************!*\
|
|
523
|
+
!*** ./plugins/text-tracks-manager/parsers/srtParser.js ***!
|
|
524
|
+
\**********************************************************/
|
|
525
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
526
|
+
|
|
527
|
+
"use strict";
|
|
528
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ srtParser: () => (/* binding */ srtParser)\n/* harmony export */ });\n/* harmony import */ var srt_parser_2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! srt-parser-2 */ \"../node_modules/srt-parser-2/dist/index.js\");\n\nconst srtParser = async fileContent => {\n const SRTParser = new srt_parser_2__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n const cues = SRTParser.fromSrt(fileContent);\n return cues.filter(v => v).map(cue => ({\n startTime: cue.startSeconds,\n endTime: cue.endSeconds,\n text: cue.text\n }));\n};\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/text-tracks-manager/parsers/srtParser.js?");
|
|
529
|
+
|
|
530
|
+
/***/ }),
|
|
531
|
+
|
|
532
|
+
/***/ "./plugins/text-tracks-manager/parsers/transcriptParser.js":
|
|
533
|
+
/*!*****************************************************************!*\
|
|
534
|
+
!*** ./plugins/text-tracks-manager/parsers/transcriptParser.js ***!
|
|
535
|
+
\*****************************************************************/
|
|
536
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
537
|
+
|
|
538
|
+
"use strict";
|
|
539
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ transcriptParser: () => (/* binding */ transcriptParser)\n/* harmony export */ });\nconst parseTranscript = (transcriptionData, options) => {\n const captions = [];\n const addCaption = _ref => {\n let {\n startTime,\n endTime,\n text\n } = _ref;\n captions.push({\n startTime: startTime + options.timeOffset,\n endTime: endTime + options.timeOffset,\n text\n });\n };\n transcriptionData.forEach(segment => {\n const words = segment.words;\n if (words) {\n const maxWords = options.maxWords || words.length;\n for (let i = 0; i < words.length; i += maxWords) {\n if (options.wordHighlight) {\n // Create a caption for every word, in which the current word is highlighted\n words.slice(i, Math.min(i + maxWords, words.length)).forEach((word, idx) => {\n addCaption({\n startTime: word.start_time,\n endTime: word.end_time,\n text: words.slice(i, i + maxWords).map(w => w === word ? `<b>${w.word}</b>` : w.word).join(' ')\n });\n\n // if we haven't reached the end of the words array, and there's a gap between the current word end_time and the next word start_time, add a non-highlighted caption to fill the gap\n if (words[idx + 1] && word.end_time < words[idx + 1].start_time) {\n addCaption({\n startTime: word.end_time,\n endTime: words[idx + 1].start_time,\n text: words.slice(i, i + maxWords).map(word => word.word).join(' ')\n });\n }\n });\n } else {\n captions.push({\n startTime: words[i].start_time,\n endTime: words[Math.min(i + maxWords - 1, words.length - 1)].end_time,\n text: words.slice(i, i + maxWords).map(word => word.word).join(' ')\n });\n }\n }\n } else {\n addCaption({\n startTime: segment.start_time,\n endTime: segment.end_time,\n text: segment.transcript\n });\n }\n });\n return captions;\n};\nconst transcriptParser = async (fileContent, options) => {\n const data = JSON.parse(fileContent);\n return parseTranscript(data, options);\n};\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/text-tracks-manager/parsers/transcriptParser.js?");
|
|
540
|
+
|
|
541
|
+
/***/ }),
|
|
542
|
+
|
|
543
|
+
/***/ "./plugins/text-tracks-manager/parsers/vttParser.js":
|
|
544
|
+
/*!**********************************************************!*\
|
|
545
|
+
!*** ./plugins/text-tracks-manager/parsers/vttParser.js ***!
|
|
546
|
+
\**********************************************************/
|
|
547
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
548
|
+
|
|
549
|
+
"use strict";
|
|
550
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ vttParser: () => (/* binding */ vttParser)\n/* harmony export */ });\nconst vttParser = async fileContent => {\n const lines = fileContent.trim().split(/\\r?\\n/);\n const cues = [];\n let buffer = [];\n const parseTime = timeStr => {\n const [hms, ms] = timeStr.split('.');\n const [h, m, s] = hms.split(':').map(Number);\n return h * 3600 + m * 60 + s + (parseFloat(`0.${ms}`) || 0);\n };\n const parseCueBlock = blockLines => {\n const cueLines = blockLines.filter(Boolean);\n if (cueLines.length < 2) return null;\n const timeLineIdx = cueLines[0].includes('-->') ? 0 : 1;\n const timeLine = cueLines[timeLineIdx];\n const [startPart, endPartWithSettings] = timeLine.split('-->');\n const start = startPart.trim();\n const [end, ...cueSettingsParts] = endPartWithSettings.trim().split(/\\s+/);\n const cueSettings = cueSettingsParts.join(' '); // like: line:90% position:50% align:start\n\n const text = cueLines.slice(timeLineIdx + 1).join('\\n').trim();\n return {\n startTime: parseTime(start),\n endTime: parseTime(end),\n text,\n settings: cueSettings || null\n };\n };\n let inSkipBlock = false;\n for (const line of lines) {\n if (/^(NOTE|STYLE|REGION)/.test(line.trim())) {\n inSkipBlock = true;\n continue;\n }\n if (inSkipBlock && line.trim() === '') {\n inSkipBlock = false;\n continue;\n }\n if (inSkipBlock) continue;\n if (line.trim() === '') {\n const cue = parseCueBlock(buffer);\n if (cue) cues.push(cue);\n buffer = [];\n } else {\n buffer.push(line);\n }\n }\n if (buffer.length > 0) {\n const cue = parseCueBlock(buffer);\n if (cue) cues.push(cue);\n }\n return cues;\n};\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/text-tracks-manager/parsers/vttParser.js?");
|
|
551
|
+
|
|
552
|
+
/***/ }),
|
|
553
|
+
|
|
554
|
+
/***/ "./plugins/text-tracks-manager/utils.js":
|
|
555
|
+
/*!**********************************************!*\
|
|
556
|
+
!*** ./plugins/text-tracks-manager/utils.js ***!
|
|
557
|
+
\**********************************************/
|
|
558
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
559
|
+
|
|
560
|
+
"use strict";
|
|
561
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addNotificationCue: () => (/* binding */ addNotificationCue),\n/* harmony export */ addTextTrackCues: () => (/* binding */ addTextTrackCues),\n/* harmony export */ fetchFileContent: () => (/* binding */ fetchFileContent),\n/* harmony export */ refreshTextTrack: () => (/* binding */ refreshTextTrack),\n/* harmony export */ removeAllTextTrackCues: () => (/* binding */ removeAllTextTrackCues)\n/* harmony export */ });\nconst fetchFileContent = async function (url, fallbackUrl) {\n let config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const {\n polling = false,\n interval = 3000,\n maxAttempts = 10,\n signal,\n onSuccess,\n onError,\n onAttempt\n } = config;\n let attempts = 0;\n const attemptFetch = async currentUrl => {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n attempts++;\n onAttempt?.(attempts);\n const response = await fetch(currentUrl, {\n signal\n });\n if (response.status === 202 && polling) {\n if (attempts < maxAttempts) {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n attemptFetch(url).then(resolve).catch(reject);\n }, interval);\n signal?.addEventListener('abort', () => {\n clearTimeout(timeoutId);\n reject(new DOMException('Aborted', 'AbortError'));\n }, {\n once: true\n });\n });\n } else {\n throw new Error(`Polling max attempts reached (${maxAttempts}) for ${url}`);\n }\n }\n if (!response.ok) {\n if (fallbackUrl) {\n return attemptFetch(fallbackUrl);\n }\n throw new Error(`Failed fetching from ${currentUrl} with status code ${response.status}`);\n }\n const text = await response.text();\n onSuccess?.(text);\n return text;\n };\n try {\n return await attemptFetch(url);\n } catch (error) {\n if (error.name === 'AbortError') {\n console.warn('Polling aborted');\n } else {\n console.error(error);\n }\n onError?.(error);\n }\n};\nconst addTextTrackCues = (textTrack, cues) => {\n cues.forEach(_ref => {\n let {\n startTime,\n endTime,\n text,\n settings\n } = _ref;\n const cue = new VTTCue(startTime, endTime, text);\n if (settings) {\n const parsed = settings.split(/\\s+/);\n parsed.forEach(setting => {\n const [key, value] = setting.split(':');\n if (!key || !value) return;\n switch (key) {\n case 'line':\n cue.line = isNaN(value) ? value : parseFloat(value);\n break;\n case 'position':\n cue.position = parseFloat(value);\n break;\n case 'size':\n cue.size = parseFloat(value);\n break;\n case 'align':\n cue.align = value;\n break;\n }\n });\n }\n textTrack.addCue(cue);\n });\n};\nconst removeAllTextTrackCues = textTrack => {\n if (!textTrack || !textTrack.cues) return;\n Array.from(textTrack.cues).forEach(cue => {\n try {\n textTrack.removeCue(cue);\n } catch (e) {\n console.warn('Failed to remove cue:', cue, e);\n }\n });\n};\nconst addNotificationCue = (videoDuration, textTrack, text) => {\n if (!textTrack || !text) return;\n removeAllTextTrackCues(textTrack);\n const fallbackDuration = 3600;\n const endTime = typeof videoDuration === 'number' && isFinite(videoDuration) && videoDuration > 0 ? videoDuration : fallbackDuration;\n const cue = new VTTCue(0, endTime, text);\n textTrack.addCue(cue);\n};\nconst refreshTextTrack = textTrack => {\n if (!textTrack || typeof textTrack.mode !== 'string') return;\n const currentMode = textTrack.mode;\n textTrack.mode = currentMode === 'showing' ? 'hidden' : 'showing';\n\n // Force back to original after a short delay (just enough to trigger reflow)\n setTimeout(() => {\n textTrack.mode = currentMode;\n }, 0);\n};\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/text-tracks-manager/utils.js?");
|
|
562
|
+
|
|
563
|
+
/***/ }),
|
|
564
|
+
|
|
532
565
|
/***/ "./plugins/visual-search/index.js":
|
|
533
566
|
/*!****************************************!*\
|
|
534
567
|
!*** ./plugins/visual-search/index.js ***!
|
|
@@ -580,7 +613,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
580
613
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
581
614
|
|
|
582
615
|
"use strict";
|
|
583
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */
|
|
616
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GET_ERROR_DEFAULT_REQUEST: () => (/* binding */ GET_ERROR_DEFAULT_REQUEST),\n/* harmony export */ handleCldError: () => (/* binding */ handleCldError),\n/* harmony export */ isKeyInTransformation: () => (/* binding */ isKeyInTransformation)\n/* harmony export */ });\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var utils_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utils/find */ \"./utils/find.js\");\n\n\nconst GET_ERROR_DEFAULT_REQUEST = {\n method: 'head'\n};\nconst ERROR_WITH_GET_REQUEST = {\n method: 'get',\n credentials: 'include',\n headers: {\n 'Content-Range': 'bytes=0-0'\n }\n};\nconst getGoodSrcs = (srcs, parsedUris) => {\n return srcs.filter(s => {\n const origUrl = new URL(s.src);\n return parsedUris.indexOf(origUrl.host + origUrl.pathname) !== -1 && s.try !== true;\n });\n};\nconst getParsedUris = res => {\n return res.reduce((acc, r) => {\n if (r.status >= 200 && r.status < 399 && r.url !== '') {\n const parsedUri = new URL(r.url);\n acc.push(parsedUri.host + parsedUri.pathname);\n }\n return acc;\n }, []);\n};\nconst setError = (that, res) => {\n that.videojs.error((0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_0__.cloudinaryErrorsConverter)({\n errorMsg: res.headers.get('x-cld-error') || '',\n publicId: that.currentPublicId(),\n cloudName: that.cloudinaryConfig().cloud_name,\n error: res,\n statusCode: res.status\n }));\n};\nconst setVideoSrc = (that, srcs) => {\n if (that.options.playerOptions.debug) {\n console.log('Trying sources: ', srcs);\n }\n srcs.forEach(s => {\n s.try = true;\n });\n that.videojs.autoplay(that.videojs.autoplay() || that.playWasCalled);\n that.videojs.src(srcs);\n};\nconst handleCldError = (that, options) => {\n const srcs = that.videojs.cloudinary.getCurrentSources();\n const opts = options.fetchErrorUsingGet ? ERROR_WITH_GET_REQUEST : GET_ERROR_DEFAULT_REQUEST;\n opts.credentials = options.withCredentials ? 'include' : 'omit';\n if (srcs.length > 0) {\n Promise.all(srcs.map(s => fetch(s.src, opts))).then(res => {\n const parsedUris = getParsedUris(res);\n const firstRes = res[0];\n if (!parsedUris.length) {\n setError(that, firstRes);\n } else {\n const goodSrcs = getGoodSrcs(srcs, parsedUris);\n if (goodSrcs && goodSrcs.length) {\n setVideoSrc(that, goodSrcs);\n } else {\n that.videojs.error({\n code: _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_0__.ERROR_CODE.NO_SUPPORTED_MEDIA,\n message: 'No supported media sources',\n statusCode: res.status\n });\n }\n }\n }).catch(error => {\n that.videojs.error({\n code: 7,\n message: error && error.message ? error.message : 'Failed to test sources'\n });\n });\n } else {\n that.videojs.error({\n code: _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_0__.ERROR_CODE.NO_SUPPORTED_MEDIA,\n message: 'No supported media sources'\n });\n }\n};\n\n/**\n * Check if key exist in transformation\n * @param transformation\n * @param key\n * @returns true if key exists in transformation, false otherwise\n */\nconst isKeyInTransformation = (transformation, key) => {\n if (!transformation || !key) {\n return false;\n }\n\n // transformation is an array so run this function for each item\n if (Array.isArray(transformation)) {\n return !!(0,utils_find__WEBPACK_IMPORTED_MODULE_1__.find)(transformation, t => isKeyInTransformation(t, key));\n }\n\n // transformation is a Transformation object so use getValue() to check key\n if (transformation.getValue) {\n return !!transformation.getValue(key);\n }\n\n // transformation is an Object so just check for key existence in object\n return !!transformation[key];\n};\n\n\n//# sourceURL=webpack://cloudinary-video-player/./utils/cloudinary.js?");
|
|
584
617
|
|
|
585
618
|
/***/ }),
|
|
586
619
|
|
|
@@ -767,7 +800,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
767
800
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
768
801
|
|
|
769
802
|
"use strict";
|
|
770
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! uuid */ \"../node_modules/uuid/dist/esm-browser/v4.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/get */ \"../node_modules/lodash/get.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/pick */ \"../node_modules/lodash/pick.js\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isObject */ \"../node_modules/lodash/isObject.js\");\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isObject__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/isString */ \"../node_modules/lodash/isString.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isString__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components */ \"./components/index.js\");\n/* harmony import */ var _plugins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./plugins */ \"./plugins/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils */ \"./utils/index.js\");\n/* harmony import */ var _config_defaults__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./config/defaults */ \"./config/defaults.js\");\n/* harmony import */ var _mixins_eventable__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./mixins/eventable */ \"./mixins/eventable.js\");\n/* harmony import */ var _extended_events__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./extended-events */ \"./extended-events.js\");\n/* harmony import */ var _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./plugins/cloudinary/models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _video_player_utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./video-player.utils */ \"./video-player.utils.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var _validators_validators_functions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./validators/validators-functions */ \"./validators/validators-functions.js\");\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/consts */ \"./utils/consts.js\");\n/* harmony import */ var _utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/get-analytics-player-options */ \"./utils/get-analytics-player-options.js\");\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _utils_video_retry__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./utils/video-retry */ \"./utils/video-retry.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst INTERNAL_ANALYTICS_URL = 'https://analytics-api-s.cloudinary.com';\nconst RETRY_DEFAULT_TIMEOUT = 5 * 1000;\n\n// Register all plugins\nObject.keys(_plugins__WEBPACK_IMPORTED_MODULE_8__[\"default\"]).forEach(key => {\n video_js__WEBPACK_IMPORTED_MODULE_0___default().registerPlugin(key, _plugins__WEBPACK_IMPORTED_MODULE_8__[\"default\"][key]);\n});\n(0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.overrideDefaultVideojsComponents)();\nclass VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].mixin(_mixins_eventable__WEBPACK_IMPORTED_MODULE_11__[\"default\"]) {\n static all(selector) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const nodeList = document.querySelectorAll(selector);\n return [...nodeList].map(node => new VideoPlayer(node, ...args));\n }\n get playerOptions() {\n return this.options.playerOptions;\n }\n constructor(elem, initOptions, ready) {\n super();\n this.videoElement = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.getResolveVideoElement)(elem);\n this.options = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.extractOptions)(this.videoElement, initOptions);\n this._videojsOptions = this.options.videojsOptions;\n\n // Make sure to add 'video-js' class before creating videojs instance\n this.videoElement.classList.add('video-js');\n\n // Handle WebFont loading\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].fontFace(this.videoElement, this.playerOptions.fontFace);\n\n // Handle play button options\n if (this._videojsOptions.bigPlayButton === 'init') {\n this.videoElement.classList.add('vjs-big-play-button-init-only');\n this._videojsOptions.bigPlayButton = true;\n }\n this.videojs = video_js__WEBPACK_IMPORTED_MODULE_0___default()(this.videoElement, this._videojsOptions);\n this._isPlayerConfigValid = true;\n if (this.playerOptions.debug) {\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_16__.isValidPlayerConfig)(this.options).then(valid => {\n if (!valid) {\n this._isPlayerConfigValid = false;\n this.videojs.error('invalid player configuration');\n return;\n }\n });\n }\n if (this._videojsOptions.muted) {\n this.videojs.volume(0.4);\n }\n if (this.playerOptions.fluid) {\n this.fluid(this.playerOptions.fluid);\n }\n this._setCssClasses();\n this._initPlugins();\n this._initJumpButtons();\n this._initPictureInPicture();\n this._setVideoJsListeners(ready);\n }\n getVPInstanceId() {\n if (!this.vpInstanceId) {\n this.vpInstanceId = (0,uuid__WEBPACK_IMPORTED_MODULE_21__[\"default\"])();\n }\n return this.vpInstanceId;\n }\n _sendInternalAnalytics() {\n let additionalOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const options = Object.assign({}, this.playerOptions, this.options.videojsOptions, additionalOptions);\n if (!options.allowUsageReport) {\n return;\n }\n try {\n const internalAnalyticsMetadata = options._internalAnalyticsMetadata ?? {};\n const analyticsData = (0,_utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_18__.getAnalyticsFromPlayerOptions)(options);\n const analyticsParams = new URLSearchParams(analyticsData).toString();\n const baseParams = new URLSearchParams({\n vpVersion: \"3.2.2-edge.0\",\n vpInstanceId: this.getVPInstanceId(),\n cloudName: options.cloudinary.cloud_name,\n ...internalAnalyticsMetadata\n }).toString();\n fetch(`${INTERNAL_ANALYTICS_URL}/video_player_source?${analyticsParams}&${baseParams}`);\n } catch (err) {\n console.warn(err);\n }\n }\n _resetReTryVideoState = () => {\n this.reTryVideoStateRetriesCount = 0;\n this.videojs.clearTimeout(this.reTryVideoStateTimeoutId);\n };\n _setVideoJsListeners(ready) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.ERROR, () => {\n const error = this.videojs.error();\n if (error) {\n const type = this._isPlayerConfigValid && this.videojs.cloudinary.currentSourceType();\n\n /*\n error codes :\n 3 - media playback was aborted due to a corruption problem\n 4 - media error, media source not supported\n */\n const isCorrupted = error.code === 3 && (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_SAFARI;\n if ([isCorrupted, error.code === 4].includes(true) && [_utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.AUDIO, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.VIDEO].includes(type)) {\n if (this.isLiveStream) {\n this.videojs.error({\n code: _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.ERROR_CODE.CUSTOM,\n message: 'Live Stream not started'\n });\n this.reloadVideoUntilAvailable();\n } else {\n this.videojs.error(null);\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].handleCldError(this, this.playerOptions);\n }\n } else {\n this._resetReTryVideoState();\n }\n }\n });\n this.videojs.tech_.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.RETRY_PLAYLIST, () => {\n const mediaRequestsErrored = lodash_get__WEBPACK_IMPORTED_MODULE_2___default()(this.videojs, 'hls.stats.mediaRequestsErrored', 0);\n if (mediaRequestsErrored > 0) {\n this._resetReTryVideoState();\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].handleCldError(this, this.playerOptions);\n }\n });\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.PLAY, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CAN_PLAY_THROUGH, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this._onSourceChange.bind(this));\n this.videojs.ready(() => {\n this._onReady();\n if (ready) {\n ready(this);\n }\n });\n }\n _initPlugins() {\n this._initIma();\n this._initAutoplay();\n this._initContextMenu();\n this._initPerSrcBehaviors();\n this._initCloudinary();\n this._initAnalytics();\n this._initCloudinaryAnalytics();\n this._initFloatingPlayer();\n this._initVisualSearch();\n this._initShare();\n this._initColors();\n this._initTextTracks();\n this._initHighlightsGraph();\n this._initSeekThumbs();\n this._initChapters();\n this._initInteractionAreas();\n }\n _isFullScreen() {\n return this.videojs.player().isFullscreen();\n }\n _initIma() {\n if (this.playerOptions.ads && Object.keys(this.playerOptions.ads).length !== 0) {\n _plugins__WEBPACK_IMPORTED_MODULE_8__[\"default\"].imaPlugin(this.videojs, this.playerOptions);\n }\n }\n setTextTracks(conf) {\n // remove current text tracks\n const currentTracks = this.videojs.remoteTextTracks();\n if (currentTracks) {\n for (let i = currentTracks.tracks_.length - 1; i >= 0; i--) {\n this.videojs.removeRemoteTextTrack(currentTracks.tracks_[i]);\n }\n }\n if (conf) {\n const kinds = Object.keys(conf);\n const allTracks = [];\n for (const kind of kinds) {\n if (kind !== 'options') {\n const tracks = Array.isArray(conf[kind]) ? conf[kind] : [conf[kind]];\n for (const track of tracks) {\n allTracks.push({\n ...track,\n kind: kind,\n label: track.label,\n srclang: track.language,\n default: !!track.default,\n src: track.url\n });\n }\n }\n }\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].addTextTracks(allTracks, this.videojs);\n if (conf.options && this.videojs.styledTextTracks) {\n this.videojs.styledTextTracks(conf.options);\n }\n }\n }\n _initSeekThumbs() {\n if (this.playerOptions.seekThumbnails) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref) => {\n let {\n source\n } = _ref;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n source.resourceConfig().type === 'live' ||\n // Is live stream\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.isRawUrl)(source.publicId()) ||\n // Is a raw url\n this.videojs.activePlugins_ && this.videojs.activePlugins_.vr // It's a VR (i.e. 360)\n ) {\n return;\n }\n const publicId = source.publicId();\n const transformation = Object.assign({}, source.transformation());\n if (transformation) {\n delete transformation.streaming_profile;\n delete transformation.video_codec;\n }\n transformation.flags = transformation.flags || [];\n transformation.flags.push('sprite');\n const vttSrc = source.config().url(`${publicId}.vtt`, {\n transformation\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n\n // vttThumbnails must be called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.vttThumbnails) ? this.videojs.vttThumbnails({\n src: vttSrc\n }) : this.videojs.vttThumbnails.src(vttSrc);\n });\n }\n }\n _initHighlightsGraph() {\n if (this.playerOptions.aiHighlightsGraph) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref2) => {\n let {\n source\n } = _ref2;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.isRawUrl)(source.publicId()) // Is a raw url\n ) {\n return;\n }\n const publicId = source.publicId();\n\n // Keep video-length related transformations and remove the rest\n const inputTransformations = lodash_pick__WEBPACK_IMPORTED_MODULE_3___default()(source.transformation(), ['start_offset', 'end_offset', 'duration']);\n const transformation = Object.assign({}, inputTransformations);\n transformation.effect = 'preview';\n transformation.flags = transformation.flags || [];\n transformation.flags.push('getinfo');\n const aiHighlightsGraphSrc = source.config().url(`${publicId}`, {\n transformation\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n\n // Plugin is called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.aiHighlightsGraph) ? this.videojs.aiHighlightsGraph({\n src: aiHighlightsGraphSrc\n }) : this.videojs.aiHighlightsGraph.src(aiHighlightsGraphSrc);\n });\n }\n }\n _initChapters() {\n if (!this.playerOptions.chaptersButton && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('chaptersButton');\n }\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref3) => {\n let {\n source\n } = _ref3;\n if ((!lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(source?._chapters) || source?._chapters === true) && this.videojs.chapters) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.chapters) ? this.videojs.chapters(source._chapters) : this.videojs.chapters.src(source._chapters);\n } else if (this.videojs.chapters?.resetPlugin) {\n this.videojs.chapters.resetPlugin();\n }\n });\n }\n _initInteractionAreas() {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.READY, async () => {\n if (this.options.videojsOptions.interactionDisplay && this.videojs.interactionAreas) {\n this.videojs.interactionAreas(this, this.playerOptions, this._videojsOptions);\n }\n });\n }\n _initVisualSearch() {\n // Listen for source changes to apply visual search based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref4) => {\n let {\n source\n } = _ref4;\n if (source?._visualSearch && this.videojs.visualSearch) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.visualSearch) ? this.videojs.visualSearch(source._visualSearch) : this.videojs.visualSearch.createSearchUI(source._visualSearch);\n } else if (!source?._visualSearch && this.videojs.visualSearch?.clearUI) {\n this.videojs.visualSearch.clearUI();\n }\n });\n }\n _initShare() {\n // Listen for source changes to apply Share plugin based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref5) => {\n let {\n source\n } = _ref5;\n if (!this.videojs.share) {\n return;\n }\n\n // First time: initialise plugin if necessary\n if (source?._download && lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.share)) {\n this.videojs.share({\n download: true\n });\n }\n if (!lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.share)) {\n // Plugin already initialised – update UI accordingly\n if (source?._download) {\n this.videojs.share.addDownloadButton?.();\n } else {\n this.videojs.share.removeDownloadButton?.();\n }\n }\n });\n }\n _initColors() {\n if (this.playerOptions.colors) {\n this.videojs.colors({\n colors: this.playerOptions.colors\n });\n }\n }\n _initTextTracks() {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref6) => {\n let {\n source\n } = _ref6;\n if (source?._textTracks) {\n this.setTextTracks(source._textTracks);\n }\n });\n }\n _initPerSrcBehaviors() {\n if (this.videojs.perSourceBehaviors) {\n this.videojs.perSourceBehaviors();\n }\n }\n _initJumpButtons() {\n if (!this.playerOptions.showJumpControls && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('JumpForwardButton');\n this.videojs.controlBar.removeChild('JumpBackButton');\n }\n }\n _initPictureInPicture() {\n if (!this.playerOptions.pictureInPictureToggle && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('pictureInPictureToggle');\n }\n }\n _initCloudinary() {\n const cloudinaryConfig = this.playerOptions.cloudinary;\n cloudinaryConfig.chainTarget = this;\n if (cloudinaryConfig.secure !== false) {\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.extendCloudinaryConfig)(cloudinaryConfig, {\n secure: true\n });\n }\n\n // Merge cloudinary config with source config for the plugin\n const cloudinaryOptions = {\n cloudinaryConfig,\n ...this.playerOptions.sourceOptions\n };\n this.videojs.cloudinary(cloudinaryOptions);\n }\n _initAnalytics() {\n const analyticsOpts = this.playerOptions.analytics;\n if (!window.gtag && analyticsOpts) {\n console.error('Google Analytics script (gtag) is missing.');\n return;\n }\n if (analyticsOpts) {\n const opts = typeof analyticsOpts === 'object' ? analyticsOpts : {};\n this.videojs.analytics(opts);\n }\n }\n _initCloudinaryAnalytics() {\n const cloudinaryAnalyticsOptionEnabled = !!this.playerOptions.cloudinaryAnalytics;\n if (cloudinaryAnalyticsOptionEnabled) {\n this.videojs.videoElement = this.videoElement;\n const options = lodash_isObject__WEBPACK_IMPORTED_MODULE_5___default()(this.playerOptions.cloudinaryAnalytics) ? this.playerOptions.cloudinaryAnalytics : {};\n this.videojs.cloudinaryAnalytics(options);\n }\n }\n reTryVideoStateUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reTryVideoStateRetriesCount !== 'number') {\n this.reTryVideoStateRetriesCount = 0;\n }\n if (!(0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_20__.isVideoInReadyState)(this.videojs.readyState())) {\n if (this.reTryVideoStateRetriesCount < maxNumberOfCalls) {\n this.reTryVideoStateRetriesCount++;\n this.reTryVideoStateTimeoutId = this.videojs.setTimeout(() => this.reTryVideoStateUntilAvailable(maxNumberOfCalls, timeout), timeout);\n } else {\n let e = new Error('Video is not ready please try later');\n this.videojs.trigger('error', e);\n }\n } else {\n this.reTryVideoStateRetriesCount = 0;\n }\n }\n _resetReloadVideo = () => {\n this.reloadVideoRetriesCount = 0;\n this.videojs.clearTimeout(this.reloadVideoTimeoutId);\n };\n reloadVideoUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reloadVideoRetriesCount !== 'number') {\n this.reloadVideoRetriesCount = 0;\n }\n if (this.reloadVideoRetriesCount < maxNumberOfCalls) {\n this.reloadVideoRetriesCount++;\n this.reloadVideoTimeoutId = this.videojs.setTimeout(() => {\n const videoUrl = this.currentSourceUrl();\n (0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_20__.checkIfVideoIsAvailable)(videoUrl, this.isLiveStream ? 'live' : 'default').then(() => this.source(videoUrl)).catch(() => this.reloadVideoUntilAvailable(maxNumberOfCalls, timeout));\n }, timeout);\n } else {\n this.videojs.trigger('error', new Error('Sorry, we could not load your video'));\n }\n }\n _initAutoplay() {\n const autoplayMode = this.playerOptions.autoplayMode;\n if (autoplayMode === 'on-scroll') {\n this.videojs.autoplayOnScroll();\n }\n }\n _initContextMenu() {\n if (!this.playerOptions.hideContextMenu) {\n this.videojs.contextMenu(_config_defaults__WEBPACK_IMPORTED_MODULE_10__[\"default\"].contextMenu);\n }\n }\n _initFloatingPlayer() {\n if (this.playerOptions.floatingWhenNotVisible !== _video_player_const__WEBPACK_IMPORTED_MODULE_15__.FLOATING_TO.NONE) {\n this.videojs.floatingPlayer({\n floatTo: this.playerOptions.floatingWhenNotVisible\n });\n }\n }\n _setCssClasses() {\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].CLASS_PREFIX);\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].playerClassPrefix(this.videojs));\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setSkinClassPrefix(this.videojs, _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].skinClassPrefix(this.videojs));\n }\n _onReady() {\n this._setExtendedEvents();\n\n // Load first video (mainly to support video tag 'source' and 'public-id' attributes)\n // Source parameters are set to playerOptions.sourceOptions\n const source = this.playerOptions.sourceOptions.source || this.playerOptions.sourceOptions.publicId;\n if (source) {\n const sourceOptions = Object.assign({}, this.playerOptions.sourceOptions);\n this.source(source, sourceOptions);\n }\n }\n _onSourceChange(e, _ref7) {\n let {\n source,\n sourceOptions\n } = _ref7;\n this._sendInternalAnalytics({\n ...(sourceOptions && {\n sourceOptions\n })\n });\n this.isLiveStream = source?.resourceConfig()?.type === 'live';\n }\n _setExtendedEvents() {\n const events = [];\n if (this.playerOptions.playedEventPercents) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.PERCENTS_PLAYED,\n percents: this.playerOptions.playedEventPercents\n });\n }\n if (this.playerOptions.playedEventTimes) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.TIME_PLAYED,\n times: this.playerOptions.playedEventTimes\n });\n }\n events.push(...[_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.SEEK, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.MUTE, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.UNMUTE, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.QUALITY_CHANGED]);\n const extendedEvents = new _extended_events__WEBPACK_IMPORTED_MODULE_12__[\"default\"](this.videojs, {\n events\n });\n Object.keys(extendedEvents.events).forEach(_event => {\n const handler = (event, data) => {\n this.videojs.trigger({\n type: _event,\n eventData: data\n });\n };\n extendedEvents.on(_event, handler);\n });\n }\n cloudinaryConfig(config) {\n return this.videojs.cloudinary.cloudinaryConfig(config);\n }\n currentPublicId() {\n return this.videojs.cloudinary.currentPublicId();\n }\n currentSourceUrl() {\n return this.videojs.currentSource().src;\n }\n currentPoster() {\n return this.videojs.cloudinary.currentPoster();\n }\n source(publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n ({\n publicId,\n options\n } = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.normalizeOptions)(publicId, options));\n if (!this._isPlayerConfigValid) {\n return;\n }\n if (this.playerOptions.debug) {\n options.debug = true;\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_16__.isValidSourceConfig)(options).then(valid => {\n if (!valid) {\n this.videojs.error('invalid source configuration');\n }\n });\n }\n if (publicId instanceof _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_13__[\"default\"]) {\n return this.videojs.cloudinary.source(publicId, options);\n }\n\n // Inherit source parameters from player options (source options take precedence)\n const inherited = this.playerOptions.sourceOptions || {};\n options = {\n ...inherited,\n ...options\n };\n if (options.shoppable && this.videojs.shoppable) {\n this.videojs.shoppable(this.videojs, options);\n }\n this._resetReloadVideo();\n this._resetReTryVideoState();\n const maxTries = this.videojs.options_.maxTries || 3;\n const videoReadyTimeout = this.videojs.options_.videoTimeout || 55000;\n this.reTryVideoStateUntilAvailable(maxTries, videoReadyTimeout);\n return this.videojs.cloudinary.source(publicId, options);\n }\n posterOptions(options) {\n return this.videojs.cloudinary.posterOptions(options);\n }\n skin(name) {\n if (name !== undefined && lodash_isString__WEBPACK_IMPORTED_MODULE_6___default()(name)) {\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setSkinClassPrefix(this.videojs, name);\n }\n return _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].skinClassPrefix(this.videojs);\n }\n playlist(sources) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlist: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(sources, options);\n });\n return this.videojs.cloudinary.playlist ? this.videojs.cloudinary.playlist(sources, options) : this;\n }\n playlistByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlistByTag: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n return new Promise(resolve => {\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(await this.sourcesByTag(tag, options), options);\n resolve(this);\n });\n });\n }\n sourcesByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.videojs.cloudinary.sourcesByTag(tag, options);\n }\n fluid(bool) {\n if (bool === undefined) {\n return this.videojs.fluid();\n }\n if (bool) {\n this.videojs.addClass(_video_player_const__WEBPACK_IMPORTED_MODULE_15__.FLUID_CLASS_NAME);\n } else {\n this.videojs.removeClass(_video_player_const__WEBPACK_IMPORTED_MODULE_15__.FLUID_CLASS_NAME);\n }\n this.videojs.fluid(bool);\n this.videojs.trigger(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.FLUID, bool);\n return this;\n }\n play() {\n this.playWasCalled = true;\n this.videojs.play();\n return this;\n }\n stop() {\n this.pause();\n this.currentTime(0);\n return this;\n }\n playPrevious() {\n this.playlist().playPrevious();\n return this;\n }\n playNext() {\n this.playlist().playNext();\n return this;\n }\n transformation(trans) {\n return this.videojs.cloudinary.transformation(trans);\n }\n sourceTypes(types) {\n return this.videojs.cloudinary.sourceTypes(types);\n }\n sourceTransformation(trans) {\n return this.videojs.cloudinary.sourceTransformation(trans);\n }\n autoShowRecommendations(autoShow) {\n return this.videojs.cloudinary.autoShowRecommendations(autoShow);\n }\n duration() {\n return this.videojs.duration();\n }\n height(dimension) {\n if (!dimension) {\n return this.videojs.height();\n }\n this.videojs.height(dimension);\n return this;\n }\n width(dimension) {\n if (!dimension) {\n return this.videojs.width();\n }\n this.videojs.width(dimension);\n return this;\n }\n volume(volume) {\n if (!volume) {\n return this.videojs.volume();\n }\n this.videojs.volume(volume);\n return this;\n }\n mute() {\n if (!this.isMuted()) {\n this.videojs.muted(true);\n }\n return this;\n }\n unmute() {\n if (this.isMuted()) {\n this.videojs.muted(false);\n }\n return this;\n }\n isMuted() {\n return this.videojs.muted();\n }\n pause() {\n this.videojs.pause();\n return this;\n }\n currentTime(offsetSeconds) {\n if (!offsetSeconds && offsetSeconds !== 0) {\n return this.videojs.currentTime();\n }\n this.videojs.currentTime(offsetSeconds);\n return this;\n }\n maximize() {\n if (!this.isMaximized()) {\n this.videojs.requestFullscreen();\n }\n return this;\n }\n exitMaximize() {\n if (this.isMaximized()) {\n this.videojs.exitFullscreen();\n }\n return this;\n }\n isMaximized() {\n return this.videojs.isFullscreen();\n }\n dispose() {\n this.videojs.dispose();\n }\n controls(bool) {\n if (bool === undefined) {\n return this.videojs.controls();\n }\n this.videojs.controls(bool);\n return this;\n }\n ima() {\n return {\n playAd: this.videojs.ima.playAd\n };\n }\n loop(bool) {\n if (bool === undefined) {\n return this.videojs.loop();\n }\n this.videojs.loop(bool);\n return this;\n }\n el() {\n return this.videojs.el();\n }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VideoPlayer);\n\n//# sourceURL=webpack://cloudinary-video-player/./video-player.js?");
|
|
803
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! uuid */ \"../node_modules/uuid/dist/esm-browser/v4.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/get */ \"../node_modules/lodash/get.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/pick */ \"../node_modules/lodash/pick.js\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isObject */ \"../node_modules/lodash/isObject.js\");\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isObject__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/isString */ \"../node_modules/lodash/isString.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isString__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components */ \"./components/index.js\");\n/* harmony import */ var _plugins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./plugins */ \"./plugins/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils */ \"./utils/index.js\");\n/* harmony import */ var _config_defaults__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./config/defaults */ \"./config/defaults.js\");\n/* harmony import */ var _mixins_eventable__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./mixins/eventable */ \"./mixins/eventable.js\");\n/* harmony import */ var _extended_events__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./extended-events */ \"./extended-events.js\");\n/* harmony import */ var _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./plugins/cloudinary/models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _video_player_utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./video-player.utils */ \"./video-player.utils.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var _validators_validators_functions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./validators/validators-functions */ \"./validators/validators-functions.js\");\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/consts */ \"./utils/consts.js\");\n/* harmony import */ var _utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/get-analytics-player-options */ \"./utils/get-analytics-player-options.js\");\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _utils_video_retry__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./utils/video-retry */ \"./utils/video-retry.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst INTERNAL_ANALYTICS_URL = 'https://analytics-api-s.cloudinary.com';\nconst RETRY_DEFAULT_TIMEOUT = 5 * 1000;\n\n// Register all plugins\nObject.keys(_plugins__WEBPACK_IMPORTED_MODULE_8__[\"default\"]).forEach(key => {\n video_js__WEBPACK_IMPORTED_MODULE_0___default().registerPlugin(key, _plugins__WEBPACK_IMPORTED_MODULE_8__[\"default\"][key]);\n});\n(0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.overrideDefaultVideojsComponents)();\nclass VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].mixin(_mixins_eventable__WEBPACK_IMPORTED_MODULE_11__[\"default\"]) {\n static all(selector) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const nodeList = document.querySelectorAll(selector);\n return [...nodeList].map(node => new VideoPlayer(node, ...args));\n }\n get playerOptions() {\n return this.options.playerOptions;\n }\n constructor(elem, initOptions, ready) {\n super();\n this.videoElement = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.getResolveVideoElement)(elem);\n this.options = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.extractOptions)(this.videoElement, initOptions);\n this._videojsOptions = this.options.videojsOptions;\n\n // Make sure to add 'video-js' class before creating videojs instance\n this.videoElement.classList.add('video-js');\n\n // Handle WebFont loading\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].fontFace(this.videoElement, this.playerOptions.fontFace);\n\n // Handle play button options\n if (this._videojsOptions.bigPlayButton === 'init') {\n this.videoElement.classList.add('vjs-big-play-button-init-only');\n this._videojsOptions.bigPlayButton = true;\n }\n this.videojs = video_js__WEBPACK_IMPORTED_MODULE_0___default()(this.videoElement, this._videojsOptions);\n this._isPlayerConfigValid = true;\n if (this.playerOptions.debug) {\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_16__.isValidPlayerConfig)(this.options).then(valid => {\n if (!valid) {\n this._isPlayerConfigValid = false;\n this.videojs.error('invalid player configuration');\n return;\n }\n });\n }\n if (this._videojsOptions.muted) {\n this.videojs.volume(0.4);\n }\n if (this.playerOptions.fluid) {\n this.fluid(this.playerOptions.fluid);\n }\n this._setCssClasses();\n this._initPlugins();\n this._initJumpButtons();\n this._initPictureInPicture();\n this._setVideoJsListeners(ready);\n }\n getVPInstanceId() {\n if (!this.vpInstanceId) {\n this.vpInstanceId = (0,uuid__WEBPACK_IMPORTED_MODULE_21__[\"default\"])();\n }\n return this.vpInstanceId;\n }\n _sendInternalAnalytics() {\n let additionalOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const options = Object.assign({}, this.playerOptions, this.options.videojsOptions, additionalOptions);\n if (!options.allowUsageReport) {\n return;\n }\n try {\n const internalAnalyticsMetadata = options._internalAnalyticsMetadata ?? {};\n const analyticsData = (0,_utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_18__.getAnalyticsFromPlayerOptions)(options);\n const analyticsParams = new URLSearchParams(analyticsData).toString();\n const baseParams = new URLSearchParams({\n vpVersion: \"3.2.2-edge.2\",\n vpInstanceId: this.getVPInstanceId(),\n cloudName: options.cloudinary.cloud_name,\n ...internalAnalyticsMetadata\n }).toString();\n fetch(`${INTERNAL_ANALYTICS_URL}/video_player_source?${analyticsParams}&${baseParams}`);\n } catch (err) {\n console.warn(err);\n }\n }\n _resetReTryVideoState = () => {\n this.reTryVideoStateRetriesCount = 0;\n this.videojs.clearTimeout(this.reTryVideoStateTimeoutId);\n };\n _setVideoJsListeners(ready) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.ERROR, () => {\n const error = this.videojs.error();\n if (error) {\n const type = this._isPlayerConfigValid && this.videojs.cloudinary.currentSourceType();\n\n /*\n error codes :\n 3 - media playback was aborted due to a corruption problem\n 4 - media error, media source not supported\n */\n const isCorrupted = error.code === 3 && (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_SAFARI;\n if ([isCorrupted, error.code === 4].includes(true) && [_utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.AUDIO, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.VIDEO].includes(type)) {\n if (this.isLiveStream) {\n this.videojs.error({\n code: _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.ERROR_CODE.CUSTOM,\n message: 'Live Stream not started'\n });\n this.reloadVideoUntilAvailable();\n } else {\n this.videojs.error(null);\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].handleCldError(this, this.playerOptions);\n }\n } else {\n this._resetReTryVideoState();\n }\n }\n });\n this.videojs.tech_.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.RETRY_PLAYLIST, () => {\n const mediaRequestsErrored = lodash_get__WEBPACK_IMPORTED_MODULE_2___default()(this.videojs, 'hls.stats.mediaRequestsErrored', 0);\n if (mediaRequestsErrored > 0) {\n this._resetReTryVideoState();\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].handleCldError(this, this.playerOptions);\n }\n });\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.PLAY, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CAN_PLAY_THROUGH, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this._onSourceChange.bind(this));\n this.videojs.ready(() => {\n this._onReady();\n if (ready) {\n ready(this);\n }\n });\n }\n _initPlugins() {\n this._initIma();\n this._initAutoplay();\n this._initContextMenu();\n this._initPerSrcBehaviors();\n this._initCloudinary();\n this._initAnalytics();\n this._initCloudinaryAnalytics();\n this._initFloatingPlayer();\n this._initVisualSearch();\n this._initShare();\n this._initColors();\n this._initTextTracks();\n this._initHighlightsGraph();\n this._initSeekThumbs();\n this._initChapters();\n this._initInteractionAreas();\n }\n _isFullScreen() {\n return this.videojs.player().isFullscreen();\n }\n _initIma() {\n if (this.playerOptions.ads && Object.keys(this.playerOptions.ads).length !== 0) {\n _plugins__WEBPACK_IMPORTED_MODULE_8__[\"default\"].imaPlugin(this.videojs, this.playerOptions);\n }\n }\n setTextTracks(conf) {\n this.textTracksManager.removeAllTextTracks();\n if (conf) {\n const kinds = Object.keys(conf);\n const allTracks = [];\n for (const kind of kinds) {\n if (kind !== 'options') {\n const tracks = Array.isArray(conf[kind]) ? conf[kind] : [conf[kind]];\n for (const track of tracks) {\n allTracks.push({\n ...track,\n kind: kind,\n label: track.label,\n srclang: track.language,\n default: !!track.default,\n src: track.url\n });\n }\n }\n }\n this.textTracksManager.addTextTracks(allTracks);\n if (conf.options && this.videojs.styledTextTracks) {\n this.videojs.styledTextTracks(conf.options);\n }\n }\n }\n _initSeekThumbs() {\n if (this.playerOptions.seekThumbnails) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref) => {\n let {\n source\n } = _ref;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n source.resourceConfig().type === 'live' ||\n // Is live stream\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.isRawUrl)(source.publicId()) ||\n // Is a raw url\n this.videojs.activePlugins_ && this.videojs.activePlugins_.vr // It's a VR (i.e. 360)\n ) {\n return;\n }\n const publicId = source.publicId();\n const transformation = Object.assign({}, source.transformation());\n if (transformation) {\n delete transformation.streaming_profile;\n delete transformation.video_codec;\n }\n transformation.flags = transformation.flags || [];\n transformation.flags.push('sprite');\n const vttSrc = source.config().url(`${publicId}.vtt`, {\n transformation\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n\n // vttThumbnails must be called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.vttThumbnails) ? this.videojs.vttThumbnails({\n src: vttSrc\n }) : this.videojs.vttThumbnails.src(vttSrc);\n });\n }\n }\n _initHighlightsGraph() {\n if (this.playerOptions.aiHighlightsGraph) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref2) => {\n let {\n source\n } = _ref2;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.isRawUrl)(source.publicId()) // Is a raw url\n ) {\n return;\n }\n const publicId = source.publicId();\n\n // Keep video-length related transformations and remove the rest\n const inputTransformations = lodash_pick__WEBPACK_IMPORTED_MODULE_3___default()(source.transformation(), ['start_offset', 'end_offset', 'duration']);\n const transformation = Object.assign({}, inputTransformations);\n transformation.effect = 'preview';\n transformation.flags = transformation.flags || [];\n transformation.flags.push('getinfo');\n const aiHighlightsGraphSrc = source.config().url(`${publicId}`, {\n transformation\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n\n // Plugin is called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.aiHighlightsGraph) ? this.videojs.aiHighlightsGraph({\n src: aiHighlightsGraphSrc\n }) : this.videojs.aiHighlightsGraph.src(aiHighlightsGraphSrc);\n });\n }\n }\n _initChapters() {\n if (!this.playerOptions.chaptersButton && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('chaptersButton');\n }\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref3) => {\n let {\n source\n } = _ref3;\n if ((!lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(source?._chapters) || source?._chapters === true) && this.videojs.chapters) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.chapters) ? this.videojs.chapters(source._chapters) : this.videojs.chapters.src(source._chapters);\n } else if (this.videojs.chapters?.resetPlugin) {\n this.videojs.chapters.resetPlugin();\n }\n });\n }\n _initInteractionAreas() {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.READY, async () => {\n if (this.options.videojsOptions.interactionDisplay && this.videojs.interactionAreas) {\n this.videojs.interactionAreas(this, this.playerOptions, this._videojsOptions);\n }\n });\n }\n _initVisualSearch() {\n // Listen for source changes to apply visual search based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref4) => {\n let {\n source\n } = _ref4;\n if (source?._visualSearch && this.videojs.visualSearch) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.visualSearch) ? this.videojs.visualSearch(source._visualSearch) : this.videojs.visualSearch.createSearchUI(source._visualSearch);\n } else if (!source?._visualSearch && this.videojs.visualSearch?.clearUI) {\n this.videojs.visualSearch.clearUI();\n }\n });\n }\n _initShare() {\n // Listen for source changes to apply Share plugin based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref5) => {\n let {\n source\n } = _ref5;\n if (!this.videojs.share) {\n return;\n }\n\n // First time: initialise plugin if necessary\n if (source?._download && lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.share)) {\n this.videojs.share({\n download: true\n });\n }\n if (!lodash_isFunction__WEBPACK_IMPORTED_MODULE_4___default()(this.videojs.share)) {\n // Plugin already initialised – update UI accordingly\n if (source?._download) {\n this.videojs.share.addDownloadButton?.();\n } else {\n this.videojs.share.removeDownloadButton?.();\n }\n }\n });\n }\n _initColors() {\n if (this.playerOptions.colors) {\n this.videojs.colors({\n colors: this.playerOptions.colors\n });\n }\n }\n _initTextTracks() {\n this.textTracksManager = this.videojs.textTracksManager();\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref6) => {\n let {\n source\n } = _ref6;\n if (source?._textTracks) {\n this.setTextTracks(source._textTracks);\n }\n });\n }\n _initPerSrcBehaviors() {\n if (this.videojs.perSourceBehaviors) {\n this.videojs.perSourceBehaviors();\n }\n }\n _initJumpButtons() {\n if (!this.playerOptions.showJumpControls && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('JumpForwardButton');\n this.videojs.controlBar.removeChild('JumpBackButton');\n }\n }\n _initPictureInPicture() {\n if (!this.playerOptions.pictureInPictureToggle && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('pictureInPictureToggle');\n }\n }\n _initCloudinary() {\n const cloudinaryConfig = this.playerOptions.cloudinary;\n cloudinaryConfig.chainTarget = this;\n if (cloudinaryConfig.secure !== false) {\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.extendCloudinaryConfig)(cloudinaryConfig, {\n secure: true\n });\n }\n\n // Merge cloudinary config with source config for the plugin\n const cloudinaryOptions = {\n cloudinaryConfig,\n ...this.playerOptions.sourceOptions\n };\n this.videojs.cloudinary(cloudinaryOptions);\n }\n _initAnalytics() {\n const analyticsOpts = this.playerOptions.analytics;\n if (!window.gtag && analyticsOpts) {\n console.error('Google Analytics script (gtag) is missing.');\n return;\n }\n if (analyticsOpts) {\n const opts = typeof analyticsOpts === 'object' ? analyticsOpts : {};\n this.videojs.analytics(opts);\n }\n }\n _initCloudinaryAnalytics() {\n const cloudinaryAnalyticsOptionEnabled = !!this.playerOptions.cloudinaryAnalytics;\n if (cloudinaryAnalyticsOptionEnabled) {\n this.videojs.videoElement = this.videoElement;\n const options = lodash_isObject__WEBPACK_IMPORTED_MODULE_5___default()(this.playerOptions.cloudinaryAnalytics) ? this.playerOptions.cloudinaryAnalytics : {};\n this.videojs.cloudinaryAnalytics(options);\n }\n }\n reTryVideoStateUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reTryVideoStateRetriesCount !== 'number') {\n this.reTryVideoStateRetriesCount = 0;\n }\n if (!(0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_20__.isVideoInReadyState)(this.videojs.readyState())) {\n if (this.reTryVideoStateRetriesCount < maxNumberOfCalls) {\n this.reTryVideoStateRetriesCount++;\n this.reTryVideoStateTimeoutId = this.videojs.setTimeout(() => this.reTryVideoStateUntilAvailable(maxNumberOfCalls, timeout), timeout);\n } else {\n let e = new Error('Video is not ready please try later');\n this.videojs.trigger('error', e);\n }\n } else {\n this.reTryVideoStateRetriesCount = 0;\n }\n }\n _resetReloadVideo = () => {\n this.reloadVideoRetriesCount = 0;\n this.videojs.clearTimeout(this.reloadVideoTimeoutId);\n };\n reloadVideoUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reloadVideoRetriesCount !== 'number') {\n this.reloadVideoRetriesCount = 0;\n }\n if (this.reloadVideoRetriesCount < maxNumberOfCalls) {\n this.reloadVideoRetriesCount++;\n this.reloadVideoTimeoutId = this.videojs.setTimeout(() => {\n const videoUrl = this.currentSourceUrl();\n (0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_20__.checkIfVideoIsAvailable)(videoUrl, this.isLiveStream ? 'live' : 'default').then(() => this.source(videoUrl)).catch(() => this.reloadVideoUntilAvailable(maxNumberOfCalls, timeout));\n }, timeout);\n } else {\n this.videojs.trigger('error', new Error('Sorry, we could not load your video'));\n }\n }\n _initAutoplay() {\n const autoplayMode = this.playerOptions.autoplayMode;\n if (autoplayMode === 'on-scroll') {\n this.videojs.autoplayOnScroll();\n }\n }\n _initContextMenu() {\n if (!this.playerOptions.hideContextMenu) {\n this.videojs.contextMenu(_config_defaults__WEBPACK_IMPORTED_MODULE_10__[\"default\"].contextMenu);\n }\n }\n _initFloatingPlayer() {\n if (this.playerOptions.floatingWhenNotVisible !== _video_player_const__WEBPACK_IMPORTED_MODULE_15__.FLOATING_TO.NONE) {\n this.videojs.floatingPlayer({\n floatTo: this.playerOptions.floatingWhenNotVisible\n });\n }\n }\n _setCssClasses() {\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].CLASS_PREFIX);\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].playerClassPrefix(this.videojs));\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setSkinClassPrefix(this.videojs, _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].skinClassPrefix(this.videojs));\n }\n _onReady() {\n this._setExtendedEvents();\n\n // Load first video (mainly to support video tag 'source' and 'public-id' attributes)\n // Source parameters are set to playerOptions.sourceOptions\n const source = this.playerOptions.sourceOptions.source || this.playerOptions.sourceOptions.publicId;\n if (source) {\n const sourceOptions = Object.assign({}, this.playerOptions.sourceOptions);\n this.source(source, sourceOptions);\n }\n }\n _onSourceChange(e, _ref7) {\n let {\n source,\n sourceOptions\n } = _ref7;\n this._sendInternalAnalytics({\n ...(sourceOptions && {\n sourceOptions\n })\n });\n this.isLiveStream = source?.resourceConfig()?.type === 'live';\n }\n _setExtendedEvents() {\n const events = [];\n if (this.playerOptions.playedEventPercents) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.PERCENTS_PLAYED,\n percents: this.playerOptions.playedEventPercents\n });\n }\n if (this.playerOptions.playedEventTimes) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.TIME_PLAYED,\n times: this.playerOptions.playedEventTimes\n });\n }\n events.push(...[_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.SEEK, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.MUTE, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.UNMUTE, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.QUALITY_CHANGED]);\n const extendedEvents = new _extended_events__WEBPACK_IMPORTED_MODULE_12__[\"default\"](this.videojs, {\n events\n });\n Object.keys(extendedEvents.events).forEach(_event => {\n const handler = (event, data) => {\n this.videojs.trigger({\n type: _event,\n eventData: data\n });\n };\n extendedEvents.on(_event, handler);\n });\n }\n cloudinaryConfig(config) {\n return this.videojs.cloudinary.cloudinaryConfig(config);\n }\n currentPublicId() {\n return this.videojs.cloudinary.currentPublicId();\n }\n currentSourceUrl() {\n return this.videojs.currentSource().src;\n }\n currentPoster() {\n return this.videojs.cloudinary.currentPoster();\n }\n source(publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n ({\n publicId,\n options\n } = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.normalizeOptions)(publicId, options));\n if (!this._isPlayerConfigValid) {\n return;\n }\n if (this.playerOptions.debug) {\n options.debug = true;\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_16__.isValidSourceConfig)(options).then(valid => {\n if (!valid) {\n this.videojs.error('invalid source configuration');\n }\n });\n }\n if (publicId instanceof _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_13__[\"default\"]) {\n return this.videojs.cloudinary.source(publicId, options);\n }\n\n // Inherit source parameters from player options (source options take precedence)\n const inherited = this.playerOptions.sourceOptions || {};\n options = {\n ...inherited,\n ...options\n };\n if (options.shoppable && this.videojs.shoppable) {\n this.videojs.shoppable(this.videojs, options);\n }\n this._resetReloadVideo();\n this._resetReTryVideoState();\n const maxTries = this.videojs.options_.maxTries || 3;\n const videoReadyTimeout = this.videojs.options_.videoTimeout || 55000;\n this.reTryVideoStateUntilAvailable(maxTries, videoReadyTimeout);\n return this.videojs.cloudinary.source(publicId, options);\n }\n posterOptions(options) {\n return this.videojs.cloudinary.posterOptions(options);\n }\n skin(name) {\n if (name !== undefined && lodash_isString__WEBPACK_IMPORTED_MODULE_6___default()(name)) {\n _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setSkinClassPrefix(this.videojs, name);\n }\n return _utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"].skinClassPrefix(this.videojs);\n }\n playlist(sources) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlist: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(sources, options);\n });\n return this.videojs.cloudinary.playlist ? this.videojs.cloudinary.playlist(sources, options) : this;\n }\n playlistByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlistByTag: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n return new Promise(resolve => {\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(await this.sourcesByTag(tag, options), options);\n resolve(this);\n });\n });\n }\n sourcesByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.videojs.cloudinary.sourcesByTag(tag, options);\n }\n fluid(bool) {\n if (bool === undefined) {\n return this.videojs.fluid();\n }\n if (bool) {\n this.videojs.addClass(_video_player_const__WEBPACK_IMPORTED_MODULE_15__.FLUID_CLASS_NAME);\n } else {\n this.videojs.removeClass(_video_player_const__WEBPACK_IMPORTED_MODULE_15__.FLUID_CLASS_NAME);\n }\n this.videojs.fluid(bool);\n this.videojs.trigger(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.FLUID, bool);\n return this;\n }\n play() {\n this.playWasCalled = true;\n this.videojs.play();\n return this;\n }\n stop() {\n this.pause();\n this.currentTime(0);\n return this;\n }\n playPrevious() {\n this.playlist().playPrevious();\n return this;\n }\n playNext() {\n this.playlist().playNext();\n return this;\n }\n transformation(trans) {\n return this.videojs.cloudinary.transformation(trans);\n }\n sourceTypes(types) {\n return this.videojs.cloudinary.sourceTypes(types);\n }\n sourceTransformation(trans) {\n return this.videojs.cloudinary.sourceTransformation(trans);\n }\n autoShowRecommendations(autoShow) {\n return this.videojs.cloudinary.autoShowRecommendations(autoShow);\n }\n duration() {\n return this.videojs.duration();\n }\n height(dimension) {\n if (!dimension) {\n return this.videojs.height();\n }\n this.videojs.height(dimension);\n return this;\n }\n width(dimension) {\n if (!dimension) {\n return this.videojs.width();\n }\n this.videojs.width(dimension);\n return this;\n }\n volume(volume) {\n if (!volume) {\n return this.videojs.volume();\n }\n this.videojs.volume(volume);\n return this;\n }\n mute() {\n if (!this.isMuted()) {\n this.videojs.muted(true);\n }\n return this;\n }\n unmute() {\n if (this.isMuted()) {\n this.videojs.muted(false);\n }\n return this;\n }\n isMuted() {\n return this.videojs.muted();\n }\n pause() {\n this.videojs.pause();\n return this;\n }\n currentTime(offsetSeconds) {\n if (!offsetSeconds && offsetSeconds !== 0) {\n return this.videojs.currentTime();\n }\n this.videojs.currentTime(offsetSeconds);\n return this;\n }\n maximize() {\n if (!this.isMaximized()) {\n this.videojs.requestFullscreen();\n }\n return this;\n }\n exitMaximize() {\n if (this.isMaximized()) {\n this.videojs.exitFullscreen();\n }\n return this;\n }\n isMaximized() {\n return this.videojs.isFullscreen();\n }\n dispose() {\n this.videojs.dispose();\n }\n controls(bool) {\n if (bool === undefined) {\n return this.videojs.controls();\n }\n this.videojs.controls(bool);\n return this;\n }\n ima() {\n return {\n playAd: this.videojs.ima.playAd\n };\n }\n loop(bool) {\n if (bool === undefined) {\n return this.videojs.loop();\n }\n this.videojs.loop(bool);\n return this;\n }\n el() {\n return this.videojs.el();\n }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VideoPlayer);\n\n//# sourceURL=webpack://cloudinary-video-player/./video-player.js?");
|
|
771
804
|
|
|
772
805
|
/***/ }),
|
|
773
806
|
|
|
@@ -3018,6 +3051,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
3018
3051
|
|
|
3019
3052
|
/***/ }),
|
|
3020
3053
|
|
|
3054
|
+
/***/ "../node_modules/srt-parser-2/dist/index.js":
|
|
3055
|
+
/*!**************************************************!*\
|
|
3056
|
+
!*** ../node_modules/srt-parser-2/dist/index.js ***!
|
|
3057
|
+
\**************************************************/
|
|
3058
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
3059
|
+
|
|
3060
|
+
"use strict";
|
|
3061
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nclass Parser {\n seperator = \",\";\n timestampToSeconds(srtTimestamp) {\n const [rest, millisecondsString] = srtTimestamp.split(\",\");\n const milliseconds = parseInt(millisecondsString);\n const [hours, minutes, seconds] = rest.split(\":\").map((x) => parseInt(x));\n const result = milliseconds * 0.001 + seconds + 60 * minutes + 3600 * hours;\n // fix odd JS roundings, e.g. timestamp '00:01:20,460' result is 80.46000000000001\n return Math.round(result * 1000) / 1000;\n }\n ;\n correctFormat(time) {\n // Fix the format if the format is wrong\n // 00:00:28.9670 Become 00:00:28,967\n // 00:00:28.967 Become 00:00:28,967\n // 00:00:28.96 Become 00:00:28,960\n // 00:00:28.9 Become 00:00:28,900\n // 00:00:28,96 Become 00:00:28,960\n // 00:00:28,9 Become 00:00:28,900\n // 00:00:28,0 Become 00:00:28,000\n // 00:00:28,01 Become 00:00:28,010\n // 0:00:10,500 Become 00:00:10,500\n let str = time.replace(\".\", \",\");\n var hour = null;\n var minute = null;\n var second = null;\n var millisecond = null;\n // Handle millisecond\n var [front, ms] = str.split(\",\");\n millisecond = this.fixed_str_digit(3, ms);\n // Handle hour\n var [a_hour, a_minute, a_second] = front.split(\":\");\n hour = this.fixed_str_digit(2, a_hour, false);\n minute = this.fixed_str_digit(2, a_minute, false);\n second = this.fixed_str_digit(2, a_second, false);\n return `${hour}:${minute}:${second},${millisecond}`;\n }\n /*\n // make sure string is 'how_many_digit' long\n // if str is shorter than how_many_digit, pad with 0\n // if str is longer than how_many_digit, slice from the beginning\n // Example:\n \n Input: fixed_str_digit(3, '100')\n Output: 100\n Explain: unchanged, because \"100\" is 3 digit\n \n Input: fixed_str_digit(3, '50')\n Output: 500\n Explain: pad end with 0\n \n Input: fixed_str_digit(3, '50', false)\n Output: 050\n Explain: pad start with 0\n \n Input: fixed_str_digit(3, '7771')\n Output: 777\n Explain: slice from beginning\n */\n fixed_str_digit(how_many_digit, str, padEnd = true) {\n if (str.length == how_many_digit) {\n return str;\n }\n if (str.length > how_many_digit) {\n return str.slice(0, how_many_digit);\n }\n if (str.length < how_many_digit) {\n if (padEnd) {\n return str.padEnd(how_many_digit, \"0\");\n }\n else {\n return str.padStart(how_many_digit, \"0\");\n }\n }\n }\n tryComma(data) {\n data = data.replace(/\\r/g, \"\");\n var regex = /(\\d+)\\n(\\d{1,2}:\\d{2}:\\d{2},\\d{1,3}) --> (\\d{1,2}:\\d{2}:\\d{2},\\d{1,3})/g;\n let data_array = data.split(regex);\n data_array.shift(); // remove first '' in array\n return data_array;\n }\n tryDot(data) {\n data = data.replace(/\\r/g, \"\");\n var regex = /(\\d+)\\n(\\d{1,2}:\\d{2}:\\d{2}\\.\\d{1,3}) --> (\\d{1,2}:\\d{2}:\\d{2}\\.\\d{1,3})/g;\n let data_array = data.split(regex);\n data_array.shift(); // remove first '' in array\n this.seperator = \".\";\n return data_array;\n }\n fromSrt(data) {\n var originalData = data;\n var data_array = this.tryComma(originalData);\n if (data_array.length == 0) {\n data_array = this.tryDot(originalData);\n }\n var items = [];\n for (var i = 0; i < data_array.length; i += 4) {\n const startTime = this.correctFormat(data_array[i + 1].trim());\n const endTime = this.correctFormat(data_array[i + 2].trim());\n var new_line = {\n id: data_array[i].trim(),\n startTime,\n startSeconds: this.timestampToSeconds(startTime),\n endTime,\n endSeconds: this.timestampToSeconds(endTime),\n text: data_array[i + 3].trim(),\n };\n items.push(new_line);\n }\n return items;\n }\n toSrt(data) {\n var res = \"\";\n const end_of_line = \"\\r\\n\";\n for (var i = 0; i < data.length; i++) {\n var s = data[i];\n res += s.id + end_of_line;\n res += s.startTime + \" --> \" + s.endTime + end_of_line;\n res += s.text.replace(\"\\n\", end_of_line) + end_of_line + end_of_line;\n }\n return res;\n }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Parser);\n\n\n//# sourceURL=webpack://cloudinary-video-player/../node_modules/srt-parser-2/dist/index.js?");
|
|
3062
|
+
|
|
3063
|
+
/***/ }),
|
|
3064
|
+
|
|
3021
3065
|
/***/ "../node_modules/uuid/dist/esm-browser/native.js":
|
|
3022
3066
|
/*!*******************************************************!*\
|
|
3023
3067
|
!*** ../node_modules/uuid/dist/esm-browser/native.js ***!
|