cloudinary-video-player 2.6.0 → 2.6.1-edge.1

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 (92) hide show
  1. package/README.md +14 -16
  2. package/dist/adaptive-streaming.js +36927 -0
  3. package/dist/adaptive-streaming.min.js +3 -0
  4. package/dist/adaptive-streaming.min.js.LICENSE.txt +3 -0
  5. package/dist/chapters.js +1 -1
  6. package/dist/chapters.min.js +1 -1
  7. package/dist/cld-video-player.css +200 -11
  8. package/dist/cld-video-player.js +37548 -79684
  9. package/dist/cld-video-player.light.js +197 -662
  10. package/dist/cld-video-player.light.min.js +4 -3
  11. package/dist/cld-video-player.min.css +1 -1
  12. package/dist/cld-video-player.min.js +1 -1
  13. package/dist/cld-video-player.min.js.LICENSE.txt +16 -14
  14. package/dist/colors.js +86 -0
  15. package/dist/colors.min.js +2 -0
  16. package/dist/dash.js +62 -2
  17. package/dist/dash.min.js +1 -1
  18. package/dist/debug.js +140 -90
  19. package/dist/debug.min.js +1 -1
  20. package/dist/ima.js +66 -3
  21. package/dist/ima.min.js +1 -1
  22. package/dist/interaction-areas.js +87 -4
  23. package/dist/interaction-areas.min.js +1 -1
  24. package/dist/playlist.js +9 -9
  25. package/dist/playlist.min.js +1 -1
  26. package/dist/recommendations-overlay.js +7 -7
  27. package/dist/recommendations-overlay.min.js +1 -1
  28. package/dist/shoppable.js +7 -7
  29. package/dist/shoppable.min.js +1 -1
  30. package/dist/srt-text-tracks.js +208 -0
  31. package/dist/srt-text-tracks.min.js +2 -0
  32. package/dist/visual-search.js +4 -4
  33. package/dist/visual-search.min.js +1 -1
  34. package/lib/adaptive-streaming.js +3 -0
  35. package/lib/adaptive-streaming.js.LICENSE.txt +3 -0
  36. package/lib/all.js +1 -1
  37. package/lib/all.js.LICENSE.txt +18 -12
  38. package/lib/chapters.js +1 -1
  39. package/lib/cld-video-player.js +1 -1
  40. package/lib/cld-video-player.js.LICENSE.txt +16 -14
  41. package/lib/cld-video-player.min.css +2 -2
  42. package/lib/colors.js +2 -0
  43. package/lib/dash.js +1 -1
  44. package/lib/debug.js +1 -1
  45. package/lib/ima.js +1 -1
  46. package/lib/interaction-areas.js +1 -1
  47. package/lib/player.js +1 -1
  48. package/lib/player.js.LICENSE.txt +16 -14
  49. package/lib/playlist.js +1 -1
  50. package/lib/recommendations-overlay.js +1 -1
  51. package/lib/shoppable.js +1 -1
  52. package/lib/srt-text-tracks.js +2 -0
  53. package/lib/videoPlayer.js +1 -1
  54. package/lib/videoPlayer.js.LICENSE.txt +16 -14
  55. package/lib/visual-search.js +1 -1
  56. package/package.json +10 -23
  57. package/dist/chapters.light.js +0 -233
  58. package/dist/chapters.light.min.js +0 -2
  59. package/dist/cld-video-player.light.css +0 -2428
  60. package/dist/cld-video-player.light.min.css +0 -2
  61. package/dist/cld-video-player.light.min.js.LICENSE.txt +0 -21
  62. package/dist/dash.light.js +0 -70036
  63. package/dist/dash.light.min.js +0 -3
  64. package/dist/dash.light.min.js.LICENSE.txt +0 -1842
  65. package/dist/debug.light.js +0 -383
  66. package/dist/debug.light.min.js +0 -2
  67. package/dist/ima.light.js +0 -7110
  68. package/dist/ima.light.min.js +0 -2
  69. package/dist/interaction-areas.light.js +0 -646
  70. package/dist/interaction-areas.light.min.js +0 -2
  71. package/dist/node_modules_lodash_throttle_js.light.js +0 -449
  72. package/dist/playlist.light.js +0 -1788
  73. package/dist/playlist.light.min.js +0 -2
  74. package/dist/recommendations-overlay.light.js +0 -464
  75. package/dist/recommendations-overlay.light.min.js +0 -2
  76. package/dist/shoppable.light.js +0 -853
  77. package/dist/shoppable.light.min.js +0 -2
  78. package/dist/visual-search.light.js +0 -317
  79. package/dist/visual-search.light.min.js +0 -2
  80. package/lib/light/chapters.js +0 -2
  81. package/lib/light/cld-video-player.light.min.css +0 -21
  82. package/lib/light/dash.js +0 -3
  83. package/lib/light/dash.js.LICENSE.txt +0 -1842
  84. package/lib/light/debug.js +0 -2
  85. package/lib/light/ima.js +0 -2
  86. package/lib/light/index.js +0 -3
  87. package/lib/light/index.js.LICENSE.txt +0 -21
  88. package/lib/light/interaction-areas.js +0 -2
  89. package/lib/light/playlist.js +0 -2
  90. package/lib/light/recommendations-overlay.js +0 -2
  91. package/lib/light/shoppable.js +0 -2
  92. package/lib/light/visual-search.js +0 -2
