cloudinary-video-player 3.1.2-edge.3 → 3.1.2-edge.4

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.
Files changed (52) hide show
  1. package/dist/adaptive-streaming.js +18 -36920
  2. package/dist/adaptive-streaming.min.js +3 -4
  3. package/dist/chapters.js +13 -217
  4. package/dist/chapters.min.js +3 -4
  5. package/dist/cld-video-player.css +2 -4
  6. package/dist/cld-video-player.js +307 -46341
  7. package/dist/cld-video-player.light.js +307 -46341
  8. package/dist/cld-video-player.light.min.js +4 -5
  9. package/dist/cld-video-player.min.css +3 -4
  10. package/dist/cld-video-player.min.js +4 -5
  11. package/dist/colors.js +13 -67
  12. package/dist/colors.min.js +3 -4
  13. package/dist/dash.js +15 -69999
  14. package/dist/dash.min.js +3 -4
  15. package/dist/debug.js +17 -378
  16. package/dist/debug.min.js +3 -4
  17. package/dist/ima.js +24 -7049
  18. package/dist/ima.min.js +3 -4
  19. package/dist/interaction-areas.js +20 -640
  20. package/dist/interaction-areas.min.js +3 -4
  21. package/dist/node_modules_lodash_throttle_js.js +17 -395
  22. package/dist/playlist.js +40 -1504
  23. package/dist/playlist.min.js +3 -4
  24. package/dist/recommendations-overlay.js +19 -391
  25. package/dist/recommendations-overlay.min.js +3 -4
  26. package/dist/share.js +14 -195
  27. package/dist/share.min.js +3 -4
  28. package/dist/shoppable.js +21 -762
  29. package/dist/shoppable.min.js +3 -4
  30. package/dist/srt-text-tracks.js +13 -189
  31. package/dist/srt-text-tracks.min.js +3 -4
  32. package/dist/visual-search.js +16 -271
  33. package/dist/visual-search.min.js +3 -4
  34. package/lib/adaptive-streaming.js +1 -2
  35. package/lib/all.js +1 -2
  36. package/lib/chapters.js +1 -2
  37. package/lib/cld-video-player.js +1 -2
  38. package/lib/cld-video-player.min.css +0 -2
  39. package/lib/colors.js +1 -2
  40. package/lib/dash.js +1 -2
  41. package/lib/debug.js +1 -2
  42. package/lib/ima.js +1 -2
  43. package/lib/interaction-areas.js +1 -2
  44. package/lib/player.js +1 -2
  45. package/lib/playlist.js +1 -2
  46. package/lib/recommendations-overlay.js +1 -2
  47. package/lib/share.js +1 -2
  48. package/lib/shoppable.js +1 -2
  49. package/lib/srt-text-tracks.js +1 -2
  50. package/lib/videoPlayer.js +1 -2
  51. package/lib/visual-search.js +1 -2
  52. package/package.json +2 -3
@@ -1,7 +1,6 @@
1
1
  /*!
2
- * Cloudinary Video Player v3.1.2-edge.3
3
- * Built on 2025-08-06T14:15:21.113Z
2
+ * Cloudinary Video Player v3.1.2-edge.4
3
+ * Built on 2025-08-11T06:41:01.308Z
4
4
  * https://github.com/cloudinary/cloudinary-video-player
5
5
  */
