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
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ (self["cloudinaryVideoPlayerChunkLoading"] = self["cloudinaryVideoPlayerChunkLoading"] || []).push([["srt-text-tracks"],{
3
+
4
+ /***/ "./plugins/srt-text-tracks/srt-text-tracks.js":
5
+ /*!****************************************************!*\
6
+ !*** ./plugins/srt-text-tracks/srt-text-tracks.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 */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13
+ /* harmony export */ });
14
+ /* harmony import */ var srt_parser_2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! srt-parser-2 */ "../node_modules/srt-parser-2/dist/index.js");
15
+
16
+ function srtTextTracks(config, player) {
17
+ // Load the SRT file and convert it to WebVTT
18
+ const initSRT = async () => {
19
+ let srtResponse;
20
+ if (config.src) {
21
+ try {
22
+ srtResponse = await fetch(config.src);
23
+ if (!srtResponse.ok) {
24
+ throw new Error(`Failed fetching from ${config.src} with status code ${srtResponse.status}`);
25
+ }
26
+ } catch (error) {
27
+ console.error(error);
28
+ }
29
+ }
30
+ if (!srtResponse.ok) return;
31
+ const srtData = await srtResponse.text();
32
+ const webvttCues = srt2webvtt(srtData); // Get the array of cues
33
+
34
+ const srtTrack = player.addRemoteTextTrack({
35
+ kind: config.kind || 'subtitles',
36
+ label: config.label || 'Subtitles',
37
+ srclang: config.srclang,
38
+ default: config.default,
39
+ mode: config.default ? 'showing' : 'disabled'
40
+ });
41
+
42
+ // Add the WebVTT data to the track
43
+ webvttCues.forEach(cue => {
44
+ if (cue) {
45
+ srtTrack.track.addCue(new VTTCue(cue.startTime, cue.endTime, cue.text));
46
+ }
47
+ });
48
+ };
49
+ player.one('loadedmetadata', () => {
50
+ initSRT();
51
+ });
52
+ }
53
+
54
+ // SRT parser
55
+ const srt2webvtt = data => {
56
+ const SRTParser = new srt_parser_2__WEBPACK_IMPORTED_MODULE_0__["default"]();
57
+ const cues = SRTParser.fromSrt(data);
58
+ return cues.map(cue => ({
59
+ startTime: cue.startSeconds,
60
+ endTime: cue.endSeconds,
61
+ text: cue.text
62
+ }));
63
+ };
64
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (srtTextTracks);
65
+
66
+ /***/ }),
67
+
68
+ /***/ "../node_modules/srt-parser-2/dist/index.js":
69
+ /*!**************************************************!*\
70
+ !*** ../node_modules/srt-parser-2/dist/index.js ***!
71
+ \**************************************************/
72
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
73
+
74
+ __webpack_require__.r(__webpack_exports__);
75
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
76
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
77
+ /* harmony export */ });
78
+ class Parser {
79
+ seperator = ",";
80
+ timestampToSeconds(srtTimestamp) {
81
+ const [rest, millisecondsString] = srtTimestamp.split(",");
82
+ const milliseconds = parseInt(millisecondsString);
83
+ const [hours, minutes, seconds] = rest.split(":").map((x) => parseInt(x));
84
+ const result = milliseconds * 0.001 + seconds + 60 * minutes + 3600 * hours;
85
+ // fix odd JS roundings, e.g. timestamp '00:01:20,460' result is 80.46000000000001
86
+ return Math.round(result * 1000) / 1000;
87
+ }
88
+ ;
89
+ correctFormat(time) {
90
+ // Fix the format if the format is wrong
91
+ // 00:00:28.9670 Become 00:00:28,967
92
+ // 00:00:28.967 Become 00:00:28,967
93
+ // 00:00:28.96 Become 00:00:28,960
94
+ // 00:00:28.9 Become 00:00:28,900
95
+ // 00:00:28,96 Become 00:00:28,960
96
+ // 00:00:28,9 Become 00:00:28,900
97
+ // 00:00:28,0 Become 00:00:28,000
98
+ // 00:00:28,01 Become 00:00:28,010
99
+ // 0:00:10,500 Become 00:00:10,500
100
+ let str = time.replace(".", ",");
101
+ var hour = null;
102
+ var minute = null;
103
+ var second = null;
104
+ var millisecond = null;
105
+ // Handle millisecond
106
+ var [front, ms] = str.split(",");
107
+ millisecond = this.fixed_str_digit(3, ms);
108
+ // Handle hour
109
+ var [a_hour, a_minute, a_second] = front.split(":");
110
+ hour = this.fixed_str_digit(2, a_hour, false);
111
+ minute = this.fixed_str_digit(2, a_minute, false);
112
+ second = this.fixed_str_digit(2, a_second, false);
113
+ return `${hour}:${minute}:${second},${millisecond}`;
114
+ }
115
+ /*
116
+ // make sure string is 'how_many_digit' long
117
+ // if str is shorter than how_many_digit, pad with 0
118
+ // if str is longer than how_many_digit, slice from the beginning
119
+ // Example:
120
+
121
+ Input: fixed_str_digit(3, '100')
122
+ Output: 100
123
+ Explain: unchanged, because "100" is 3 digit
124
+
125
+ Input: fixed_str_digit(3, '50')
126
+ Output: 500
127
+ Explain: pad end with 0
128
+
129
+ Input: fixed_str_digit(3, '50', false)
130
+ Output: 050
131
+ Explain: pad start with 0
132
+
133
+ Input: fixed_str_digit(3, '7771')
134
+ Output: 777
135
+ Explain: slice from beginning
136
+ */
137
+ fixed_str_digit(how_many_digit, str, padEnd = true) {
138
+ if (str.length == how_many_digit) {
139
+ return str;
140
+ }
141
+ if (str.length > how_many_digit) {
142
+ return str.slice(0, how_many_digit);
143
+ }
144
+ if (str.length < how_many_digit) {
145
+ if (padEnd) {
146
+ return str.padEnd(how_many_digit, "0");
147
+ }
148
+ else {
149
+ return str.padStart(how_many_digit, "0");
150
+ }
151
+ }
152
+ }
153
+ tryComma(data) {
154
+ data = data.replace(/\r/g, "");
155
+ 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;
156
+ let data_array = data.split(regex);
157
+ data_array.shift(); // remove first '' in array
158
+ return data_array;
159
+ }
160
+ tryDot(data) {
161
+ data = data.replace(/\r/g, "");
162
+ 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;
163
+ let data_array = data.split(regex);
164
+ data_array.shift(); // remove first '' in array
165
+ this.seperator = ".";
166
+ return data_array;
167
+ }
168
+ fromSrt(data) {
169
+ var originalData = data;
170
+ var data_array = this.tryComma(originalData);
171
+ if (data_array.length == 0) {
172
+ data_array = this.tryDot(originalData);
173
+ }
174
+ var items = [];
175
+ for (var i = 0; i < data_array.length; i += 4) {
176
+ const startTime = this.correctFormat(data_array[i + 1].trim());
177
+ const endTime = this.correctFormat(data_array[i + 2].trim());
178
+ var new_line = {
179
+ id: data_array[i].trim(),
180
+ startTime,
181
+ startSeconds: this.timestampToSeconds(startTime),
182
+ endTime,
183
+ endSeconds: this.timestampToSeconds(endTime),
184
+ text: data_array[i + 3].trim(),
185
+ };
186
+ items.push(new_line);
187
+ }
188
+ return items;
189
+ }
190
+ toSrt(data) {
191
+ var res = "";
192
+ const end_of_line = "\r\n";
193
+ for (var i = 0; i < data.length; i++) {
194
+ var s = data[i];
195
+ res += s.id + end_of_line;
196
+ res += s.startTime + " --> " + s.endTime + end_of_line;
197
+ res += s.text.replace("\n", end_of_line) + end_of_line + end_of_line;
198
+ }
199
+ return res;
200
+ }
201
+ }
202
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Parser);
203
+
204
+
205
+ /***/ })
206
+
207
+ }]);
208
+ //# sourceMappingURL=srt-text-tracks.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[6],{3565:(t,e,r)=>{r.d(e,{default:()=>d});const i=class{seperator=",";timestampToSeconds(t){const[e,r]=t.split(","),i=parseInt(r),[s,d,a]=e.split(":").map((t=>parseInt(t))),n=.001*i+a+60*d+3600*s;return Math.round(1e3*n)/1e3}correctFormat(t){let e=t.replace(".",",");var r,[i,s]=e.split(",");r=this.fixed_str_digit(3,s);var[d,a,n]=i.split(":");return`${this.fixed_str_digit(2,d,!1)}:${this.fixed_str_digit(2,a,!1)}:${this.fixed_str_digit(2,n,!1)},${r}`}fixed_str_digit(t,e,r=!0){return e.length==t?e:e.length>t?e.slice(0,t):e.length<t?r?e.padEnd(t,"0"):e.padStart(t,"0"):void 0}tryComma(t){let e=(t=t.replace(/\r/g,"")).split(/(\d+)\n(\d{1,2}:\d{2}:\d{2},\d{1,3}) --> (\d{1,2}:\d{2}:\d{2},\d{1,3})/g);return e.shift(),e}tryDot(t){let e=(t=t.replace(/\r/g,"")).split(/(\d+)\n(\d{1,2}:\d{2}:\d{2}\.\d{1,3}) --> (\d{1,2}:\d{2}:\d{2}\.\d{1,3})/g);return e.shift(),this.seperator=".",e}fromSrt(t){var e=t,r=this.tryComma(e);0==r.length&&(r=this.tryDot(e));for(var i=[],s=0;s<r.length;s+=4){const t=this.correctFormat(r[s+1].trim()),e=this.correctFormat(r[s+2].trim());var d={id:r[s].trim(),startTime:t,startSeconds:this.timestampToSeconds(t),endTime:e,endSeconds:this.timestampToSeconds(e),text:r[s+3].trim()};i.push(d)}return i}toSrt(t){var e="";const r="\r\n";for(var i=0;i<t.length;i++){var s=t[i];e+=s.id+r,e+=s.startTime+" --\x3e "+s.endTime+r,e+=s.text.replace("\n",r)+r+r}return e}};const s=t=>(new i).fromSrt(t).map((t=>({startTime:t.startSeconds,endTime:t.endSeconds,text:t.text}))),d=function(t,e){e.one("loadedmetadata",(()=>{(async()=>{let r;if(t.src)try{if(r=await fetch(t.src),!r.ok)throw new Error(`Failed fetching from ${t.src} with status code ${r.status}`)}catch(t){console.error(t)}if(!r.ok)return;const i=await r.text(),d=s(i),a=e.addRemoteTextTrack({kind:t.kind||"subtitles",label:t.label||"Subtitles",srclang:t.srclang,default:t.default,mode:t.default?"showing":"disabled"});d.forEach((t=>{t&&a.track.addCue(new VTTCue(t.startTime,t.endTime,t.text))}))})()}))}}}]);
2
+ //# sourceMappingURL=srt-text-tracks.min.js.map
@@ -11,7 +11,7 @@ __webpack_require__.r(__webpack_exports__);
11
11
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12
12
  /* harmony export */ SearchButton: () => (/* binding */ SearchButton)