@@ -1,2 +0,0 @@
1
- (self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[525],{9987:(t,e,s)=>{"use strict";s.d(e,{default:()=>Z});var o=s(6673),a=s.n(o);const i=function(t){const[e,s,o]=t.split(":").reverse();let a=null;return isNaN(e)||(a=60*(+o||0)*60+60*(+s||0)+ +e),a};var r=s(9339);const n={location:"right",toggleIcon:"",width:"20%",startState:"openOnPlay",autoClose:2,transformation:{quality:"auto",width:"auto",fetch_format:"auto",crop:"scale"},products:[],showPostPlayOverlay:!1},l="goto",c="seek",p="overlay",d="shoppable-panel-visible",h="shoppable-panel-hidden",u="shoppable-products-overlay",m="cld-spbl-panel",g="cld-spbl-toggle",_="cld-spbl-toggle-icon",y="cld-spbl-bar-inner",f="animate",v="cld-spbl-item",b="cld-spbl-img";var C=s(1104);const E=a().dom||a(),T=a().getComponent("Component");class N extends T{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(t,e),this.options_=e,this.player_=t,this.player_.on(C.f.SHOW_PRODUCTS_OVERLAY,this.renderProducts),this.dispose=()=>{this.layout_.dispose()}}renderProducts=()=>{this.player_.removeClass(d),this.player_.addClass(h),this.player_.addClass(u),this.layout_.innerHTML="";const t=this.player_.currentTime();this.options_.products.filter((e=>e.hotspots&&e.hotspots.some((e=>i(e.time)===t)))).forEach((e=>{const s=(0,r.I)(e.hotspots,(e=>i(e.time)===t)),o=E.createEl("div",{className:"cld-spbl-product-hotspot-name"},{},e.productName),a=E.createEl("div",{className:"cld-spbl-product-tooltip cld-spbl-product-tooltip-"+s.tooltipPosition},{},o),n=E.createEl("a",{className:"cld-spbl-product-hotspot accent-color-text",href:s.clickUrl,target:"_blank"},{style:"left:"+s.x+"; top:"+s.y+";"},a);this.layout_.appendChild(n)})),this.player_.one(C.f.SEEKING,this.clearLayout),this.player_.one(C.f.PLAY,this.clearLayout)};clearLayout=()=>{this.layout_.innerHTML="",this.player_.removeClass(u)};createEl(){const t=this.player_.currentDimensions();return this.layout_=E.createEl("div",{className:"cld-spbl-products-overlay",style:`padding-top: ${t.height/t.width*100}%;`}),this.layout_}}a().registerComponent("ShoppableProductsOverlay",N);const P=N,L=a().dom||a(),x=a().getComponent("ClickableComponent");class w extends x{constructor(t,e){super(t,e),this.options_=e}handleClick(t){t.preventDefault(),t.stopPropagation(),this.options_.clickHandler()}createEl(){let t={},e={};this.options_.toggleIcon?(t={className:`${_} cld-spbl-toggle-custom-icon vjs-icon-close`},e={style:`background-image: url(${this.options_.toggleIcon})`}):t={className:`${_} vjs-icon-cart`};const s=L.createEl("span",t,e),o=super.createEl("a",{className:`${g} base-color-bg`});return o.appendChild(s),this.player_.on(C.f.PRODUCT_BAR_MIN,(()=>{setTimeout((()=>{s.classList.add(f),setTimeout((()=>{s.classList.remove(f)}),1e3)}),500)})),o}}a().registerComponent("shoppablePanelToggle",w);const k=w,I=a().dom||a(),A=a().getComponent("Component");class H extends A{constructor(t,e){super(t,e),this.player_=t,this.player().addClass("cld-shoppable-panel"),this.player().addClass(h),this.contentWrpEl_=I.createEl("div",{className:"cld-spbl-bar"}),this.contentBannerEl_=I.createEl("div",{className:"cld-spbl-banner-msg base-color-text"},{},this.options_.bannerMsg||"Shop the Video"),this.contentWrpEl_.appendChild(this.contentBannerEl_);const s=new P(this.player_,this.options_);this.contentWrpEl_.appendChild(s.el_),this.contentEl_=I.createEl("div",{className:y}),this.contentWrpEl_.appendChild(this.contentEl_),this.player().el().appendChild(this.contentWrpEl_),this.addChild(new k(this.player_,{toggleIcon:this.options_.toggleIcon,clickHandler:()=>{this.togglePanel()}})),this.addChild("ShoppablePanel",this.options_),this.dispose=()=>{this.removeLayout(),super.dispose()},this.togglePanel=t=>{!0===t?(this.player().removeClass(h),this.player().addClass(d)):!1===t?(this.player().removeClass(d),this.player().addClass(h)):(this.player().toggleClass(h),this.player().toggleClass(d));let e=this.player().hasClass(d)?"productBarMax":"productBarMin";this.player().trigger(e)},"open"===this.options_.startState&&this.togglePanel(!0),this.player_.on(C.f.PLAY,(()=>{this.player_.currentTime()<.01&&("openOnPlay"===this.options_.startState&&this.togglePanel(!0,this.options_.autoClose),this.options_.autoClose&&-1!==this.options_.startState.indexOf("open")&&setTimeout((()=>{this.contentEl_.matches(":hover")?this.contentEl_.addEventListener("mouseleave",(()=>{this.togglePanel(!1)}),{once:!0}):this.togglePanel(!1)}),1e3*this.options_.autoClose))}))}createEl(){return super.createEl("div")}}a().registerComponent("shoppableBarLayout",H);const M=H;var S=s(2858),$=s.n(S),O=s(4650);const D=a().getComponent("ClickableComponent"),W=a().dom||a(),j={width:132};class B extends D{constructor(t,e){super(t,e),this.options_=e,this.isDragged=!1}handleClick(t){t.preventDefault(),t.stopPropagation(),this.el_.matches(`.dragged .${v}`)||this.options_.clickHandler(t),this.isDragged=!1}getTitle(){return this.options_.conf.title}createEl(){const t=super.createEl("a",{className:`${v} base-color-bg accent-color-text`,href:"#"});t.setAttribute("data-product-id",this.options_.conf.productId||""),t.setAttribute("data-product-name",this.options_.conf.productName||""),this.options_.conf.onHover&&R(t,this.options_.conf.onHover,this.options_.item.cloudinaryConfig()),this.options_.conf.onClick&&z(t,this.options_.conf.onClick);const e=super.createEl("img",{className:b},{src:this.options_.item.url(j)});if(t.appendChild(e),this.getTitle()){const e=W.createEl("div",{className:"cld-spbl-item-info base-color-semi-bg text-color-text"}),s=W.createEl("span",{className:"cld-spbl-item-title"},{},this.getTitle());e.appendChild(s),t.appendChild(e)}return t}}const R=(t,e,s)=>{if(t.setAttribute("data-hover-action",e.action),e.action===p){const s=W.createEl("span",{className:"cld-spbl-overlay-text base-color-text"},{},e.args),o=W.createEl("span",{className:"cld-spbl-overlay text-color-semi-bg base-color-text"},{title:e.args},s);t.appendChild(o)}else{const o=new O.A(e.args.publicId,{cloudinaryConfig:s,transformation:e.args.transformation}),a=W.createEl("img",{className:`${b} cld-spbl-hover-img`},{src:o.url(j)});t.appendChild(a)}},z=(t,e)=>{t.setAttribute("data-click-action",e.action),t.setAttribute("data-pause",e.pause),e.action===c?t.setAttribute("data-seek",e.args.time):e.action===l&&t.setAttribute("data-goto-url",e.args.url)};a().registerComponent("shoppablePanelItem",B);const U=B,V=a().getComponent("Component");class X extends V{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(t,e),this.options=e;const s=()=>{this.render()};t.on(C.f.SHOPPABLE_ITEM_CHANGED,s),this.render(),this.dispose=()=>{super.dispose(),t.off(C.f.SHOPPABLE_ITEM_CHANGED,s)}}createEl(){const t=super.createEl();return[m,"base-color-bg"].map((e=>t.classList.add(e))),t}removeAll(){const t=this.children();for(let e=t.length-1;e>=0;--e)this.removeChild(t[e])}getItems(){const t=this.player_.cloudinary.cloudinaryConfig();return this.options.products.map((e=>{e.onHover&&"object"==typeof e.onHover.args&&(e.onHover.args.transformation=Object.assign({},this.options.transformation,e.onHover.args.transformation));const s={productId:e.productId,productName:e.productName,title:e.title,onHover:e.onHover,onClick:e.onClick,startTime:e.startTime,endTime:e.endTime};return{imageSrc:new O.A(e.publicId,{cloudinaryConfig:t,transformation:Object.assign({},this.options.transformation,e.transformation)}),conf:s}}))}scrollToActiveItem(){const t=this.el_.getElementsByClassName("active");if(t.length>0){const e=t[0].offsetTop-12;"scrollBehavior"in document.documentElement.style?this.el_.scrollTo({top:e,behavior:"smooth"}):this.el_.scrollTop=e}}render(){this.removeAll();const t=this.getItems(),e=$()((()=>this.scrollToActiveItem()),1e3);t.forEach(((t,s)=>{const o=new U(this.player(),{item:t.imageSrc,conf:t.conf,next:1===s,current:0===s,clickHandler:t=>{let e=t.currentTarget||t.target,s=this.player_.ended()?"productClickPost":"productClick";if(this.player_.trigger(s,{productId:e.dataset.productId,productName:e.dataset.productName}),e.dataset.clickAction===l)window.open(e.dataset.gotoUrl,"_blank");else if(e.dataset.clickAction===c){const t=i(e.dataset.seek);null!==t&&(this.player_.addClass("vjs-has-started"),this.player_.postModal&&this.player_.postModal.close(),this.player_.currentTime(t),this.player_.removeClass(d),this.player_.addClass(h),this.player_.addClass(u),this.player_.one("seeked",(()=>this.player_.trigger("showProductsOverlay"))))}"false"!==e.dataset.pause&&(this.player_.pause(),i(e.dataset.pause)&&setTimeout((()=>{this.player_.play()}),1e3*i(e.dataset.pause)))}});o.on("mouseover",(t=>{let e=t.currentTarget||t.target,s=this.player_.ended()?"productHoverPost":"productHover";this.player_.trigger(s,{productId:e.dataset.productId,productName:e.dataset.productName})})),void 0!==t.conf.startTime&&void 0!==t.conf.endTime&&this.player_.on(C.f.TIME_UPDATE,(()=>{const s=this.player_.currentTime();s>=t.conf.startTime&&s<t.conf.endTime?(o.el_.classList.add("active"),e()):o.el_.classList.contains("active")&&o.el_.classList.remove("active")})),this.addChild(o)}))}}a().registerComponent("shoppablePanel",X);const G=X,Y=a().dom||a();const q=class{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.options_={...e,postPlay:!0},this.player_=t,this.render(),this.handleDragToScroll(),this.dispose=()=>{this.layout_.dispose()}}handleDragToScroll(){const t=this.player_.postModal.el_.querySelector(`.${m}`);let e=!1,s=0,o=0;t.addEventListener("mousedown",(a=>{e=!0,s=a.pageX-t.offsetLeft,o=t.scrollLeft})),document.addEventListener("mouseup",(o=>{e=!1,setTimeout((()=>{t.classList.remove("dragged")}),300);const a=o.pageX-t.offsetLeft-s;Math.abs(a)>5&&o.preventDefault()})),document.addEventListener("mousemove",(a=>{if(!e)return;a.preventDefault();const i=a.pageX-t.offsetLeft-s;t.scrollLeft=o-i,Math.abs(i)>5&&!t.classList.contains("dragged")&&t.classList.add("dragged")}))}render(){this.player_.postModal=null;const t=Y.createEl("div",{className:"cld-spbl-post-play"}),e=new G(this.player_,this.options_),s=Y.createEl("div",{className:"cld-spbl-post-title base-color-text"},{},this.options_.bannerMsg||"Shop the Video"),o=this.player_.cloudinary.currentPoster();o.transformation([o.transformation().toOptions?o.transformation().toOptions():{},{effect:"blur:3000"}]);const a=Y.createEl("div",{className:"cld-spbl-post-play-bg",style:`background-image: url("${o.url()}")`}),i=Y.createEl("button",{className:"cld-spbl-replay-btn base-color-bg vjs-icon-replay",onclick:()=>{this.player_.trigger("replay"),this.player_.postModal.close(),this.player_.play()}},{},"Replay");t.appendChild(a),t.appendChild(s),t.appendChild(e.el()),t.appendChild(i),this.player_.postModal=this.player_.createModal(t,{name:"postModal",uncloseable:!0}),this.player_.addClass("cld-spbl-post-modal"),this.player_.postModal.on("beforemodalclose",(()=>{this.player_.removeClass("cld-spbl-post-modal")}))}};const Z=class{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.options_=a().obj.merge(n,e),this.player_=t,this.options_.showPostPlayOverlay&&this.player_.on(C.f.ENDED,(()=>{this.player_.addChild(new q(this.player_,this.options_))}));const s=this.options_.width;this._injectCSS(`\n .${y} {\n transform: translateX(${s});\n }\n .${d} .vjs-control-bar {\n width: calc(100% - ${s});\n }\n .${g} {\n right: ${s};\n }\n .${m}{\n width: ${s};\n }\n `),this._setListeners()}_setListeners(){const t=this._resizeHandler.bind(this);this.player_.on(C.f.RESIZE,t),window.addEventListener("resize",t),this.dispose=()=>{this.player_.off(C.f.RESIZE,t),window.removeEventListener("resize",t),this.layout_.dispose()}}_injectCSS(t){const e=document.createElement("style");e.innerHTML=t,this.player_.el_.appendChild(e)}_resizeHandler(){const t=[["sm",0,80],["md",81,110],["lg",111,170]],e=parseFloat(this.options_.width)/100*this.player_.el_.clientWidth;let s=!1;if(e){for(const[o,a,i]of t)e>a&&e<=i&&(this.layout_.contentWrpEl_.setAttribute("size",o),s=o);s||this.layout_.contentWrpEl_.removeAttribute("size")}}init(){this.render()}render(){this.layout_=new M(this.player_,this.options_)}}},8812:(t,e,s)=>{var o=s(2140),a=/^\s+/;t.exports=function(t){return t?t.slice(0,o(t)+1).replace(a,""):t}},2140:t=>{var e=/\s/;t.exports=function(t){for(var s=t.length;s--&&e.test(t.charAt(s)););return s}},6177:(t,e,s)=>{var o=s(8953),a=s(3664),i=s(5378),r=Math.max,n=Math.min;t.exports=function(t,e,s){var l,c,p,d,h,u,m=0,g=!1,_=!1,y=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function f(e){var s=l,o=c;return l=c=void 0,m=e,d=t.apply(o,s)}function v(t){var s=t-u;return void 0===u||s>=e||s<0||_&&t-m>=p}function b(){var t=a();if(v(t))return C(t);h=setTimeout(b,function(t){var s=e-(t-u);return _?n(s,p-(t-m)):s}(t))}function C(t){return h=void 0,y&&l?f(t):(l=c=void 0,d)}function E(){var t=a(),s=v(t);if(l=arguments,c=this,u=t,s){if(void 0===h)return function(t){return m=t,h=setTimeout(b,e),g?f(t):d}(u);if(_)return clearTimeout(h),h=setTimeout(b,e),f(u)}return void 0===h&&(h=setTimeout(b,e)),d}return e=i(e)||0,o(s)&&(g=!!s.leading,p=(_="maxWait"in s)?r(i(s.maxWait)||0,e):p,y="trailing"in s?!!s.trailing:y),E.cancel=function(){void 0!==h&&clearTimeout(h),m=0,l=u=c=h=void 0},E.flush=function(){return void 0===h?d:C(a())},E}},3664:(t,e,s)=>{var o=s(1433);t.exports=function(){return o.Date.now()}},2858:(t,e,s)=>{var o=s(6177),a=s(8953);t.exports=function(t,e,s){var i=!0,r=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return a(s)&&(i="leading"in s?!!s.leading:i,r="trailing"in s?!!s.trailing:r),o(t,e,{leading:i,maxWait:e,trailing:r})}},5378:(t,e,s)=>{var o=s(8812),a=s(8953),i=s(5414),r=/^[-+]0x[0-9a-f]+$/i,n=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(a(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=a(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=o(t);var s=n.test(t);return s||l.test(t)?c(t.slice(2),s?2:8):r.test(t)?NaN:+t}}}]);
2
- //# sourceMappingURL=shoppable.light.min.js.map
@@ -1,317 +0,0 @@
1
- "use strict";
2
- (self["cloudinaryVideoPlayerChunkLoading"] = self["cloudinaryVideoPlayerChunkLoading"] || []).push([["visual-search"],{
3
-
4
- /***/ "./plugins/visual-search/components/SearchButton.js":
5
- /*!**********************************************************!*\
6
- !*** ./plugins/visual-search/components/SearchButton.js ***!
7
- \**********************************************************/
8
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
-
10
- __webpack_require__.r(__webpack_exports__);
11
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12
- /* harmony export */ SearchButton: () => (/* binding */ SearchButton)
13
- /* harmony export */ });
14
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/alt/video.core-exposed.js");
15
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
16
-
17
- const SearchButton = onClick => {
18
- const button = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('button', {
19
- className: 'vjs-control vjs-button vjs-visual-search-button',
20
- title: 'Search video content',
21
- ariaLabel: 'Search video content'
22
- });
23
- const searchIcon = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('span', {
24
- className: 'vjs-icon-search'
25
- });
26
- button.appendChild(searchIcon);
27
- const spinnerIcon = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('span', {
28
- className: 'vjs-loading-spinner'
29
- });
30
- button.appendChild(spinnerIcon);
31
- button.addEventListener('click', onClick);
32
- return button;
33
- };
34
-
35
- /***/ }),
36
-
37
- /***/ "./plugins/visual-search/components/SearchInput.js":
38
- /*!*********************************************************!*\
39
- !*** ./plugins/visual-search/components/SearchInput.js ***!
40
- \*********************************************************/
41
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
42
-
43
- __webpack_require__.r(__webpack_exports__);
44
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
45
- /* harmony export */ SearchInput: () => (/* binding */ SearchInput)
46
- /* harmony export */ });
47
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/alt/video.core-exposed.js");
48
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
49
-
50
- const SearchInput = (onSearch, onClose) => {
51
- const form = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('form', {
52
- className: 'vjs-visual-search-form'
53
- });
54
- const input = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('input', {
55
- className: 'vjs-visual-search-input',
56
- type: 'text',
57
- ariaLabel: 'Search input',
58
- tabIndex: -1
59
- });
60
- const closeButton = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('button', {
61
- className: 'vjs-control vjs-button vjs-visual-search-close',
62
- type: 'button',
63
- title: 'Close search',
64
- ariaLabel: 'Close search',
65
- tabIndex: -1
66
- });
67
-
68
- // Add close icon
69
- const closeIcon = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('span', {
70
- className: 'vjs-icon-close'
71
- });
72
- closeButton.appendChild(closeIcon);
73
- form.appendChild(input);
74
- form.appendChild(closeButton);
75
-
76
- // Handle search submission
77
- form.addEventListener('submit', e => {
78
- e.preventDefault();
79
- const query = input.value.trim();
80
- if (query) {
81
- onSearch(query);
82
- }
83
- });
84
-
85
- // Handle close button
86
- closeButton.addEventListener('click', e => {
87
- e.preventDefault();
88
- if (onClose) {
89
- onClose();
90
- }
91
- });
92
- return {
93
- element: form,
94
- input,
95
- closeButton
96
- };
97
- };
98
-
99
- /***/ }),
100
-
101
- /***/ "./plugins/visual-search/components/SearchResults.js":
102
- /*!***********************************************************!*\
103
- !*** ./plugins/visual-search/components/SearchResults.js ***!
104
- \***********************************************************/
105
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
106
-
107
- __webpack_require__.r(__webpack_exports__);
108
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
109
- /* harmony export */ SearchResults: () => (/* binding */ SearchResults)
110
- /* harmony export */ });
111
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/alt/video.core-exposed.js");
112
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
113
-
114
- const SearchResults = player => {
115
- const clearMarkers = () => {
116
- player.$$('.vjs-visual-search-marker').forEach(el => el.remove());
117
- player.$$('.vjs-visual-search-results-wrapper').forEach(el => el.remove());
118
-
119
- // Remove the class that indicates search results are displayed
120
- player.removeClass('vjs-visual-search-results-active');
121
- };
122
- const displayResults = results => {
123
- // Clear existing markers
124
- clearMarkers();
125
- const total = player.duration();
126
- const seekBar = player.controlBar.progressControl.seekBar;
127
-
128
- // Create wrapper for search results
129
- const wrapperEl = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('div', {
130
- className: 'vjs-visual-search-results-wrapper',
131
- role: 'presentation'
132
- });
133
-
134
- // Add markers for each result
135
- results.forEach(result => {
136
- const {
137
- start_time,
138
- end_time
139
- } = result;
140
- const position = start_time / total * 100;
141
- const width = (end_time - start_time) / total * 100;
142
- const time = `${Math.floor(start_time / 60)}:${Math.floor(start_time % 60).toString().padStart(2, '0')}`;
143
- const markerEl = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('div', {
144
- className: 'vjs-control vjs-visual-search-marker',
145
- style: `left: ${position}%; width: ${width}%`,
146
- tabIndex: 0,
147
- role: 'button',
148
- title: `Search result at ${time}`,
149
- ariaLabel: `Search result at ${time}`
150
- });
151
- wrapperEl.appendChild(markerEl);
152
-
153
- // Add click handler to jump to this time
154
- markerEl.addEventListener('click', () => {
155
- player.currentTime(start_time);
156
- });
157
-
158
- // Add keyboard support
159
- markerEl.addEventListener('keydown', e => {
160
- if (e.key === 'Enter' || e.key === ' ') {
161
- e.preventDefault();
162
- player.currentTime(start_time);
163
- }
164
- });
165
- });
166
-
167
- // Add wrapper to seek bar
168
- seekBar.el().appendChild(wrapperEl);
169
-
170
- // Add a class to indicate search results are displayed
171
- if (results.length > 0) {
172
- player.addClass('vjs-visual-search-results-active');
173
- }
174
- };
175
- return {
176
- displayResults,
177
- clearMarkers
178
- };
179
- };
180
-
181
- /***/ }),
182
-
183
- /***/ "./plugins/visual-search/visual-search.js":
184
- /*!************************************************!*\
185
- !*** ./plugins/visual-search/visual-search.js ***!
186
- \************************************************/
187
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
188
-
189
- __webpack_require__.r(__webpack_exports__);
190
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
191
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
192
- /* harmony export */ });
193
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/alt/video.core-exposed.js");
194
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
195
- /* harmony import */ var _components_SearchButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/SearchButton */ "./plugins/visual-search/components/SearchButton.js");
196
- /* harmony import */ var _components_SearchInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/SearchInput */ "./plugins/visual-search/components/SearchInput.js");
197
- /* harmony import */ var _components_SearchResults__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/SearchResults */ "./plugins/visual-search/components/SearchResults.js");
198
- /* harmony import */ var _visual_search_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./visual-search.scss */ "./plugins/visual-search/visual-search.scss");
199
-
200
-
201
-
202
-
203
-
204
- const visualSearch = (options, player) => {
205
- player.addClass('vjs-visual-search');
206
- let isSearchActive = false;
207
- const searchResults = (0,_components_SearchResults__WEBPACK_IMPORTED_MODULE_3__.SearchResults)(player);
208
- const performSearch = async query => {
209
- const searchButton = player.$('.vjs-visual-search-button');
210
- searchButton.classList.add('vjs-waiting');
211
- try {
212
- const source = player.cloudinary.source();
213
- const publicId = source.publicId();
214
- const transformation = Object.assign({}, source.transformation());
215
- transformation.flags = transformation.flags || [];
216
- transformation.flags.push(`getinfo:search_b64_${btoa(query)}`);
217
- const visualSearchSrc = source.config().url(`${publicId}`, {
218
- transformation
219
- });
220
- const response = await fetch(visualSearchSrc, {
221
- method: 'GET',
222
- headers: {
223
- 'Content-Type': 'application/json'
224
- }
225
- });
226
- if (!response.ok) {
227
- throw new Error(`Search request failed with status: ${response.status}`);
228
- }
229
- const results = await response.json();
230
- searchResults.displayResults(results.timestamps);
231
- if (results && !player.hasStarted()) {
232
- // Make sure the progress bar is visible
233
- player.play().then(() => player.pause());
234
- }
235
- } catch (error) {
236
- console.error('Error performing visual search:', error);
237
- } finally {
238
- searchButton.classList.remove('vjs-waiting');
239
- }
240
- };
241
- const clearUI = () => {
242
- isSearchActive = false;
243
- searchResults.clearMarkers();
244
- player.$('.vjs-visual-search-wrapper')?.remove();
245
- };
246
- const createSearchUI = () => {
247
- clearUI();
248
- const titleBar = player.$('.vjs-title-bar');
249
- if (titleBar) {
250
- titleBar.classList.remove('vjs-hidden');
251
- }
252
- const searchContainer = video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('div', {
253
- className: 'vjs-visual-search-wrapper'
254
- });
255
-
256
- // Handle the search icon click (expand or submit)
257
- const handleSearchButtonClick = () => {
258
- if (!isSearchActive) {
259
- isSearchActive = true;
260
- searchContainer.classList.add('vjs-visual-search-active');
261
- searchInput.input.tabIndex = 0;
262
- searchInput.closeButton.tabIndex = 0;
263
- searchInput.input.focus();
264
- } else {
265
- const query = searchInput.input.value.trim();
266
- if (query) {
267
- performSearch(query);
268
- }
269
- }
270
- };
271
- const closeSearch = () => {
272
- if (isSearchActive) {
273
- isSearchActive = false;
274
- searchContainer.classList.remove('vjs-visual-search-active');
275
- searchInput.input.value = '';
276
- searchInput.input.tabIndex = -1;
277
- searchInput.closeButton.tabIndex = -1;
278
- searchResults.clearMarkers();
279
- }
280
- };
281
- const searchButton = (0,_components_SearchButton__WEBPACK_IMPORTED_MODULE_1__.SearchButton)(handleSearchButtonClick);
282
- const searchInput = (0,_components_SearchInput__WEBPACK_IMPORTED_MODULE_2__.SearchInput)(performSearch, closeSearch);
283
- searchContainer.appendChild(searchButton);
284
- searchContainer.appendChild(searchInput.element);
285
- titleBar.prepend(searchContainer);
286
- player.on('keydown', e => {
287
- if (e.key === 'Escape' && isSearchActive) {
288
- closeSearch();
289
- }
290
- });
291
- };
292
- createSearchUI();
293
-
294
- // Public methods
295
- player.visualSearch = {
296
- createSearchUI,
297
- clearUI
298
- };
299
- };
300
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (visualSearch);
301
-
302
- /***/ }),
303
-
304
- /***/ "./plugins/visual-search/visual-search.scss":
305
- /*!**************************************************!*\
306
- !*** ./plugins/visual-search/visual-search.scss ***!
307
- \**************************************************/
308
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
309
-
310
- __webpack_require__.r(__webpack_exports__);
311
- // extracted by mini-css-extract-plugin
312
-
313
-
314
- /***/ })
315
-
316
- }]);
317
- //# sourceMappingURL=visual-search.light.js.map
@@ -1,2 +0,0 @@
1
- "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[728],{9148:(e,a,s)=>{s.d(a,{default:()=>l});var t=s(6673),r=s.n(t);const l=(e,a)=>{a.addClass("vjs-visual-search");let s=!1;const t=(e=>{const a=()=>{e.$$(".vjs-visual-search-marker").forEach((e=>e.remove())),e.$$(".vjs-visual-search-results-wrapper").forEach((e=>e.remove())),e.removeClass("vjs-visual-search-results-active")};return{displayResults:s=>{a();const t=e.duration(),l=e.controlBar.progressControl.seekBar,n=r().dom.createEl("div",{className:"vjs-visual-search-results-wrapper",role:"presentation"});s.forEach((a=>{const{start_time:s,end_time:l}=a,c=s/t*100,o=(l-s)/t*100,i=`${Math.floor(s/60)}:${Math.floor(s%60).toString().padStart(2,"0")}`,d=r().dom.createEl("div",{className:"vjs-control vjs-visual-search-marker",style:`left: ${c}%; width: ${o}%`,tabIndex:0,role:"button",title:`Search result at ${i}`,ariaLabel:`Search result at ${i}`});n.appendChild(d),d.addEventListener("click",(()=>{e.currentTime(s)})),d.addEventListener("keydown",(a=>{"Enter"!==a.key&&" "!==a.key||(a.preventDefault(),e.currentTime(s))}))})),l.el().appendChild(n),s.length>0&&e.addClass("vjs-visual-search-results-active")},clearMarkers:a}})(a),l=async e=>{const s=a.$(".vjs-visual-search-button");s.classList.add("vjs-waiting");try{const s=a.cloudinary.source(),r=s.publicId(),l=Object.assign({},s.transformation());l.flags=l.flags||[],l.flags.push(`getinfo:search_b64_${btoa(e)}`);const n=s.config().url(`${r}`,{transformation:l}),c=await fetch(n,{method:"GET",headers:{"Content-Type":"application/json"}});if(!c.ok)throw new Error(`Search request failed with status: ${c.status}`);const o=await c.json();t.displayResults(o.timestamps),o&&!a.hasStarted()&&a.play().then((()=>a.pause()))}catch(e){console.error("Error performing visual search:",e)}finally{s.classList.remove("vjs-waiting")}},n=()=>{s=!1,t.clearMarkers(),a.$(".vjs-visual-search-wrapper")?.remove()},c=()=>{n();const e=a.$(".vjs-title-bar");e&&e.classList.remove("vjs-hidden");const c=r().dom.createEl("div",{className:"vjs-visual-search-wrapper"}),o=()=>{s&&(s=!1,c.classList.remove("vjs-visual-search-active"),d.input.value="",d.input.tabIndex=-1,d.closeButton.tabIndex=-1,t.clearMarkers())},i=(e=>{const a=r().dom.createEl("button",{className:"vjs-control vjs-button vjs-visual-search-button",title:"Search video content",ariaLabel:"Search video content"}),s=r().dom.createEl("span",{className:"vjs-icon-search"});a.appendChild(s);const t=r().dom.createEl("span",{className:"vjs-loading-spinner"});return a.appendChild(t),a.addEventListener("click",e),a})((()=>{if(s){const e=d.input.value.trim();e&&l(e)}else s=!0,c.classList.add("vjs-visual-search-active"),d.input.tabIndex=0,d.closeButton.tabIndex=0,d.input.focus()})),d=((e,a)=>{const s=r().dom.createEl("form",{className:"vjs-visual-search-form"}),t=r().dom.createEl("input",{className:"vjs-visual-search-input",type:"text",ariaLabel:"Search input",tabIndex:-1}),l=r().dom.createEl("button",{className:"vjs-control vjs-button vjs-visual-search-close",type:"button",title:"Close search",ariaLabel:"Close search",tabIndex:-1}),n=r().dom.createEl("span",{className:"vjs-icon-close"});return l.appendChild(n),s.appendChild(t),s.appendChild(l),s.addEventListener("submit",(a=>{a.preventDefault();const s=t.value.trim();s&&e(s)})),l.addEventListener("click",(e=>{e.preventDefault(),a&&a()})),{element:s,input:t,closeButton:l}})(l,o);c.appendChild(i),c.appendChild(d.element),e.prepend(c),a.on("keydown",(e=>{"Escape"===e.key&&s&&o()}))};c(),a.visualSearch={createSearchUI:c,clearUI:n}}}}]);
2
- //# sourceMappingURL=visual-search.light.min.js.map
@@ -1,2 +0,0 @@
1
- (self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[625],{9234:(t,e,r)=>{r.d(e,{default:()=>n});var s=r(6673),a=r.n(s),i=r(9388);const o=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();return t?`${(0,i.KA)(`${t}-chapters.vtt`,(0,i.lP)(this.player.cloudinary.cloudinaryConfig(),{resource_type:"raw",version:"1"}))}?t=${Date.now()}`:null},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}(),n=function(t,e){e.addClass("vjs-chapters"),e.chapters=new o(e,t)}}}]);
2
- //# sourceMappingURL=chapters.js.map