6
- "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[410],{7604:(e,t,s)=>{s.r(t),s.d(t,{default:()=>k});var i=s(6673),n=s.n(i);const o=n().getComponent("ClickableComponent");const r=class extends o{setItem(e){const{action:t,source:s}=e;this.source=s;const i=s.info();this.setTitle(i.title||s.publicId()),this.setPoster(this.source.poster().url({transformation:{aspect_ratio:"16:9",crop:"pad",background:"black"}})),this.setAction(t)}setTitle(e){this.title.innerText=e}setAction(e){this.action=e}handleClick(){super.handleClick(),this.player().trigger("recommendationshide"),this.action()}};var a=s(7878),c=s.n(a);const l=n().dom||n();const h=class extends r{setItem(e){super.setItem(e);const t=this.source.info();if(this.setTitle(t.title),this.setSubtitle(t.subtitle),t.description){const e=300,s=t.description.length>e?t.description.substring(0,e)+"...":t.description;this.setDescription(s)}}setPoster(e){this.poster.style.backgroundImage=`url('${e}')`}setTitle(e){c().setText(this.title,e),this.setAriaCheck(this.title,!!e)}setSubtitle(e){c().setText(this.subtitle,e),this.setAriaCheck(this.subtitle,!!e)}setDescription(e){c().setText(this.description,e),this.setAriaCheck(this.description,!!e)}setAriaCheck(e){!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden","true")}clearItem(){this.setTitle(""),this.setSubtitle(""),this.setDescription(""),this.poster.style.backgroundImage=null}createEl(){const e=super.createEl("div",{className:"vjs-recommendations-overlay-item vjs-recommendations-overlay-item-primary"});return this.poster=l.createEl("div",{className:"vjs-recommendations-overlay-item-primary-image"}),this.title=l.createEl("h2",{ariaLabel:"Recmmendation Title"}),this.setAriaCheck(this.title,!1),this.title.innerHTML="",this.subtitle=l.createEl("h3",{ariaLabel:"Recmmendation Subtitle"}),this.setAriaCheck(this.subtitle,!1),this.subtitle.innerHTML="",this.description=l.createEl("p"),this.setAriaCheck(this.description,!1),this.description.innerHTML="",this.content=l.createEl("div",{className:"vjs-recommendations-overlay-item-info vjs-recommendations-overlay-item-primary-content"}),this.content.appendChild(this.title),this.content.appendChild(this.subtitle),this.content.appendChild(this.description),e.appendChild(this.poster),e.appendChild(this.content),e}},d=n().dom||n();const m=class extends r{setItem(e){super.setItem(e),this.setDuration("")}setPoster(e){this.el().style.backgroundImage=`url('${e}')`}setDuration(e){this.duration.innerText=e}createEl(){const e=super.createEl("div",{className:"vjs-recommendations-overlay-item vjs-recommendations-overlay-item-secondary"});this.title=d.createEl("span",{className:"vjs-recommendations-overlay-item-secondary-title"}),this.title.innerHTML="",this.duration=d.createEl("span",{className:"vjs-recommendations-overlay-item-secondary-duration"}),this.duration.innerHTML="";const t=d.createEl("div",{className:"vjs-recommendations-overlay-item-info"});return t.appendChild(this.title),t.appendChild(this.duration),e.appendChild(t),e}handleClick(){super.handleClick(),this.action()}},p=n().getComponent("Component");const u=class extends p{setItems(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];this.clearItems(),t&&t.forEach((e=>{const t=new m(this.player());t.setItem(e),this.addChild(t)}))}clearItems(){this.children().forEach((()=>{this.removeChild(this.children()[0])}))}createEl(){return super.createEl("div",{className:"vjs-recommendations-overlay-item-secondary-container"})}},v=n().getComponent("Component");class y extends v{constructor(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];super(e,...s),this._primary=new h(e),this._secondaryContainer=new u(e),this.addChild(this._primary),this.addChild(this._secondaryContainer)}setItems(e){this._primary.setItem(e);for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];this._secondaryContainer.setItems(...s)}createEl(){return super.createEl("div",{className:"aspect-ratio-content"})}}const C=class extends v{constructor(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];super(e,...s),this._content=new y(e),this.addChild(this._content)}setItems(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];this._content.setItems(e,...s)}clearItems(){this._content._primary.clearItem(),this._content._secondaryContainer.clearItems()}createEl(){return super.createEl("div",{className:"vjs-recommendations-overlay-content"})}},g=n().getComponent("ClickableComponent");const I=class extends g{createEl(){return super.createEl("span",{className:"vjs-recommendations-overlay-hide vjs-icon-close"})}handleClick(){this.options_.clickHandler()}},b=n().getComponent("Component");class E extends b{constructor(e,t){for(var s=arguments.length,i=new Array(s>2?s-2:0),n=2;n<s;n++)i[n-2]=arguments[n];super(e,...i),this._content=new C(e),this.addChild(this._content),this.addChild(new I(e,{clickHandler:()=>{this.close()}},...i)),this.setEvents(e),this.doNotOpen=!1}setEvents(e){this.on(e,"recommendationschanged",((e,t)=>{this.setItems(...t.items)})),this.on(e,"recommendationsnoshow",this.setDoNotOpen),this.on(e,"recommendationsshow",this.open),this.on(e,"recommendationshide",this.close),this.on(e,"cldsourcechanged",(()=>{this.clearItems(),this.close()}))}setDoNotOpen(){this.doNotOpen=!0}open(){this.doNotOpen||(this._showControlsOnClose=this.player().controls(),this.player().controls(!1),this.el().style.visibility="visible")}clearItems(){this._content.clearItems()}close(){this.el().style.visibility="hidden",this._showControlsOnClose&&this.player().controls(!0)}createEl(){const e="vjs-recommendations-overlay",t=super.createEl("div",{className:e});return n().dom.addClass(t,e),t}setItems(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];this.doNotOpen=!1,s=s.slice(0,3),this._content.setItems(e,...s)}handleClick(){this.stopPropagation()}dispose(){super.dispose()}}n().registerComponent("recommendationsOverlay",E);const k=E}}]);
7
- //# sourceMappingURL=recommendations-overlay.min.js.map
6
+ "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[410],{7604:(e,t,s)=>{s.r(t),s.d(t,{default:()=>k});var i=s(6673),n=s.n(i);const o=n().getComponent("ClickableComponent");const r=class extends o{setItem(e){const{action:t,source:s}=e;this.source=s;const i=s.info();this.setTitle(i.title||s.publicId()),this.setPoster(this.source.poster().url({transformation:{aspect_ratio:"16:9",crop:"pad",background:"black"}})),this.setAction(t)}setTitle(e){this.title.innerText=e}setAction(e){this.action=e}handleClick(){super.handleClick(),this.player().trigger("recommendationshide"),this.action()}};var a=s(7878),c=s.n(a);const l=n().dom||n();const h=class extends r{setItem(e){super.setItem(e);const t=this.source.info();if(this.setTitle(t.title),this.setSubtitle(t.subtitle),t.description){const e=300,s=t.description.length>e?t.description.substring(0,e)+"...":t.description;this.setDescription(s)}}setPoster(e){this.poster.style.backgroundImage=`url('${e}')`}setTitle(e){c().setText(this.title,e),this.setAriaCheck(this.title,!!e)}setSubtitle(e){c().setText(this.subtitle,e),this.setAriaCheck(this.subtitle,!!e)}setDescription(e){c().setText(this.description,e),this.setAriaCheck(this.description,!!e)}setAriaCheck(e){!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden","true")}clearItem(){this.setTitle(""),this.setSubtitle(""),this.setDescription(""),this.poster.style.backgroundImage=null}createEl(){const e=super.createEl("div",{className:"vjs-recommendations-overlay-item vjs-recommendations-overlay-item-primary"});return this.poster=l.createEl("div",{className:"vjs-recommendations-overlay-item-primary-image"}),this.title=l.createEl("h2",{ariaLabel:"Recmmendation Title"}),this.setAriaCheck(this.title,!1),this.title.innerHTML="",this.subtitle=l.createEl("h3",{ariaLabel:"Recmmendation Subtitle"}),this.setAriaCheck(this.subtitle,!1),this.subtitle.innerHTML="",this.description=l.createEl("p"),this.setAriaCheck(this.description,!1),this.description.innerHTML="",this.content=l.createEl("div",{className:"vjs-recommendations-overlay-item-info vjs-recommendations-overlay-item-primary-content"}),this.content.appendChild(this.title),this.content.appendChild(this.subtitle),this.content.appendChild(this.description),e.appendChild(this.poster),e.appendChild(this.content),e}},d=n().dom||n();const m=class extends r{setItem(e){super.setItem(e),this.setDuration("")}setPoster(e){this.el().style.backgroundImage=`url('${e}')`}setDuration(e){this.duration.innerText=e}createEl(){const e=super.createEl("div",{className:"vjs-recommendations-overlay-item vjs-recommendations-overlay-item-secondary"});this.title=d.createEl("span",{className:"vjs-recommendations-overlay-item-secondary-title"}),this.title.innerHTML="",this.duration=d.createEl("span",{className:"vjs-recommendations-overlay-item-secondary-duration"}),this.duration.innerHTML="";const t=d.createEl("div",{className:"vjs-recommendations-overlay-item-info"});return t.appendChild(this.title),t.appendChild(this.duration),e.appendChild(t),e}handleClick(){super.handleClick(),this.action()}},p=n().getComponent("Component");const u=class extends p{setItems(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];this.clearItems(),t&&t.forEach((e=>{const t=new m(this.player());t.setItem(e),this.addChild(t)}))}clearItems(){this.children().forEach((()=>{this.removeChild(this.children()[0])}))}createEl(){return super.createEl("div",{className:"vjs-recommendations-overlay-item-secondary-container"})}},v=n().getComponent("Component");class y extends v{constructor(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];super(e,...s),this._primary=new h(e),this._secondaryContainer=new u(e),this.addChild(this._primary),this.addChild(this._secondaryContainer)}setItems(e){this._primary.setItem(e);for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];this._secondaryContainer.setItems(...s)}createEl(){return super.createEl("div",{className:"aspect-ratio-content"})}}const C=class extends v{constructor(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];super(e,...s),this._content=new y(e),this.addChild(this._content)}setItems(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];this._content.setItems(e,...s)}clearItems(){this._content._primary.clearItem(),this._content._secondaryContainer.clearItems()}createEl(){return super.createEl("div",{className:"vjs-recommendations-overlay-content"})}},g=n().getComponent("ClickableComponent");const I=class extends g{createEl(){return super.createEl("span",{className:"vjs-recommendations-overlay-hide vjs-icon-close"})}handleClick(){this.options_.clickHandler()}},b=n().getComponent("Component");class E extends b{constructor(e,t){for(var s=arguments.length,i=new Array(s>2?s-2:0),n=2;n<s;n++)i[n-2]=arguments[n];super(e,...i),this._content=new C(e),this.addChild(this._content),this.addChild(new I(e,{clickHandler:()=>{this.close()}},...i)),this.setEvents(e),this.doNotOpen=!1}setEvents(e){this.on(e,"recommendationschanged",((e,t)=>{this.setItems(...t.items)})),this.on(e,"recommendationsnoshow",this.setDoNotOpen),this.on(e,"recommendationsshow",this.open),this.on(e,"recommendationshide",this.close),this.on(e,"cldsourcechanged",(()=>{this.clearItems(),this.close()}))}setDoNotOpen(){this.doNotOpen=!0}open(){this.doNotOpen||(this._showControlsOnClose=this.player().controls(),this.player().controls(!1),this.el().style.visibility="visible")}clearItems(){this._content.clearItems()}close(){this.el().style.visibility="hidden",this._showControlsOnClose&&this.player().controls(!0)}createEl(){const e="vjs-recommendations-overlay",t=super.createEl("div",{className:e});return n().dom.addClass(t,e),t}setItems(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i<t;i++)s[i-1]=arguments[i];this.doNotOpen=!1,s=s.slice(0,3),this._content.setItems(e,...s)}handleClick(){this.stopPropagation()}dispose(){super.dispose()}}n().registerComponent("recommendationsOverlay",E);const k=E}}]);
package/dist/share.js CHANGED
@@ -1,9 +1,17 @@
1
1
  /*!
2
- * Cloudinary Video Player v3.1.2-edge.3
3
- * Built on 2025-08-06T14:15:40.534Z
2
+ * Cloudinary Video Player v3.1.2-edge.4
3
+ * Built on 2025-08-11T06:41:19.174Z
4
4
  * https://github.com/cloudinary/cloudinary-video-player
5
5
  */
