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.
- package/README.md +0 -0
- package/dist/kplayer.cjs.js +410 -0
- package/dist/kplayer.cjs.js.map +1 -0
- package/dist/kplayer.css +1 -0
- package/dist/kplayer.es.js +2753 -0
- package/dist/kplayer.es.js.map +1 -0
- package/dist/kplayer.umd.js +410 -0
- package/dist/kplayer.umd.js.map +1 -0
- package/package.json +42 -0
|
@@ -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, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
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, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
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
|