kplayer-ts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2753 @@
1
+ const C = /mobile|android|iphone|ipod|phone|ipad/i.test(
2
+ window.navigator.userAgent
3
+ ), u = {
4
+ /**
5
+ * Parse second to time string
6
+ */
7
+ secondToTime(n) {
8
+ if (n = n || 0, n === 0 || n === 1 / 0 || n.toString() === "NaN")
9
+ return "00:00";
10
+ const e = (a) => a < 10 ? "0" + a : "" + a, t = Math.floor(n / 3600), i = Math.floor((n - t * 3600) / 60), s = Math.floor(n - t * 3600 - i * 60);
11
+ return (t > 0 ? [t, i, s] : [i, s]).map(e).join(":");
12
+ },
13
+ getElementViewLeft(n) {
14
+ let e = n.offsetLeft, t = n.offsetParent;
15
+ const i = document.body.scrollLeft + document.documentElement.scrollLeft;
16
+ if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement)
17
+ for (; t !== null; )
18
+ e += t.offsetLeft, t = t.offsetParent;
19
+ else
20
+ for (; t !== null && t !== n; )
21
+ e += t.offsetLeft, t = t.offsetParent;
22
+ return e - i;
23
+ },
24
+ getBoundingClientRectViewLeft(n) {
25
+ const e = window.scrollY || window.pageYOffset || document.body.scrollTop + (document.documentElement && document.documentElement.scrollTop || 0);
26
+ if (n.getBoundingClientRect) {
27
+ const t = this.getBoundingClientRectViewLeft;
28
+ if (typeof t.offset != "number") {
29
+ let a = document.createElement("div");
30
+ a.style.cssText = "position:absolute;top:0;left:0;", document.body.appendChild(a), t.offset = -a.getBoundingClientRect().top - e, document.body.removeChild(a), a = null;
31
+ }
32
+ const i = n.getBoundingClientRect(), s = t.offset;
33
+ return i.left + s;
34
+ } else
35
+ return this.getElementViewLeft(n);
36
+ },
37
+ getScrollPosition() {
38
+ return {
39
+ left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,
40
+ top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
41
+ };
42
+ },
43
+ setScrollPosition({ left: n = 0, top: e = 0 }) {
44
+ this.isFirefox ? (document.documentElement.scrollLeft = n, document.documentElement.scrollTop = e) : window.scrollTo(n, e);
45
+ },
46
+ isMobile: C,
47
+ isFirefox: /firefox/i.test(window.navigator.userAgent),
48
+ isChrome: /chrome/i.test(window.navigator.userAgent),
49
+ isSafari: /safari/i.test(window.navigator.userAgent),
50
+ storage: {
51
+ set(n, e) {
52
+ localStorage.setItem(n, String(e));
53
+ },
54
+ get(n) {
55
+ return localStorage.getItem(n);
56
+ }
57
+ },
58
+ nameMap: {
59
+ dragStart: C ? "touchstart" : "mousedown",
60
+ dragMove: C ? "touchmove" : "mousemove",
61
+ dragEnd: C ? "touchend" : "mouseup"
62
+ },
63
+ color2Number(n) {
64
+ return n[0] === "#" && (n = n.substr(1)), n.length === 3 && (n = `${n[0]}${n[0]}${n[1]}${n[1]}${n[2]}${n[2]}`), parseInt(n, 16) + 0 & 16777215;
65
+ },
66
+ number2Color(n) {
67
+ return "#" + ("00000" + n.toString(16)).slice(-6);
68
+ },
69
+ number2Type(n) {
70
+ switch (n) {
71
+ case 0:
72
+ return "right";
73
+ case 1:
74
+ return "top";
75
+ case 2:
76
+ return "bottom";
77
+ default:
78
+ return "right";
79
+ }
80
+ }
81
+ }, j = (n) => {
82
+ var t;
83
+ const e = {
84
+ container: n.element || document.getElementsByClassName("kplayer")[0],
85
+ live: !1,
86
+ autoplay: !1,
87
+ theme: "#b7daff",
88
+ loop: !1,
89
+ lang: (navigator.language || navigator.browserLanguage || "en").toLowerCase(),
90
+ screenshot: !1,
91
+ airplay: !0,
92
+ chromecast: !1,
93
+ hotkey: !0,
94
+ preload: "metadata",
95
+ volume: 0.7,
96
+ playbackSpeed: [0.5, 0.75, 1, 1.25, 1.5, 2],
97
+ video: {},
98
+ contextmenu: [],
99
+ ad: null,
100
+ vastAD: !1,
101
+ vastADURL: "",
102
+ mutex: !0,
103
+ pluginOptions: { hls: {}, flv: {}, dash: {}, webtorrent: {} },
104
+ preventClickToggle: !1
105
+ };
106
+ for (const i in e)
107
+ Object.prototype.hasOwnProperty.call(e, i) && !Object.prototype.hasOwnProperty.call(n, i) && (n[i] = e[i]);
108
+ return n.video && (n.video.type || (n.video.type = "auto")), typeof n.awaken == "object" && n.awaken && (n.awaken.user || (n.awaken.user = "DIYgod")), n.subtitle && (n.subtitle.type || (n.subtitle.type = "webvtt"), n.subtitle.fontSize || (n.subtitle.fontSize = "20px"), n.subtitle.bottom || (n.subtitle.bottom = "40px"), n.subtitle.color || (n.subtitle.color = "#fff")), (t = n.video) != null && t.quality && n.video.defaultQuality !== void 0 && (n.video.url = n.video.quality[n.video.defaultQuality].url), n.lang && (n.lang = n.lang.toLowerCase()), n.contextmenu = (n.contextmenu || []).concat([
109
+ {
110
+ key: "about-author",
111
+ link: "https://github.com/kenji-07/"
112
+ }
113
+ ]), n;
114
+ };
115
+ function N(n) {
116
+ this.lang = n, this.fallbackLang = this.lang.includes("-") ? this.lang.split("-")[0] : this.lang, this.tran = (e) => (e = e.toLowerCase(), E[this.lang] && E[this.lang][e] ? E[this.lang][e] : E[this.fallbackLang] && E[this.fallbackLang][e] ? E[this.fallbackLang][e] : _[e] ? _[e] : e);
117
+ }
118
+ const _ = {
119
+ "awaken-loading": "Awaken ачааллаж байна",
120
+ top: "Дээд",
121
+ bottom: "Доод",
122
+ rolling: "Гүйлгэх",
123
+ "input-awaken-enter": "Awaken бичээд Enter дарна уу",
124
+ "about-author": "Зохиогчийн тухай",
125
+ "kplayer-feedback": "KPlayer санал хүсэлт",
126
+ "about-kplayer": "KPlayer-ийн тухай",
127
+ loop: "Дахин тоглуулах",
128
+ speed: "Тоглуулах хурд",
129
+ quality: "Бичлэгийн чанар",
130
+ "opacity-awaken": "Awaken тунгалаг байдал",
131
+ normal: "Хэвийн",
132
+ "please-input-awaken": "Awaken текст оруулна уу!",
133
+ "set-awaken-color": "Awaken өнгө тохируулах",
134
+ "set-awaken-type": "Awaken төрөл тохируулах",
135
+ "show-awaken": "Awaken харуулах",
136
+ "video-failed": "Видео ачааллахад алдаа гарлаа",
137
+ "awaken-failed": "Awaken ачааллахад алдаа гарлаа",
138
+ "awaken-send-failed": "Awaken илгээхэд алдаа гарлаа",
139
+ "switching-quality": "Чанар солигдож байна: %q",
140
+ "switched-quality": "Чанар солигдлоо: %q",
141
+ ff: ">> %s секунд",
142
+ rew: "<< %s секунд",
143
+ "unlimited-awaken": "Хязгааргүй awaken",
144
+ "send-awaken": "Awaken илгээх",
145
+ setting: "ТОХИРГОО",
146
+ fullscreen: "Бүтэн дэлгэц",
147
+ "web-fullscreen": "Вэб бүтэн дэлгэц",
148
+ send: "Илгээх",
149
+ screenshot: "Дэлгэцийн зураг авах",
150
+ airplay: "AirPlay",
151
+ chromecast: "Chromecast",
152
+ subtitle: "Хадмал орчуулга",
153
+ off: "Унтраалттай",
154
+ "show-subs": "Хадмал харуулах",
155
+ "hide-subs": "Хадмал нуух",
156
+ volume: "Дууны түвшин",
157
+ live: "Шууд",
158
+ "video-info": "Видео мэдээлэл"
159
+ }, E = {
160
+ mn: _,
161
+ en: {
162
+ "awaken-loading": "awaken is loading",
163
+ top: "Top",
164
+ bottom: "Bottom",
165
+ rolling: "Rolling",
166
+ "input-awaken-enter": "Input awaken, hit Enter",
167
+ "about-author": "About author",
168
+ "kplayer-feedback": "KPlayer feedback",
169
+ "about-kplayer": "About KPlayer",
170
+ loop: "Loop",
171
+ speed: "Speed",
172
+ quality: "Quality",
173
+ "opacity-awaken": "Opacity for awaken",
174
+ normal: "Normal",
175
+ "please-input-awaken": "Please input awaken content!",
176
+ "set-awaken-color": "Set awaken color",
177
+ "set-awaken-type": "Set awaken type",
178
+ "show-awaken": "Show awaken",
179
+ "video-failed": "Video load failed",
180
+ "awaken-failed": "awaken load failed",
181
+ "awaken-send-failed": "awaken send failed",
182
+ "switching-quality": "Switching to %q quality",
183
+ "switched-quality": "Switched to %q quality",
184
+ ff: ">> %s s",
185
+ rew: "<< %s s",
186
+ "unlimited-awaken": "Unlimited awaken",
187
+ "send-awaken": "Send awaken",
188
+ setting: "Setting",
189
+ fullscreen: "Full screen",
190
+ "web-fullscreen": "Web full screen",
191
+ send: "Send",
192
+ screenshot: "Screenshot",
193
+ airplay: "AirPlay",
194
+ chromecast: "ChromeCast",
195
+ subtitle: "Subtitle",
196
+ off: "Off",
197
+ "show-subs": "Show subtitle",
198
+ "hide-subs": "Hide subtitle",
199
+ volume: "Volume",
200
+ live: "Live",
201
+ "video-info": "Video info"
202
+ },
203
+ "zh-cn": {
204
+ "awaken-loading": "弹幕加载中",
205
+ top: "顶部",
206
+ bottom: "底部",
207
+ rolling: "滚动",
208
+ "input-awaken-enter": "输入弹幕,回车发送",
209
+ "about-author": "关于作者",
210
+ "kplayer-feedback": "播放器意见反馈",
211
+ "about-kplayer": "关于 KPlayer 播放器",
212
+ loop: "洗脑循环",
213
+ speed: "速度",
214
+ quality: "画质",
215
+ "opacity-awaken": "弹幕透明度",
216
+ normal: "正常",
217
+ "please-input-awaken": "要输入弹幕内容啊喂!",
218
+ "set-awaken-color": "设置弹幕颜色",
219
+ "set-awaken-type": "设置弹幕类型",
220
+ "show-awaken": "显示弹幕",
221
+ "video-failed": "视频加载失败",
222
+ "awaken-failed": "弹幕加载失败",
223
+ "awaken-send-failed": "弹幕发送失败",
224
+ "switching-quality": "正在切换至 %q 画质",
225
+ "switched-quality": "已经切换至 %q 画质",
226
+ ff: "快进 %s 秒",
227
+ rew: "快退 %s 秒",
228
+ "unlimited-awaken": "海量弹幕",
229
+ "send-awaken": "发送弹幕",
230
+ setting: "设置",
231
+ fullscreen: "全屏",
232
+ "web-fullscreen": "页面全屏",
233
+ send: "发送",
234
+ screenshot: "截图",
235
+ airplay: "无线投屏",
236
+ chromecast: "ChromeCast",
237
+ subtitle: "字幕",
238
+ off: "关闭",
239
+ "show-subs": "显示字幕",
240
+ "hide-subs": "隐藏字幕",
241
+ volume: "音量",
242
+ live: "直播",
243
+ "video-info": "视频统计信息"
244
+ },
245
+ "zh-tw": {
246
+ "awaken-loading": "彈幕載入中",
247
+ top: "頂部",
248
+ bottom: "底部",
249
+ rolling: "滾動",
250
+ "input-awaken-enter": "輸入彈幕,Enter 發送",
251
+ "about-author": "關於作者",
252
+ "kplayer-feedback": "播放器意見回饋",
253
+ "about-kplayer": "關於 KPlayer 播放器",
254
+ loop: "循環播放",
255
+ speed: "速度",
256
+ quality: "畫質",
257
+ "opacity-awaken": "彈幕透明度",
258
+ normal: "正常",
259
+ "please-input-awaken": "請輸入彈幕內容啊!",
260
+ "set-awaken-color": "設定彈幕顏色",
261
+ "set-awaken-type": "設定彈幕類型",
262
+ "show-awaken": "顯示彈幕",
263
+ "video-failed": "影片載入失敗",
264
+ "awaken-failed": "彈幕載入失敗",
265
+ "awaken-send-failed": "彈幕發送失敗",
266
+ "switching-quality": "正在切換至 %q 畫質",
267
+ "switched-quality": "已經切換至 %q 畫質",
268
+ ff: "快進 %s 秒",
269
+ rew: "快退 %s 秒",
270
+ "unlimited-awaken": "巨量彈幕",
271
+ "send-awaken": "發送彈幕",
272
+ setting: "設定",
273
+ fullscreen: "全螢幕",
274
+ "web-fullscreen": "頁面全螢幕",
275
+ send: "發送",
276
+ screenshot: "截圖",
277
+ airplay: "無線投屏",
278
+ chromecast: "ChromeCast",
279
+ subtitle: "字幕",
280
+ off: "關閉",
281
+ "show-subs": "顯示字幕",
282
+ "hide-subs": "隱藏字幕",
283
+ volume: "音量",
284
+ live: "直播",
285
+ "video-info": "影片統計訊息"
286
+ },
287
+ "ko-kr": {
288
+ "awaken-loading": "awaken를 불러오는 중입니다.",
289
+ top: "Top",
290
+ bottom: "Bottom",
291
+ rolling: "Rolling",
292
+ "input-awaken-enter": "awaken를 입력하고 Enter를 누르세요.",
293
+ "about-author": "만든이",
294
+ "kplayer-feedback": "피드백 보내기",
295
+ "about-kplayer": "KPlayer 정보",
296
+ loop: "반복",
297
+ speed: "배속",
298
+ quality: "화질",
299
+ "opacity-awaken": "awaken 불투명도",
300
+ normal: "표준",
301
+ "please-input-awaken": "awaken를 입력하세요!",
302
+ "set-awaken-color": "awaken 색상",
303
+ "set-awaken-type": "awaken 설정",
304
+ "show-awaken": "awaken 표시",
305
+ "video-failed": "비디오를 불러오지 못했습니다.",
306
+ "awaken-failed": "awaken를 불러오지 못했습니다.",
307
+ "awaken-send-failed": "awaken 전송에 실패했습니다.",
308
+ "switching-quality": "전환 %q 화질",
309
+ "switched-quality": "전환 됨 %q 화질",
310
+ ff: "앞으로 %s 초",
311
+ rew: "뒤로 %s 초",
312
+ "unlimited-awaken": "끝없는 awaken",
313
+ "send-awaken": "awaken 보내기",
314
+ setting: "설정",
315
+ fullscreen: "전체 화면",
316
+ "web-fullscreen": "웹 내 전체화면",
317
+ send: "보내기",
318
+ screenshot: "화면 캡쳐",
319
+ airplay: "에어플레이",
320
+ chromecast: "ChromeCast",
321
+ subtitle: "부제",
322
+ off: "끄다",
323
+ "show-subs": "자막 보이기",
324
+ "hide-subs": "자막 숨기기",
325
+ volume: "볼륨",
326
+ live: "생방송",
327
+ "video-info": "비디오 정보"
328
+ },
329
+ de: {
330
+ "awaken-loading": "awaken lädt...",
331
+ top: "Oben",
332
+ bottom: "Unten",
333
+ rolling: "Rollend",
334
+ "input-awaken-enter": "Drücke Enter nach dem Einfügen vom awaken",
335
+ "about-author": "Über den Autor",
336
+ "kplayer-feedback": "KPlayer Feedback",
337
+ "about-kplayer": "Über KPlayer",
338
+ loop: "Wiederholen",
339
+ speed: "Geschwindigkeit",
340
+ quality: "Qualität",
341
+ "opacity-awaken": "Transparenz für awaken",
342
+ normal: "Normal",
343
+ "please-input-awaken": "Bitte awaken Inhalt eingeben!",
344
+ "set-awaken-color": "awaken Farbe festlegen",
345
+ "set-awaken-type": "awaken Typ festlegen",
346
+ "show-awaken": "Zeige awaken",
347
+ "video-failed": "Das Video konnte nicht geladen werden",
348
+ "awaken-failed": "awaken konnte nicht geladen werden",
349
+ "awaken-send-failed": "Das senden von awaken ist fehgeschlagen",
350
+ "switching-quality": "Wechsle zur %q Qualität",
351
+ "switched-quality": "Zur %q Qualität gewechselt",
352
+ ff: "%s s Vorwärts",
353
+ rew: "%s s Zurück",
354
+ "unlimited-awaken": "Unlimitiertes awaken",
355
+ "send-awaken": "Sende awaken",
356
+ setting: "Einstellungen",
357
+ fullscreen: "Vollbild",
358
+ "web-fullscreen": "Browser Vollbild",
359
+ send: "Senden",
360
+ screenshot: "Screenshot",
361
+ airplay: "AirPlay",
362
+ chromecast: "ChromeCast",
363
+ subtitle: "Untertitel",
364
+ off: "Schließung",
365
+ "show-subs": "Zeige Untertitel",
366
+ "hide-subs": "Verstecke Untertitel",
367
+ volume: "Lautstärke",
368
+ live: "Live",
369
+ "video-info": "Video Info"
370
+ },
371
+ ja: {
372
+ "awaken-loading": "コメントを読み込んでいます",
373
+ top: "トップ",
374
+ bottom: "ボトム",
375
+ rolling: "スクロール",
376
+ "input-awaken-enter": "コメントを入力し,Enter で送信",
377
+ "about-author": "作者について",
378
+ "kplayer-feedback": "KPlayer についての意見・要望",
379
+ "about-kplayer": "KPlayer について",
380
+ loop: "くり返し",
381
+ speed: "再生速度",
382
+ quality: "へ",
383
+ "opacity-awaken": "コメントの透明度",
384
+ normal: "通常",
385
+ "please-input-awaken": "コメントを入力してください!",
386
+ "set-awaken-color": "コメントの色",
387
+ "set-awaken-type": "コメントの種類",
388
+ "show-awaken": "コメント表示",
389
+ "video-failed": "ビデオの読み込みに失敗",
390
+ "awaken-failed": "コメントの読み込みに失敗",
391
+ "awaken-send-failed": "コメントの送信に失敗",
392
+ "switching-quality": "%qへ切り替え中",
393
+ "switched-quality": "%qへ切り替え完了",
394
+ ff: "%s 秒早送り",
395
+ rew: "%s 秒早戻し",
396
+ "unlimited-awaken": "コメント無制限",
397
+ "send-awaken": "コメント送信",
398
+ setting: "設定",
399
+ fullscreen: "全画面表示",
400
+ "web-fullscreen": "ブラウザ全体表示",
401
+ send: "送信",
402
+ screenshot: "画面コピー",
403
+ airplay: "AirPlay",
404
+ chromecast: "ChromeCast",
405
+ subtitle: "字幕",
406
+ off: "OFF",
407
+ "show-subs": "字幕表示",
408
+ "hide-subs": "字幕非表示",
409
+ volume: "音量",
410
+ live: "ライブ",
411
+ "video-info": "動画情報"
412
+ },
413
+ ru: {
414
+ "awaken-loading": "Загрузка комментариев",
415
+ top: "Вверху",
416
+ bottom: "Внизу",
417
+ rolling: "Лента",
418
+ "input-awaken-enter": "Введите комментарий, нажмите Enter",
419
+ "about-author": "Об авторе",
420
+ "kplayer-feedback": "Обратная связь",
421
+ "about-kplayer": "О плеере",
422
+ loop: "Закольцевать",
423
+ speed: "Скорость",
424
+ quality: "Качество",
425
+ "opacity-awaken": "Прозрачность",
426
+ normal: "Обычный",
427
+ "please-input-awaken": "Пожалуйста, введите комментарий!",
428
+ "set-awaken-color": "Цвет комментария",
429
+ "set-awaken-type": "Тип комментария",
430
+ "show-awaken": "Показать комментарии",
431
+ "video-failed": "Ошибка загрузки видео",
432
+ "awaken-failed": "Ошибка загрузки комментариев",
433
+ "awaken-send-failed": "Ошибка отправки комментария",
434
+ "switching-quality": "Переключение качества на: %q",
435
+ "switched-quality": "Установлено качество: %q",
436
+ ff: "Вперёд: %s с",
437
+ rew: "Назад: %s с",
438
+ "unlimited-awaken": "Без ограничений",
439
+ "send-awaken": "Отправить комментарий",
440
+ setting: "Настройки",
441
+ fullscreen: "На весь экран",
442
+ "web-fullscreen": "На весь Web экран",
443
+ send: "Отправить",
444
+ screenshot: "Скриншот",
445
+ airplay: "AirPlay",
446
+ chromecast: "ChromeCast",
447
+ subtitle: "Комментарий",
448
+ off: "Выкл",
449
+ "show-subs": "Показать комментарии",
450
+ "hide-subs": "Скрыть комментарии",
451
+ volume: "Громкость",
452
+ live: "Живые комментарии",
453
+ "video-info": "Информация о видео"
454
+ }
455
+ }, D = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 32">
456
+ <path d="M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z"></path>
457
+ </svg>`, K = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 17 32">
458
+ <path d="M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z"></path>
459
+ </svg>`, Q = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 21 32">
460
+ <path d="M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056z"></path>
461
+ </svg>`, X = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 21 32">
462
+ <path d="M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z"></path>
463
+ </svg>`, Y = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 21 32">
464
+ <path d="M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z"></path>
465
+ </svg>`, Z = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 33">
466
+ <path d="M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z"></path>
467
+ </svg>`, G = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 33">
468
+ <path d="M24.965 24.38h-18.132c-1.366 0-2.478-1.113-2.478-2.478v-11.806c0-1.364 1.111-2.478 2.478-2.478h18.132c1.366 0 2.478 1.113 2.478 2.478v11.806c0 1.364-1.11 2.478-2.478 2.478zM6.833 10.097v11.806h18.134l-0.002-11.806h-18.132zM2.478 28.928h5.952c0.684 0 1.238-0.554 1.238-1.239 0-0.684-0.554-1.238-1.238-1.238h-5.952v-5.802c0-0.684-0.554-1.239-1.238-1.239s-1.239 0.556-1.239 1.239v5.802c0 1.365 1.111 2.478 2.478 2.478zM30.761 19.412c-0.684 0-1.238 0.554-1.238 1.238v5.801h-5.951c-0.686 0-1.239 0.554-1.239 1.238 0 0.686 0.554 1.239 1.239 1.239h5.951c1.366 0 2.478-1.111 2.478-2.478v-5.801c0-0.683-0.554-1.238-1.239-1.238zM0 5.55v5.802c0 0.683 0.554 1.238 1.238 1.238s1.238-0.555 1.238-1.238v-5.802h5.952c0.684 0 1.238-0.554 1.238-1.238s-0.554-1.238-1.238-1.238h-5.951c-1.366-0.001-2.478 1.111-2.478 2.476zM32 11.35v-5.801c0-1.365-1.11-2.478-2.478-2.478h-5.951c-0.686 0-1.239 0.554-1.239 1.238s0.554 1.238 1.239 1.238h5.951v5.801c0 0.683 0.554 1.237 1.238 1.237 0.686 0.002 1.239-0.553 1.239-1.236z"></path>
469
+ </svg>`, J = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 28">
470
+ <path d="M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z"></path>
471
+ </svg>`, ee = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 32">
472
+ <path d="M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z"></path>
473
+ </svg>`, te = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-camera"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 7h1a2 2 0 0 0 2 -2a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2" /><path d="M9 13a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" /></svg>', ie = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-broadcast"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18.364 19.364a9 9 0 1 0 -12.728 0" /><path d="M15.536 16.536a5 5 0 1 0 -7.072 0" /><path d="M11 13a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /></svg>', se = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-subtitles"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 5a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3l12 0" /><path d="M7 15h5" /><path d="M15 15h2" /><path d="M17 12h-3" /><path d="M11 12h-1" /></svg>', ae = `<svg height="100%" version="1.1" viewBox="0 0 22 22">
474
+ <svg x="7" y="1">
475
+ <circle class="diplayer-loading-dot diplayer-loading-dot-0" cx="4" cy="4" r="2"></circle>
476
+ </svg>
477
+ <svg x="11" y="3">
478
+ <circle class="diplayer-loading-dot diplayer-loading-dot-1" cx="4" cy="4" r="2"></circle>
479
+ </svg>
480
+ <svg x="13" y="7">
481
+ <circle class="diplayer-loading-dot diplayer-loading-dot-2" cx="4" cy="4" r="2"></circle>
482
+ </svg>
483
+ <svg x="11" y="11">
484
+ <circle class="diplayer-loading-dot diplayer-loading-dot-3" cx="4" cy="4" r="2"></circle>
485
+ </svg>
486
+ <svg x="7" y="13">
487
+ <circle class="diplayer-loading-dot diplayer-loading-dot-4" cx="4" cy="4" r="2"></circle>
488
+ </svg>
489
+ <svg x="3" y="11">
490
+ <circle class="diplayer-loading-dot diplayer-loading-dot-5" cx="4" cy="4" r="2"></circle>
491
+ </svg>
492
+ <svg x="1" y="7">
493
+ <circle class="diplayer-loading-dot diplayer-loading-dot-6" cx="4" cy="4" r="2"></circle>
494
+ </svg>
495
+ <svg x="3" y="3">
496
+ <circle class="diplayer-loading-dot diplayer-loading-dot-7" cx="4" cy="4" r="2"></circle>
497
+ </svg>
498
+ </svg>`, ne = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-cast"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 19l.01 0" /><path d="M7 19a4 4 0 0 0 -4 -4" /><path d="M11 19a8 8 0 0 0 -8 -8" /><path d="M15 19h3a3 3 0 0 0 3 -3v-8a3 3 0 0 0 -3 -3h-12a3 3 0 0 0 -2.8 2" /></svg>', le = `<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
499
+ <g><path d="M990,503.4c0,25.9-21,46.9-46.9,46.9H56.9c-25.9,0-46.9-21-46.9-46.9v-4.6c0-25.9,21-46.9,46.9-46.9h886.1c25.9,0,46.9,21,46.9,46.9V503.4z"></path><path d="M430.9,131.1c18.3,18.3,18.3,48.1,0,66.4L93.1,535.2c-18.3,18.3-48.1,18.3-66.4,0l-2.9-2.9C5.5,514,5.5,484.3,23.9,466l337.7-337.7c18.3-18.3,48.1-18.3,66.4,0L430.9,131.1z"></path><path d="M430.9,868.9c18.3-18.3,18.3-48.1,0-66.4L93.1,464.8c-18.3-18.3-48.1-18.3-66.4,0l-2.9,2.9C5.5,486,5.5,515.7,23.9,534l337.7,337.7c18.3,18.3,48.1,18.3,66.4,0L430.9,868.9z"></path></g>
500
+ </svg>`, re = `<svg height="64" viewBox="0 0 52 58" width="64" xmlns="http://www.w3.org/2000/svg">
501
+ <g fill="currentColor" fill-rule="evenodd">
502
+ <path d="m 5.5924415,15.888 c 0.689576,-0.850221 1.934556,-0.988067 2.793425,-0.309293 0.858869,0.678775 1.01244,1.921914 0.344575,2.789293 -3.080792,3.874075 -4.749496,8.682314 -4.731,13.632 C 3.9968145,43.81419 13.325754,53.521229 25.13073,53.987735 36.935706,54.45424 47.001556,45.513639 47.931221,33.736084 48.860886,21.958529 40.322412,11.54939 28.590442,10.158 l 2.709,2.323 c 0.805609,0.726128 0.885668,1.962033 0.180472,2.786027 -0.705196,0.823994 -1.938636,0.935771 -2.780472,0.251973 l -7,-6 C 21.25581,9.139031 21.000457,8.5841111 21.000457,8 c 0,-0.5841111 0.255353,-1.1390314 0.698985,-1.519 l 7,-6 c 0.539853,-0.48659126 1.301183,-0.64202535 1.988568,-0.4059887 0.687386,0.2360366 1.192625,0.8263892 1.319668,1.5419814 C 32.134722,2.3325849 31.863571,3.0607745 31.299442,3.519 l -3.019,2.587 C 42.289945,7.3398222 52.778928,19.489857 51.954757,33.529417 51.130586,47.568977 39.292047,58.408309 25.234406,57.994492 11.176766,57.580675 -0.00366845,46.06373 -5.5845031e-4,32 -0.02194145,26.149702 1.9507985,20.466743 5.5924415,15.888 Z" fill-rule="nonzero"/>
503
+ <path d="m 18.518442,15.3 c -0.345217,0.403014 -0.836445,0.652314 -1.365537,0.693013 -0.529093,0.0407 -1.05267,-0.130538 -1.455463,-0.476013 l -7.0000005,-6 C 8.2538095,9.137031 7.9984565,8.5821111 7.9984565,7.998 c 0,-0.5841111 0.255353,-1.1390315 0.698985,-1.519 l 7.0000005,-6 c 0.539853,-0.48659126 1.301183,-0.64202535 1.988568,-0.4059887 0.687386,0.2360366 1.192625,0.8263892 1.319668,1.5419814 C 19.132722,2.3305849 18.861571,3.0587745 18.297442,3.517 l -5.225,4.483 5.227,4.481 c 0.838569,0.718149 0.936595,1.979957 0.219,2.819 z" fill-rule="nonzero"/>
504
+ <path d="m 15,40 c -1.104569,0 -2,0.895431 -2,2 0,1.104569 0.895431,2 2,2 h 6 c 1.104569,0 2,-0.895431 2,-2 0,-1.104569 -0.895431,-2 -2,-2 H 20 V 23 C 19.999864,22.262562 19.593937,21.58503 18.943766,21.237045 18.293595,20.88906 17.504684,20.92709 16.891,21.336 l -3,2 c -0.895079,0.599923 -1.153983,1.801111 -0.585512,2.716488 C 13.87396,26.967865 15.06543,27.268334 16,26.732 V 40 Z" fill-rule="nonzero"/>
505
+ <path d="m 31,21 c -2.761424,0 -5,2.238576 -5,5 v 13 c 0,2.761424 2.238576,5 5,5 h 3 c 2.761424,0 5,-2.238576 5,-5 V 26 c 0,-2.761424 -2.238576,-5 -5,-5 z m 4,5 v 13 c 0,0.552285 -0.447715,1 -1,1 h -3 c -0.552285,0 -1,-0.447715 -1,-1 V 26 c 0,-0.552285 0.447715,-1 1,-1 h 3 c 0.552285,0 1,0.447715 1,1 z" fill-rule="nonzero"/>
506
+ </g>
507
+ </svg>`, oe = `<svg height="64" viewBox="0 0 52 58" width="64" xmlns="http://www.w3.org/2000/svg">
508
+ <g fill="currentColor" fill-rule="evenodd">
509
+ <path d="M 46.407,15.888 C 45.717424,15.037779 44.472444,14.899933 43.613575,15.578707 42.754706,16.257482 42.601135,17.500621 43.269,18.368 46.349792,22.242075 48.018496,27.050314 48,32 48.002627,43.81419 38.673688,53.521229 26.868712,53.987735 15.063736,54.45424 4.9978851,45.513639 4.0682205,33.736084 3.1385559,21.958529 11.67703,11.54939 23.409,10.158 L 20.7,12.481 c -0.805609,0.726128 -0.885668,1.962033 -0.180472,2.786027 0.705196,0.823994 1.938636,0.935771 2.780472,0.251973 l 7,-6 C 30.743632,9.139031 30.998985,8.5841111 30.998985,8 30.998985,7.4158889 30.743632,6.8609686 30.3,6.481 l -7,-6 C 22.760147,-0.00559126 21.998817,-0.16102535 21.311432,0.0750113 20.624046,0.3110479 20.118807,0.9014005 19.991764,1.6169927 19.86472,2.3325849 20.135871,3.0607745 20.7,3.519 l 3.019,2.587 C 9.709497,7.3398222 -0.77948671,19.489857 0.0446845,33.529417 0.8688557,47.568977 12.707395,58.408309 26.765036,57.994492 40.822676,57.580675 52.00311,46.06373 52,32 52.021383,26.149702 50.048643,20.466743 46.407,15.888 Z" fill-rule="nonzero"/>
510
+ <path d="m 33.481,15.3 c 0.345217,0.403014 0.836445,0.652314 1.365537,0.693013 0.529093,0.0407 1.05267,-0.130538 1.455463,-0.476013 l 7,-6 c 0.443632,-0.379969 0.698985,-0.9348889 0.698985,-1.519 0,-0.5841111 -0.255353,-1.1390315 -0.698985,-1.519 l -7,-6 C 35.762147,-0.00759126 35.000817,-0.16302535 34.313432,0.0730113 33.626046,0.3090479 33.120807,0.8994005 32.993764,1.6149927 32.86672,2.3305849 33.137871,3.0587745 33.702,3.517 L 38.927,8 33.7,12.481 c -0.838569,0.718149 -0.936595,1.979957 -0.219,2.819 z" fill-rule="nonzero"/>
511
+ <path d="m 15,40 c -1.104569,0 -2,0.895431 -2,2 0,1.104569 0.895431,2 2,2 h 6 c 1.104569,0 2,-0.895431 2,-2 0,-1.104569 -0.895431,-2 -2,-2 H 20 V 23 C 19.999864,22.262562 19.593937,21.58503 18.943766,21.237045 18.293595,20.88906 17.504684,20.92709 16.891,21.336 l -3,2 c -0.895079,0.599923 -1.153983,1.801111 -0.585512,2.716488 C 13.87396,26.967865 15.06543,27.268334 16,26.732 V 40 Z" fill-rule="nonzero"/>
512
+ <path d="m 31,21 c -2.761424,0 -5,2.238576 -5,5 v 13 c 0,2.761424 2.238576,5 5,5 h 3 c 2.761424,0 5,-2.238576 5,-5 V 26 c 0,-2.761424 -2.238576,-5 -5,-5 z m 4,5 v 13 c 0,0.552285 -0.447715,1 -1,1 h -3 c -0.552285,0 -1,-0.447715 -1,-1 V 26 c 0,-0.552285 0.447715,-1 1,-1 h 3 c 0.552285,0 1,0.447715 1,1 z" fill-rule="nonzero"/>
513
+ </g>
514
+ </svg>`, ce = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-badge-hd"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10" /><path d="M14 9v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1" /><path d="M7 15v-6" /><path d="M10 15v-6" /><path d="M7 12h3" /></svg>', w = {
515
+ play: D,
516
+ pause: K,
517
+ volumeUp: Q,
518
+ volumeDown: X,
519
+ volumeOff: Y,
520
+ full: Z,
521
+ fullWeb: G,
522
+ setting: J,
523
+ right: ee,
524
+ camera: te,
525
+ subtitle: se,
526
+ loading: ae,
527
+ airplay: ie,
528
+ chromecast: ne,
529
+ back: le,
530
+ rewind: re,
531
+ forward: oe,
532
+ video: ce
533
+ };
534
+ function A(n) {
535
+ return String(n ?? "").replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
536
+ }
537
+ function O({
538
+ current: n = !1,
539
+ airplay: e = !1,
540
+ pic: t = "",
541
+ screenshot: i = !1,
542
+ preload: s = "",
543
+ url: a = "",
544
+ subtitle: l = null
545
+ } = {}) {
546
+ return l && l.type, `
547
+ <video
548
+ class="kplayer-video ${n ? "kplayer-video-current" : ""}"
549
+ webkit-playsinline
550
+ ${e ? 'x-webkit-airplay="allow"' : ""}
551
+ playsinline
552
+ ${t ? `poster="${A(t)}"` : ""}
553
+ ${i ? 'crossorigin="anonymous"' : ""}
554
+ ${s ? `preload="${A(s)}"` : ""}
555
+ ${e ? "nosrc" : a ? `src="${A(a)}"` : ""}
556
+ >
557
+ ${e ? `<source src="${A(a)}">` : ""}
558
+ </video>`.trim();
559
+ }
560
+ function b(n) {
561
+ return String(n ?? "").replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
562
+ }
563
+ function d(n) {
564
+ return n == null ? "" : String(n);
565
+ }
566
+ function q(n) {
567
+ return n ? "checked" : "";
568
+ }
569
+ function pe({
570
+ options: n,
571
+ index: e,
572
+ tran: t,
573
+ icons: i,
574
+ mobile: s,
575
+ video: a
576
+ }) {
577
+ var m, o, p, f, v, x, B, T, $, H, I, P, F;
578
+ const l = n.theme || "#b7daff", r = n.awaken && typeof n.awaken == "object" && n.awaken.bottom ? ` style="margin-bottom:${b(n.awaken.bottom)}"` : "", y = n.subtitle && typeof n.subtitle.url == "string", c = ((f = (p = (m = n.video) == null ? void 0 : m.quality) == null ? void 0 : p[((o = n.video) == null ? void 0 : o.defaultQuality) ?? 0]) == null ? void 0 : f.name) || "", k = (v = n.title) != null && v.back ? `
579
+ <div class="kplayer-back">
580
+ <button class="kplayer-title-back-btn" aria-label="Back">
581
+ <span class="kplayer-icon-content">${d(i.back)}</span>
582
+ </button>
583
+ </div>` : "", h = n.title ? `
584
+ ${k}
585
+ <div class="kplayer-title-bar">
586
+ <div class="kplayer-title-info">
587
+ <div class="kplayer-title-main">${d(n.title.title || "")}</div>
588
+ ${n.title.description ? `<div class="kplayer-title-desc">${d(n.title.description)}</div>` : ""}
589
+ </div>
590
+ </div>` : "";
591
+ return `
592
+ <div class="kplayer-mask"></div>
593
+ <div class="kplayer-video-wrap">
594
+ ${O(a)}
595
+ ${n.logo ? `
596
+ <div class="kplayer-logo">
597
+ <img src="${b(n.logo)}">
598
+ </div>` : ""}
599
+ ${h}
600
+ <div class="kplayer-awaken"${r}>
601
+ <div class="kplayer-awaken-item kplayer-awaken-item--demo"></div>
602
+ </div>
603
+ <div class="kplayer-subtitle"></div>
604
+ <div class="kplayer-bezel">
605
+ <span class="kplayer-bezel-icon"></span>
606
+ ${n.awaken ? `
607
+ <span class="kplayer-danloading">${d(t("awaken-loading"))}</span>` : ""}
608
+ <span class="diplayer-loading-icon">${d(i.loading)}</span>
609
+ </div>
610
+ </div>
611
+ <div class="kplayer-controller-mask"></div>
612
+
613
+
614
+ <div class="kplayer-controller">
615
+
616
+ <div class="kplayer-icons kplayer-icons-left">
617
+ <div class="kplayer-volume">
618
+ <button class="kplayer-icon kplayer-volume-icon">
619
+ <span class="kplayer-icon-content">${d(i.volumeDown)}</span>
620
+ </button>
621
+ <div class="kplayer-volume-bar-wrap" data-balloon-pos="up">
622
+ <div class="kplayer-volume-bar">
623
+ <div class="kplayer-volume-bar-inner" style="background: ${b(l)};">
624
+ <span class="kplayer-thumb" style="background: ${b(l)}"></span>
625
+ </div>
626
+ </div>
627
+ </div>
628
+ </div>
629
+ <span class="kplayer-time">
630
+ <span class="kplayer-ptime">0:00</span> /
631
+ <span class="kplayer-dtime">0:00</span>
632
+ </span>
633
+ ${n.live ? `
634
+ <span class="kplayer-live-badge"><span class="kplayer-live-dot" style="background: ${b(l)};"></span>${d(t("live"))}</span>` : ""}
635
+ </div>
636
+
637
+ <div class="kplayer-icons kplayer-icons-center">
638
+ <button class="kplayer-icon kplayer-rewind-icon">
639
+ <span class="kplayer-icon-content">${d(i.rewind)}</span>
640
+ </button>
641
+ <button class="kplayer-icon kplayer-play-icon">
642
+ <span class="kplayer-icon-content">${d(i.play)}</span>
643
+ </button>
644
+ <button class="kplayer-icon kplayer-forward-icon">
645
+ <span class="kplayer-icon-content">${d(i.forward)}</span>
646
+ </button>
647
+ </div>
648
+
649
+ <div class="kplayer-icons kplayer-icons-right">
650
+ <div class="kplayer-camera-icon"></div>
651
+ <div class="kplayer-airplay-icon"></div>
652
+ <div class="kplayer-chromecast-icon"></div>
653
+
654
+ <div class="kplayer-setting">
655
+ <button class="kplayer-icon kplayer-setting-icon" data-balloon="${b(t("setting"))}" data-balloon-pos="up">
656
+ <span class="kplayer-icon-content">${d(i.setting)}</span>
657
+ </button>
658
+
659
+ <div class="kplayer-setting-box">
660
+ <!-- MAIN PANEL -->
661
+ <div class="kplayer-setting-origin-panel">
662
+
663
+ ${n.subtitle ? `
664
+ <div class="kplayer-setting-item kplayer-setting-subtitle-entry">
665
+ <div class="kplayer-setting-action-main">
666
+ <span class="kplayer-setting-action-icon">${d(i.subtitle)}</span>
667
+ <span class="kplayer-label">${d(t("subtitle"))}</span>
668
+ </div>
669
+ <div class="kplayer-setting-item-right">
670
+ <span class="kplayer-setting-current-value" id="kplayer-subtitle-current"></span>
671
+ <span class="kplayer-setting-arrow">${d(i.right)}</span>
672
+ </div>
673
+ </div>` : ""}
674
+
675
+ ${(x = n.video) != null && x.quality || ((B = n.video) == null ? void 0 : B.type) === "hls" || ((T = n.video) == null ? void 0 : T.type) === "auto" ? `
676
+ <div class="kplayer-setting-item kplayer-setting-quality-entry">
677
+ <div class="kplayer-setting-action-main">
678
+ <span class="kplayer-setting-action-icon">${d(i.video || i.setting)}</span>
679
+ <span class="kplayer-label">${d(t("quality"))}</span>
680
+ </div>
681
+ <div class="kplayer-setting-item-right">
682
+ <span class="kplayer-setting-current-value" id="kplayer-quality-current">${d(c || "Auto")}</span>
683
+ <span class="kplayer-setting-arrow">${d(i.right)}</span>
684
+ </div>
685
+ </div>` : ""}
686
+
687
+ ${n.airplay ? `
688
+ <div class="kplayer-setting-action kplayer-setting-airplay-entry">
689
+ <div class="kplayer-setting-action-main">
690
+ <span class="kplayer-setting-action-icon">${d(i.airplay)}</span>
691
+ <span class="kplayer-label">${d(t("airplay"))}</span>
692
+ </div>
693
+ </div>` : ""}
694
+
695
+ ${n.chromecast ? `
696
+ <div class="kplayer-setting-action kplayer-setting-chromecast-entry">
697
+ <div class="kplayer-setting-action-main">
698
+ <span class="kplayer-setting-action-icon">${d(i.chromecast)}</span>
699
+ <span class="kplayer-label">${d(t("chromecast"))}</span>
700
+ </div>
701
+ </div>` : ""}
702
+
703
+ ${n.screenshot ? `
704
+ <div class="kplayer-setting-action kplayer-setting-screenshot-entry">
705
+ <div class="kplayer-setting-action-main">
706
+ <span class="kplayer-setting-action-icon">${d(i.camera)}</span>
707
+ <span class="kplayer-label">${d(t("screenshot"))}</span>
708
+ </div>
709
+ </div>` : ""}
710
+
711
+ <div class="kplayer-setting-item kplayer-setting-speed">
712
+ <div class="kplayer-setting-action-main">
713
+ <span class="kplayer-label">${d(t("speed"))}</span>
714
+ </div>
715
+ <div class="kplayer-setting-item-right">
716
+ <span class="kplayer-setting-speed-badge" id="kplayer-speed-current">1×</span>
717
+ <span class="kplayer-setting-arrow">${d(i.right)}</span>
718
+ </div>
719
+ </div>
720
+
721
+ <div class="kplayer-setting-item kplayer-setting-loop">
722
+ <div class="kplayer-setting-action-main">
723
+ <span class="kplayer-label">${d(t("loop"))}</span>
724
+ </div>
725
+ <div class="kplayer-toggle">
726
+ <input class="kplayer-toggle-setting-input" type="checkbox" name="kplayer-toggle" ${q(n.loop)}>
727
+ <label for="kplayer-toggle"></label>
728
+ </div>
729
+ </div>
730
+
731
+ <div class="kplayer-setting-item kplayer-setting-showdan">
732
+ <div class="kplayer-toggle">
733
+ <input class="kplayer-showdan-setting-input" type="checkbox" name="kplayer-toggle-dan" ${q(!0)}>
734
+ <label for="kplayer-toggle-dan"></label>
735
+ </div>
736
+ </div>
737
+
738
+ <div class="kplayer-setting-item kplayer-setting-danunlimit">
739
+ <span class="kplayer-label">${d(t("unlimited-awaken"))}</span>
740
+ <div class="kplayer-toggle">
741
+ <input class="kplayer-danunlimit-setting-input" type="checkbox" name="kplayer-toggle-danunlimit" ${q(
742
+ typeof n.awaken == "object" && (($ = n.awaken) == null ? void 0 : $.unlimited)
743
+ )}>
744
+ <label for="kplayer-toggle-danunlimit"></label>
745
+ </div>
746
+ </div>
747
+
748
+ <div class="kplayer-setting-item kplayer-setting-awaken">
749
+ <span class="kplayer-label">${d(t("opacity-awaken"))}</span>
750
+ <div class="kplayer-awaken-bar-wrap">
751
+ <div class="kplayer-awaken-bar">
752
+ <div class="kplayer-awaken-bar-inner">
753
+ <span class="kplayer-thumb"></span>
754
+ </div>
755
+ </div>
756
+ </div>
757
+ </div>
758
+ </div>
759
+
760
+ <!-- SPEED PANEL -->
761
+ <div class="kplayer-setting-speed-panel">
762
+ <div class="kplayer-setting-panel-back kplayer-setting-back-main">
763
+ <div class="kplayer-setting-action-main">
764
+ <span class="kplayer-setting-back-icon">${d(i.back)}</span>
765
+ <span class="kplayer-label">${d(t("speed"))}</span>
766
+ </div>
767
+ </div>
768
+ ${(n.playbackSpeed || []).map(
769
+ (g) => `
770
+ <div class="kplayer-setting-speed-item" data-speed="${b(g)}">
771
+ <span class="kplayer-label">${d(g === 1 ? t("normal") : g)}</span>
772
+ <span class="kplayer-check-icon"><svg viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span>
773
+ </div>`
774
+ ).join("")}
775
+ </div>
776
+
777
+ <!-- SUBTITLE PANEL -->
778
+ <div class="kplayer-setting-subtitle-panel">
779
+ <div class="kplayer-setting-panel-back kplayer-setting-back-main">
780
+ <div class="kplayer-setting-action-main">
781
+ <span class="kplayer-setting-back-icon">${d(i.back)}</span>
782
+ <span class="kplayer-label">${d(t("subtitle"))}</span>
783
+ </div>
784
+ </div>
785
+ ${n.subtitle ? y ? `
786
+ <div class="kplayer-setting-subtitle-toggle">
787
+ <div class="kplayer-setting-action-main">
788
+ <span class="kplayer-setting-action-icon">${d(i.subtitle)}</span>
789
+ <span class="kplayer-label">${d(t("hide-subs"))}</span>
790
+ </div>
791
+ </div>` : `
792
+ <div class="kplayer-subtitles-inline">
793
+ <div class="kplayer-subtitles-box">
794
+ <div class="kplayer-subtitles-panel">
795
+ ${(Array.isArray(n.subtitle.url) ? n.subtitle.url : []).map((g) => {
796
+ const L = g, U = L.lang ? L.name ? `${L.name} (${t(L.lang)})` : t(L.lang) : L.name || "";
797
+ return `
798
+ <div class="kplayer-subtitles-item" data-subtitle="${b(L.url)}">
799
+ <span class="kplayer-label">${d(U)}</span>
800
+ <span class="kplayer-check-icon"><svg viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span>
801
+ </div>`;
802
+ }).join("")}
803
+ </div>
804
+ </div>
805
+ </div>` : ""}
806
+ </div>
807
+
808
+ <!-- QUALITY PANEL -->
809
+ <div class="kplayer-setting-quality-panel">
810
+ <div class="kplayer-setting-panel-back kplayer-setting-back-main">
811
+ <div class="kplayer-setting-action-main">
812
+ <span class="kplayer-setting-back-icon">${d(i.back)}</span>
813
+ <span class="kplayer-label">${d(t("quality"))}</span>
814
+ </div>
815
+ </div>
816
+ ${(H = n.video) != null && H.quality || ((I = n.video) == null ? void 0 : I.type) === "hls" || ((P = n.video) == null ? void 0 : P.type) === "auto" ? `
817
+ <div class="kplayer-quality-inline">
818
+ <div class="kplayer-quality-list">
819
+ ${(F = n.video) != null && F.quality ? n.video.quality.map(
820
+ (g, L) => `
821
+ <div class="kplayer-quality-item" data-index="${L}">
822
+ <span class="kplayer-label">${d(g.name)}</span>
823
+ <span class="kplayer-check-icon"><svg viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg></span>
824
+ </div>`
825
+ ).join("") : ""}
826
+ </div>
827
+ </div>` : ""}
828
+ </div>
829
+ </div>
830
+ </div>
831
+
832
+ <button class="kplayer-icon kplayer-full-in-icon" data-balloon="${b(t("web-fullscreen"))}" data-balloon-pos="up">
833
+ <span class="kplayer-icon-content">${d(i.fullWeb)}</span>
834
+ </button>
835
+ <button class="kplayer-icon kplayer-full-icon" data-balloon="${b(t("fullscreen"))}" data-balloon-pos="up">
836
+ <span class="kplayer-icon-content">${d(i.full)}</span>
837
+ </button>
838
+ </div>
839
+
840
+ <div class="kplayer-bar-wrap">
841
+ <div class="kplayer-bar-time hidden">00:00</div>
842
+ <div class="kplayer-bar-preview"></div>
843
+ <div class="kplayer-bar">
844
+ <div class="kplayer-loaded" style="width: 0;"></div>
845
+ <div class="kplayer-played" style="width: 0; background: ${b(l)}">
846
+ <span class="kplayer-thumb" style="background: ${b(l)}"></span>
847
+ </div>
848
+ </div>
849
+ </div>
850
+ </div>
851
+
852
+ <div class="kplayer-info-panel kplayer-info-panel-hide">
853
+ <div class="kplayer-info-panel-close">[x]</div>
854
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-version">
855
+ <span class="kplayer-info-panel-item-title">Player version</span>
856
+ <span class="kplayer-info-panel-item-data"></span>
857
+ </div>
858
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-fps">
859
+ <span class="kplayer-info-panel-item-title">Player FPS</span>
860
+ <span class="kplayer-info-panel-item-data"></span>
861
+ </div>
862
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-type">
863
+ <span class="kplayer-info-panel-item-title">Video type</span>
864
+ <span class="kplayer-info-panel-item-data"></span>
865
+ </div>
866
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-url">
867
+ <span class="kplayer-info-panel-item-title">Video url</span>
868
+ <span class="kplayer-info-panel-item-data"></span>
869
+ </div>
870
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-resolution">
871
+ <span class="kplayer-info-panel-item-title">Video resolution</span>
872
+ <span class="kplayer-info-panel-item-data"></span>
873
+ </div>
874
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-duration">
875
+ <span class="kplayer-info-panel-item-title">Video duration</span>
876
+ <span class="kplayer-info-panel-item-data"></span>
877
+ </div>
878
+ ${n.awaken ? `
879
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-awaken-id">
880
+ <span class="kplayer-info-panel-item-title">Awaken id</span>
881
+ <span class="kplayer-info-panel-item-data"></span>
882
+ </div>
883
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-awaken-api">
884
+ <span class="kplayer-info-panel-item-title">Awaken api</span>
885
+ <span class="kplayer-info-panel-item-data"></span>
886
+ </div>
887
+ <div class="kplayer-info-panel-item kplayer-info-panel-item-awaken-amount">
888
+ <span class="kplayer-info-panel-item-title">Awaken amount</span>
889
+ <span class="kplayer-info-panel-item-data"></span>
890
+ </div>` : ""}
891
+ </div>
892
+
893
+ <div class="kplayer-menu">
894
+ ${(n.contextmenu || []).map((g) => {
895
+ const L = `${g.key ? t(g.key) : ""}${g.text ? g.text : ""}`;
896
+ return `
897
+ <div class="kplayer-menu-item">
898
+ <a ${g.link ? 'target="_blank"' : ""} href="${b(g.link || "javascript:void(0);")}">${d(L)}</a>
899
+ </div>`;
900
+ }).join("")}
901
+ </div>
902
+
903
+ <div class="kplayer-notice-list"></div>
904
+ <button class="kplayer-mobile-play" style="display:none!important">
905
+ ${d(i.play)}
906
+ </button>
907
+
908
+ <div class="kplayer-mobile-controls">
909
+ <button class="kplayer-mobile-rewind">
910
+ <span class="kplayer-icon-content">${d(i.rewind)}</span>
911
+ </button>
912
+ <button class="kplayer-mobile-play-btn">
913
+ <span class="kplayer-icon-content">${d(i.play)}</span>
914
+ </button>
915
+ <button class="kplayer-mobile-forward">
916
+ <span class="kplayer-icon-content">${d(i.forward)}</span>
917
+ </button>
918
+ </div>
919
+
920
+ `.trim();
921
+ }
922
+ class W {
923
+ constructor(e) {
924
+ this.container = e.container, this.options = e.options, this.index = e.index, this.tran = e.tran, this.init();
925
+ }
926
+ init() {
927
+ this.container.innerHTML = pe({
928
+ options: this.options,
929
+ index: this.index,
930
+ tran: this.tran,
931
+ icons: w,
932
+ mobile: u.isMobile,
933
+ video: {
934
+ current: !0,
935
+ pic: this.options.video.pic,
936
+ screenshot: this.options.screenshot,
937
+ airplay: u.isSafari && !u.isChrome ? this.options.airplay : !1,
938
+ chromecast: this.options.chromecast,
939
+ preload: this.options.preload,
940
+ url: this.options.video.url,
941
+ subtitle: this.options.subtitle
942
+ }
943
+ });
944
+ const e = (i) => this.container.querySelector(i), t = (i) => this.container.querySelectorAll(i);
945
+ this.volumeBar = e(".kplayer-volume-bar-inner"), this.volumeBarWrap = e(".kplayer-volume-bar"), this.volumeBarWrapWrap = e(".kplayer-volume-bar-wrap"), this.volumeButton = e(".kplayer-volume"), this.volumeButtonIcon = e(".kplayer-volume-icon"), this.volumeIcon = e(
946
+ ".kplayer-volume-icon .kplayer-icon-content"
947
+ ), this.playedBar = e(".kplayer-played"), this.loadedBar = e(".kplayer-loaded"), this.playedBarWrap = e(".kplayer-bar-wrap"), this.playedBarTime = e(".kplayer-bar-time"), this.awaken = e(".kplayer-awaken"), this.awakenLoading = e(".kplayer-danloading"), this.video = e(".kplayer-video-current"), this.bezel = e(".kplayer-bezel-icon"), this.playButton = e(".kplayer-play-icon"), this.mobilePlayButton = e(".kplayer-mobile-play") || document.createElement("button"), this.videoWrap = e(".kplayer-video-wrap"), this.controllerMask = e(".kplayer-controller-mask"), this.ptime = e(".kplayer-ptime"), this.settingButton = e(".kplayer-setting-icon"), this.settingBox = e(".kplayer-setting-box"), this.mask = e(".kplayer-mask"), this.loop = e(".kplayer-setting-loop"), this.loopToggle = e(
948
+ ".kplayer-setting-loop .kplayer-toggle-setting-input"
949
+ ), this.showAwaken = e(".kplayer-setting-showdan"), this.showAwakenToggle = e(
950
+ ".kplayer-showdan-setting-input"
951
+ ), this.unlimitAwaken = e(".kplayer-setting-danunlimit"), this.unlimitAwakenToggle = e(
952
+ ".kplayer-danunlimit-setting-input"
953
+ ), this.speed = e(".kplayer-setting-speed"), this.speedItem = t(".kplayer-setting-speed-item"), this.awakenOpacityBar = e(".kplayer-awaken-bar-inner"), this.awakenOpacityBarWrap = e(".kplayer-awaken-bar"), this.awakenOpacityBarWrapWrap = e(".kplayer-awaken-bar-wrap"), this.awakenOpacityBox = e(".kplayer-setting-awaken"), this.dtime = e(".kplayer-dtime"), this.controller = e(".kplayer-controller"), this.browserFullButton = e(".kplayer-full-icon"), this.webFullButton = e(".kplayer-full-in-icon"), this.menu = e(".kplayer-menu"), this.menuItem = t(".kplayer-menu-item"), this.qualityList = e(".kplayer-quality-list"), this.camareButton = e(".kplayer-camera-icon"), this.airplayButton = e(".kplayer-airplay-icon"), this.chromecastButton = e(".kplayer-chromecast-icon"), this.subtitleButton = e(".kplayer-subtitle-icon"), this.subtitleButtonInner = e(
954
+ ".kplayer-subtitle-icon .kplayer-icon-content"
955
+ ), this.subtitlesBox = e(".kplayer-subtitles-box"), this.subtitlesItem = t(".kplayer-subtitles-item"), this.subtitle = e(".kplayer-subtitle"), this.subtrack = e(".kplayer-subtrack"), this.barPreview = e(".kplayer-bar-preview"), this.barWrap = e(".kplayer-bar-wrap"), this.noticeList = e(".kplayer-notice-list"), this.infoPanel = e(".kplayer-info-panel"), this.infoPanelClose = e(".kplayer-info-panel-close"), this.infoVersion = e(
956
+ ".kplayer-info-panel-item-version .kplayer-info-panel-item-data"
957
+ ), this.infoFPS = e(
958
+ ".kplayer-info-panel-item-fps .kplayer-info-panel-item-data"
959
+ ), this.infoType = e(
960
+ ".kplayer-info-panel-item-type .kplayer-info-panel-item-data"
961
+ ), this.infoUrl = e(
962
+ ".kplayer-info-panel-item-url .kplayer-info-panel-item-data"
963
+ ), this.infoResolution = e(
964
+ ".kplayer-info-panel-item-resolution .kplayer-info-panel-item-data"
965
+ ), this.infoDuration = e(
966
+ ".kplayer-info-panel-item-duration .kplayer-info-panel-item-data"
967
+ ), this.infoAwakenId = e(
968
+ ".kplayer-info-panel-item-awaken-id .kplayer-info-panel-item-data"
969
+ ), this.infoAwakenApi = e(
970
+ ".kplayer-info-panel-item-awaken-api .kplayer-info-panel-item-data"
971
+ ), this.infoAwakenAmount = e(
972
+ ".kplayer-info-panel-item-awaken-amount .kplayer-info-panel-item-data"
973
+ ), this.subtitlesButton = e(".kplayer-subtitles-icon") || {
974
+ addEventListener: () => {
975
+ },
976
+ dataset: {},
977
+ style: {}
978
+ }, this.qualityButton = e(".kplayer-quality-icon") || document.createElement("span"), this.titleBar = e(".kplayer-title-bar"), this.titleBack = e(".kplayer-title-back-btn"), this.titleMain = e(".kplayer-title-main"), this.titleDesc = e(".kplayer-title-desc"), this.subtitleEntry = e(".kplayer-setting-subtitle-entry"), this.qualityEntry = e(".kplayer-setting-quality-entry"), this.qualityItems = t(".kplayer-quality-item");
979
+ }
980
+ static NewNotice(e, t, i) {
981
+ const s = document.createElement("div");
982
+ return s.classList.add("kplayer-notice"), s.style.opacity = String(t), s.innerText = e, i && (s.id = `kplayer-notice-${i}`), s;
983
+ }
984
+ }
985
+ class he {
986
+ constructor(e) {
987
+ this.currentAd = null, this.adContainer = null, this.skipRemaining = 0, this.adMarkers = [], this._timeUpdateBound = !1, this._shownAds = /* @__PURE__ */ new Set(), this._adVideo = null, this.player = e, this.options = e.options.ad || null, this._createAdContainer(), this.options && Array.isArray(this.options.url) && this.options.url.length > 0 && (this._renderBarMarkers(), this._bindTimeUpdate());
988
+ }
989
+ _createAdContainer() {
990
+ const e = this.player.template.videoWrap;
991
+ this.adContainer = document.createElement("div"), this.adContainer.className = "kplayer-ad-container", Object.assign(this.adContainer.style, {
992
+ display: "none",
993
+ position: "absolute",
994
+ top: "0",
995
+ left: "0",
996
+ right: "0",
997
+ bottom: "0",
998
+ zIndex: "50",
999
+ background: "#000"
1000
+ }), this.adContent = document.createElement("div"), this.adContent.className = "kplayer-ad-content", Object.assign(this.adContent.style, {
1001
+ width: "100%",
1002
+ height: "100%",
1003
+ display: "flex",
1004
+ alignItems: "center",
1005
+ justifyContent: "center",
1006
+ position: "relative"
1007
+ }), this.skipBtn = document.createElement("button"), this.skipBtn.className = "kplayer-ad-skip-btn", Object.assign(this.skipBtn.style, {
1008
+ position: "absolute",
1009
+ bottom: "60px",
1010
+ right: "16px",
1011
+ zIndex: "60",
1012
+ display: "none",
1013
+ alignItems: "center",
1014
+ gap: "6px",
1015
+ padding: "6px 14px",
1016
+ border: "none",
1017
+ borderRadius: "2px",
1018
+ background: "rgba(22, 22, 26, 0.96)",
1019
+ color: "rgba(255, 255, 255, 0.88)",
1020
+ fontSize: "13px",
1021
+ fontWeight: "400",
1022
+ cursor: "pointer"
1023
+ }), this.skipBtn.innerHTML = '<span class="kplayer-ad-skip-text">Skip ad in <span class="kplayer-ad-skip-count">5</span>s</span>', this.skipBtn.addEventListener("click", () => this._skipAd()), this.deeplinkBtn = document.createElement("button"), this.deeplinkBtn.className = "kplayer-ad-deeplink-btn", Object.assign(this.deeplinkBtn.style, {
1024
+ position: "absolute",
1025
+ bottom: "60px",
1026
+ left: "16px",
1027
+ zIndex: "60",
1028
+ display: "none",
1029
+ alignItems: "center",
1030
+ gap: "6px",
1031
+ padding: "6px 14px",
1032
+ border: "none",
1033
+ borderRadius: "2px",
1034
+ background: "rgba(22, 22, 26, 0.96)",
1035
+ color: "rgba(255, 255, 255, 0.88)",
1036
+ fontSize: "13px",
1037
+ cursor: "pointer"
1038
+ }), this.deeplinkBtn.textContent = "Learn more", this.deeplinkBtn.addEventListener("click", () => {
1039
+ var t;
1040
+ (t = this.currentAd) != null && t.deeplink && window.open(this.currentAd.deeplink, "_blank");
1041
+ }), this.adLabel = document.createElement("div"), this.adLabel.className = "kplayer-ad-label", Object.assign(this.adLabel.style, {
1042
+ position: "absolute",
1043
+ top: "12px",
1044
+ left: "16px",
1045
+ zIndex: "60",
1046
+ padding: "3px 8px",
1047
+ borderRadius: "2px",
1048
+ background: "rgba(22, 22, 26, 0.8)",
1049
+ color: "rgba(255, 255, 255, 0.6)",
1050
+ fontSize: "11px",
1051
+ letterSpacing: "0.04em"
1052
+ }), this.adLabel.textContent = "Ad", this.adContainer.appendChild(this.adContent), this.adContainer.appendChild(this.skipBtn), this.adContainer.appendChild(this.deeplinkBtn), this.adContainer.appendChild(this.adLabel), e.appendChild(this.adContainer);
1053
+ }
1054
+ _createMarker(e, t) {
1055
+ var l;
1056
+ const i = document.createElement("div");
1057
+ i.className = "kplayer-ad-marker", i.style.left = `${e}%`;
1058
+ const s = document.createElement("span");
1059
+ s.className = "kplayer-ad-marker-text";
1060
+ let a = "Ad";
1061
+ if ((l = t.name) != null && l.includes("vast_")) {
1062
+ const r = t.name.replace("vast_", "");
1063
+ a = r === "start" || r === "end" ? "Ad" : `Ad · ${r}`;
1064
+ } else t.name && (a = t.name);
1065
+ return s.textContent = a, i.appendChild(s), i;
1066
+ }
1067
+ _renderBarMarkers() {
1068
+ this.player.on("durationchange", () => {
1069
+ var t;
1070
+ const e = this.player.video.duration;
1071
+ !e || e === 1 / 0 || (this.adMarkers.forEach((i) => {
1072
+ var s;
1073
+ return (s = i.parentNode) == null ? void 0 : s.removeChild(i);
1074
+ }), this.adMarkers = [], (((t = this.options) == null ? void 0 : t.url) || []).forEach((i) => {
1075
+ if (i.startTime === void 0 || i.startTime <= 0) return;
1076
+ const s = i.startTime / e * 100;
1077
+ if (s >= 100) return;
1078
+ const a = this._createMarker(s, i);
1079
+ this.player.template.playedBarWrap.appendChild(a), this.adMarkers.push(a);
1080
+ }));
1081
+ });
1082
+ }
1083
+ _bindTimeUpdate() {
1084
+ this._timeUpdateBound || (this._timeUpdateBound = !0, this.player.on("timeupdate", () => {
1085
+ var i;
1086
+ if (this.currentAd || !((i = this.options) != null && i.url)) return;
1087
+ const e = this.player.video.currentTime, t = this.player.video.duration;
1088
+ for (const s of this.options.url) {
1089
+ s._isPostroll && t && t !== 1 / 0 && (s.startTime = t - 1);
1090
+ const a = `${s.name}_${s.startTime}`;
1091
+ if (this._shownAds.has(a)) continue;
1092
+ if (Math.abs(e - (s.startTime || 0)) < 0.8) {
1093
+ this._shownAds.add(a), s._impressionUrl && fetch(s._impressionUrl).catch(() => {
1094
+ }), this._showAd(s);
1095
+ break;
1096
+ }
1097
+ }
1098
+ }));
1099
+ }
1100
+ _showAd(e) {
1101
+ this.currentAd = e, this.adContent.innerHTML = "", this.adContainer && (this.adContainer.style.display = "block"), this.deeplinkBtn.style.display = e.deeplink ? "flex" : "none", e.type === "image" ? this._showImageAd(e) : e.type === "text" ? this._showTextAd(e) : e.type === "video" && this._showVideoAd(e), e.type !== "video" ? this.player.pause() : this.player.video.pause(), this._startSkipTimer(e.skipTime || 5);
1102
+ }
1103
+ _showImageAd(e) {
1104
+ const t = document.createElement("img");
1105
+ t.src = e.url, Object.assign(t.style, {
1106
+ maxWidth: "100%",
1107
+ maxHeight: "100%",
1108
+ objectFit: "contain",
1109
+ cursor: e.deeplink ? "pointer" : "default"
1110
+ }), e.deeplink && t.addEventListener("click", () => window.open(e.deeplink, "_blank")), this.adContent.appendChild(t);
1111
+ }
1112
+ _showTextAd(e) {
1113
+ const t = e.backroundColor ? e.backroundColor.startsWith("#") ? e.backroundColor : "#" + e.backroundColor : "#1a1a1a";
1114
+ this.adContent.style.background = t, this.adContainer && (this.adContainer.style.background = t);
1115
+ const i = document.createElement("div");
1116
+ Object.assign(i.style, {
1117
+ color: "#fff",
1118
+ fontSize: "18px",
1119
+ fontWeight: "400",
1120
+ textAlign: "center",
1121
+ padding: "24px",
1122
+ lineHeight: "1.6",
1123
+ cursor: e.deeplink ? "pointer" : "default"
1124
+ }), i.textContent = e.url, e.deeplink && i.addEventListener("click", () => window.open(e.deeplink, "_blank")), this.adContent.appendChild(i);
1125
+ }
1126
+ _showVideoAd(e) {
1127
+ this.adContainer && (this.adContainer.style.background = "#000"), this.adContent.style.background = "#000";
1128
+ const t = document.createElement("video");
1129
+ t.src = e.url, t.autoplay = !0, t.controls = !1, Object.assign(t.style, {
1130
+ width: "100%",
1131
+ height: "100%",
1132
+ objectFit: "contain",
1133
+ cursor: e.deeplink ? "pointer" : "default"
1134
+ }), e.deeplink && t.addEventListener("click", () => window.open(e.deeplink, "_blank")), t.addEventListener("ended", () => this._closeAd()), this.adContent.appendChild(t), this._adVideo = t;
1135
+ }
1136
+ _startSkipTimer(e) {
1137
+ this.skipRemaining = e, this.skipBtn.style.display = "flex";
1138
+ const t = this.skipBtn.querySelector(".kplayer-ad-skip-text");
1139
+ this.skipBtn.disabled = !0, this.skipBtn.style.opacity = "0.6", this.skipBtn.style.cursor = "default", t && (t.innerHTML = `Skip ad in <span class="kplayer-ad-skip-count">${this.skipRemaining}</span>s`), clearInterval(this.skipTimer), this.skipTimer = setInterval(() => {
1140
+ this.skipRemaining--, this.skipRemaining <= 0 ? (clearInterval(this.skipTimer), this.skipBtn.disabled = !1, this.skipBtn.style.opacity = "1", this.skipBtn.style.cursor = "pointer", t && (t.textContent = "Skip ad")) : t && (t.innerHTML = `Skip ad in <span class="kplayer-ad-skip-count">${this.skipRemaining}</span>s`);
1141
+ }, 1e3);
1142
+ }
1143
+ _skipAd() {
1144
+ this.skipRemaining > 0 || this._closeAd();
1145
+ }
1146
+ _closeAd() {
1147
+ clearInterval(this.skipTimer), this._adVideo && (this._adVideo.pause(), this._adVideo.src = "", this._adVideo = null), this.adContent.style.background = "", this.adContainer && (this.adContainer.style.background = "#000", this.adContainer.style.display = "none"), this.skipBtn.style.display = "none", this.deeplinkBtn.style.display = "none", this.adContent.innerHTML = "";
1148
+ const e = this.currentAd;
1149
+ if (this.currentAd = null, e && e.startTime !== void 0) {
1150
+ const t = (e.startTime || 0) + 0.5, i = this.player.video.duration || 0;
1151
+ i > 0 && t < i && (this.player.video.currentTime = t);
1152
+ }
1153
+ this.player.play();
1154
+ }
1155
+ async _loadVAST(e) {
1156
+ var t;
1157
+ try {
1158
+ const s = await (await fetch(e)).text(), l = new DOMParser().parseFromString(s, "text/xml"), r = "http://www.iab.net/videosuite/vmap", y = l.getElementsByTagNameNS(r, "AdBreak");
1159
+ if (y.length > 0) {
1160
+ const c = this.player.video.duration || 0, k = [];
1161
+ for (const h of Array.from(y)) {
1162
+ const m = h.getAttribute("timeOffset") || "";
1163
+ let o = 0;
1164
+ m === "start" ? o = 0 : m === "end" ? o = c > 0 ? c - 1 : 99999 : m && (o = this._parseTime(m));
1165
+ const p = h.getElementsByTagNameNS(
1166
+ r,
1167
+ "AdTagURI"
1168
+ )[0], f = (t = p == null ? void 0 : p.textContent) == null ? void 0 : t.trim();
1169
+ f && k.push({ vastUrl: f, startTime: o, timeOffset: m });
1170
+ }
1171
+ for (const { vastUrl: h, startTime: m, timeOffset: o } of k)
1172
+ await this._fetchVASTAndRegister(h, m, o);
1173
+ this._registerVMAPMarkers();
1174
+ } else
1175
+ await this._parseVASTAndShow(l, 0, 5);
1176
+ } catch (i) {
1177
+ console.warn("[Kplayer] VAST/VMAP load failed:", i);
1178
+ }
1179
+ }
1180
+ async _fetchVASTAndRegister(e, t, i) {
1181
+ var s, a, l, r;
1182
+ try {
1183
+ const c = await (await fetch(e)).text(), h = new DOMParser().parseFromString(c, "text/xml"), m = h.querySelector("MediaFile"), o = (s = m == null ? void 0 : m.textContent) == null ? void 0 : s.trim(), p = (a = h.querySelector("Linear")) == null ? void 0 : a.getAttribute("skipoffset"), f = p ? this._parseTime(p) : 5, v = (r = (l = h.querySelector("Impression")) == null ? void 0 : l.textContent) == null ? void 0 : r.trim();
1184
+ if (!o) return;
1185
+ const x = {
1186
+ type: "video",
1187
+ url: o,
1188
+ startTime: t,
1189
+ skipTime: f,
1190
+ name: `vast_${i}`,
1191
+ _impressionUrl: v,
1192
+ _isPostroll: i === "end"
1193
+ };
1194
+ this.options || (this.options = { url: [] }), Array.isArray(this.options.url) || (this.options.url = []), this.options.url.push(x);
1195
+ } catch (y) {
1196
+ console.warn("[Kplayer] VAST fetch failed:", e, y);
1197
+ }
1198
+ }
1199
+ _registerVMAPMarkers() {
1200
+ const e = () => {
1201
+ var i, s;
1202
+ const t = this.player.video.duration;
1203
+ !t || t === 1 / 0 || ((((i = this.options) == null ? void 0 : i.url) || []).forEach((a) => {
1204
+ a._isPostroll && (a.startTime = t - 1);
1205
+ }), this.adMarkers.forEach((a) => {
1206
+ var l;
1207
+ return (l = a.parentNode) == null ? void 0 : l.removeChild(a);
1208
+ }), this.adMarkers = [], (((s = this.options) == null ? void 0 : s.url) || []).forEach((a) => {
1209
+ if (a.startTime === void 0 || a.startTime <= 0) return;
1210
+ const l = a.startTime / t * 100;
1211
+ if (l >= 100) return;
1212
+ const r = this._createMarker(l, a);
1213
+ this.player.template.playedBarWrap.appendChild(r), this.adMarkers.push(r);
1214
+ }));
1215
+ };
1216
+ this.player.video.duration && this.player.video.duration !== 1 / 0 ? e() : this.player.on("durationchange", e), this._bindTimeUpdate();
1217
+ }
1218
+ async _parseVASTAndShow(e, t, i) {
1219
+ var c, k, h, m;
1220
+ const s = e.querySelector("MediaFile"), a = (c = s == null ? void 0 : s.textContent) == null ? void 0 : c.trim(), l = (k = e.querySelector("Linear")) == null ? void 0 : k.getAttribute("skipoffset"), r = l ? this._parseTime(l) : i, y = (m = (h = e.querySelector("Impression")) == null ? void 0 : h.textContent) == null ? void 0 : m.trim();
1221
+ y && fetch(y).catch(() => {
1222
+ }), a && this._showAd({ type: "video", url: a, startTime: t, skipTime: r });
1223
+ }
1224
+ _parseTime(e) {
1225
+ if (!e) return 0;
1226
+ const t = e.split(":");
1227
+ return t.length !== 3 ? 0 : parseInt(t[0]) * 3600 + parseInt(t[1]) * 60 + parseFloat(t[2]);
1228
+ }
1229
+ destroy() {
1230
+ var e;
1231
+ clearInterval(this.skipTimer), this.adMarkers.forEach((t) => {
1232
+ var i;
1233
+ return (i = t.parentNode) == null ? void 0 : i.removeChild(t);
1234
+ }), (e = this.adContainer) != null && e.parentNode && this.adContainer.parentNode.removeChild(this.adContainer);
1235
+ }
1236
+ }
1237
+ class de {
1238
+ constructor() {
1239
+ this.events = {}, this.videoEvents = [
1240
+ "abort",
1241
+ "canplay",
1242
+ "canplaythrough",
1243
+ "durationchange",
1244
+ "emptied",
1245
+ "ended",
1246
+ "error",
1247
+ "loadeddata",
1248
+ "loadedmetadata",
1249
+ "loadstart",
1250
+ "mozaudioavailable",
1251
+ "pause",
1252
+ "play",
1253
+ "playing",
1254
+ "progress",
1255
+ "ratechange",
1256
+ "seeked",
1257
+ "seeking",
1258
+ "stalled",
1259
+ "suspend",
1260
+ "timeupdate",
1261
+ "volumechange",
1262
+ "waiting"
1263
+ ], this.playerEvents = [
1264
+ "screenshot",
1265
+ "thumbnails_show",
1266
+ "thumbnails_hide",
1267
+ "awaken_show",
1268
+ "awaken_hide",
1269
+ "awaken_clear",
1270
+ "awaken_loaded",
1271
+ "awaken_send",
1272
+ "awaken_opacity",
1273
+ "contextmenu_show",
1274
+ "contextmenu_hide",
1275
+ "notice_show",
1276
+ "notice_hide",
1277
+ "quality_start",
1278
+ "quality_end",
1279
+ "destroy",
1280
+ "resize",
1281
+ "fullscreen",
1282
+ "fullscreen_cancel",
1283
+ "webfullscreen",
1284
+ "webfullscreen_cancel",
1285
+ "subtitle_show",
1286
+ "subtitle_hide",
1287
+ "subtitle_change",
1288
+ "title_back"
1289
+ ];
1290
+ }
1291
+ on(e, t) {
1292
+ this.type(e) && typeof t == "function" && (this.events[e] || (this.events[e] = []), this.events[e].push(t));
1293
+ }
1294
+ trigger(e, t) {
1295
+ if (this.events[e] && this.events[e].length)
1296
+ for (let i = 0; i < this.events[e].length; i++)
1297
+ this.events[e][i](t);
1298
+ }
1299
+ type(e) {
1300
+ return this.playerEvents.indexOf(e) !== -1 ? "player" : this.videoEvents.indexOf(e) !== -1 ? "video" : (console.error(`Unknown event name: ${e}`), null);
1301
+ }
1302
+ }
1303
+ class ue {
1304
+ constructor(e) {
1305
+ this.player = e, this.lastScrollPosition = { left: 0, top: 0 }, this.player.events.on("webfullscreen", () => {
1306
+ this.player.resize();
1307
+ }), this.player.events.on("webfullscreen_cancel", () => {
1308
+ this.player.resize(), u.setScrollPosition(this.lastScrollPosition);
1309
+ }), this.fullscreenchange = () => {
1310
+ this.player.resize(), this.isFullScreen("browser") ? this.player.events.trigger("fullscreen") : (u.setScrollPosition(this.lastScrollPosition), this.player.events.trigger("fullscreen_cancel"));
1311
+ }, this.docfullscreenchange = () => {
1312
+ const t = document, i = document.fullscreenElement || t.mozFullScreenElement || t.msFullscreenElement;
1313
+ i && i !== this.player.container || (this.player.resize(), i ? this.player.events.trigger("fullscreen") : (u.setScrollPosition(this.lastScrollPosition), this.player.events.trigger("fullscreen_cancel")));
1314
+ }, /Firefox/.test(navigator.userAgent) ? (document.addEventListener(
1315
+ "mozfullscreenchange",
1316
+ this.docfullscreenchange
1317
+ ), document.addEventListener("fullscreenchange", this.docfullscreenchange)) : (this.player.container.addEventListener(
1318
+ "fullscreenchange",
1319
+ this.fullscreenchange
1320
+ ), this.player.container.addEventListener(
1321
+ "webkitfullscreenchange",
1322
+ this.fullscreenchange
1323
+ ), document.addEventListener("msfullscreenchange", this.docfullscreenchange), document.addEventListener("MSFullscreenChange", this.docfullscreenchange));
1324
+ }
1325
+ isFullScreen(e = "browser") {
1326
+ const t = document;
1327
+ switch (e) {
1328
+ case "browser":
1329
+ return document.fullscreenElement || t.mozFullScreenElement || t.webkitFullscreenElement || t.msFullscreenElement || null;
1330
+ case "web":
1331
+ return this.player.container.classList.contains("kplayer-fulled");
1332
+ }
1333
+ }
1334
+ request(e = "browser") {
1335
+ const t = e === "browser" ? "web" : "browser", i = this.isFullScreen(t);
1336
+ switch (i || (this.lastScrollPosition = u.getScrollPosition()), e) {
1337
+ case "browser": {
1338
+ const s = this.player.container, a = this.player.video;
1339
+ s.requestFullscreen ? s.requestFullscreen() : s.mozRequestFullScreen ? s.mozRequestFullScreen() : s.webkitRequestFullscreen ? s.webkitRequestFullscreen() : a.webkitEnterFullscreen ? a.webkitEnterFullscreen() : a.webkitEnterFullScreen ? a.webkitEnterFullScreen() : s.msRequestFullscreen && s.msRequestFullscreen();
1340
+ break;
1341
+ }
1342
+ case "web":
1343
+ this.player.container.classList.add("kplayer-fulled"), document.body.classList.add("kplayer-web-fullscreen-fix"), this.player.events.trigger("webfullscreen");
1344
+ break;
1345
+ }
1346
+ i && this.cancel(t);
1347
+ }
1348
+ cancel(e = "browser") {
1349
+ const t = document;
1350
+ switch (e) {
1351
+ case "browser":
1352
+ t.cancelFullScreen ? t.cancelFullScreen() : t.mozCancelFullScreen ? t.mozCancelFullScreen() : t.webkitCancelFullScreen ? t.webkitCancelFullScreen() : t.webkitCancelFullscreen ? t.webkitCancelFullscreen() : t.msCancelFullScreen ? t.msCancelFullScreen() : t.msExitFullscreen ? t.msExitFullscreen() : document.exitFullscreen && document.exitFullscreen();
1353
+ break;
1354
+ case "web":
1355
+ this.player.container.classList.remove("kplayer-fulled"), document.body.classList.remove("kplayer-web-fullscreen-fix"), this.player.events.trigger("webfullscreen_cancel");
1356
+ break;
1357
+ }
1358
+ }
1359
+ toggle(e = "browser") {
1360
+ this.isFullScreen(e) ? this.cancel(e) : this.request(e);
1361
+ }
1362
+ destroy() {
1363
+ /Firefox/.test(navigator.userAgent) ? (document.removeEventListener(
1364
+ "mozfullscreenchange",
1365
+ this.docfullscreenchange
1366
+ ), document.removeEventListener(
1367
+ "fullscreenchange",
1368
+ this.docfullscreenchange
1369
+ )) : (this.player.container.removeEventListener(
1370
+ "fullscreenchange",
1371
+ this.fullscreenchange
1372
+ ), this.player.container.removeEventListener(
1373
+ "webkitfullscreenchange",
1374
+ this.fullscreenchange
1375
+ ), document.removeEventListener(
1376
+ "msfullscreenchange",
1377
+ this.docfullscreenchange
1378
+ ), document.removeEventListener(
1379
+ "MSFullscreenChange",
1380
+ this.docfullscreenchange
1381
+ ));
1382
+ }
1383
+ }
1384
+ class ye {
1385
+ constructor(e) {
1386
+ this.storageName = {
1387
+ opacity: "kplayer-awaken-opacity",
1388
+ volume: "kplayer-volume",
1389
+ unlimited: "kplayer-awaken-unlimited",
1390
+ awaken: "kplayer-awaken-show",
1391
+ subtitle: "kplayer-subtitle-show"
1392
+ }, this.default = {
1393
+ opacity: 0.7,
1394
+ volume: e.options.hasOwnProperty("volume") ? e.options.volume ?? 0.7 : 0.7,
1395
+ unlimited: (e.options.awaken && typeof e.options.awaken == "object" && e.options.awaken.unlimited ? 1 : 0) || 0,
1396
+ awaken: 1,
1397
+ subtitle: 1
1398
+ }, this.data = {}, this.init();
1399
+ }
1400
+ init() {
1401
+ for (const e in this.storageName) {
1402
+ const t = e, i = this.storageName[t];
1403
+ this.data[t] = parseFloat(
1404
+ u.storage.get(i) || String(this.default[t])
1405
+ );
1406
+ }
1407
+ }
1408
+ get(e) {
1409
+ return this.data[e];
1410
+ }
1411
+ set(e, t) {
1412
+ this.data[e] = t, u.storage.set(this.storageName[e], t);
1413
+ }
1414
+ }
1415
+ class me {
1416
+ constructor(e, t, i, s) {
1417
+ this._track = null, this.container = e, this.video = t, this.options = i, this.events = s, this.init();
1418
+ }
1419
+ init() {
1420
+ this.container.style.fontSize = this.options.fontSize || "20px", this.container.style.bottom = this.options.bottom || "40px", this.container.style.color = this.options.color || "#fff";
1421
+ }
1422
+ // VTT текстийг parse хийж cue inject хийнэ — <track> ашиглахгүй
1423
+ async loadVttText(e) {
1424
+ this._clearTrack();
1425
+ const t = this.video.addTextTrack("subtitles", "", "");
1426
+ t.mode = "showing", this._track = t;
1427
+ const i = this._parseVtt(e);
1428
+ for (const s of i)
1429
+ try {
1430
+ t.addCue(s);
1431
+ } catch (a) {
1432
+ console.warn("[KPlayer] addCue failed:", a);
1433
+ }
1434
+ this._onTimeUpdateBound = this._onTimeUpdate.bind(this), this.video.addEventListener("timeupdate", this._onTimeUpdateBound);
1435
+ }
1436
+ _onTimeUpdate() {
1437
+ var t;
1438
+ if (!((t = this._track) != null && t.activeCues)) return;
1439
+ const e = this._track.activeCues;
1440
+ this.container.innerHTML = "";
1441
+ for (let i = 0; i < e.length; i++) {
1442
+ const s = e[i], a = document.createElement("p");
1443
+ a.textContent = s.text.replace(/<[^>]+>/g, ""), this.container.appendChild(a);
1444
+ }
1445
+ }
1446
+ _clearTrack() {
1447
+ if (this._onTimeUpdateBound && (this.video.removeEventListener("timeupdate", this._onTimeUpdateBound), this._onTimeUpdateBound = void 0), this._track) {
1448
+ for (; this._track.cues && this._track.cues.length > 0; )
1449
+ this._track.removeCue(this._track.cues[0]);
1450
+ this._track.mode = "disabled", this._track.oncuechange = null, this._track = null;
1451
+ }
1452
+ this.container.innerHTML = "";
1453
+ }
1454
+ _parseVtt(e) {
1455
+ const t = [], s = e.replace(/^\uFEFF/, "").trim().split(/\n\s*\n/);
1456
+ for (const a of s) {
1457
+ const l = a.trim().split(`
1458
+ `);
1459
+ if (!l.length || l[0].startsWith("WEBVTT") || l[0].startsWith("NOTE") || l[0].startsWith("STYLE"))
1460
+ continue;
1461
+ let r = -1;
1462
+ for (let o = 0; o < l.length; o++)
1463
+ if (l[o].includes("-->")) {
1464
+ r = o;
1465
+ break;
1466
+ }
1467
+ if (r === -1) continue;
1468
+ const c = l[r].match(
1469
+ /((?:\d{2}:)?\d{2}:\d{2}[.,]\d{3})\s*-->\s*((?:\d{2}:)?\d{2}:\d{2}[.,]\d{3})/
1470
+ );
1471
+ if (!c) continue;
1472
+ const k = this._timeToSeconds(c[1]), h = this._timeToSeconds(c[2]), m = l.slice(r + 1).join(`
1473
+ `).trim();
1474
+ if (m)
1475
+ try {
1476
+ const o = new VTTCue(k, h, m);
1477
+ t.push(o);
1478
+ } catch (o) {
1479
+ console.warn("[KPlayer] VTTCue failed:", o, k, h, m);
1480
+ }
1481
+ }
1482
+ return t;
1483
+ }
1484
+ _timeToSeconds(e) {
1485
+ const i = e.replace(",", ".").split(":");
1486
+ return i.length === 3 ? parseInt(i[0]) * 3600 + parseInt(i[1]) * 60 + parseFloat(i[2]) : i.length === 2 ? parseInt(i[0]) * 60 + parseFloat(i[1]) : 0;
1487
+ }
1488
+ show() {
1489
+ this.container.classList.remove("kplayer-subtitle-hide"), this._track && (this._track.mode = "hidden"), this.events.trigger("subtitle_show");
1490
+ }
1491
+ hide() {
1492
+ this.container.classList.add("kplayer-subtitle-hide"), this._track && (this._track.mode = "disabled"), this.events.trigger("subtitle_hide");
1493
+ }
1494
+ toggle() {
1495
+ this.container.classList.contains("kplayer-subtitle-hide") ? this.show() : this.hide();
1496
+ }
1497
+ destroy() {
1498
+ this._clearTrack();
1499
+ }
1500
+ }
1501
+ class ke {
1502
+ constructor(e) {
1503
+ var a;
1504
+ this.player = e, this.player.template.mask.addEventListener("click", () => {
1505
+ this.hide();
1506
+ }), this.player.template.subtitlesButton && "addEventListener" in this.player.template.subtitlesButton && this.player.template.subtitlesButton.addEventListener("click", () => {
1507
+ this.adaptiveHeight(), this.show();
1508
+ });
1509
+ const t = Array.from(
1510
+ this.player.template.subtitlesItem || []
1511
+ ), i = t.length - 1;
1512
+ if (i < 0) return;
1513
+ for (let l = 0; l < i; l++)
1514
+ t[l].addEventListener("click", () => {
1515
+ this.hide(), this.selectSubtitle(l);
1516
+ });
1517
+ t[i].addEventListener("click", () => {
1518
+ this.hide(), this.selectOff();
1519
+ });
1520
+ const s = ((a = this.player.options.subtitle) == null ? void 0 : a.index) ?? 0;
1521
+ t[s] && (t.forEach((l) => l.classList.remove("kplayer-selected")), t[s].classList.add("kplayer-selected"));
1522
+ }
1523
+ reloadTrack() {
1524
+ var i;
1525
+ const e = this.player.video, t = this.player.template.subtrack;
1526
+ if (t) {
1527
+ if (t.default = !0, (i = e == null ? void 0 : e.textTracks) != null && i[0])
1528
+ try {
1529
+ e.textTracks[0].mode = "disabled", e.textTracks[0].mode = "showing";
1530
+ return;
1531
+ } catch {
1532
+ }
1533
+ e && typeof e.load == "function" && e.load();
1534
+ }
1535
+ }
1536
+ clearSelected() {
1537
+ Array.from(
1538
+ this.player.template.subtitlesItem || []
1539
+ ).forEach((t) => t.classList.remove("kplayer-selected"));
1540
+ }
1541
+ selectSubtitle(e) {
1542
+ const i = Array.from(
1543
+ this.player.template.subtitlesItem || []
1544
+ )[e];
1545
+ i && (this.clearSelected(), i.classList.add("kplayer-selected"), this.player.options.subtitle.index = e, this.player.loadSubtitleByIndex(e), this.player.template.subtitle.classList.contains("kplayer-subtitle-hide") && this.subContainerShow());
1546
+ }
1547
+ selectOff() {
1548
+ var s;
1549
+ const e = Array.from(
1550
+ this.player.template.subtitlesItem || []
1551
+ ), t = e.length - 1, i = e[t];
1552
+ i && (this.clearSelected(), i.classList.add("kplayer-selected"), this.player.options.subtitle.index = t, (s = this.player.subtitle) == null || s.hide(), this.player.template.subtitle.innerHTML = "", this.subContainerHide());
1553
+ }
1554
+ subContainerShow() {
1555
+ this.player.template.subtitle.classList.remove("kplayer-subtitle-hide"), this.player.events.trigger("subtitle_show");
1556
+ }
1557
+ subContainerHide() {
1558
+ this.player.template.subtitle.classList.add("kplayer-subtitle-hide"), this.player.events.trigger("subtitle_hide");
1559
+ }
1560
+ hide() {
1561
+ var e;
1562
+ (e = this.player.template.subtitlesBox) == null || e.classList.remove(
1563
+ "kplayer-subtitles-box-open"
1564
+ ), this.player.template.mask.classList.remove("kplayer-mask-show"), this.player.controller.disableAutoHide = !1;
1565
+ }
1566
+ show() {
1567
+ var e;
1568
+ (e = this.player.template.subtitlesBox) == null || e.classList.add(
1569
+ "kplayer-subtitles-box-open"
1570
+ ), this.player.template.mask.classList.add("kplayer-mask-show"), this.player.controller.disableAutoHide = !0;
1571
+ }
1572
+ adaptiveHeight() {
1573
+ const t = Array.from(this.player.template.subtitlesItem || []).length * 30 + 14, i = this.player.template.videoWrap.offsetHeight * 0.8;
1574
+ this.player.template.subtitlesBox && (t >= i - 50 ? (this.player.template.subtitlesBox.style.bottom = "8px", this.player.template.subtitlesBox.style.maxHeight = `${i - 8}px`) : (this.player.template.subtitlesBox.style.bottom = "50px", this.player.template.subtitlesBox.style.maxHeight = `${i - 50}px`));
1575
+ }
1576
+ updateUrls(e) {
1577
+ Array.isArray(e) && this.player.options.subtitle && (this.player.options.subtitle.url = e);
1578
+ }
1579
+ }
1580
+ class fe {
1581
+ constructor(e) {
1582
+ this.elements = {}, e.volumeBar && (this.elements.volume = e.volumeBar), e.playedBar && (this.elements.played = e.playedBar), e.loadedBar && (this.elements.loaded = e.loadedBar), e.awakenOpacityBar && (this.elements.awaken = e.awakenOpacityBar);
1583
+ }
1584
+ set(e, t, i) {
1585
+ t = Math.max(t, 0), t = Math.min(t, 1), this.elements[e] && (this.elements[e].style[i] = t * 100 + "%");
1586
+ }
1587
+ get(e) {
1588
+ var t;
1589
+ return parseFloat(((t = this.elements[e]) == null ? void 0 : t.style.width) || "0") / 100;
1590
+ }
1591
+ }
1592
+ class ve {
1593
+ constructor(e) {
1594
+ this.enableloadingChecker = !1, this.enableinfoChecker = !1, this.enablefpsChecker = !1, this.fpsIndex = 0, this.player = e, window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(t) {
1595
+ return window.setTimeout(t, 1e3 / 60), 0;
1596
+ }, this.types = ["loading", "info", "fps"], this.init();
1597
+ }
1598
+ init() {
1599
+ this.types.forEach((e) => {
1600
+ e !== "fps" && this[`init${e}Checker`]();
1601
+ });
1602
+ }
1603
+ initloadingChecker() {
1604
+ let e = 0, t = 0, i = !1;
1605
+ this.loadingChecker = setInterval(() => {
1606
+ this.enableloadingChecker && (t = this.player.video.currentTime, !i && t === e && !this.player.video.paused && (this.player.container.classList.add("kplayer-loading"), i = !0), i && t > e && !this.player.video.paused && (this.player.container.classList.remove("kplayer-loading"), i = !1), e = t);
1607
+ }, 100);
1608
+ }
1609
+ initfpsChecker() {
1610
+ window.requestAnimationFrame(() => {
1611
+ if (this.enablefpsChecker)
1612
+ if (this.initfpsChecker(), !this.fpsStart)
1613
+ this.fpsStart = /* @__PURE__ */ new Date(), this.fpsIndex = 0;
1614
+ else {
1615
+ this.fpsIndex++;
1616
+ const e = /* @__PURE__ */ new Date();
1617
+ e.getTime() - this.fpsStart.getTime() > 1e3 && (this.player.infoPanel.fps(
1618
+ this.fpsIndex / (e.getTime() - this.fpsStart.getTime()) * 1e3
1619
+ ), this.fpsStart = /* @__PURE__ */ new Date(), this.fpsIndex = 0);
1620
+ }
1621
+ else
1622
+ this.fpsStart = void 0, this.fpsIndex = 0;
1623
+ });
1624
+ }
1625
+ initinfoChecker() {
1626
+ this.infoChecker = setInterval(() => {
1627
+ this.enableinfoChecker && this.player.infoPanel.update();
1628
+ }, 1e3);
1629
+ }
1630
+ enable(e) {
1631
+ this[`enable${e}Checker`] = !0, e === "fps" && this.initfpsChecker();
1632
+ }
1633
+ disable(e) {
1634
+ this[`enable${e}Checker`] = !1;
1635
+ }
1636
+ destroy() {
1637
+ this.types.forEach((e) => {
1638
+ this[`enable${e}Checker`] = !1;
1639
+ const t = this[`${e}Checker`];
1640
+ t && clearInterval(t);
1641
+ });
1642
+ }
1643
+ }
1644
+ class ge {
1645
+ constructor(e) {
1646
+ this.container = e, this.container.addEventListener("animationend", () => {
1647
+ this.container.classList.remove("kplayer-bezel-transition");
1648
+ });
1649
+ }
1650
+ switch(e) {
1651
+ this.container.innerHTML = e, this.container.classList.add("kplayer-bezel-transition");
1652
+ }
1653
+ }
1654
+ class be {
1655
+ constructor(e) {
1656
+ this.container = e.container, this.barWidth = e.barWidth, this.container.style.backgroundImage = `url('${e.url}')`, this.events = e.events;
1657
+ }
1658
+ resize(e, t, i) {
1659
+ this.container.style.width = `${e}px`, this.container.style.height = `${t}px`, this.container.style.top = `${-t + 2}px`, this.barWidth = i;
1660
+ }
1661
+ show() {
1662
+ this.container.style.display = "block", this.events && this.events.trigger("thumbnails_show");
1663
+ }
1664
+ move(e) {
1665
+ this.container.style.backgroundPosition = `-${(Math.ceil(e / this.barWidth * 100) - 1) * 160}px 0`, this.container.style.left = `${Math.min(
1666
+ Math.max(e - this.container.offsetWidth / 2, -10),
1667
+ this.barWidth - 150
1668
+ )}px`;
1669
+ }
1670
+ hide() {
1671
+ this.container.style.display = "none", this.events && this.events.trigger("thumbnails_hide");
1672
+ }
1673
+ }
1674
+ let z = !0, M = !1;
1675
+ class we {
1676
+ constructor(e) {
1677
+ this.autoHideTimer = 0, this.disableAutoHide = !1, this._skipBtn = null, this._skipTarget = null, this.session = void 0, this.currentMedia = null, this.player = e, u.isMobile || (this.setAutoHideHandler = this.setAutoHide.bind(this), this.player.container.addEventListener(
1678
+ "mousemove",
1679
+ this.setAutoHideHandler
1680
+ ), this.player.container.addEventListener("click", this.setAutoHideHandler), this.player.on("play", this.setAutoHideHandler), this.player.on("pause", this.setAutoHideHandler)), this.initPlayButton(), this.initSeekButtons(), this.initThumbnails(), this.initPlayedBar(), this.initFullButton(), this.initQualityButton(), this.initScreenshotButton(), this.player.options.subtitle && typeof this.player.options.subtitle.url == "string" && this.initSubtitleButton(), this.initHighlights(), this.initAirplayButton(), this.initChromecastButton(), u.isMobile || this.initVolumeButton();
1681
+ }
1682
+ initPlayButton() {
1683
+ this.player.template.playButton.addEventListener("click", () => {
1684
+ this.player.toggle();
1685
+ }), this.player.template.mobilePlayButton.addEventListener("click", () => {
1686
+ this.player.toggle();
1687
+ }), u.isMobile ? (this.player.template.videoWrap.addEventListener("click", () => {
1688
+ this.toggle();
1689
+ }), this.player.template.controllerMask.addEventListener("click", () => {
1690
+ this.toggle();
1691
+ })) : this.player.options.preventClickToggle || (this.player.template.videoWrap.addEventListener("click", () => {
1692
+ this.player.toggle();
1693
+ }), this.player.template.controllerMask.addEventListener("click", () => {
1694
+ this.player.toggle();
1695
+ }));
1696
+ const e = this.player.container.querySelector(
1697
+ ".kplayer-mobile-rewind"
1698
+ ), t = this.player.container.querySelector(
1699
+ ".kplayer-mobile-forward"
1700
+ ), i = this.player.container.querySelector(
1701
+ ".kplayer-mobile-play-btn"
1702
+ );
1703
+ e == null || e.addEventListener("click", (s) => {
1704
+ s.stopPropagation(), this.player.seek(this.player.video.currentTime - 10), this.setAutoHide();
1705
+ }), t == null || t.addEventListener("click", (s) => {
1706
+ s.stopPropagation(), this.player.seek(this.player.video.currentTime + 10), this.setAutoHide();
1707
+ }), i == null || i.addEventListener("click", (s) => {
1708
+ s.stopPropagation(), this.player.toggle();
1709
+ });
1710
+ }
1711
+ initSeekButtons() {
1712
+ const e = this.player.container.querySelector(
1713
+ ".kplayer-rewind-icon"
1714
+ ), t = this.player.container.querySelector(
1715
+ ".kplayer-forward-icon"
1716
+ );
1717
+ e == null || e.addEventListener("click", (i) => {
1718
+ i.stopPropagation(), this.player.seek(this.player.video.currentTime - 10);
1719
+ }), t == null || t.addEventListener("click", (i) => {
1720
+ i.stopPropagation(), this.player.seek(this.player.video.currentTime + 10);
1721
+ });
1722
+ }
1723
+ initHighlights() {
1724
+ this._createSkipButton(), this.player.on("durationchange", () => {
1725
+ if (this.player.video.duration !== 1 && this.player.video.duration !== 1 / 0 && this.player.options.highlight) {
1726
+ const e = this.player.template.playedBarWrap.querySelectorAll(
1727
+ ".kplayer-highlight"
1728
+ );
1729
+ Array.from(e).forEach((t) => {
1730
+ this.player.template.playedBarWrap.removeChild(t);
1731
+ });
1732
+ for (let t = 0; t < this.player.options.highlight.length; t++) {
1733
+ const i = this.player.options.highlight[t];
1734
+ if (!i.text || !i.time) continue;
1735
+ const s = document.createElement("div");
1736
+ s.classList.add("kplayer-highlight"), s.style.left = i.time / this.player.video.duration * 100 + "%", s.innerHTML = `<span class="kplayer-highlight-text">${i.text}</span>`, s.addEventListener("click", (a) => {
1737
+ a.stopPropagation(), this.player.seek(i.time), this.player.paused && this.player.play();
1738
+ }), this.player.template.playedBarWrap.insertBefore(
1739
+ s,
1740
+ this.player.template.playedBarTime
1741
+ );
1742
+ }
1743
+ }
1744
+ }), this.player.on("timeupdate", () => {
1745
+ this._updateSkipButton();
1746
+ });
1747
+ }
1748
+ _createSkipButton() {
1749
+ if (this.player.container.querySelector(".kplayer-skip-btn")) return;
1750
+ const e = document.createElement("button");
1751
+ e.classList.add("kplayer-skip-btn"), e.style.display = "none", e.innerHTML = '<span class="kplayer-skip-btn-text"></span>', e.addEventListener("click", (t) => {
1752
+ t.stopPropagation(), this._skipTarget != null && (this.player.seek(this._skipTarget), this.player.paused && this.player.play()), e.style.display = "none";
1753
+ }), this.player.template.videoWrap.appendChild(e), this._skipBtn = e, this._skipTarget = null;
1754
+ }
1755
+ _updateSkipButton() {
1756
+ if (!this.player.options.highlight || !this._skipBtn) return;
1757
+ const e = this.player.options.highlight, t = this.player.video.currentTime;
1758
+ let i = !1;
1759
+ for (let s = 0; s < e.length - 1; s++) {
1760
+ const a = e[s], l = e[s + 1];
1761
+ if (!(!/\bstart\b|\bэхлэл\b/i.test(a.text) || !/\bend\b|\bтөгсгөл\b/i.test(l.text)) && !(t < a.time || t >= l.time)) {
1762
+ this._skipTarget = l.time, this._skipBtn.querySelector(".kplayer-skip-btn-text").textContent = a.text, this._skipBtn.style.display = "flex", i = !0;
1763
+ break;
1764
+ }
1765
+ }
1766
+ i || (this._skipBtn.style.display = "none");
1767
+ }
1768
+ initThumbnails() {
1769
+ this.player.options.video.thumbnails && (this.thumbnails = new be({
1770
+ container: this.player.template.barPreview,
1771
+ barWidth: this.player.template.barWrap.offsetWidth,
1772
+ url: this.player.options.video.thumbnails,
1773
+ events: this.player.events
1774
+ }), this.player.on("loadedmetadata", () => {
1775
+ var e;
1776
+ (e = this.thumbnails) == null || e.resize(
1777
+ 160,
1778
+ this.player.video.videoHeight / this.player.video.videoWidth * 160,
1779
+ this.player.template.barWrap.offsetWidth
1780
+ );
1781
+ }));
1782
+ }
1783
+ initPlayedBar() {
1784
+ const e = (i) => {
1785
+ let s = ((i.clientX || i.changedTouches[0].clientX) - u.getBoundingClientRectViewLeft(
1786
+ this.player.template.playedBarWrap
1787
+ )) / this.player.template.playedBarWrap.clientWidth;
1788
+ s = Math.max(0, Math.min(1, s)), this.player.bar.set("played", s, "width"), this.player.template.ptime.innerHTML = u.secondToTime(
1789
+ s * this.player.video.duration
1790
+ );
1791
+ }, t = (i) => {
1792
+ document.removeEventListener(
1793
+ u.nameMap.dragEnd,
1794
+ t
1795
+ ), document.removeEventListener(
1796
+ u.nameMap.dragMove,
1797
+ e
1798
+ );
1799
+ let s = ((i.clientX || i.changedTouches[0].clientX) - u.getBoundingClientRectViewLeft(
1800
+ this.player.template.playedBarWrap
1801
+ )) / this.player.template.playedBarWrap.clientWidth;
1802
+ s = Math.max(0, Math.min(1, s)), this.player.bar.set("played", s, "width"), this.player.seek(
1803
+ this.player.bar.get("played") * this.player.video.duration
1804
+ ), this.player.moveBar = !1;
1805
+ };
1806
+ this.player.template.playedBarWrap.addEventListener(
1807
+ u.nameMap.dragStart,
1808
+ () => {
1809
+ this.player.moveBar = !0, document.addEventListener(
1810
+ u.nameMap.dragMove,
1811
+ e
1812
+ ), document.addEventListener(
1813
+ u.nameMap.dragEnd,
1814
+ t
1815
+ );
1816
+ }
1817
+ ), this.player.template.playedBarWrap.addEventListener(
1818
+ u.nameMap.dragMove,
1819
+ (i) => {
1820
+ var s, a;
1821
+ if (this.player.video.duration) {
1822
+ const l = this.player.template.playedBarWrap.getBoundingClientRect().left, r = (i.clientX || i.changedTouches[0].clientX) - l;
1823
+ if (r < 0 || r > this.player.template.playedBarWrap.offsetWidth)
1824
+ return;
1825
+ const y = this.player.video.duration * (r / this.player.template.playedBarWrap.offsetWidth);
1826
+ u.isMobile && ((s = this.thumbnails) == null || s.show()), (a = this.thumbnails) == null || a.move(r), this.player.template.playedBarTime.style.left = `${r - (y >= 3600 ? 25 : 20)}px`, this.player.template.playedBarTime.innerText = u.secondToTime(y), this.player.template.playedBarTime.classList.remove("hidden");
1827
+ }
1828
+ }
1829
+ ), this.player.template.playedBarWrap.addEventListener(
1830
+ u.nameMap.dragEnd,
1831
+ () => {
1832
+ var i;
1833
+ u.isMobile && ((i = this.thumbnails) == null || i.hide());
1834
+ }
1835
+ ), u.isMobile || (this.player.template.playedBarWrap.addEventListener("mouseenter", () => {
1836
+ var i;
1837
+ this.player.video.duration && ((i = this.thumbnails) == null || i.show(), this.player.template.playedBarTime.classList.remove("hidden"));
1838
+ }), this.player.template.playedBarWrap.addEventListener("mouseleave", () => {
1839
+ var i;
1840
+ this.player.video.duration && ((i = this.thumbnails) == null || i.hide(), this.player.template.playedBarTime.classList.add("hidden"));
1841
+ }));
1842
+ }
1843
+ initFullButton() {
1844
+ this.player.template.browserFullButton.addEventListener("click", () => {
1845
+ this.player.fullScreen.toggle("browser");
1846
+ }), this.player.template.webFullButton.addEventListener("click", () => {
1847
+ this.player.fullScreen.toggle("web");
1848
+ });
1849
+ }
1850
+ initVolumeButton() {
1851
+ const t = (s) => {
1852
+ const a = s, l = ((a.clientX || a.changedTouches[0].clientX) - u.getBoundingClientRectViewLeft(
1853
+ this.player.template.volumeBarWrap
1854
+ ) - 5.5) / 35;
1855
+ this.player.volume(l);
1856
+ }, i = () => {
1857
+ document.removeEventListener(u.nameMap.dragEnd, i), document.removeEventListener(u.nameMap.dragMove, t), this.player.template.volumeButton.classList.remove(
1858
+ "kplayer-volume-active"
1859
+ );
1860
+ };
1861
+ this.player.template.volumeBarWrapWrap.addEventListener(
1862
+ "click",
1863
+ (s) => {
1864
+ const a = ((s.clientX || 0) - u.getBoundingClientRectViewLeft(
1865
+ this.player.template.volumeBarWrap
1866
+ ) - 5.5) / 35;
1867
+ this.player.volume(a);
1868
+ }
1869
+ ), this.player.template.volumeBarWrapWrap.addEventListener(
1870
+ u.nameMap.dragStart,
1871
+ () => {
1872
+ document.addEventListener(u.nameMap.dragMove, t), document.addEventListener(u.nameMap.dragEnd, i), this.player.template.volumeButton.classList.add(
1873
+ "kplayer-volume-active"
1874
+ );
1875
+ }
1876
+ ), this.player.template.volumeButtonIcon.addEventListener("click", () => {
1877
+ this.player.video.muted ? (this.player.video.muted = !1, this.player.switchVolumeIcon(), this.player.bar.set("volume", this.player.volume(), "width")) : (this.player.video.muted = !0, this.player.template.volumeIcon.innerHTML = w.volumeOff, this.player.bar.set("volume", 0, "width"));
1878
+ });
1879
+ }
1880
+ initQualityButton() {
1881
+ if (this.player.options.video.quality) {
1882
+ const e = this.player.options.video.defaultQuality || 0, t = this.player.template.qualityList.querySelectorAll(
1883
+ ".kplayer-quality-item"
1884
+ );
1885
+ t[e] && t[e].classList.add("kplayer-selected"), this.player.template.qualityList.addEventListener("click", (i) => {
1886
+ const s = i.target.closest(
1887
+ ".kplayer-quality-item"
1888
+ );
1889
+ s && (t.forEach((a) => a.classList.remove("kplayer-selected")), s.classList.add("kplayer-selected"), this.player.switchQuality(Number(s.dataset.index)));
1890
+ });
1891
+ }
1892
+ }
1893
+ initScreenshotButton() {
1894
+ this.player.options.screenshot && this.player.template.camareButton && this.player.template.camareButton.addEventListener("click", () => {
1895
+ var t;
1896
+ const e = document.createElement("canvas");
1897
+ e.width = this.player.video.videoWidth, e.height = this.player.video.videoHeight, (t = e.getContext("2d")) == null || t.drawImage(this.player.video, 0, 0, e.width, e.height), e.toBlob((i) => {
1898
+ if (!i) return;
1899
+ const s = URL.createObjectURL(i), a = document.createElement("a");
1900
+ a.href = s, a.download = "kplayer.png", a.style.display = "none", document.body.appendChild(a), a.click(), document.body.removeChild(a), URL.revokeObjectURL(s), this.player.events.trigger("screenshot", s);
1901
+ });
1902
+ });
1903
+ }
1904
+ initAirplayButton() {
1905
+ this.player.options.airplay && (window.WebKitPlaybackTargetAvailabilityEvent ? this.player.video.addEventListener(
1906
+ "webkitplaybacktargetavailabilitychanged",
1907
+ (function(e) {
1908
+ var i;
1909
+ e.availability === "available" ? this.template.airplayButton && (this.template.airplayButton.disable = !1) : this.template.airplayButton && (this.template.airplayButton.disable = !0), (i = this.template.airplayButton) == null || i.addEventListener("click", () => {
1910
+ var s, a;
1911
+ (a = (s = this.video).webkitShowPlaybackTargetPicker) == null || a.call(s);
1912
+ });
1913
+ }).bind(this.player)
1914
+ ) : this.player.template.airplayButton && (this.player.template.airplayButton.style.display = "none"));
1915
+ }
1916
+ initChromecast() {
1917
+ const e = document.createElement("script");
1918
+ e.setAttribute("type", "text/javascript"), e.setAttribute(
1919
+ "src",
1920
+ "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"
1921
+ ), document.body.appendChild(e), window.__onGCastApiAvailable = (t) => {
1922
+ var i;
1923
+ if (t) {
1924
+ if (cast = (i = window.chrome) == null ? void 0 : i.cast, !cast) return;
1925
+ const s = new cast.SessionRequest(
1926
+ cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID
1927
+ ), a = new cast.ApiConfig(
1928
+ s,
1929
+ () => {
1930
+ },
1931
+ (l) => {
1932
+ l === cast.ReceiverAvailability.AVAILABLE && console.log("chromecast:", l);
1933
+ }
1934
+ );
1935
+ cast.initialize(a, () => {
1936
+ });
1937
+ }
1938
+ };
1939
+ }
1940
+ initChromecastButton() {
1941
+ var e;
1942
+ if (this.player.options.chromecast) {
1943
+ z && (z = !1, this.initChromecast());
1944
+ const t = (a) => {
1945
+ if (!cast) return !1;
1946
+ const l = new cast.media.MediaInfo(a), r = new cast.media.LoadRequest(l);
1947
+ return this.session ? (this.session.loadMedia(
1948
+ r,
1949
+ i.bind(this, "loadMedia"),
1950
+ s
1951
+ ).play(), !0) : (window.open(a), !1);
1952
+ }, i = (a, l) => {
1953
+ this.currentMedia = l;
1954
+ }, s = (a) => {
1955
+ console.error("Error launching media", a);
1956
+ };
1957
+ (e = this.player.template.chromecastButton) == null || e.addEventListener("click", () => {
1958
+ var a, l;
1959
+ M ? (M = !1, (a = this.currentMedia) == null || a.stop(), (l = this.session) == null || l.stop(), this.initChromecast()) : (M = !0, cast == null || cast.requestSession(
1960
+ (r) => {
1961
+ this.session = r, t(this.player.options.video.url || "");
1962
+ },
1963
+ (r) => {
1964
+ r.code === "cancel" ? this.session = void 0 : console.error("Error selecting cast device", r);
1965
+ }
1966
+ ));
1967
+ });
1968
+ }
1969
+ }
1970
+ initSubtitleButton() {
1971
+ this.player.events.on("subtitle_show", () => {
1972
+ this.player.template.subtitleButton && "dataset" in this.player.template.subtitleButton && (this.player.template.subtitleButton.dataset.balloon = this.player.tran("hide-subs")), this.player.template.subtitleButtonInner && (this.player.template.subtitleButtonInner.style.opacity = ""), this.player.user.set("subtitle", 1);
1973
+ }), this.player.events.on("subtitle_hide", () => {
1974
+ this.player.template.subtitleButton && "dataset" in this.player.template.subtitleButton && (this.player.template.subtitleButton.dataset.balloon = this.player.tran("show-subs")), this.player.template.subtitleButtonInner && (this.player.template.subtitleButtonInner.style.opacity = "0.4"), this.player.user.set("subtitle", 0);
1975
+ }), this.player.template.subtitleButton && "addEventListener" in this.player.template.subtitleButton && this.player.template.subtitleButton.addEventListener(
1976
+ "click",
1977
+ () => {
1978
+ var e;
1979
+ (e = this.player.subtitle) == null || e.toggle();
1980
+ }
1981
+ );
1982
+ }
1983
+ _showTitleBar() {
1984
+ const e = this.player.template.titleBar;
1985
+ e && (e.style.opacity = "1", e.style.visibility = "visible", e.style.transform = "translateY(0)", e.style.pointerEvents = "auto");
1986
+ }
1987
+ _hideTitleBar() {
1988
+ const e = this.player.template.titleBar;
1989
+ e && (e.style.opacity = "0", e.style.visibility = "hidden", e.style.transform = "translateY(-8px)", e.style.pointerEvents = "none");
1990
+ }
1991
+ setAutoHide() {
1992
+ this.show(), clearTimeout(this.autoHideTimer), this.autoHideTimer = window.setTimeout(() => {
1993
+ this.player.video.played.length && !this.player.paused && !this.disableAutoHide && this.hide();
1994
+ }, 1500);
1995
+ }
1996
+ show() {
1997
+ this.player.container.classList.remove("kplayer-hide-controller"), this._showTitleBar();
1998
+ }
1999
+ hide() {
2000
+ this.player.container.classList.add("kplayer-hide-controller"), this.player.setting.hide(), this._hideTitleBar();
2001
+ }
2002
+ isShow() {
2003
+ return !this.player.container.classList.contains("kplayer-hide-controller");
2004
+ }
2005
+ toggle() {
2006
+ this.isShow() ? this.hide() : this.show();
2007
+ }
2008
+ destroy() {
2009
+ !u.isMobile && this.setAutoHideHandler && (this.player.container.removeEventListener(
2010
+ "mousemove",
2011
+ this.setAutoHideHandler
2012
+ ), this.player.container.removeEventListener(
2013
+ "click",
2014
+ this.setAutoHideHandler
2015
+ )), clearTimeout(this.autoHideTimer);
2016
+ }
2017
+ }
2018
+ class xe {
2019
+ constructor(e) {
2020
+ var a, l, r;
2021
+ this.player = e, this.player.template.mask.addEventListener("click", () => {
2022
+ this.hide();
2023
+ }), this.player.template.settingButton.addEventListener("click", () => {
2024
+ this.show();
2025
+ }), this.loop = this.player.options.loop || !1, this.player.template.loopToggle.checked = this.loop, this.player.template.loop.addEventListener("click", () => {
2026
+ this.player.template.loopToggle.checked = !this.player.template.loopToggle.checked, this.loop = this.player.template.loopToggle.checked;
2027
+ }), this.showAwaken = this.player.user.get("awaken"), this.showAwaken || this.player.awaken && this.player.awaken.hide(), this.player.template.showAwakenToggle.checked = !!this.showAwaken, this.player.template.showAwaken.addEventListener("click", () => {
2028
+ var y, c;
2029
+ this.player.template.showAwakenToggle.checked = !this.player.template.showAwakenToggle.checked, this.player.template.showAwakenToggle.checked ? (this.showAwaken = 1, (y = this.player.awaken) == null || y.show()) : (this.showAwaken = 0, (c = this.player.awaken) == null || c.hide()), this.player.user.set("awaken", this.showAwaken ? 1 : 0), this.hide();
2030
+ }), this.unlimitAwaken = this.player.user.get("unlimited"), this.player.template.unlimitAwakenToggle.checked = !!this.unlimitAwaken, this.player.template.unlimitAwaken.addEventListener("click", () => {
2031
+ var y, c;
2032
+ this.player.template.unlimitAwakenToggle.checked = !this.player.template.unlimitAwakenToggle.checked, this.player.template.unlimitAwakenToggle.checked ? (this.unlimitAwaken = 1, (y = this.player.awaken) == null || y.unlimit(!0)) : (this.unlimitAwaken = 0, (c = this.player.awaken) == null || c.unlimit(!1)), this.player.user.set("unlimited", this.unlimitAwaken ? 1 : 0), this.hide();
2033
+ }), this.player.template.speed.addEventListener("click", () => {
2034
+ this.player.template.settingBox.classList.add(
2035
+ "kplayer-setting-box-speed"
2036
+ );
2037
+ });
2038
+ const i = (this.player.options.playbackSpeed || []).indexOf(1);
2039
+ if (i >= 0 && this.player.template.speedItem[i] && this.player.template.speedItem[i].classList.add(
2040
+ "kplayer-selected"
2041
+ ), Array.from(this.player.template.speedItem).forEach((y, c) => {
2042
+ y.addEventListener("click", () => {
2043
+ Array.from(this.player.template.speedItem).forEach(
2044
+ (h) => h.classList.remove("kplayer-selected")
2045
+ ), y.classList.add("kplayer-selected"), this.player.speed(Number(y.dataset.speed));
2046
+ const k = this.player.container.querySelector(
2047
+ "#kplayer-speed-current"
2048
+ );
2049
+ if (k) {
2050
+ const h = y.dataset.speed;
2051
+ k.textContent = h === "1" ? "1×" : h + "×";
2052
+ }
2053
+ });
2054
+ }), this.player.template.subtitleEntry && this.player.template.subtitleEntry.addEventListener("click", () => {
2055
+ this.player.template.settingBox.classList.add(
2056
+ "kplayer-setting-box-subtitle"
2057
+ );
2058
+ }), this.player.template.qualityEntry && this.player.template.qualityEntry.addEventListener("click", () => {
2059
+ this.player.template.settingBox.classList.add(
2060
+ "kplayer-setting-box-quality"
2061
+ );
2062
+ }), this.airplayEntry = this.player.container.querySelector(
2063
+ ".kplayer-setting-airplay-entry"
2064
+ ), this.chromecastEntry = this.player.container.querySelector(
2065
+ ".kplayer-setting-chromecast-entry"
2066
+ ), this.screenshotEntry = this.player.container.querySelector(
2067
+ ".kplayer-setting-screenshot-entry"
2068
+ ), this.screenshotEntry && this.player.template.camareButton && this.screenshotEntry.addEventListener("click", (y) => {
2069
+ var c;
2070
+ y.stopPropagation(), (c = this.player.template.camareButton) == null || c.click(), this.hide();
2071
+ }), this.airplayEntry && this.player.template.airplayButton && this.airplayEntry.addEventListener("click", (y) => {
2072
+ var c;
2073
+ y.stopPropagation(), (c = this.player.template.airplayButton) == null || c.click(), this.hide();
2074
+ }), this.chromecastEntry && this.player.template.chromecastButton && this.chromecastEntry.addEventListener("click", (y) => {
2075
+ var c;
2076
+ y.stopPropagation(), (c = this.player.template.chromecastButton) == null || c.click(), this.hide();
2077
+ }), this.player.container.querySelectorAll(
2078
+ ".kplayer-setting-back-main"
2079
+ ).forEach((y) => {
2080
+ y.addEventListener("click", () => {
2081
+ this.player.template.settingBox.classList.remove(
2082
+ "kplayer-setting-box-speed"
2083
+ ), this.player.template.settingBox.classList.remove(
2084
+ "kplayer-setting-box-subtitle"
2085
+ ), this.player.template.settingBox.classList.remove(
2086
+ "kplayer-setting-box-quality"
2087
+ ), this.player.template.settingBox.classList.remove(
2088
+ "kplayer-setting-box-narrow"
2089
+ );
2090
+ });
2091
+ }), this.player.awaken) {
2092
+ this.player.on("awaken_opacity", (h) => {
2093
+ this.player.bar.set("awaken", h, "width"), this.player.user.set("opacity", h);
2094
+ }), (a = this.player.awaken) == null || a.opacity(this.player.user.get("opacity"));
2095
+ const c = (h) => {
2096
+ var p, f, v;
2097
+ const m = h;
2098
+ let o = ((m.clientX || ((f = (p = m.changedTouches) == null ? void 0 : p[0]) == null ? void 0 : f.clientX) || 0) - u.getBoundingClientRectViewLeft(
2099
+ this.player.template.awakenOpacityBarWrap
2100
+ )) / 130;
2101
+ o = Math.max(0, Math.min(1, o)), (v = this.player.awaken) == null || v.opacity(o);
2102
+ }, k = () => {
2103
+ var h;
2104
+ document.removeEventListener(u.nameMap.dragEnd, k), document.removeEventListener(u.nameMap.dragMove, c), (h = this.player.template.awakenOpacityBox) == null || h.classList.remove(
2105
+ "kplayer-setting-awaken-active"
2106
+ );
2107
+ };
2108
+ (l = this.player.template.awakenOpacityBarWrapWrap) == null || l.addEventListener(
2109
+ "click",
2110
+ (h) => {
2111
+ var o;
2112
+ let m = ((h.clientX || 0) - u.getBoundingClientRectViewLeft(
2113
+ this.player.template.awakenOpacityBarWrap
2114
+ )) / 130;
2115
+ m = Math.max(0, Math.min(1, m)), (o = this.player.awaken) == null || o.opacity(m);
2116
+ }
2117
+ ), (r = this.player.template.awakenOpacityBarWrapWrap) == null || r.addEventListener(
2118
+ u.nameMap.dragStart,
2119
+ () => {
2120
+ var h;
2121
+ document.addEventListener(u.nameMap.dragMove, c), document.addEventListener(u.nameMap.dragEnd, k), (h = this.player.template.awakenOpacityBox) == null || h.classList.add(
2122
+ "kplayer-setting-awaken-active"
2123
+ );
2124
+ }
2125
+ );
2126
+ }
2127
+ }
2128
+ hide() {
2129
+ this.player.template.settingBox.classList.remove(
2130
+ "kplayer-setting-box-open"
2131
+ ), this.player.template.mask.classList.remove("kplayer-mask-show"), setTimeout(() => {
2132
+ this.player.template.settingBox.classList.remove(
2133
+ "kplayer-setting-box-narrow"
2134
+ ), this.player.template.settingBox.classList.remove(
2135
+ "kplayer-setting-box-speed"
2136
+ ), this.player.template.settingBox.classList.remove(
2137
+ "kplayer-setting-box-subtitle"
2138
+ ), this.player.template.settingBox.classList.remove(
2139
+ "kplayer-setting-box-quality"
2140
+ );
2141
+ }, 300), this.player.controller.disableAutoHide = !1;
2142
+ }
2143
+ show() {
2144
+ this.player.template.settingBox.classList.add("kplayer-setting-box-open"), this.player.template.mask.classList.add("kplayer-mask-show"), this.player.controller.disableAutoHide = !0;
2145
+ }
2146
+ }
2147
+ class Le {
2148
+ constructor(e) {
2149
+ this.player = e, this.doHotKeyHandler = this.doHotKey.bind(this), this.cancelFullScreenHandler = this.cancelFullScreen.bind(this), this.player.options.hotkey && document.addEventListener("keydown", this.doHotKeyHandler), document.addEventListener("keydown", this.cancelFullScreenHandler);
2150
+ }
2151
+ doHotKey(e) {
2152
+ var t;
2153
+ if (this.player.focus) {
2154
+ const i = document.activeElement.tagName.toUpperCase(), s = (t = document.activeElement) == null ? void 0 : t.getAttribute("contenteditable");
2155
+ if (i !== "INPUT" && i !== "TEXTAREA" && s !== "" && s !== "true") {
2156
+ let a;
2157
+ switch (e.keyCode) {
2158
+ case 32:
2159
+ e.preventDefault(), this.player.toggle();
2160
+ break;
2161
+ case 37:
2162
+ if (e.preventDefault(), this.player.options.live) break;
2163
+ this.player.seek(this.player.video.currentTime - 10), this.player.controller.setAutoHide();
2164
+ break;
2165
+ case 39:
2166
+ if (e.preventDefault(), this.player.options.live) break;
2167
+ this.player.seek(this.player.video.currentTime + 10), this.player.controller.setAutoHide();
2168
+ break;
2169
+ case 38:
2170
+ e.preventDefault(), a = this.player.volume() + 0.1, this.player.volume(a);
2171
+ break;
2172
+ case 40:
2173
+ e.preventDefault(), a = this.player.volume() - 0.1, this.player.volume(a);
2174
+ break;
2175
+ }
2176
+ }
2177
+ }
2178
+ }
2179
+ cancelFullScreen(e) {
2180
+ switch (e.keyCode) {
2181
+ case 27:
2182
+ this.player.fullScreen.isFullScreen("web") && this.player.fullScreen.cancel("web");
2183
+ break;
2184
+ }
2185
+ }
2186
+ destroy() {
2187
+ this.player.options.hotkey && document.removeEventListener("keydown", this.doHotKeyHandler), document.removeEventListener("keydown", this.cancelFullScreenHandler);
2188
+ }
2189
+ }
2190
+ class Be {
2191
+ constructor(e) {
2192
+ this.shown = !1, this.player = e, Array.prototype.slice.call(this.player.template.menuItem).forEach((t, i) => {
2193
+ var a;
2194
+ const s = (a = this.player.options.contextmenu) == null ? void 0 : a[i];
2195
+ s != null && s.click && t.addEventListener("click", () => {
2196
+ s.click(this.player), this.hide();
2197
+ });
2198
+ }), this.contextmenuHandler = (t) => {
2199
+ t.preventDefault(), t.stopPropagation();
2200
+ const i = this.player.container.getBoundingClientRect(), s = t.clientX - i.left, a = t.clientY - i.top;
2201
+ if (this.shown) {
2202
+ this.hide();
2203
+ return;
2204
+ }
2205
+ this.show(s, a);
2206
+ }, this.player.container.addEventListener(
2207
+ "contextmenu",
2208
+ this.contextmenuHandler
2209
+ ), this.videoContextHandler = (t) => {
2210
+ t.preventDefault(), t.stopPropagation();
2211
+ const i = this.player.container.getBoundingClientRect(), s = t.clientX - i.left, a = t.clientY - i.top;
2212
+ if (this.shown) {
2213
+ this.hide();
2214
+ return;
2215
+ }
2216
+ this.show(s, a);
2217
+ }, this.player.video.addEventListener("contextmenu", this.videoContextHandler);
2218
+ }
2219
+ show(e, t) {
2220
+ this.player.template.menu.classList.add("kplayer-menu-show");
2221
+ const i = this.player.container.getBoundingClientRect();
2222
+ e + this.player.template.menu.offsetWidth >= i.width ? (this.player.template.menu.style.right = i.width - e + "px", this.player.template.menu.style.left = "initial") : (this.player.template.menu.style.left = e + "px", this.player.template.menu.style.right = "initial"), t + this.player.template.menu.offsetHeight >= i.height ? (this.player.template.menu.style.bottom = i.height - t + "px", this.player.template.menu.style.top = "initial") : (this.player.template.menu.style.top = t + "px", this.player.template.menu.style.bottom = "initial"), this.player.template.mask.classList.add("kplayer-mask-show"), this.shown = !0, this.player.events.trigger("contextmenu_show");
2223
+ }
2224
+ hide() {
2225
+ this.player.template.mask.classList.remove("kplayer-mask-show"), this.player.template.menu.classList.remove("kplayer-menu-show"), this.shown = !1, this.player.events.trigger("contextmenu_hide");
2226
+ }
2227
+ destroy() {
2228
+ this.player.container.removeEventListener(
2229
+ "contextmenu",
2230
+ this.contextmenuHandler
2231
+ ), this.videoContextHandler && this.player.video.removeEventListener(
2232
+ "contextmenu",
2233
+ this.videoContextHandler
2234
+ );
2235
+ }
2236
+ }
2237
+ class Ee {
2238
+ constructor(e) {
2239
+ var t;
2240
+ this.beginTime = 0, this.container = e.template.infoPanel, this.template = e.template, this.video = e.video, this.player = e, (t = this.template.infoPanelClose) == null || t.addEventListener("click", () => {
2241
+ this.hide();
2242
+ });
2243
+ }
2244
+ show() {
2245
+ this.beginTime = Date.now(), this.update(), this.player.timer.enable("info"), this.player.timer.enable("fps"), this.container.classList.remove("kplayer-info-panel-hide");
2246
+ }
2247
+ hide() {
2248
+ this.player.timer.disable("info"), this.player.timer.disable("fps"), this.container.classList.add("kplayer-info-panel-hide");
2249
+ }
2250
+ triggle() {
2251
+ this.container.classList.contains("kplayer-info-panel-hide") ? this.show() : this.hide();
2252
+ }
2253
+ update() {
2254
+ var e;
2255
+ this.template.infoVersion && (this.template.infoVersion.innerHTML = "v1.0.0 dev"), this.template.infoType && (this.template.infoType.innerHTML = this.player.type || ""), this.template.infoUrl && (this.template.infoUrl.innerHTML = ((e = this.player.options.video) == null ? void 0 : e.url) || ""), this.template.infoResolution && (this.template.infoResolution.innerHTML = `${this.video.videoWidth} x ${this.video.videoHeight}`), this.template.infoDuration && (this.template.infoDuration.innerHTML = String(this.video.duration)), this.player.options.awaken && typeof this.player.options.awaken == "object" && (this.template.infoAwakenId && (this.template.infoAwakenId.innerHTML = this.player.options.awaken.id || ""), this.template.infoAwakenApi && (this.template.infoAwakenApi.innerHTML = this.player.options.awaken.api || ""));
2256
+ }
2257
+ fps(e) {
2258
+ this.template.infoFPS && (this.template.infoFPS.innerHTML = `${e.toFixed(1)}`);
2259
+ }
2260
+ }
2261
+ let V = 0;
2262
+ const S = [];
2263
+ function Te(n) {
2264
+ const e = n.DefaultConfig.loader;
2265
+ return class extends e {
2266
+ constructor(i) {
2267
+ super(i);
2268
+ const s = this.load.bind(this);
2269
+ this.load = function(a, l, r) {
2270
+ const y = r.onSuccess;
2271
+ r.onSuccess = function(c, k, h, m) {
2272
+ try {
2273
+ if (a.type === "fragment") {
2274
+ const o = c.data;
2275
+ let p;
2276
+ if (o instanceof ArrayBuffer ? p = o : typeof o == "string" && (p = new TextEncoder().encode(o).buffer), p) {
2277
+ const f = new Blob([p], { type: "video/mp2t" }), v = URL.createObjectURL(f);
2278
+ c.url = v, setTimeout(() => URL.revokeObjectURL(v), 1e4);
2279
+ }
2280
+ }
2281
+ } catch (o) {
2282
+ console.warn("[KPlayer] BlobHLSLoader error:", o);
2283
+ }
2284
+ y(c, k, h, m);
2285
+ }, s(a, l, r);
2286
+ };
2287
+ }
2288
+ };
2289
+ }
2290
+ async function R(n, e, t, i) {
2291
+ const s = await fetch(n, { mode: "cors" });
2292
+ if (!s.ok) throw new Error(`HTTP ${s.status}`);
2293
+ let a = await s.text();
2294
+ if (e && t && i) {
2295
+ const l = /^\d{2}:\d{2}:\d{2}[.,]\d{3}\s*-->\s*\d{2}:\d{2}:\d{2}[.,]\d{3}$/, r = async (p, f, v) => {
2296
+ const x = new Uint8Array(
2297
+ p.match(/.{2}/g).map((T) => parseInt(T, 16))
2298
+ ), B = await crypto.subtle.decrypt(
2299
+ { name: "AES-CBC", iv: v.buffer },
2300
+ f,
2301
+ x.buffer
2302
+ );
2303
+ return new TextDecoder().decode(B);
2304
+ }, y = new Uint8Array(
2305
+ t.match(/.{2}/g).map((p) => parseInt(p, 16))
2306
+ ), c = new Uint8Array(
2307
+ i.match(/.{2}/g).map((p) => parseInt(p, 16))
2308
+ ), k = await crypto.subtle.importKey(
2309
+ "raw",
2310
+ y.buffer,
2311
+ { name: "AES-CBC" },
2312
+ !1,
2313
+ ["decrypt"]
2314
+ );
2315
+ let h;
2316
+ try {
2317
+ h = atob(a.trim());
2318
+ } catch {
2319
+ h = a;
2320
+ }
2321
+ const m = h.split(`
2322
+ `), o = [];
2323
+ for (const p of m) {
2324
+ const f = p.trim();
2325
+ if (!f) {
2326
+ o.push(p);
2327
+ continue;
2328
+ }
2329
+ if (l.test(f)) {
2330
+ o.push(p);
2331
+ continue;
2332
+ }
2333
+ if (/^[0-9a-fA-F]+$/.test(f) && f.length % 2 === 0)
2334
+ try {
2335
+ const v = await r(f, k, c);
2336
+ o.push(v);
2337
+ } catch {
2338
+ o.push(p);
2339
+ }
2340
+ else
2341
+ o.push(p);
2342
+ }
2343
+ a = o.join(`
2344
+ `);
2345
+ }
2346
+ return a;
2347
+ }
2348
+ class Ae {
2349
+ constructor(e) {
2350
+ var t, i;
2351
+ if (this.focus = !1, this.paused = !0, this.moveBar = !1, this.switchingQuality = !1, this.options = j({
2352
+ preload: ((t = e.video) == null ? void 0 : t.type) === "webtorrent" ? "none" : "metadata",
2353
+ ...e
2354
+ }), this.options.video.quality && (this.qualityIndex = this.options.video.defaultQuality ?? 0, this.quality = this.options.video.quality[this.qualityIndex]), this.tran = new N(this.options.lang || "en").tran, this.events = new de(), this.user = new ye(this), this.container = this.options.container, this.noticeList = {}, this.hlsQualityList = [], this.hlsCurrentLevel = -1, this.hlsAutoEnabled = !0, this.container.classList.add("kplayer"), this.options.awaken || this.container.classList.add("kplayer-no-awaken"), this.options.live ? this.container.classList.add("kplayer-live") : this.container.classList.remove("kplayer-live"), u.isMobile && this.container.classList.add("kplayer-mobile"), this.container.offsetWidth <= 500 && this.container.classList.add("kplayer-arrow"), this.options.subtitle && Array.isArray(this.options.subtitle.url)) {
2355
+ const s = { subtitle: "", lang: "off", url: "" };
2356
+ if (this.options.subtitle.url.push(s), this.options.subtitle.defaultSubtitle !== void 0) {
2357
+ const l = this.options.subtitle.defaultSubtitle;
2358
+ typeof l == "string" ? this.options.subtitle.index = this.options.subtitle.url.findIndex((r) => r.lang === l || r.name === l) : typeof l == "number" && (this.options.subtitle.index = l);
2359
+ }
2360
+ const a = this.options.subtitle.url;
2361
+ (this.options.subtitle.index === -1 || this.options.subtitle.index == null || this.options.subtitle.index > a.length - 1) && (this.options.subtitle.index = a.findIndex(
2362
+ (l) => l.lang === this.options.lang
2363
+ )), this.options.subtitle.index === -1 && (this.options.subtitle.index = a.length - 1);
2364
+ }
2365
+ this.template = new W({
2366
+ container: this.container,
2367
+ options: this.options,
2368
+ index: V,
2369
+ tran: this.tran
2370
+ }), this.video = this.template.video, this.bar = new fe(this.template), this.bezel = new ge(this.template.bezel), this.fullScreen = new ue(this), this.controller = new we(this), this.setting = new xe(this), this.plugins = {}, this.docClickFun = () => {
2371
+ this.focus = !1;
2372
+ }, this.containerClickFun = () => {
2373
+ this.focus = !0;
2374
+ }, document.addEventListener("click", this.docClickFun, !0), this.container.addEventListener("click", this.containerClickFun, !0), this.paused = !0, this.timer = new ve(this), this.hotkey = new Le(this), this.contextmenu = new Be(this), this.initVideo(
2375
+ this.video,
2376
+ this.quality && this.quality.type || this.options.video.type || "auto"
2377
+ ), this.infoPanel = new Ee(this), (this.options.ad || this.options.vastAD) && (this.ad = new he(this)), this.options.vastAD && this.options.vastADURL && ((i = this.ad) == null || i._loadVAST(this.options.vastADURL)), this.template.titleBack && this.template.titleBack.addEventListener("click", () => {
2378
+ var s;
2379
+ typeof ((s = this.options.title) == null ? void 0 : s.onBack) == "function" ? this.options.title.onBack(this) : window.history.back(), this.events.trigger("title_back");
2380
+ }), !this.awaken && this.options.autoplay && this.play(), this.moveBar = !1, V++, S.push(this);
2381
+ }
2382
+ seek(e) {
2383
+ e = Math.max(e, 0), this.video.duration && (e = Math.min(e, this.video.duration)), this.video.currentTime < e ? this.notice(
2384
+ `${this.tran("ff").replace("%s", (e - this.video.currentTime).toFixed(0))}`
2385
+ ) : this.video.currentTime > e && this.notice(
2386
+ `${this.tran("rew").replace("%s", (this.video.currentTime - e).toFixed(0))}`
2387
+ ), this.video.currentTime = e, this.awaken && this.awaken.seek(), this.bar.set("played", e / this.video.duration, "width"), this.template.ptime.innerHTML = u.secondToTime(e);
2388
+ }
2389
+ play(e) {
2390
+ if (this.paused = !1, this.video.paused && !u.isMobile && this.bezel.switch(w.play), this.template.playButton.innerHTML = w.pause, this.template.mobilePlayButton.innerHTML = w.pause, e || Promise.resolve(this.video.play()).catch(() => {
2391
+ this.pause();
2392
+ }), this.timer.enable("loading"), this.container.classList.remove("kplayer-paused"), this.container.classList.add("kplayer-playing"), this.awaken && this.awaken.play(), this.options.mutex)
2393
+ for (const i of S)
2394
+ this !== i && i.pause();
2395
+ const t = this.container.querySelector(
2396
+ ".kplayer-mobile-play-btn .kplayer-icon-content"
2397
+ );
2398
+ t && (t.innerHTML = w.pause);
2399
+ }
2400
+ pause(e) {
2401
+ this.paused = !0, this.container.classList.remove("kplayer-loading"), !this.video.paused && !u.isMobile && this.bezel.switch(w.pause), this.template.playButton.innerHTML = w.play, this.template.mobilePlayButton.innerHTML = w.play, e || this.video.pause(), this.timer.disable("loading"), this.container.classList.remove("kplayer-playing"), this.container.classList.add("kplayer-paused"), this.awaken && this.awaken.pause();
2402
+ const t = this.container.querySelector(
2403
+ ".kplayer-mobile-play-btn .kplayer-icon-content"
2404
+ );
2405
+ t && (t.innerHTML = w.play);
2406
+ }
2407
+ switchVolumeIcon() {
2408
+ this.volume() >= 0.95 ? this.template.volumeIcon.innerHTML = w.volumeUp : this.volume() > 0 ? this.template.volumeIcon.innerHTML = w.volumeDown : this.template.volumeIcon.innerHTML = w.volumeOff;
2409
+ }
2410
+ volume(e, t, i) {
2411
+ const s = parseFloat(String(e));
2412
+ if (!isNaN(s)) {
2413
+ const a = Math.max(0, Math.min(1, s));
2414
+ this.bar.set("volume", a, "width");
2415
+ const l = `${(a * 100).toFixed(0)}%`;
2416
+ this.template.volumeBarWrapWrap.dataset.balloon = l, t || this.user.set("volume", a), i || this.notice(
2417
+ `${this.tran("volume")} ${(a * 100).toFixed(0)}%`,
2418
+ void 0,
2419
+ void 0,
2420
+ "volume"
2421
+ ), this.video.volume = a, this.video.muted && (this.video.muted = !1), this.switchVolumeIcon();
2422
+ }
2423
+ return this.video.volume;
2424
+ }
2425
+ toggle() {
2426
+ this.video.paused ? this.play() : this.pause();
2427
+ }
2428
+ on(e, t) {
2429
+ this.events.on(e, t);
2430
+ }
2431
+ initMSE(e, t) {
2432
+ var a, l, r, y, c, k, h, m;
2433
+ if (this.type = t, (a = this.options.video.customType) != null && a[t]) {
2434
+ const o = this.options.video.customType[t];
2435
+ typeof o == "function" ? o(this.video, this) : console.error(`Illegal customType: ${t}`);
2436
+ return;
2437
+ }
2438
+ let i = t;
2439
+ i === "auto" && (/m3u8(#|\?|$)/i.exec(e.src) ? i = "hls" : /.flv(#|\?|$)/i.exec(e.src) ? i = "flv" : /.mpd(#|\?|$)/i.exec(e.src) ? i = "dash" : i = "normal"), i === "auto" && (e.canPlayType("application/x-mpegURL") || e.canPlayType("application/vnd.apple.mpegURL")) && (i = "normal"), this.type = i;
2440
+ const s = this.quality ? this.quality.url : e.src;
2441
+ switch (i) {
2442
+ case "hls": {
2443
+ const o = window.Hls;
2444
+ if (!o) {
2445
+ this.notice("Error: Can't find Hls.");
2446
+ return;
2447
+ }
2448
+ if (!o.isSupported()) {
2449
+ this.notice("Error: Hls is not supported.");
2450
+ return;
2451
+ }
2452
+ const p = ((l = this.options.pluginOptions) == null ? void 0 : l.hls) || {}, f = Te(
2453
+ o
2454
+ ), v = new o({
2455
+ ...p,
2456
+ loader: f
2457
+ });
2458
+ this.plugins.hls = v, v.loadSource(e.src), v.attachMedia(e), v.on(o.Events.MANIFEST_PARSED, () => {
2459
+ this.buildHlsQualityMenu(v), this.updateHlsQualityCurrentLabel();
2460
+ }), v.on(
2461
+ o.Events.LEVEL_SWITCHED,
2462
+ (x, B) => {
2463
+ this.hlsCurrentLevel = B.level, this.updateHlsQualityCurrentLabel();
2464
+ }
2465
+ ), this.events.on("destroy", () => {
2466
+ v.destroy(), delete this.plugins.hls;
2467
+ });
2468
+ break;
2469
+ }
2470
+ case "flv": {
2471
+ const o = window.flvjs;
2472
+ if (o)
2473
+ if (o.isSupported()) {
2474
+ const p = o.createPlayer(
2475
+ Object.assign(
2476
+ ((y = (r = this.options.pluginOptions) == null ? void 0 : r.flv) == null ? void 0 : y.mediaDataSource) || {},
2477
+ {
2478
+ type: "flv",
2479
+ url: e.src
2480
+ }
2481
+ ),
2482
+ (k = (c = this.options.pluginOptions) == null ? void 0 : c.flv) == null ? void 0 : k.config
2483
+ );
2484
+ this.plugins.flvjs = p, p.attachMediaElement(e), p.load(), this.events.on("destroy", () => {
2485
+ p.unload(), p.detachMediaElement(), p.destroy(), delete this.plugins.flvjs;
2486
+ }), this.events.on("quality_end", () => {
2487
+ var f;
2488
+ s !== ((f = this.quality) == null ? void 0 : f.url) && (p.unload(), p.detachMediaElement(), p.destroy());
2489
+ });
2490
+ } else
2491
+ this.notice("Error: flvjs is not supported.");
2492
+ else
2493
+ this.notice("Error: Can't find flvjs.");
2494
+ break;
2495
+ }
2496
+ case "dash": {
2497
+ const o = window.dashjs;
2498
+ if (o) {
2499
+ const p = o.MediaPlayer().create();
2500
+ p.initialize(e, e.src, !1, 0), p.updateSettings(((h = this.options.pluginOptions) == null ? void 0 : h.dash) || {}), this.plugins.dash = p, this.events.on("destroy", () => {
2501
+ o.MediaPlayer().reset(), delete this.plugins.dash;
2502
+ }), this.events.on("quality_end", () => {
2503
+ var f;
2504
+ s !== ((f = this.quality) == null ? void 0 : f.url) && o.MediaPlayer().reset();
2505
+ });
2506
+ } else
2507
+ this.notice("Error: Can't find dashjs.");
2508
+ break;
2509
+ }
2510
+ case "webtorrent": {
2511
+ const o = window.WebTorrent;
2512
+ if (o)
2513
+ if (o.WEBRTC_SUPPORT) {
2514
+ this.container.classList.add("kplayer-loading");
2515
+ const p = new o(
2516
+ ((m = this.options.pluginOptions) == null ? void 0 : m.webtorrent) || {}
2517
+ );
2518
+ this.plugins.webtorrent = p;
2519
+ const f = e.src;
2520
+ e.src = "", e.preload = "metadata", e.addEventListener(
2521
+ "durationchange",
2522
+ () => this.container.classList.remove("kplayer-loading"),
2523
+ { once: !0 }
2524
+ ), p.add(f, (v) => {
2525
+ const x = v.files.find((B) => B.name.endsWith(".mp4"));
2526
+ x == null || x.renderTo(this.video, {
2527
+ autoplay: this.options.autoplay,
2528
+ controls: !1
2529
+ });
2530
+ }), this.events.on("destroy", () => {
2531
+ p.remove(f), p.destroy(), delete this.plugins.webtorrent;
2532
+ }), this.events.on("quality_end", () => {
2533
+ var v;
2534
+ s !== ((v = this.quality) == null ? void 0 : v.url) && (p.remove(f), p.destroy());
2535
+ });
2536
+ } else
2537
+ this.notice("Error: Webtorrent is not supported.");
2538
+ else
2539
+ this.notice("Error: Can't find Webtorrent.");
2540
+ break;
2541
+ }
2542
+ }
2543
+ }
2544
+ initVideo(e, t) {
2545
+ this.initMSE(e, t), this.on("durationchange", () => {
2546
+ e.duration !== 1 && e.duration !== 1 / 0 && (this.template.dtime.innerHTML = u.secondToTime(e.duration));
2547
+ }), this.on("progress", () => {
2548
+ const i = e.buffered.length ? e.buffered.end(e.buffered.length - 1) / e.duration : 0;
2549
+ this.bar.set("loaded", i, "width");
2550
+ }), this.on("error", () => {
2551
+ this.video.error && this.tran && this.notice && this.type !== "webtorrent" && this.notice(this.tran("video-failed"));
2552
+ }), this.on("ended", () => {
2553
+ this.bar.set("played", 1, "width"), this.setting.loop ? (this.seek(0), this.play()) : this.pause(), this.awaken && (this.awaken.danIndex = 0);
2554
+ }), this.on("play", () => {
2555
+ this.paused && this.play(!0);
2556
+ }), this.on("pause", () => {
2557
+ this.paused || this.pause(!0);
2558
+ }), this.on("timeupdate", () => {
2559
+ this.moveBar || this.bar.set(
2560
+ "played",
2561
+ this.video.currentTime / this.video.duration,
2562
+ "width"
2563
+ );
2564
+ const i = u.secondToTime(this.video.currentTime);
2565
+ this.template.ptime.innerHTML !== i && (this.template.ptime.innerHTML = i);
2566
+ });
2567
+ for (const i of this.events.videoEvents)
2568
+ e.addEventListener(i, (s) => {
2569
+ this.events.trigger(i, s);
2570
+ });
2571
+ this.volume(this.user.get("volume"), !0, !0), this.options.subtitle && (this.subtitle = new me(
2572
+ this.template.subtitle,
2573
+ this.video,
2574
+ this.options.subtitle,
2575
+ this.events
2576
+ ), Array.isArray(this.options.subtitle.url) && (this.subtitles = new ke(this)), this.user.get("subtitle") || this.subtitle.hide(), this._loadSubtitleTexts());
2577
+ }
2578
+ getHlsLevelLabel(e) {
2579
+ return e ? e.height ? `${e.height}p` : e.bitrate ? `${Math.round(e.bitrate / 1e3)}kbps` : "Auto" : "Auto";
2580
+ }
2581
+ updateHlsQualityCurrentLabel() {
2582
+ const e = this.container.querySelector(
2583
+ "#kplayer-quality-current"
2584
+ );
2585
+ if (!e || !this.plugins.hls) return;
2586
+ const t = this.plugins.hls;
2587
+ if (t.autoLevelEnabled) {
2588
+ const i = t.levels[t.currentLevel];
2589
+ e.textContent = i ? `Auto (${i.height}p)` : "Auto";
2590
+ } else {
2591
+ const i = t.levels[t.currentLevel];
2592
+ e.textContent = i ? `${i.height}p` : "Manual";
2593
+ }
2594
+ }
2595
+ buildHlsQualityMenu(e) {
2596
+ var y;
2597
+ if (!((y = e == null ? void 0 : e.levels) != null && y.length)) return;
2598
+ const t = /* @__PURE__ */ new Set(), i = [];
2599
+ e.levels.forEach((c, k) => {
2600
+ const h = `${c.height}-${c.bitrate}`;
2601
+ t.has(h) || (t.add(h), i.push({
2602
+ index: k,
2603
+ name: c.height ? `${c.height}p` : `${Math.round((c.bitrate || 0) / 1e3)}kbps`,
2604
+ height: c.height || 0,
2605
+ bitrate: c.bitrate || 0
2606
+ }));
2607
+ }), i.sort((c, k) => k.height - c.height || k.bitrate - c.bitrate);
2608
+ const s = [{ index: -1, name: "Auto" }, ...i], a = this.container.querySelector(
2609
+ ".kplayer-quality-list"
2610
+ );
2611
+ if (!a) return;
2612
+ a.innerHTML = s.map(
2613
+ (c) => `
2614
+ <div class="kplayer-quality-item" data-level="${c.index}">
2615
+ <span class="kplayer-label">${c.name}</span>
2616
+ </div>
2617
+ `
2618
+ ).join("");
2619
+ const l = a.querySelectorAll(".kplayer-quality-item"), r = this.container.querySelector(
2620
+ "#kplayer-quality-current"
2621
+ );
2622
+ l.forEach((c) => {
2623
+ c.addEventListener("click", () => {
2624
+ var h;
2625
+ const k = Number(c.dataset.level);
2626
+ e.currentLevel = k, e.nextLevel = k, e.loadLevel = k, l.forEach((m) => m.classList.remove("active")), c.classList.add("active"), r && (r.textContent = ((h = c.textContent) == null ? void 0 : h.trim()) || "");
2627
+ });
2628
+ }), r && (r.textContent = "Auto");
2629
+ }
2630
+ switchQuality(e) {
2631
+ var l;
2632
+ if (e = typeof e == "string" ? parseInt(e) : e, this.qualityIndex === e || this.switchingQuality || (this.prevIndex = this.qualityIndex, this.qualityIndex = e, this.switchingQuality = !0, this.quality = (l = this.options.video.quality) == null ? void 0 : l[e], !this.quality)) return;
2633
+ this.template.qualityButton && (this.template.qualityButton.innerHTML = this.quality.name);
2634
+ const t = this.container.querySelector(
2635
+ "#kplayer-quality-current"
2636
+ );
2637
+ t && (t.textContent = this.quality.name);
2638
+ const i = this.video.paused;
2639
+ this.video.pause();
2640
+ const s = O({
2641
+ current: !1,
2642
+ pic: void 0,
2643
+ screenshot: this.options.screenshot,
2644
+ preload: "auto",
2645
+ url: this.quality.url,
2646
+ subtitle: this.options.subtitle
2647
+ }), a = new DOMParser().parseFromString(s, "text/html").body.firstChild;
2648
+ this.template.videoWrap.insertBefore(
2649
+ a,
2650
+ this.template.videoWrap.getElementsByTagName("div")[0]
2651
+ ), this.prevVideo = this.video, this.video = a, this.initVideo(
2652
+ this.video,
2653
+ this.quality.type || this.options.video.type || "auto"
2654
+ ), this.seek(this.prevVideo.currentTime), this.notice(
2655
+ `${this.tran("switching-quality").replace("%q", this.quality.name)}`,
2656
+ -1,
2657
+ void 0,
2658
+ "switch-quality"
2659
+ ), this.events.trigger("quality_start", this.quality), this.on("canplay", () => {
2660
+ if (this.prevVideo) {
2661
+ if (this.video.currentTime !== this.prevVideo.currentTime) {
2662
+ this.seek(this.prevVideo.currentTime);
2663
+ return;
2664
+ }
2665
+ this.template.videoWrap.removeChild(this.prevVideo), this.video.classList.add("kplayer-video-current"), i || this.video.play(), this.prevVideo = void 0, this.notice(
2666
+ `${this.tran("switched-quality").replace("%q", this.quality.name)}`,
2667
+ void 0,
2668
+ void 0,
2669
+ "switch-quality"
2670
+ ), this.switchingQuality = !1, this.events.trigger("quality_end");
2671
+ }
2672
+ }), this.on("error", () => {
2673
+ var r;
2674
+ this.video.error && this.prevVideo && (this.template.videoWrap.removeChild(this.video), this.video = this.prevVideo, i || this.video.play(), this.qualityIndex = this.prevIndex, this.quality = (r = this.options.video.quality) == null ? void 0 : r[this.qualityIndex ?? 0], this.prevVideo = void 0, this.switchingQuality = !1);
2675
+ });
2676
+ }
2677
+ notice(e, t = 2e3, i = 0.8, s) {
2678
+ let a;
2679
+ if (s && (a = document.getElementById(`kplayer-notice-${s}`), a && (a.innerHTML = e), this.noticeList[s] && (clearTimeout(this.noticeList[s]), this.noticeList[s] = null)), !a) {
2680
+ const l = W.NewNotice(e, i, s);
2681
+ this.template.noticeList.appendChild(l), a = l;
2682
+ }
2683
+ this.events.trigger("notice_show", a), t > 0 && (this.noticeList[s || ""] = setTimeout(
2684
+ /* @__PURE__ */ ((l, r) => () => {
2685
+ l.addEventListener("animationend", () => {
2686
+ r.template.noticeList.removeChild(l);
2687
+ }), l.classList.add("remove-notice"), r.events.trigger("notice_hide"), r.noticeList[s || ""] = null;
2688
+ })(a, this),
2689
+ t
2690
+ ));
2691
+ }
2692
+ resize() {
2693
+ this.awaken && this.awaken.resize(), this.controller.thumbnails && this.controller.thumbnails.resize(
2694
+ 160,
2695
+ this.video.videoHeight / this.video.videoWidth * 160,
2696
+ this.template.barWrap.offsetWidth
2697
+ ), this.events.trigger("resize");
2698
+ }
2699
+ speed(e) {
2700
+ this.video.playbackRate = e;
2701
+ }
2702
+ destroy() {
2703
+ var e;
2704
+ S.splice(S.indexOf(this), 1), this.pause(), document.removeEventListener("click", this.docClickFun, !0), this.container.removeEventListener("click", this.containerClickFun, !0), this.fullScreen.destroy(), this.hotkey.destroy(), this.contextmenu.destroy(), this.controller.destroy(), this.timer.destroy(), this.video.src = "", this.container.innerHTML = "", (e = this.ad) == null || e.destroy(), this.events.trigger("destroy");
2705
+ }
2706
+ static get version() {
2707
+ return "1.0.0";
2708
+ }
2709
+ async _loadSubtitleTexts() {
2710
+ var s;
2711
+ const e = this.options.subtitle;
2712
+ if (!(e != null && e.url) || !Array.isArray(e.url)) return;
2713
+ const t = e.index ?? 0, i = e.url[t];
2714
+ if (!(!(i != null && i.url) || i.lang === "off"))
2715
+ try {
2716
+ const a = await R(
2717
+ i.url,
2718
+ e.encrypt,
2719
+ e.key,
2720
+ e.iv
2721
+ );
2722
+ await ((s = this.subtitle) == null ? void 0 : s.loadVttText(a));
2723
+ } catch (a) {
2724
+ console.warn("[KPlayer] Subtitle load failed:", a);
2725
+ }
2726
+ }
2727
+ // subtitle солих үед дуудах (subtitles.ts дотор)
2728
+ async loadSubtitleByIndex(e) {
2729
+ var s, a, l;
2730
+ const t = this.options.subtitle;
2731
+ if (!(t != null && t.url) || !Array.isArray(t.url)) return;
2732
+ const i = t.url[e];
2733
+ if (!(i != null && i.url) || i.lang === "off") {
2734
+ (s = this.subtitle) == null || s.hide();
2735
+ return;
2736
+ }
2737
+ try {
2738
+ const r = await R(
2739
+ i.url,
2740
+ t.encrypt,
2741
+ t.key,
2742
+ t.iv
2743
+ );
2744
+ await ((a = this.subtitle) == null ? void 0 : a.loadVttText(r)), (l = this.subtitle) == null || l.show();
2745
+ } catch (r) {
2746
+ console.warn("[KPlayer] Subtitle switch failed:", r);
2747
+ }
2748
+ }
2749
+ }
2750
+ export {
2751
+ Ae as default
2752
+ };
2753
+ //# sourceMappingURL=kplayer.es.js.map