6
6
  "use strict";
7
+ /*
8
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
9
+ * This devtool is neither made for production nor for readable output files.
10
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
11
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
12
+ * or disable the default devtool with "devtool: false".
13
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
14
+ */
7
15
  (self["cloudinaryVideoPlayerChunkLoading"] = self["cloudinaryVideoPlayerChunkLoading"] || []).push([["share"],{
8
16
 
9
17
  /***/ "./plugins/share/components/download-button.js":
@@ -12,60 +20,7 @@
12
20
  \*****************************************************/
13
21
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
14
22
 
15
- __webpack_require__.r(__webpack_exports__);
16
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
17
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18
- /* harmony export */ });
19
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/alt/video.core-exposed.js");
20
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
21
-
22
- const ClickableComponent = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('ClickableComponent');
23
- class ShareDownloadButton extends ClickableComponent {
24
- constructor(player) {
25
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
26
- super(player, options);
27
- }
28
- handleClick(event) {
29
- super.handleClick(event);
30
- // Delegate the actual download to the plugin API if present
31
- if (this.player().share && typeof this.player().share.download === 'function') {
32
- this.player().share.download();
33
- }
34
- }
35
- createEl() {
36
- const button = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('button', {
37
- className: 'vjs-control vjs-share-download-button vjs-button',
38
- ariaLabel: 'Download video',
39
- title: 'Download video'
40
- });
41
- const iconSpan = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('span', {
42
- className: 'vjs-icon-file-download vjs-icon-placeholder'
43
- });
44
- button.appendChild(iconSpan);
45
- const spinnerSpan = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('span', {
46
- className: 'vjs-loading-spinner'
47
- });
48
- button.appendChild(spinnerSpan);
49
- return button;
50
- }
51
-
52
- /**
53
- * Toggles the "preparing download" visual state (spinner + title).
54
- * @param {boolean} isPreparing
55
- */
56
- setPreparing(isPreparing) {
57
- const el = this.el();
58
- if (isPreparing) {
59
- el.classList.add('vjs-waiting');
60
- el.setAttribute('title', 'Download is being prepared');
61
- } else {
62
- el.classList.remove('vjs-waiting');
63
- el.setAttribute('title', 'Download video');
64
- }
65
- }
66
- }
67
- video_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('ShareDownloadButton', ShareDownloadButton);
68
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ShareDownloadButton);
23
+ 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\nconst ClickableComponent = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('ClickableComponent');\nclass ShareDownloadButton extends ClickableComponent {\n constructor(player) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(player, options);\n }\n handleClick(event) {\n super.handleClick(event);\n // Delegate the actual download to the plugin API if present\n if (this.player().share && typeof this.player().share.download === 'function') {\n this.player().share.download();\n }\n }\n createEl() {\n const button = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('button', {\n className: 'vjs-control vjs-share-download-button vjs-button',\n ariaLabel: 'Download video',\n title: 'Download video'\n });\n const iconSpan = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('span', {\n className: 'vjs-icon-file-download vjs-icon-placeholder'\n });\n button.appendChild(iconSpan);\n const spinnerSpan = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('span', {\n className: 'vjs-loading-spinner'\n });\n button.appendChild(spinnerSpan);\n return button;\n }\n\n /**\n * Toggles the \"preparing download\" visual state (spinner + title).\n * @param {boolean} isPreparing\n */\n setPreparing(isPreparing) {\n const el = this.el();\n if (isPreparing) {\n el.classList.add('vjs-waiting');\n el.setAttribute('title', 'Download is being prepared');\n } else {\n el.classList.remove('vjs-waiting');\n el.setAttribute('title', 'Download video');\n }\n }\n}\nvideo_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('ShareDownloadButton', ShareDownloadButton);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ShareDownloadButton);\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/share/components/download-button.js?");
69
24
 
70
25
  /***/ }),