13
13
  /* harmony export */ });
14
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/video.es-exposed.js");
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
15
  /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
16
16
 
17
17
  const SearchButton = onClick => {
@@ -44,7 +44,7 @@ __webpack_require__.r(__webpack_exports__);
44
44
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
45
45
  /* harmony export */ SearchInput: () => (/* binding */ SearchInput)
46
46
  /* harmony export */ });
47
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/video.es-exposed.js");
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
48
  /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
49
49
 
50
50
  const SearchInput = (onSearch, onClose) => {
@@ -108,7 +108,7 @@ __webpack_require__.r(__webpack_exports__);
108
108
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
109
109
  /* harmony export */ SearchResults: () => (/* binding */ SearchResults)
110
110
  /* harmony export */ });
111
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/video.es-exposed.js");
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
112
  /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
113
113
 
114
114
  const SearchResults = player => {
@@ -190,7 +190,7 @@ __webpack_require__.r(__webpack_exports__);
190
190
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
191
191
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
192
192
  /* harmony export */ });
193
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/video.es-exposed.js");
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
194
  /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
195
195
  /* harmony import */ var _components_SearchButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/SearchButton */ "./plugins/visual-search/components/SearchButton.js");
196
196
  /* harmony import */ var _components_SearchInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/SearchInput */ "./plugins/visual-search/components/SearchInput.js");
@@ -1,2 +1,2 @@
1
- "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[728],{9148:(e,a,s)=>{s.d(a,{default:()=>l});var t=s(7938),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}}}}]);
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
2
  //# sourceMappingURL=visual-search.min.js.map