71
26
 
@@ -75,140 +30,7 @@ video_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('ShareDownload
75
30
  \********************************/
76
31
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
77
32
 
78
- __webpack_require__.r(__webpack_exports__);
79
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
81
- /* harmony export */ });
82
- /* harmony import */ var _components_download_button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/download-button */ "./plugins/share/components/download-button.js");
83
- /* harmony import */ var _share_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./share.scss */ "./plugins/share/share.scss");
84
- /* harmony import */ var plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! plugins/cloudinary/common */ "./plugins/cloudinary/common.js");
85
- /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/omit */ "../node_modules/lodash/omit.js");
86
- /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_3__);
87
-
88
-
89
-
90
-
91
- const SharePlugin = function () {
92
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
93
- let playerInstance = arguments.length > 1 ? arguments[1] : undefined;
94
- const player = playerInstance || this;
95
- player.addClass('vjs-share');
96
- const addDownloadButton = () => {
97
- const controlBar = player.getChild('ControlBar');
98
- if (!controlBar || controlBar.getChild('ShareDownloadButton')) {
99
- return;
100
- }
101
- const children = controlBar.children();
102
- const insertBeforeIndex = children.findIndex(c => c.name_ === 'FullscreenToggle');
103
- controlBar.addChild('ShareDownloadButton', {}, insertBeforeIndex !== -1 ? insertBeforeIndex : undefined);
104
- };
105
- const removeDownloadButton = () => {
106
- if (!player.controlBar) {
107
- return;
108
- }
109
- const btn = player.controlBar.getChild('ShareDownloadButton');
110
- if (btn) {
111
- player.controlBar.removeChild(btn);
112
- }
113
- };
114
- const getDownloadUrl = () => {
115
- const source = player.currentSource?.();
116
- if (!source) {
117
- return null;
118
- }
119
-
120
- // Strip format / codec related transformation arrays
121
- const STRIP_KEYS = ['format', 'video_codec', 'streaming_profile'];
122
- const stripKeysDeep = value => {
123
- if (Array.isArray(value)) {
124
- return value.map(stripKeysDeep);
125
- }
126
- if (value && typeof value === 'object') {
127
- const cleaned = lodash_omit__WEBPACK_IMPORTED_MODULE_3___default()(value, STRIP_KEYS);
128
- Object.keys(cleaned).forEach(k => {
129
- cleaned[k] = stripKeysDeep(cleaned[k]);
130
- });
131
- return cleaned;
132
- }
133
- return value;
134
- };
135
- const transformations = stripKeysDeep(player.cloudinary.transformation() || {});
136
- const baseOptions = {
137
- ...player.cloudinary.cloudinaryConfig(),
138
- ...transformations,
139
- resource_type: 'video',
140
- format: 'mp4',
141
- video_codec: 'h264',
142
- flags: `streaming_attachment:${player.cloudinary.currentPublicId()}`
143
- };
144
-
145
- // For ABR - download a limited-size video
146
- if (source.isAdaptive) {
147
- Object.assign(baseOptions, {
148
- crop: 'limit',
149
- width: 1920,
150
- height: 1920
151
- });
152
- }
153
-
154
- // For audio sources, set the format to mp3
155
- if (player.cloudinary.source()?.getType() === 'AudioSource') {
156
- Object.assign(baseOptions, {
157
- format: 'mp3',
158
- video_codec: undefined
159
- });
160
- }
161
- return (0,plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_2__.getCloudinaryUrl)(player.cloudinary.currentPublicId(), baseOptions);
162
- };
163
- const download = () => {
164
- const url = getDownloadUrl();
165
- if (!url) {
166
- console.warn('Share plugin: Unable to resolve download URL.');
167
- return;
168
- }
169
- const MAX_ATTEMPTS = 60; // 60 tries / 10s interval
170
- const INTERVAL_MS = 10000;
171
- const RETRY_STATUS_CODES = [423];
172
- const triggerDownload = () => {
173
- const a = document.createElement('a');
174
- a.href = url;
175
- a.download = '';
176
- document.body.appendChild(a);
177
- a.click();
178
- document.body.removeChild(a);
179
- };
180
- const btn = player.controlBar?.getChild('ShareDownloadButton');
181
- const setPreparingState = isPreparing => {
182
- btn?.setPreparing?.(isPreparing);
183
- };
184
- const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
185
- const fetchDownload = async function () {
186
- let attempt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
187
- const response = await fetch(url, {
188
- method: 'HEAD'
189
- });
190
- if (RETRY_STATUS_CODES.includes(response.status) && attempt < MAX_ATTEMPTS) {
191
- if (attempt === 0) {
192
- setPreparingState(true);
193
- }
194
- await wait(INTERVAL_MS);
195
- return fetchDownload(attempt + 1);
196
- }
197
- setPreparingState(false);
198
- triggerDownload();
199
- };
200
- fetchDownload();
201
- };
202
- if (options.download) {
203
- addDownloadButton();
204
- }
205
- player.share = {
206
- download,
207
- addDownloadButton,
208
- removeDownloadButton
209
- };
210
- };
211
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SharePlugin);
33
+ 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 _components_download_button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/download-button */ \"./plugins/share/components/download-button.js\");\n/* harmony import */ var _share_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./share.scss */ \"./plugins/share/share.scss\");\n/* harmony import */ var plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/omit */ \"../node_modules/lodash/omit.js\");\n/* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nconst SharePlugin = function () {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let playerInstance = arguments.length > 1 ? arguments[1] : undefined;\n const player = playerInstance || this;\n player.addClass('vjs-share');\n const addDownloadButton = () => {\n const controlBar = player.getChild('ControlBar');\n if (!controlBar || controlBar.getChild('ShareDownloadButton')) {\n return;\n }\n const children = controlBar.children();\n const insertBeforeIndex = children.findIndex(c => c.name_ === 'FullscreenToggle');\n controlBar.addChild('ShareDownloadButton', {}, insertBeforeIndex !== -1 ? insertBeforeIndex : undefined);\n };\n const removeDownloadButton = () => {\n if (!player.controlBar) {\n return;\n }\n const btn = player.controlBar.getChild('ShareDownloadButton');\n if (btn) {\n player.controlBar.removeChild(btn);\n }\n };\n const getDownloadUrl = () => {\n const source = player.currentSource?.();\n if (!source) {\n return null;\n }\n\n // Strip format / codec related transformation arrays\n const STRIP_KEYS = ['format', 'video_codec', 'streaming_profile'];\n const stripKeysDeep = value => {\n if (Array.isArray(value)) {\n return value.map(stripKeysDeep);\n }\n if (value && typeof value === 'object') {\n const cleaned = lodash_omit__WEBPACK_IMPORTED_MODULE_3___default()(value, STRIP_KEYS);\n Object.keys(cleaned).forEach(k => {\n cleaned[k] = stripKeysDeep(cleaned[k]);\n });\n return cleaned;\n }\n return value;\n };\n const transformations = stripKeysDeep(player.cloudinary.transformation() || {});\n const baseOptions = {\n ...player.cloudinary.cloudinaryConfig(),\n ...transformations,\n resource_type: 'video',\n format: 'mp4',\n video_codec: 'h264',\n flags: `streaming_attachment:${player.cloudinary.currentPublicId()}`\n };\n\n // For ABR - download a limited-size video\n if (source.isAdaptive) {\n Object.assign(baseOptions, {\n crop: 'limit',\n width: 1920,\n height: 1920\n });\n }\n\n // For audio sources, set the format to mp3\n if (player.cloudinary.source()?.getType() === 'AudioSource') {\n Object.assign(baseOptions, {\n format: 'mp3',\n video_codec: undefined\n });\n }\n return (0,plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_2__.getCloudinaryUrl)(player.cloudinary.currentPublicId(), baseOptions);\n };\n const download = () => {\n const url = getDownloadUrl();\n if (!url) {\n console.warn('Share plugin: Unable to resolve download URL.');\n return;\n }\n const MAX_ATTEMPTS = 60; // 60 tries / 10s interval\n const INTERVAL_MS = 10000;\n const RETRY_STATUS_CODES = [423];\n const triggerDownload = () => {\n const a = document.createElement('a');\n a.href = url;\n a.download = '';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n };\n const btn = player.controlBar?.getChild('ShareDownloadButton');\n const setPreparingState = isPreparing => {\n btn?.setPreparing?.(isPreparing);\n };\n const wait = ms => new Promise(resolve => setTimeout(resolve, ms));\n const fetchDownload = async function () {\n let attempt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n const response = await fetch(url, {\n method: 'HEAD'\n });\n if (RETRY_STATUS_CODES.includes(response.status) && attempt < MAX_ATTEMPTS) {\n if (attempt === 0) {\n setPreparingState(true);\n }\n await wait(INTERVAL_MS);\n return fetchDownload(attempt + 1);\n }\n setPreparingState(false);\n triggerDownload();\n };\n fetchDownload();\n };\n if (options.download) {\n addDownloadButton();\n }\n player.share = {\n download,\n addDownloadButton,\n removeDownloadButton\n };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SharePlugin);\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/share/share.js?");
212
34
 
213
35
  /***/ }),
214
36
 
@@ -218,11 +40,8 @@ const SharePlugin = function () {
218
40
  \**********************************/
219
41
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
220
42
 
221
- __webpack_require__.r(__webpack_exports__);
222
- // extracted by mini-css-extract-plugin
223
-
43
+ eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/share/share.scss?");
224
44
 
225
45
  /***/ })
226
46
 
227
- }]);
228
- //# sourceMappingURL=share.js.map
47
+ }]);
package/dist/share.min.js CHANGED
@@ -1,7 +1,6 @@
1
1
  /*!
2
- * Cloudinary Video Player v3.1.2-edge.3
3
- * Built on 2025-08-06T14:15:21.113Z
2
+ * Cloudinary Video Player v3.1.2-edge.4
3
+ * Built on 2025-08-11T06:41:01.308Z
4
4
  * https://github.com/cloudinary/cloudinary-video-player
5
5
  */
6
- "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[976],{2130:(e,o,t)=>{t.d(o,{default:()=>c});var n=t(6673),a=t.n(n);const r=a().getComponent("ClickableComponent");class d extends r{constructor(e){super(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}handleClick(e){super.handleClick(e),this.player().share&&"function"==typeof this.player().share.download&&this.player().share.download()}createEl(){const e=a().dom.createEl("button",{className:"vjs-control vjs-share-download-button vjs-button",ariaLabel:"Download video",title:"Download video"}),o=a().dom.createEl("span",{className:"vjs-icon-file-download vjs-icon-placeholder"});e.appendChild(o);const t=a().dom.createEl("span",{className:"vjs-loading-spinner"});return e.appendChild(t),e}setPreparing(e){const o=this.el();e?(o.classList.add("vjs-waiting"),o.setAttribute("title","Download is being prepared")):(o.classList.remove("vjs-waiting"),o.setAttribute("title","Download video"))}}a().registerComponent("ShareDownloadButton",d);var i=t(8033),l=t(4319),s=t.n(l);const c=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=(arguments.length>1?arguments[1]:void 0)||this;o.addClass("vjs-share");const t=()=>{const e=o.getChild("ControlBar");if(!e||e.getChild("ShareDownloadButton"))return;const t=e.children().findIndex((e=>"FullscreenToggle"===e.name_));e.addChild("ShareDownloadButton",{},-1!==t?t:void 0)};e.download&&t(),o.share={download:()=>{const e=(()=>{const e=o.currentSource?.();if(!e)return null;const t=["format","video_codec","streaming_profile"],n=e=>{if(Array.isArray(e))return e.map(n);if(e&&"object"==typeof e){const o=s()(e,t);return Object.keys(o).forEach((e=>{o[e]=n(o[e])})),o}return e},a=n(o.cloudinary.transformation()||{}),r={...o.cloudinary.cloudinaryConfig(),...a,resource_type:"video",format:"mp4",video_codec:"h264",flags:`streaming_attachment:${o.cloudinary.currentPublicId()}`};return e.isAdaptive&&Object.assign(r,{crop:"limit",width:1920,height:1920}),"AudioSource"===o.cloudinary.source()?.getType()&&Object.assign(r,{format:"mp3",video_codec:void 0}),(0,i.KA)(o.cloudinary.currentPublicId(),r)})();if(!e)return void console.warn("Share plugin: Unable to resolve download URL.");const t=[423],n=o.controlBar?.getChild("ShareDownloadButton"),a=e=>{n?.setPreparing?.(e)},r=async function(){let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const n=await fetch(e,{method:"HEAD"});if(t.includes(n.status)&&o<60)return 0===o&&a(!0),await(d=1e4,new Promise((e=>setTimeout(e,d)))),r(o+1);var d;a(!1),(()=>{const o=document.createElement("a");o.href=e,o.download="",document.body.appendChild(o),o.click(),document.body.removeChild(o)})()};r()},addDownloadButton:t,removeDownloadButton:()=>{if(!o.controlBar)return;const e=o.controlBar.getChild("ShareDownloadButton");e&&o.controlBar.removeChild(e)}}}}}]);
7
- //# sourceMappingURL=share.min.js.map
6
+ "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[976],{2130:(e,o,t)=>{t.d(o,{default:()=>c});var n=t(6673),a=t.n(n);const r=a().getComponent("ClickableComponent");class d extends r{constructor(e){super(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}handleClick(e){super.handleClick(e),this.player().share&&"function"==typeof this.player().share.download&&this.player().share.download()}createEl(){const e=a().dom.createEl("button",{className:"vjs-control vjs-share-download-button vjs-button",ariaLabel:"Download video",title:"Download video"}),o=a().dom.createEl("span",{className:"vjs-icon-file-download vjs-icon-placeholder"});e.appendChild(o);const t=a().dom.createEl("span",{className:"vjs-loading-spinner"});return e.appendChild(t),e}setPreparing(e){const o=this.el();e?(o.classList.add("vjs-waiting"),o.setAttribute("title","Download is being prepared")):(o.classList.remove("vjs-waiting"),o.setAttribute("title","Download video"))}}a().registerComponent("ShareDownloadButton",d);var i=t(8033),l=t(4319),s=t.n(l);const c=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=(arguments.length>1?arguments[1]:void 0)||this;o.addClass("vjs-share");const t=()=>{const e=o.getChild("ControlBar");if(!e||e.getChild("ShareDownloadButton"))return;const t=e.children().findIndex((e=>"FullscreenToggle"===e.name_));e.addChild("ShareDownloadButton",{},-1!==t?t:void 0)};e.download&&t(),o.share={download:()=>{const e=(()=>{const e=o.currentSource?.();if(!e)return null;const t=["format","video_codec","streaming_profile"],n=e=>{if(Array.isArray(e))return e.map(n);if(e&&"object"==typeof e){const o=s()(e,t);return Object.keys(o).forEach((e=>{o[e]=n(o[e])})),o}return e},a=n(o.cloudinary.transformation()||{}),r={...o.cloudinary.cloudinaryConfig(),...a,resource_type:"video",format:"mp4",video_codec:"h264",flags:`streaming_attachment:${o.cloudinary.currentPublicId()}`};return e.isAdaptive&&Object.assign(r,{crop:"limit",width:1920,height:1920}),"AudioSource"===o.cloudinary.source()?.getType()&&Object.assign(r,{format:"mp3",video_codec:void 0}),(0,i.KA)(o.cloudinary.currentPublicId(),r)})();if(!e)return void console.warn("Share plugin: Unable to resolve download URL.");const t=[423],n=o.controlBar?.getChild("ShareDownloadButton"),a=e=>{n?.setPreparing?.(e)},r=async function(){let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const n=await fetch(e,{method:"HEAD"});if(t.includes(n.status)&&o<60)return 0===o&&a(!0),await(d=1e4,new Promise((e=>setTimeout(e,d)))),r(o+1);var d;a(!1),(()=>{const o=document.createElement("a");o.href=e,o.download="",document.body.appendChild(o),o.click(),document.body.removeChild(o)})()};r()},addDownloadButton:t,removeDownloadButton:()=>{if(!o.controlBar)return;const e=o.controlBar.getChild("ShareDownloadButton");e&&o.controlBar.removeChild(e)}}}}}]);