vidply 1.0.22 → 1.0.25
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/dist/dev/vidply.HLSRenderer-PNP5OPES.js +255 -0
- package/dist/dev/vidply.HLSRenderer-PNP5OPES.js.map +7 -0
- package/dist/dev/vidply.HTML5Renderer-LXQ3I45Q.js +12 -0
- package/dist/dev/vidply.HTML5Renderer-LXQ3I45Q.js.map +7 -0
- package/dist/dev/vidply.TranscriptManager-GZKY44ON.js +1744 -0
- package/dist/dev/vidply.TranscriptManager-GZKY44ON.js.map +7 -0
- package/dist/dev/vidply.VimeoRenderer-DCETT5IZ.js +213 -0
- package/dist/dev/vidply.VimeoRenderer-DCETT5IZ.js.map +7 -0
- package/dist/dev/vidply.YouTubeRenderer-QLMMD757.js +227 -0
- package/dist/dev/vidply.YouTubeRenderer-QLMMD757.js.map +7 -0
- package/dist/dev/vidply.chunk-UEIJOJH6.js +243 -0
- package/dist/dev/vidply.chunk-UEIJOJH6.js.map +7 -0
- package/dist/dev/vidply.chunk-UH5MTGKF.js +1630 -0
- package/dist/dev/vidply.chunk-UH5MTGKF.js.map +7 -0
- package/dist/dev/vidply.de-THBIMP4S.js +180 -0
- package/dist/dev/vidply.de-THBIMP4S.js.map +7 -0
- package/dist/dev/vidply.es-6VWDNNNL.js +180 -0
- package/dist/dev/vidply.es-6VWDNNNL.js.map +7 -0
- package/dist/{vidply.esm.js → dev/vidply.esm.js} +530 -5082
- package/dist/dev/vidply.esm.js.map +7 -0
- package/dist/dev/vidply.fr-WHTWCHWT.js +180 -0
- package/dist/dev/vidply.fr-WHTWCHWT.js.map +7 -0
- package/dist/dev/vidply.ja-BFQNPOFI.js +180 -0
- package/dist/dev/vidply.ja-BFQNPOFI.js.map +7 -0
- package/dist/{vidply.js → legacy/vidply.js} +7833 -7317
- package/dist/legacy/vidply.js.map +7 -0
- package/dist/legacy/vidply.min.js +6 -0
- package/dist/{vidply.min.meta.json → legacy/vidply.min.meta.json} +120 -94
- package/dist/prod/vidply.HLSRenderer-4PW35TCX.min.js +6 -0
- package/dist/prod/vidply.HTML5Renderer-XJCSUETP.min.js +6 -0
- package/dist/prod/vidply.TranscriptManager-UZ6DUFB6.min.js +6 -0
- package/dist/prod/vidply.VimeoRenderer-P3PU27S7.min.js +6 -0
- package/dist/prod/vidply.YouTubeRenderer-DGKKWB5M.min.js +6 -0
- package/dist/prod/vidply.chunk-BQBGEJF7.min.js +6 -0
- package/dist/prod/vidply.chunk-MBUR3U5L.min.js +6 -0
- package/dist/prod/vidply.de-SWFW4HYT.min.js +6 -0
- package/dist/prod/vidply.es-7BJ2DJAY.min.js +6 -0
- package/dist/prod/vidply.esm.min.js +21 -0
- package/dist/prod/vidply.fr-DPVR5DFY.min.js +6 -0
- package/dist/prod/vidply.ja-PEBVWKVH.min.js +6 -0
- package/dist/vidply.css +184 -4
- package/dist/vidply.esm.min.meta.json +284 -102
- package/dist/vidply.min.css +1 -1
- package/package.json +4 -4
- package/src/controls/ControlBar.js +3341 -3246
- package/src/controls/TranscriptManager.js +2296 -2271
- package/src/core/Player.js +4807 -4730
- package/src/features/PlaylistManager.js +1203 -1039
- package/src/i18n/i18n.js +51 -7
- package/src/i18n/languages/de.js +5 -1
- package/src/i18n/languages/en.js +5 -1
- package/src/i18n/languages/es.js +5 -1
- package/src/i18n/languages/fr.js +5 -1
- package/src/i18n/languages/ja.js +5 -1
- package/src/i18n/translations.js +35 -18
- package/src/icons/Icons.js +2 -20
- package/src/renderers/HLSRenderer.js +7 -0
- package/src/styles/vidply.css +184 -4
- package/src/utils/DOMUtils.js +67 -0
- package/src/utils/MenuUtils.js +10 -4
- package/src/utils/SettingsMenuFactory.js +8 -4
- package/src/utils/WindowComponents.js +6 -4
- package/dist/vidply.esm.js.map +0 -7
- package/dist/vidply.esm.min.js +0 -18
- package/dist/vidply.js.map +0 -7
- package/dist/vidply.min.js +0 -18
|
@@ -6,37 +6,37 @@
|
|
|
6
6
|
"format": "esm"
|
|
7
7
|
},
|
|
8
8
|
"src/utils/DOMUtils.js": {
|
|
9
|
-
"bytes":
|
|
9
|
+
"bytes": 6031,
|
|
10
10
|
"imports": [],
|
|
11
11
|
"format": "esm"
|
|
12
12
|
},
|
|
13
13
|
"src/i18n/languages/en.js": {
|
|
14
|
-
"bytes":
|
|
14
|
+
"bytes": 6736,
|
|
15
15
|
"imports": [],
|
|
16
16
|
"format": "esm"
|
|
17
17
|
},
|
|
18
18
|
"src/i18n/languages/de.js": {
|
|
19
|
-
"bytes":
|
|
19
|
+
"bytes": 8264,
|
|
20
20
|
"imports": [],
|
|
21
21
|
"format": "esm"
|
|
22
22
|
},
|
|
23
23
|
"src/i18n/languages/es.js": {
|
|
24
|
-
"bytes":
|
|
24
|
+
"bytes": 7812,
|
|
25
25
|
"imports": [],
|
|
26
26
|
"format": "esm"
|
|
27
27
|
},
|
|
28
28
|
"src/i18n/languages/fr.js": {
|
|
29
|
-
"bytes":
|
|
29
|
+
"bytes": 8025,
|
|
30
30
|
"imports": [],
|
|
31
31
|
"format": "esm"
|
|
32
32
|
},
|
|
33
33
|
"src/i18n/languages/ja.js": {
|
|
34
|
-
"bytes":
|
|
34
|
+
"bytes": 8422,
|
|
35
35
|
"imports": [],
|
|
36
36
|
"format": "esm"
|
|
37
37
|
},
|
|
38
38
|
"src/i18n/translations.js": {
|
|
39
|
-
"bytes":
|
|
39
|
+
"bytes": 1382,
|
|
40
40
|
"imports": [
|
|
41
41
|
{
|
|
42
42
|
"path": "src/i18n/languages/en.js",
|
|
@@ -45,29 +45,29 @@
|
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"path": "src/i18n/languages/de.js",
|
|
48
|
-
"kind": "import
|
|
48
|
+
"kind": "dynamic-import",
|
|
49
49
|
"original": "./languages/de.js"
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"path": "src/i18n/languages/es.js",
|
|
53
|
-
"kind": "import
|
|
53
|
+
"kind": "dynamic-import",
|
|
54
54
|
"original": "./languages/es.js"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"path": "src/i18n/languages/fr.js",
|
|
58
|
-
"kind": "import
|
|
58
|
+
"kind": "dynamic-import",
|
|
59
59
|
"original": "./languages/fr.js"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"path": "src/i18n/languages/ja.js",
|
|
63
|
-
"kind": "import
|
|
63
|
+
"kind": "dynamic-import",
|
|
64
64
|
"original": "./languages/ja.js"
|
|
65
65
|
}
|
|
66
66
|
],
|
|
67
67
|
"format": "esm"
|
|
68
68
|
},
|
|
69
69
|
"src/i18n/i18n.js": {
|
|
70
|
-
"bytes":
|
|
70
|
+
"bytes": 6046,
|
|
71
71
|
"imports": [
|
|
72
72
|
{
|
|
73
73
|
"path": "src/i18n/translations.js",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"format": "esm"
|
|
90
90
|
},
|
|
91
91
|
"src/icons/Icons.js": {
|
|
92
|
-
"bytes":
|
|
92
|
+
"bytes": 11393,
|
|
93
93
|
"imports": [],
|
|
94
94
|
"format": "esm"
|
|
95
95
|
},
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"format": "esm"
|
|
100
100
|
},
|
|
101
101
|
"src/controls/ControlBar.js": {
|
|
102
|
-
"bytes":
|
|
102
|
+
"bytes": 132009,
|
|
103
103
|
"imports": [
|
|
104
104
|
{
|
|
105
105
|
"path": "src/utils/DOMUtils.js",
|
|
@@ -170,8 +170,24 @@
|
|
|
170
170
|
"imports": [],
|
|
171
171
|
"format": "esm"
|
|
172
172
|
},
|
|
173
|
+
"src/renderers/HTML5Renderer.js": {
|
|
174
|
+
"bytes": 9169,
|
|
175
|
+
"imports": [],
|
|
176
|
+
"format": "esm"
|
|
177
|
+
},
|
|
178
|
+
"src/utils/DraggableResizable.js": {
|
|
179
|
+
"bytes": 25328,
|
|
180
|
+
"imports": [
|
|
181
|
+
{
|
|
182
|
+
"path": "<runtime>",
|
|
183
|
+
"kind": "import-statement",
|
|
184
|
+
"external": true
|
|
185
|
+
}
|
|
186
|
+
],
|
|
187
|
+
"format": "esm"
|
|
188
|
+
},
|
|
173
189
|
"src/utils/MenuUtils.js": {
|
|
174
|
-
"bytes":
|
|
190
|
+
"bytes": 6782,
|
|
175
191
|
"imports": [
|
|
176
192
|
{
|
|
177
193
|
"path": "src/utils/DOMUtils.js",
|
|
@@ -196,11 +212,6 @@
|
|
|
196
212
|
],
|
|
197
213
|
"format": "esm"
|
|
198
214
|
},
|
|
199
|
-
"src/utils/DraggableResizable.js": {
|
|
200
|
-
"bytes": 25328,
|
|
201
|
-
"imports": [],
|
|
202
|
-
"format": "esm"
|
|
203
|
-
},
|
|
204
215
|
"src/utils/FormUtils.js": {
|
|
205
216
|
"bytes": 3078,
|
|
206
217
|
"imports": [
|
|
@@ -218,7 +229,7 @@
|
|
|
218
229
|
"format": "esm"
|
|
219
230
|
},
|
|
220
231
|
"src/controls/TranscriptManager.js": {
|
|
221
|
-
"bytes":
|
|
232
|
+
"bytes": 80185,
|
|
222
233
|
"imports": [
|
|
223
234
|
{
|
|
224
235
|
"path": "src/utils/DOMUtils.js",
|
|
@@ -268,11 +279,6 @@
|
|
|
268
279
|
],
|
|
269
280
|
"format": "esm"
|
|
270
281
|
},
|
|
271
|
-
"src/renderers/HTML5Renderer.js": {
|
|
272
|
-
"bytes": 9169,
|
|
273
|
-
"imports": [],
|
|
274
|
-
"format": "esm"
|
|
275
|
-
},
|
|
276
282
|
"src/renderers/YouTubeRenderer.js": {
|
|
277
283
|
"bytes": 7465,
|
|
278
284
|
"imports": [],
|
|
@@ -295,7 +301,7 @@
|
|
|
295
301
|
"format": "esm"
|
|
296
302
|
},
|
|
297
303
|
"src/core/Player.js": {
|
|
298
|
-
"bytes":
|
|
304
|
+
"bytes": 208328,
|
|
299
305
|
"imports": [
|
|
300
306
|
{
|
|
301
307
|
"path": "src/utils/EventEmitter.js",
|
|
@@ -322,31 +328,11 @@
|
|
|
322
328
|
"kind": "import-statement",
|
|
323
329
|
"original": "../controls/KeyboardManager.js"
|
|
324
330
|
},
|
|
325
|
-
{
|
|
326
|
-
"path": "src/controls/TranscriptManager.js",
|
|
327
|
-
"kind": "import-statement",
|
|
328
|
-
"original": "../controls/TranscriptManager.js"
|
|
329
|
-
},
|
|
330
331
|
{
|
|
331
332
|
"path": "src/renderers/HTML5Renderer.js",
|
|
332
333
|
"kind": "import-statement",
|
|
333
334
|
"original": "../renderers/HTML5Renderer.js"
|
|
334
335
|
},
|
|
335
|
-
{
|
|
336
|
-
"path": "src/renderers/YouTubeRenderer.js",
|
|
337
|
-
"kind": "import-statement",
|
|
338
|
-
"original": "../renderers/YouTubeRenderer.js"
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
"path": "src/renderers/VimeoRenderer.js",
|
|
342
|
-
"kind": "import-statement",
|
|
343
|
-
"original": "../renderers/VimeoRenderer.js"
|
|
344
|
-
},
|
|
345
|
-
{
|
|
346
|
-
"path": "src/renderers/HLSRenderer.js",
|
|
347
|
-
"kind": "import-statement",
|
|
348
|
-
"original": "../renderers/HLSRenderer.js"
|
|
349
|
-
},
|
|
350
336
|
{
|
|
351
337
|
"path": "src/icons/Icons.js",
|
|
352
338
|
"kind": "import-statement",
|
|
@@ -381,12 +367,37 @@
|
|
|
381
367
|
"path": "src/utils/PerformanceUtils.js",
|
|
382
368
|
"kind": "import-statement",
|
|
383
369
|
"original": "../utils/PerformanceUtils.js"
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"path": "src/controls/TranscriptManager.js",
|
|
373
|
+
"kind": "dynamic-import",
|
|
374
|
+
"original": "../controls/TranscriptManager.js"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"path": "src/renderers/YouTubeRenderer.js",
|
|
378
|
+
"kind": "dynamic-import",
|
|
379
|
+
"original": "../renderers/YouTubeRenderer.js"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"path": "src/renderers/VimeoRenderer.js",
|
|
383
|
+
"kind": "dynamic-import",
|
|
384
|
+
"original": "../renderers/VimeoRenderer.js"
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"path": "src/renderers/HLSRenderer.js",
|
|
388
|
+
"kind": "dynamic-import",
|
|
389
|
+
"original": "../renderers/HLSRenderer.js"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"path": "<runtime>",
|
|
393
|
+
"kind": "import-statement",
|
|
394
|
+
"external": true
|
|
384
395
|
}
|
|
385
396
|
],
|
|
386
397
|
"format": "esm"
|
|
387
398
|
},
|
|
388
399
|
"src/features/PlaylistManager.js": {
|
|
389
|
-
"bytes":
|
|
400
|
+
"bytes": 37547,
|
|
390
401
|
"imports": [
|
|
391
402
|
{
|
|
392
403
|
"path": "src/utils/DOMUtils.js",
|
|
@@ -402,6 +413,16 @@
|
|
|
402
413
|
"path": "src/i18n/i18n.js",
|
|
403
414
|
"kind": "import-statement",
|
|
404
415
|
"original": "../i18n/i18n.js"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"path": "src/utils/TimeUtils.js",
|
|
419
|
+
"kind": "import-statement",
|
|
420
|
+
"original": "../utils/TimeUtils.js"
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"path": "<runtime>",
|
|
424
|
+
"kind": "import-statement",
|
|
425
|
+
"external": true
|
|
405
426
|
}
|
|
406
427
|
],
|
|
407
428
|
"format": "esm"
|
|
@@ -418,103 +439,108 @@
|
|
|
418
439
|
"path": "src/features/PlaylistManager.js",
|
|
419
440
|
"kind": "import-statement",
|
|
420
441
|
"original": "./features/PlaylistManager.js"
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
"path": "<runtime>",
|
|
445
|
+
"kind": "import-statement",
|
|
446
|
+
"external": true
|
|
421
447
|
}
|
|
422
448
|
],
|
|
423
449
|
"format": "esm"
|
|
424
450
|
}
|
|
425
451
|
},
|
|
426
452
|
"outputs": {
|
|
427
|
-
"dist/vidply.min.js": {
|
|
453
|
+
"dist/legacy/vidply.min.js": {
|
|
428
454
|
"imports": [],
|
|
429
455
|
"exports": [],
|
|
430
456
|
"entryPoint": "src/index.js",
|
|
431
457
|
"inputs": {
|
|
432
|
-
"src/renderers/HTML5Renderer.js": {
|
|
433
|
-
"bytesInOutput": 4803
|
|
434
|
-
},
|
|
435
|
-
"src/index.js": {
|
|
436
|
-
"bytesInOutput": 1939
|
|
437
|
-
},
|
|
438
|
-
"src/utils/EventEmitter.js": {
|
|
439
|
-
"bytesInOutput": 436
|
|
440
|
-
},
|
|
441
458
|
"src/utils/DOMUtils.js": {
|
|
442
|
-
"bytesInOutput":
|
|
459
|
+
"bytesInOutput": 2302
|
|
443
460
|
},
|
|
444
461
|
"src/i18n/languages/en.js": {
|
|
445
|
-
"bytesInOutput":
|
|
462
|
+
"bytesInOutput": 5577
|
|
446
463
|
},
|
|
447
464
|
"src/i18n/languages/de.js": {
|
|
448
|
-
"bytesInOutput":
|
|
465
|
+
"bytesInOutput": 6514
|
|
449
466
|
},
|
|
450
467
|
"src/i18n/languages/es.js": {
|
|
451
|
-
"bytesInOutput":
|
|
468
|
+
"bytesInOutput": 6681
|
|
452
469
|
},
|
|
453
470
|
"src/i18n/languages/fr.js": {
|
|
454
|
-
"bytesInOutput":
|
|
471
|
+
"bytesInOutput": 6891
|
|
455
472
|
},
|
|
456
473
|
"src/i18n/languages/ja.js": {
|
|
457
|
-
"bytesInOutput":
|
|
474
|
+
"bytesInOutput": 7290
|
|
458
475
|
},
|
|
459
476
|
"src/i18n/translations.js": {
|
|
460
|
-
"bytesInOutput":
|
|
477
|
+
"bytesInOutput": 368
|
|
461
478
|
},
|
|
462
479
|
"src/i18n/i18n.js": {
|
|
463
|
-
"bytesInOutput":
|
|
480
|
+
"bytesInOutput": 2480
|
|
464
481
|
},
|
|
465
482
|
"src/utils/TimeUtils.js": {
|
|
466
|
-
"bytesInOutput":
|
|
483
|
+
"bytesInOutput": 895
|
|
467
484
|
},
|
|
468
485
|
"src/icons/Icons.js": {
|
|
469
|
-
"bytesInOutput":
|
|
486
|
+
"bytesInOutput": 9362
|
|
470
487
|
},
|
|
471
488
|
"src/utils/FocusUtils.js": {
|
|
472
|
-
"bytesInOutput":
|
|
473
|
-
},
|
|
474
|
-
"src/controls/ControlBar.js": {
|
|
475
|
-
"bytesInOutput": 54457
|
|
489
|
+
"bytesInOutput": 239
|
|
476
490
|
},
|
|
477
491
|
"src/utils/StorageManager.js": {
|
|
478
|
-
"bytesInOutput":
|
|
479
|
-
},
|
|
480
|
-
"src/utils/PerformanceUtils.js": {
|
|
481
|
-
"bytesInOutput": 256
|
|
492
|
+
"bytesInOutput": 1638
|
|
482
493
|
},
|
|
483
|
-
"src/
|
|
484
|
-
"bytesInOutput":
|
|
494
|
+
"src/renderers/HTML5Renderer.js": {
|
|
495
|
+
"bytesInOutput": 4822
|
|
485
496
|
},
|
|
486
|
-
"src/
|
|
487
|
-
"bytesInOutput":
|
|
497
|
+
"src/utils/DraggableResizable.js": {
|
|
498
|
+
"bytesInOutput": 14166
|
|
488
499
|
},
|
|
489
500
|
"src/utils/MenuUtils.js": {
|
|
490
|
-
"bytesInOutput":
|
|
491
|
-
},
|
|
492
|
-
"src/utils/DraggableResizable.js": {
|
|
493
|
-
"bytesInOutput": 13861
|
|
501
|
+
"bytesInOutput": 2299
|
|
494
502
|
},
|
|
495
503
|
"src/utils/FormUtils.js": {
|
|
496
|
-
"bytesInOutput":
|
|
504
|
+
"bytesInOutput": 800
|
|
497
505
|
},
|
|
498
506
|
"src/controls/TranscriptManager.js": {
|
|
499
|
-
"bytesInOutput":
|
|
500
|
-
},
|
|
501
|
-
"src/core/Player.js": {
|
|
502
|
-
"bytesInOutput": 74975
|
|
507
|
+
"bytesInOutput": 43951
|
|
503
508
|
},
|
|
504
509
|
"src/renderers/YouTubeRenderer.js": {
|
|
505
|
-
"bytesInOutput":
|
|
510
|
+
"bytesInOutput": 4266
|
|
506
511
|
},
|
|
507
512
|
"src/renderers/VimeoRenderer.js": {
|
|
508
|
-
"bytesInOutput":
|
|
513
|
+
"bytesInOutput": 4334
|
|
509
514
|
},
|
|
510
515
|
"src/renderers/HLSRenderer.js": {
|
|
511
|
-
"bytesInOutput":
|
|
516
|
+
"bytesInOutput": 5710
|
|
517
|
+
},
|
|
518
|
+
"src/utils/EventEmitter.js": {
|
|
519
|
+
"bytesInOutput": 436
|
|
520
|
+
},
|
|
521
|
+
"src/core/Player.js": {
|
|
522
|
+
"bytesInOutput": 77576
|
|
523
|
+
},
|
|
524
|
+
"src/controls/ControlBar.js": {
|
|
525
|
+
"bytesInOutput": 58454
|
|
526
|
+
},
|
|
527
|
+
"src/controls/CaptionManager.js": {
|
|
528
|
+
"bytesInOutput": 7463
|
|
529
|
+
},
|
|
530
|
+
"src/utils/PerformanceUtils.js": {
|
|
531
|
+
"bytesInOutput": 258
|
|
532
|
+
},
|
|
533
|
+
"src/controls/KeyboardManager.js": {
|
|
534
|
+
"bytesInOutput": 4025
|
|
512
535
|
},
|
|
513
536
|
"src/features/PlaylistManager.js": {
|
|
514
|
-
"bytesInOutput":
|
|
537
|
+
"bytesInOutput": 17168
|
|
538
|
+
},
|
|
539
|
+
"src/index.js": {
|
|
540
|
+
"bytesInOutput": 1877
|
|
515
541
|
}
|
|
516
542
|
},
|
|
517
|
-
"bytes":
|
|
543
|
+
"bytes": 298427
|
|
518
544
|
}
|
|
519
545
|
}
|
|
520
546
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Universal, Accessible Video Player
|
|
3
|
+
* (c) 2025 Matthias Peltzer
|
|
4
|
+
* Released under GPL-2.0-or-later License
|
|
5
|
+
*/
|
|
6
|
+
var s=class{constructor(e){this.player=e,this.media=e.element,this.hls=null}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){let e=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),t=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;return!e&&!t?!1:document.createElement("video").canPlayType("application/vnd.apple.mpegurl")!==""}async initNative(){let e=(await import("./vidply.HTML5Renderer-XJCSUETP.min.js")).HTML5Renderer,t=new e(this.player);await t.init(),Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(i=>{i!=="constructor"&&typeof t[i]=="function"&&(this[i]=t[i].bind(t))})}async initHlsJs(){if(this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs(),!window.Hls.isSupported())throw new Error("HLS is not supported in this browser");this.hls=new window.Hls({debug:this.player.options.debug,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:60*1e3*1e3,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let e,t=this.player.element.querySelector("source");if(t?e=t.getAttribute("src"):e=this.player.element.getAttribute("src")||this.player.element.src,this.player.log(`Loading HLS source: ${e}`,"log"),!e)throw new Error("No HLS source found");this.hls.loadSource(e),this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return new Promise((e,t)=>{let i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/hls.js@latest",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load hls.js")),document.head.appendChild(i)})}attachHlsEvents(){this.hls.on(window.Hls.Events.MANIFEST_PARSED,(e,t)=>{this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t)}),this.hls.on(window.Hls.Events.LEVEL_SWITCHED,(e,t)=>{this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),this.hls.on(window.Hls.Events.ERROR,(e,t)=>{this.handleHlsError(t)}),this.hls.on(window.Hls.Events.FRAG_BUFFERED,()=>{this.player.state.buffering=!1})}attachMediaEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)})}handleHlsError(e){if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal)switch(e.type){case window.Hls.ErrorTypes.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),setTimeout(()=>{this.hls.startLoad()},1e3);break;case window.Hls.ErrorTypes.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),this.hls.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),this.hls.destroy();break}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}play(){let e=window.scrollX,t=window.scrollY,i=this.media.play();window.scrollTo(e,t),i!==void 0&&i.catch(a=>{this.player.log("Play failed:",a,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){return this.hls&&this.hls.levels?this.hls.levels.map((e,t)=>({index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:`${e.height}p`})):[]}destroy(){this.hls&&(this.hls.destroy(),this.hls=null)}};export{s as HLSRenderer};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Universal, Accessible Video Player
|
|
3
|
+
* (c) 2025 Matthias Peltzer
|
|
4
|
+
* Released under GPL-2.0-or-later License
|
|
5
|
+
*/
|
|
6
|
+
import{a as o,b as l,c as M,d as b,f as v,h as C,i as P,j as f,k as w,m as S,n as z}from"./vidply.chunk-MBUR3U5L.min.js";var W=class{constructor(t){this.player=t,this.transcriptWindow=null,this.transcriptEntries=[],this.metadataCues=[],this.currentActiveEntry=null,this.isVisible=!1,this.storage=new C("vidply"),this.draggableResizable=null,this.settingsMenuVisible=!1,this.settingsMenu=null,this.settingsButton=null,this.settingsMenuJustOpened=!1,this.resizeOptionButton=null,this.resizeOptionText=null,this.dragOptionButton=null,this.dragOptionText=null,this.resizeModeIndicator=null,this.resizeModeIndicatorTimeout=null,this.transcriptResizeHandles=[],this.liveRegion=null,this.styleDialog=null,this.styleDialogVisible=!1,this.styleDialogJustOpened=!1,this.languageSelector=null,this.languageLabel=null,this.currentTranscriptLanguage=null,this.availableTranscriptLanguages=[],this.languageSelectorHandler=null;let i=this.storage.getTranscriptPreferences();this.autoscrollEnabled=i?.autoscroll!==void 0?i.autoscroll:!0,this.showTimestamps=i?.showTimestamps!==void 0?i.showTimestamps:!1,this.transcriptStyle={fontSize:i?.fontSize||this.player.options.transcriptFontSize||"100%",fontFamily:i?.fontFamily||this.player.options.transcriptFontFamily||"sans-serif",color:i?.color||this.player.options.transcriptColor||"#ffffff",backgroundColor:i?.backgroundColor||this.player.options.transcriptBackgroundColor||"#1e1e1e",opacity:i?.opacity??this.player.options.transcriptOpacity??.98},this.handlers={timeupdate:()=>this.updateActiveEntry(),audiodescriptionenabled:()=>{this.isVisible&&this.loadTranscriptData()},audiodescriptiondisabled:()=>{this.isVisible&&this.loadTranscriptData()},resize:null,settingsClick:null,settingsKeydown:null,documentClick:null,styleDialogKeydown:null},this.timeouts=new Set,this.init()}init(){this.setupMetadataHandlingOnLoad(),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("audiodescriptionenabled",this.handlers.audiodescriptionenabled),this.player.on("audiodescriptiondisabled",this.handlers.audiodescriptiondisabled),this.player.on("fullscreenchange",()=>{this.isVisible&&(window.innerWidth<768&&this.setupDragAndDrop(),(!this.draggableResizable||!this.draggableResizable.manuallyPositioned)&&this.setManagedTimeout(()=>this.positionTranscript(),100))})}toggleTranscript(){this.isVisible?this.hideTranscript():this.showTranscript()}showTranscript(){if(this.transcriptWindow){this.transcriptWindow.style.display="flex",this.isVisible=!0,this.player.controlBar&&typeof this.player.controlBar.updateTranscriptButton=="function"&&this.player.controlBar.updateTranscriptButton(),v(this.settingsButton,{delay:150});return}this.createTranscriptWindow(),this.loadTranscriptData(),this.transcriptWindow&&(this.transcriptWindow.style.display="flex",(!this.draggableResizable||!this.draggableResizable.manuallyPositioned)&&this.setManagedTimeout(()=>this.positionTranscript(),0),v(this.settingsButton,{delay:150})),this.isVisible=!0}hideTranscript({focusButton:t=!1}={}){if(this.transcriptWindow&&(this.transcriptWindow.style.display="none",this.isVisible=!1),this.draggableResizable&&this.draggableResizable.pointerResizeMode&&(this.draggableResizable.disablePointerResizeMode(),this.updateResizeOptionState()),this.hideResizeModeIndicator(),this.announceLive(""),this.player.controlBar&&typeof this.player.controlBar.updateTranscriptButton=="function"&&this.player.controlBar.updateTranscriptButton(),t){let i=this.player.controlBar?.controls?.transcript;i&&typeof i.focus=="function"&&i.focus({preventScroll:!0})}}createTranscriptWindow(){this.transcriptWindow=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-window`,attributes:{role:"dialog","aria-label":"Video Transcript",tabindex:"-1"}}),this.transcriptHeader=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header`,attributes:{tabindex:"0"}}),this.headerLeft=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header-left`});let t=l.t("transcript.settingsMenu");this.settingsButton=o.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}}),this.settingsButton.appendChild(b("settings")),o.attachTooltip(this.settingsButton,t,this.player.options.classPrefix),this.handlers.settingsClick=d=>{d.preventDefault(),d.stopPropagation(),this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()},this.settingsButton.addEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown=d=>{d.key==="d"||d.key==="D"?(d.preventDefault(),d.stopPropagation(),this.toggleKeyboardDragMode()):d.key==="r"||d.key==="R"?(d.preventDefault(),d.stopPropagation(),this.toggleResizeMode()):d.key==="Escape"&&this.settingsMenuVisible&&(d.preventDefault(),d.stopPropagation(),this.hideSettingsMenu())},this.settingsButton.addEventListener("keydown",this.handlers.settingsKeydown);let i=o.createElement("h3",{textContent:`${l.t("transcript.title")}. ${l.t("transcript.dragResizePrompt")}`}),e=`${this.player.options.classPrefix}-transcript-autoscroll-${Date.now()}`,a=o.createElement("label",{className:`${this.player.options.classPrefix}-transcript-autoscroll-label`,attributes:{for:e}});this.autoscrollCheckbox=o.createElement("input",{attributes:{id:e,type:"checkbox"}}),this.autoscrollEnabled&&(this.autoscrollCheckbox.checked=!0);let n=o.createElement("span",{textContent:l.t("transcript.autoscroll"),className:`${this.player.options.classPrefix}-transcript-autoscroll-text`});a.appendChild(this.autoscrollCheckbox),a.appendChild(n),this.autoscrollCheckbox.addEventListener("change",d=>{this.autoscrollEnabled=d.target.checked,this.saveAutoscrollPreference()}),this.transcriptHeader.appendChild(i),this.headerLeft.appendChild(this.settingsButton),this.headerLeft.appendChild(a);let c=`${this.player.options.classPrefix}-transcript-language-select-${Date.now()}`,{label:p,select:r}=S({classPrefix:this.player.options.classPrefix,labelClass:`${this.player.options.classPrefix}-transcript-language-label`,selectClass:`${this.player.options.classPrefix}-transcript-language-select`,labelText:"settings.language",selectId:c,hidden:!1});this.languageLabel=p,this.languageSelector=r;let s=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-language-wrapper`,attributes:{style:"display: none;"}});s.appendChild(this.languageLabel),s.appendChild(this.languageSelector),this.languageSelectorWrapper=s,z(s),this.headerLeft.appendChild(s);let h=l.t("transcript.close"),u=o.createElement("button",{className:`${this.player.options.classPrefix}-transcript-close`,attributes:{type:"button","aria-label":h}});u.appendChild(b("close")),o.attachTooltip(u,h,this.player.options.classPrefix),u.addEventListener("click",()=>this.hideTranscript({focusButton:!0})),this.transcriptHeader.appendChild(this.headerLeft),this.transcriptHeader.appendChild(u),this.transcriptContent=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-content`}),this.transcriptWindow.appendChild(this.transcriptHeader),this.transcriptWindow.appendChild(this.transcriptContent),this.createResizeHandles(),this.liveRegion=o.createElement("div",{className:"vidply-sr-only",attributes:{"aria-live":"polite","aria-atomic":"true"}}),this.transcriptWindow.appendChild(this.liveRegion),this.player.container.appendChild(this.transcriptWindow),this.setupDragAndDrop(),(!this.draggableResizable||!this.draggableResizable.manuallyPositioned)&&this.positionTranscript(),this.handlers.documentClick=d=>{this.settingsMenuJustOpened||this.styleDialogJustOpened||this.settingsButton&&this.settingsButton.contains(d.target)||this.settingsMenu&&this.settingsMenu.contains(d.target)||(this.settingsMenuVisible&&this.hideSettingsMenu(),this.styleDialogVisible&&this.styleDialog&&!this.styleDialog.contains(d.target)&&this.hideStyleDialog())},this.documentClickHandlerAdded=!1;let y;this.handlers.resize=()=>{y&&this.clearManagedTimeout(y),y=this.setManagedTimeout(()=>{(!this.draggableResizable||!this.draggableResizable.manuallyPositioned)&&this.positionTranscript()},100)},window.addEventListener("resize",this.handlers.resize)}createResizeHandles(){if(!this.transcriptWindow)return;let t=["n","s","e","w","ne","nw","se","sw"];this.transcriptResizeHandles=t.map(i=>{let e=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-handle ${this.player.options.classPrefix}-transcript-resize-${i}`,attributes:{"data-direction":i,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return e.style.display="none",this.transcriptWindow.appendChild(e),e})}positionTranscript(){if(!this.transcriptWindow||!this.player.videoWrapper||!this.isVisible||this.draggableResizable&&this.draggableResizable.manuallyPositioned)return;let t=window.innerWidth<768,i=this.player.videoWrapper.getBoundingClientRect(),e=this.player.state.fullscreen;if(t&&!e)this.transcriptWindow.style.position="relative",this.transcriptWindow.style.left="0",this.transcriptWindow.style.right="0",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.width="100%",this.transcriptWindow.style.maxWidth="100%",this.transcriptWindow.style.maxHeight="400px",this.transcriptWindow.style.height="auto",this.transcriptWindow.style.borderRadius="0",this.transcriptWindow.style.transform="none",this.transcriptWindow.style.border="none",this.transcriptWindow.style.borderTop="1px solid var(--vidply-border-light)",this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptWindow.style.boxShadow="none",this.transcriptHeader&&(this.transcriptHeader.style.cursor="default"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow);else if(e){this.transcriptWindow.style.position="fixed",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right="20px",this.transcriptWindow.style.bottom="80px",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.maxHeight="calc(100vh - 180px)",this.transcriptWindow.style.height="auto";let a=260,n=Math.max(a,window.innerWidth-40),c=parseFloat(this.transcriptWindow.style.width)||400,p=Math.max(a,Math.min(c,n));this.transcriptWindow.style.width=`${p}px`,this.transcriptWindow.style.maxWidth="none",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.removeProperty("border-top"),this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)}else{let a=parseFloat(this.transcriptWindow.style.width)||400,n=20,c=260,p=this.player.container.getBoundingClientRect();window.getComputedStyle(this.player.container).position==="static"&&(this.player.container.style.position="relative");let s=i.right-p.left+n,h=window.innerWidth-i.right-n,u=Math.max(c,Math.min(a,h)),y=i.height;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left=`${s}px`,this.transcriptWindow.style.right="auto",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="0",this.transcriptWindow.style.height=`${y}px`,this.transcriptWindow.style.maxHeight="none",this.transcriptWindow.style.width=`${u}px`,this.transcriptWindow.style.maxWidth="none",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.removeProperty("border-top"),this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)}}getAvailableTranscriptLanguages(){let t=this.player.textTracks,i=new Map;return t.forEach(e=>{(e.kind==="captions"||e.kind==="subtitles")&&e.language&&(i.has(e.language)||i.set(e.language,{language:e.language,label:e.label||e.language,track:e}))}),Array.from(i.values())}updateLanguageSelector(){if(this.languageSelector){if(this.availableTranscriptLanguages=this.getAvailableTranscriptLanguages(),this.languageSelector.innerHTML="",this.availableTranscriptLanguages.length<2){this.languageSelectorWrapper&&(this.languageSelectorWrapper.style.display="none");return}if(this.languageSelectorWrapper&&(this.languageSelectorWrapper.style.display="flex"),this.availableTranscriptLanguages.forEach((t,i)=>{let e=o.createElement("option",{textContent:t.label,attributes:{value:t.language,lang:t.language}});this.languageSelector.appendChild(e)}),this.currentTranscriptLanguage)this.languageSelector.value=this.currentTranscriptLanguage;else if(this.availableTranscriptLanguages.length>0){let t=this.player.textTracks.find(i=>(i.kind==="captions"||i.kind==="subtitles")&&i.mode==="showing");this.currentTranscriptLanguage=t?t.language:this.availableTranscriptLanguages[0].language,this.languageSelector.value=this.currentTranscriptLanguage}this.languageSelectorHandler&&this.languageSelector.removeEventListener("change",this.languageSelectorHandler),this.languageSelectorHandler=t=>{this.currentTranscriptLanguage=t.target.value,this.loadTranscriptData(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage)},this.languageSelector.addEventListener("change",this.languageSelectorHandler)}}loadTranscriptData(){this.transcriptEntries=[],this.transcriptContent.innerHTML="";let t=this.player.textTracks,i=null;this.currentTranscriptLanguage&&(i=t.find(s=>(s.kind==="captions"||s.kind==="subtitles")&&s.language===this.currentTranscriptLanguage)),i||(i=t.find(s=>s.kind==="captions"||s.kind==="subtitles"),i&&(this.currentTranscriptLanguage=i.language));let e=null;this.currentTranscriptLanguage&&(e=t.find(s=>s.kind==="descriptions"&&s.language===this.currentTranscriptLanguage)),e||(e=t.find(s=>s.kind==="descriptions"));let a=t.find(s=>s.kind==="metadata"),n=e&&this.player.state.audioDescriptionEnabled;if(!i&&!n&&!a){this.showNoTranscriptMessage();return}let c=[i,e,a].filter(Boolean);if(c.forEach(s=>{s.mode==="disabled"&&(s.mode="hidden")}),c.some(s=>!s.cues||s.cues.length===0)){let s=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:l.t("transcript.loading")});this.transcriptContent.appendChild(s);let h=0,u=()=>{h++,h>=c.length&&this.loadTranscriptData()};c.forEach(y=>{y.addEventListener("load",u,{once:!0})}),this.setManagedTimeout(()=>{this.loadTranscriptData()},500);return}let r=[];i&&i.cues&&Array.from(i.cues).forEach(s=>{r.push({cue:s,type:"caption"})}),e&&e.cues&&this.player.state.audioDescriptionEnabled&&Array.from(e.cues).forEach(s=>{r.push({cue:s,type:"description"})}),a&&a.cues&&(this.metadataCues=Array.from(a.cues),this.setupMetadataHandling()),r.sort((s,h)=>s.cue.startTime-h.cue.startTime),r.forEach((s,h)=>{let u=this.createTranscriptEntry(s.cue,h,s.type);this.transcriptEntries.push({element:u,cue:s.cue,type:s.type,startTime:s.cue.startTime,endTime:s.cue.endTime}),this.transcriptContent.appendChild(u)}),this.applyTranscriptStyles(),this.updateTimestampVisibility(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage),this.updateLanguageSelector()}setupMetadataHandlingOnLoad(){let t=()=>{let e=this.player.textTracks.find(a=>a.kind==="metadata");if(e){if(e.mode==="disabled"&&(e.mode="hidden"),this.metadataCueChangeHandler&&e.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=()=>{let a=Array.from(e.activeCues||[]);a.length>0&&this.player.options.debug&&console.log("[VidPly Metadata] Active cues:",a.map(n=>({start:n.startTime,end:n.endTime,text:n.text}))),a.forEach(n=>{this.handleMetadataCue(n)})},e.addEventListener("cuechange",this.metadataCueChangeHandler),this.player.options.debug){let a=e.cues?e.cues.length:0;console.log("[VidPly Metadata] Track enabled,",a,"cues available")}}else this.player.options.debug&&console.warn("[VidPly Metadata] No metadata track found")};t(),this.player.on("loadedmetadata",t)}setupMetadataHandling(){!this.metadataCues||this.metadataCues.length===0||this.player.options.debug&&console.log("[VidPly Metadata]",this.metadataCues.length,"cues stored from transcript load")}handleMetadataCue(t){let i=t.text.trim();this.player.options.debug&&console.log("[VidPly Metadata] Processing cue:",{time:t.startTime,text:i}),this.player.emit("metadata",{time:t.startTime,endTime:t.endTime,text:i,cue:t}),i.includes("PAUSE")&&(this.player.state.paused||(this.player.options.debug&&console.log("[VidPly Metadata] Pausing video at",t.startTime),this.player.pause()),this.player.emit("metadata:pause",{time:t.startTime,text:i}));let e=i.match(/FOCUS:([\w#-]+)/);if(e){let n=e[1],c=document.querySelector(n);c?(this.player.options.debug&&console.log("[VidPly Metadata] Focusing element:",n),this.setManagedTimeout(()=>{c.focus({preventScroll:!0})},10)):this.player.options.debug&&console.warn("[VidPly Metadata] Element not found:",n),this.player.emit("metadata:focus",{time:t.startTime,target:n,element:c,text:i})}let a=i.match(/#[\w-]+/g);a&&(this.player.options.debug&&console.log("[VidPly Metadata] Hashtags found:",a),this.player.emit("metadata:hashtags",{time:t.startTime,hashtags:a,text:i}))}createTranscriptEntry(t,i,e="caption"){let a=this.stripVTTFormatting(t.text),n=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-entry ${this.player.options.classPrefix}-transcript-${e}`,attributes:{tabindex:"0","data-start":String(t.startTime),"data-end":String(t.endTime),"data-type":e}}),c=o.createElement("span",{className:`${this.player.options.classPrefix}-transcript-time`,textContent:M.formatTime(t.startTime),attributes:{"aria-hidden":"true"}}),p=o.createElement("span",{className:`${this.player.options.classPrefix}-transcript-text`,textContent:a});n.appendChild(c),n.appendChild(p);let r=()=>{this.player.seek(t.startTime),this.player.state.paused&&this.player.play()};return n.addEventListener("click",r),n.addEventListener("keydown",s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),r())}),n}stripVTTFormatting(t){return t.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim()}showNoTranscriptMessage(){let t=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-empty`,textContent:l.t("transcript.noTranscript")});this.transcriptContent.appendChild(t)}updateActiveEntry(){if(!this.isVisible||this.transcriptEntries.length===0)return;let t=this.player.state.currentTime,i=this.transcriptEntries.find(e=>t>=e.startTime&&t<e.endTime);i&&i!==this.currentActiveEntry?(this.currentActiveEntry&&this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),i.element.classList.add(`${this.player.options.classPrefix}-transcript-entry-active`),this.scrollToEntry(i.element),this.currentActiveEntry=i):!i&&this.currentActiveEntry&&(this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),this.currentActiveEntry=null)}scrollToEntry(t){if(!this.transcriptContent||!this.autoscrollEnabled)return;let i=this.transcriptContent.getBoundingClientRect(),e=t.getBoundingClientRect();if(e.top<i.top||e.bottom>i.bottom){let a=t.offsetTop-this.transcriptContent.clientHeight/2+t.clientHeight/2;this.transcriptContent.scrollTo({top:a,behavior:"smooth"})}}saveAutoscrollPreference(){let t=this.storage.getTranscriptPreferences()||{};t.autoscroll=this.autoscrollEnabled,this.storage.saveTranscriptPreferences(t)}setupDragAndDrop(){if(!this.transcriptHeader||!this.transcriptWindow)return;let t=window.innerWidth<768,i=this.player.state.fullscreen;if(t&&!i){this.draggableResizable&&(this.draggableResizable.destroy(),this.draggableResizable=null);return}this.draggableResizable||(this.draggableResizable=new P(this.transcriptWindow,{dragHandle:this.transcriptHeader,resizeHandles:this.transcriptResizeHandles,constrainToViewport:!0,classPrefix:`${this.player.options.classPrefix}-transcript`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,minWidth:300,minHeight:200,maxWidth:()=>Math.max(320,window.innerWidth-40),maxHeight:()=>Math.max(200,window.innerHeight-120),pointerResizeIndicatorText:l.t("transcript.resizeModeHint"),onPointerResizeToggle:e=>{this.transcriptResizeHandles.forEach(a=>{a.style.display=e?"block":"none"}),this.onPointerResizeModeChange(e)},onDragStart:e=>{let a=[`.${this.player.options.classPrefix}-transcript-close`,`.${this.player.options.classPrefix}-transcript-settings`,`.${this.player.options.classPrefix}-transcript-language-select`,`.${this.player.options.classPrefix}-transcript-language-label`,`.${this.player.options.classPrefix}-transcript-settings-menu`,`.${this.player.options.classPrefix}-transcript-style-dialog`];for(let n of a)if(e.target.closest(n))return!1;return!0}}),this.customKeyHandler=e=>{let a=e.key.toLowerCase(),n=e.defaultPrevented;if(!(this.settingsMenuVisible||this.styleDialogVisible)){if(a==="home"){e.preventDefault(),e.stopPropagation(),this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&this.draggableResizable.disablePointerResizeMode(),this.draggableResizable.manuallyPositioned=!1,this.positionTranscript(),this.updateResizeOptionState(),this.announceLive(l.t("transcript.positionReset")));return}if(a==="r"){if(n)return;e.preventDefault(),e.stopPropagation(),this.toggleResizeMode()&&this.transcriptWindow.focus({preventScroll:!0});return}if(a==="escape"){if(this.draggableResizable&&this.draggableResizable.pointerResizeMode){e.preventDefault(),e.stopPropagation(),this.draggableResizable.disablePointerResizeMode();return}if(this.draggableResizable&&this.draggableResizable.keyboardDragMode){e.preventDefault(),e.stopPropagation(),this.draggableResizable.disableKeyboardDragMode(),this.announceLive(l.t("transcript.dragModeDisabled"));return}e.preventDefault(),e.stopPropagation(),this.hideTranscript({focusButton:!0});return}}},this.transcriptWindow.addEventListener("keydown",this.customKeyHandler))}toggleKeyboardDragMode(){if(this.draggableResizable){let t=this.draggableResizable.keyboardDragMode;this.draggableResizable.toggleKeyboardDragMode();let i=this.draggableResizable.keyboardDragMode;!t&&i&&this.enableMoveMode(),this.updateDragOptionState(),this.settingsMenuVisible&&this.hideSettingsMenu(),this.transcriptWindow.focus({preventScroll:!0})}}toggleSettingsMenu(){this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()}showSettingsMenu(){if(this.settingsMenuJustOpened=!0,setTimeout(()=>{this.settingsMenuJustOpened=!1},350),this.documentClickHandlerAdded||setTimeout(()=>{document.addEventListener("click",this.handlers.documentClick),this.documentClickHandlerAdded=!0},300),this.settingsMenu){this.settingsMenu.style.display="block",this.settingsMenuVisible=!0,this.settingsButton&&this.settingsButton.setAttribute("aria-expanded","true"),this.attachSettingsMenuKeyboardNavigation(),this.positionSettingsMenuImmediate(),this.updateResizeOptionState(),setTimeout(()=>{let g=this.settingsMenu.querySelectorAll(`.${this.player.options.classPrefix}-transcript-settings-item`);if(g.length>0){g[0].setAttribute("tabindex","0");for(let m=1;m<g.length;m++)g[m].setAttribute("tabindex","-1");g[0].focus({preventScroll:!0})}},50);return}this.settingsMenu=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-settings-menu`,attributes:{role:"menu"}});let t=f({classPrefix:this.player.options.classPrefix,itemClass:`${this.player.options.classPrefix}-transcript-settings-item`,icon:"move",label:"transcript.enableDragMode",hasTextClass:!0,onClick:()=>{this.toggleKeyboardDragMode(),this.hideSettingsMenu()}});t.setAttribute("role","switch"),t.setAttribute("aria-checked","false");let i=t.querySelector(`.${this.player.options.classPrefix}-tooltip`);i&&i.remove();let e=t.querySelector(`.${this.player.options.classPrefix}-button-text`);e&&e.remove(),this.dragOptionButton=t,this.dragOptionText=t.querySelector(`.${this.player.options.classPrefix}-settings-text`),this.updateDragOptionState();let a=f({classPrefix:this.player.options.classPrefix,itemClass:`${this.player.options.classPrefix}-transcript-settings-item`,icon:"settings",label:"transcript.styleTranscript",onClick:g=>{g.preventDefault(),g.stopPropagation(),this.hideSettingsMenu(),setTimeout(()=>{this.showStyleDialog()},50)}}),n=a.querySelector(`.${this.player.options.classPrefix}-tooltip`);n&&n.remove();let c=a.querySelector(`.${this.player.options.classPrefix}-button-text`);c&&c.remove();let p=f({classPrefix:this.player.options.classPrefix,itemClass:`${this.player.options.classPrefix}-transcript-settings-item`,icon:"resize",label:"transcript.enableResizeMode",hasTextClass:!0,onClick:g=>{g.preventDefault(),g.stopPropagation(),this.toggleResizeMode({focus:!1})?(this.hideSettingsMenu({focusButton:!1}),setTimeout(()=>{this.transcriptWindow&&this.transcriptWindow.focus({preventScroll:!0})},20)):this.hideSettingsMenu({focusButton:!0})}});p.setAttribute("role","switch"),p.setAttribute("aria-checked","false");let r=p.querySelector(`.${this.player.options.classPrefix}-tooltip`);r&&r.remove();let s=p.querySelector(`.${this.player.options.classPrefix}-button-text`);s&&s.remove(),this.resizeOptionButton=p,this.resizeOptionText=p.querySelector(`.${this.player.options.classPrefix}-settings-text`),this.updateResizeOptionState();let h=f({classPrefix:this.player.options.classPrefix,itemClass:`${this.player.options.classPrefix}-transcript-settings-item`,icon:"clock",label:"transcript.showTimestamps",hasTextClass:!0,onClick:()=>{this.toggleShowTimestamps()}});h.setAttribute("role","switch"),h.setAttribute("aria-checked",this.showTimestamps?"true":"false");let u=h.querySelector(`.${this.player.options.classPrefix}-tooltip`);u&&u.remove();let y=h.querySelector(`.${this.player.options.classPrefix}-button-text`);y&&y.remove(),this.showTimestampsButton=h,this.showTimestampsText=h.querySelector(`.${this.player.options.classPrefix}-settings-text`),this.updateShowTimestampsState();let d=f({classPrefix:this.player.options.classPrefix,itemClass:`${this.player.options.classPrefix}-transcript-settings-item`,icon:"close",label:"transcript.closeMenu",onClick:()=>{this.hideSettingsMenu()}}),T=d.querySelector(`.${this.player.options.classPrefix}-tooltip`);T&&T.remove();let x=d.querySelector(`.${this.player.options.classPrefix}-button-text`);x&&x.remove(),this.settingsMenu.appendChild(t),this.settingsMenu.appendChild(p),this.settingsMenu.appendChild(a),this.settingsMenu.appendChild(h),this.settingsMenu.appendChild(d),this.settingsMenu.style.visibility="hidden",this.settingsMenu.style.display="block",this.settingsButton&&this.settingsButton.parentNode?this.settingsButton.insertAdjacentElement("afterend",this.settingsMenu):this.headerLeft?this.headerLeft.appendChild(this.settingsMenu):this.transcriptHeader?this.transcriptHeader.appendChild(this.settingsMenu):this.transcriptWindow.appendChild(this.settingsMenu),this.positionSettingsMenuImmediate(),requestAnimationFrame(()=>{this.settingsMenu&&(this.settingsMenu.style.visibility="visible")}),this.settingsMenuKeyHandler=w(this.settingsMenu,this.settingsButton,`.${this.player.options.classPrefix}-transcript-settings-item`,()=>this.hideSettingsMenu({focusButton:!0})),this.settingsMenuVisible=!0,this.settingsMenu.style.display="block",this.settingsButton&&this.settingsButton.setAttribute("aria-expanded","true"),this.updateResizeOptionState(),setTimeout(()=>{let g=this.settingsMenu.querySelectorAll(`.${this.player.options.classPrefix}-transcript-settings-item`);if(g.length>0){g[0].setAttribute("tabindex","0");for(let m=1;m<g.length;m++)g[m].setAttribute("tabindex","-1");g[0].focus({preventScroll:!0})}},50)}positionSettingsMenuImmediate(){if(!this.settingsMenu||!this.settingsButton)return;let t=this.settingsButton.parentElement;if(!t)return;let i=this.settingsButton.getBoundingClientRect(),e=t.getBoundingClientRect(),a=this.settingsMenu.getBoundingClientRect(),n=window.innerHeight,c=i.left-e.left,p=i.bottom-e.top,r=i.top-e.top,s=n-i.bottom,h=i.top,u=p+4;s<a.height+20&&h>s?(u=r-a.height-4,this.settingsMenu.classList.add("vidply-menu-above")):this.settingsMenu.classList.remove("vidply-menu-above"),this.settingsMenu.style.top=`${u}px`,this.settingsMenu.style.left=`${c}px`,this.settingsMenu.style.right="auto",this.settingsMenu.style.bottom="auto"}positionSettingsMenu(){!this.settingsMenu||!this.settingsButton||requestAnimationFrame(()=>{setTimeout(()=>{this.positionSettingsMenuImmediate()},10)})}attachSettingsMenuKeyboardNavigation(){if(!this.settingsMenu)return;this.settingsMenuKeyHandler&&this.settingsMenu.removeEventListener("keydown",this.settingsMenuKeyHandler,!0);let t=w(this.settingsMenu,this.settingsButton,`.${this.player.options.classPrefix}-transcript-settings-item`,()=>this.hideSettingsMenu({focusButton:!0}));this.settingsMenuKeyHandler=t}hideSettingsMenu({focusButton:t=!0}={}){this.settingsMenu&&(this.settingsMenu.style.display="none",this.settingsMenuVisible=!1,this.settingsMenuJustOpened=!1,this.settingsMenuKeyHandler&&(this.settingsMenu.removeEventListener("keydown",this.settingsMenuKeyHandler,!0),this.settingsMenuKeyHandler=null),this.settingsButton&&(this.settingsButton.setAttribute("aria-expanded","false"),t&&this.settingsButton.focus({preventScroll:!0})))}enableMoveMode(){this.hideResizeModeIndicator(),this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-move-mode`);let t=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-move-tooltip`,textContent:"Drag with mouse or press D for keyboard drag mode"});this.transcriptHeader.appendChild(t),setTimeout(()=>{this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-move-mode`),t.parentNode&&t.remove()},2e3)}toggleResizeMode({focus:t=!0}={}){return this.draggableResizable?this.draggableResizable.pointerResizeMode?(this.draggableResizable.disablePointerResizeMode({focus:t}),!1):(this.draggableResizable.enablePointerResizeMode({focus:t}),!0):!1}updateDragOptionState(){if(!this.dragOptionButton)return;let t=!!(this.draggableResizable&&this.draggableResizable.keyboardDragMode),i=t?l.t("transcript.disableDragMode"):l.t("transcript.enableDragMode"),e=t?l.t("transcript.disableDragModeAria"):l.t("transcript.enableDragModeAria");this.dragOptionButton.setAttribute("aria-checked",t?"true":"false"),this.dragOptionButton.setAttribute("aria-label",e),this.dragOptionText&&(this.dragOptionText.textContent=i)}updateResizeOptionState(){if(!this.resizeOptionButton)return;let t=!!(this.draggableResizable&&this.draggableResizable.pointerResizeMode),i=t?l.t("transcript.disableResizeMode"):l.t("transcript.enableResizeMode"),e=t?l.t("transcript.disableResizeModeAria"):l.t("transcript.enableResizeModeAria");this.resizeOptionButton.setAttribute("aria-checked",t?"true":"false"),this.resizeOptionButton.setAttribute("aria-label",e),this.resizeOptionText&&(this.resizeOptionText.textContent=i)}toggleShowTimestamps(){this.showTimestamps=!this.showTimestamps,this.updateShowTimestampsState(),this.updateTimestampVisibility(),this.saveTimestampsPreference()}updateShowTimestampsState(){if(!this.showTimestampsButton)return;let t=this.showTimestamps?l.t("transcript.hideTimestamps"):l.t("transcript.showTimestamps"),i=this.showTimestamps?l.t("transcript.hideTimestampsAria"):l.t("transcript.showTimestampsAria");this.showTimestampsButton.setAttribute("aria-checked",this.showTimestamps?"true":"false"),this.showTimestampsButton.setAttribute("aria-label",i),this.showTimestampsText&&(this.showTimestampsText.textContent=t)}updateTimestampVisibility(){if(!this.transcriptContent)return;this.transcriptContent.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(i=>{i.style.display=this.showTimestamps?"":"none"})}saveTimestampsPreference(){let t=this.storage.getTranscriptPreferences()||{};t.showTimestamps=this.showTimestamps,this.storage.saveTranscriptPreferences(t)}showResizeModeIndicator(){if(!this.transcriptHeader)return;this.hideResizeModeIndicator();let t=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-tooltip`,textContent:l.t("transcript.resizeModeHint")||"Resize handles enabled. Drag edges or corners to adjust. Press Esc or R to exit."});this.transcriptHeader.appendChild(t),this.resizeModeIndicator=t,this.resizeModeIndicatorTimeout=this.setManagedTimeout(()=>{this.hideResizeModeIndicator()},3e3)}hideResizeModeIndicator(){this.resizeModeIndicatorTimeout&&(this.clearManagedTimeout(this.resizeModeIndicatorTimeout),this.resizeModeIndicatorTimeout=null),this.resizeModeIndicator&&this.resizeModeIndicator.parentNode&&this.resizeModeIndicator.remove(),this.resizeModeIndicator=null}onPointerResizeModeChange(t){this.updateResizeOptionState(),t?(this.showResizeModeIndicator(),this.announceLive(l.t("transcript.resizeModeEnabled"))):(this.hideResizeModeIndicator(),this.announceLive(l.t("transcript.resizeModeDisabled")))}showStyleDialog(){if(this.styleDialog){this.styleDialog.style.display="block",this.styleDialogVisible=!0,this.handlers.styleDialogKeydown&&document.addEventListener("keydown",this.handlers.styleDialogKeydown),this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{let r=this.styleDialog.querySelector("select, input");r&&r.focus({preventScroll:!0})},0);return}this.styleDialog=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-dialog`});let t=o.createElement("h4",{textContent:l.t("transcript.styleTitle"),className:`${this.player.options.classPrefix}-transcript-style-title`});this.styleDialog.appendChild(t);let i=this.createStyleSelectControl(l.t("captions.fontSize"),"fontSize",[{label:l.t("fontSizes.small"),value:"90%"},{label:l.t("fontSizes.normal"),value:"100%"},{label:l.t("fontSizes.large"),value:"110%"},{label:l.t("fontSizes.xlarge"),value:"120%"}]);this.styleDialog.appendChild(i);let e=this.createStyleSelectControl(l.t("captions.fontFamily"),"fontFamily",[{label:l.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:l.t("fontFamilies.serif"),value:"serif"},{label:l.t("fontFamilies.monospace"),value:"monospace"}]);this.styleDialog.appendChild(e);let a=this.createStyleColorControl(l.t("captions.color"),"color");this.styleDialog.appendChild(a);let n=this.createStyleColorControl(l.t("captions.backgroundColor"),"backgroundColor");this.styleDialog.appendChild(n);let c=this.createStyleOpacityControl(l.t("captions.opacity"),"opacity");this.styleDialog.appendChild(c);let p=o.createElement("button",{className:`${this.player.options.classPrefix}-transcript-style-close`,textContent:l.t("settings.close"),attributes:{type:"button"}});p.addEventListener("click",()=>this.hideStyleDialog()),this.styleDialog.appendChild(p),this.handlers.styleDialogKeydown=r=>{if(this.styleDialogVisible){if(r.key==="Escape"){r.preventDefault(),r.stopPropagation(),this.hideStyleDialog();return}if(r.key==="Tab"){let s=this.styleDialog.querySelectorAll("select, input, button"),h=s[0],u=s[s.length-1];r.shiftKey&&document.activeElement===h?(r.preventDefault(),u.focus({preventScroll:!0})):!r.shiftKey&&document.activeElement===u&&(r.preventDefault(),h.focus({preventScroll:!0}))}}},document.addEventListener("keydown",this.handlers.styleDialogKeydown),this.headerLeft?this.headerLeft.appendChild(this.styleDialog):this.transcriptHeader.appendChild(this.styleDialog),this.applyTranscriptStyles(),this.styleDialogVisible=!0,this.styleDialog.style.display="block",this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{let r=this.styleDialog.querySelector("select, input");r&&r.focus({preventScroll:!0})},0)}hideStyleDialog(){this.styleDialog&&(this.styleDialog.style.display="none",this.styleDialogVisible=!1,this.handlers.styleDialogKeydown&&document.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.settingsButton&&this.settingsButton.focus({preventScroll:!0}))}createStyleSelectControl(t,i,e){let a=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),n=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,c=o.createElement("label",{textContent:t,attributes:{for:n}});a.appendChild(c);let p=o.createElement("select",{className:`${this.player.options.classPrefix}-transcript-style-select`,attributes:{id:n}});return e.forEach(r=>{let s=o.createElement("option",{textContent:r.label,attributes:{value:r.value}});this.transcriptStyle[i]===r.value&&(s.selected=!0),p.appendChild(s)}),p.addEventListener("change",r=>{this.transcriptStyle[i]=r.target.value,this.applyTranscriptStyles(),this.savePreferences()}),a.appendChild(p),a}createStyleColorControl(t,i){let e=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,n=o.createElement("label",{textContent:t,attributes:{for:a}});e.appendChild(n);let c=o.createElement("input",{attributes:{id:a,type:"color",value:this.transcriptStyle[i]},className:`${this.player.options.classPrefix}-transcript-style-color`});return c.addEventListener("input",p=>{this.transcriptStyle[i]=p.target.value,this.applyTranscriptStyles(),this.savePreferences()}),e.appendChild(c),e}createStyleOpacityControl(t,i){let e=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,n=o.createElement("label",{textContent:t,attributes:{for:a}});e.appendChild(n);let c=o.createElement("span",{textContent:Math.round(this.transcriptStyle[i]*100)+"%",className:`${this.player.options.classPrefix}-transcript-style-value`}),p=o.createElement("input",{attributes:{id:a,type:"range",min:"0",max:"1",step:"0.1",value:String(this.transcriptStyle[i])},className:`${this.player.options.classPrefix}-transcript-style-range`});p.addEventListener("input",s=>{let h=parseFloat(s.target.value);this.transcriptStyle[i]=h,c.textContent=Math.round(h*100)+"%",this.applyTranscriptStyles(),this.savePreferences()});let r=o.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-range-container`});return r.appendChild(p),r.appendChild(c),e.appendChild(n),e.appendChild(r),e}savePreferences(){this.storage.saveTranscriptPreferences(this.transcriptStyle)}applyTranscriptStyles(){if(!this.transcriptWindow)return;this.transcriptWindow.style.backgroundColor=this.transcriptStyle.backgroundColor,this.transcriptWindow.style.opacity=String(this.transcriptStyle.opacity),this.transcriptContent&&(this.transcriptContent.style.fontSize=this.transcriptStyle.fontSize,this.transcriptContent.style.fontFamily=this.transcriptStyle.fontFamily,this.transcriptContent.style.color=this.transcriptStyle.color),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-text`).forEach(e=>{e.style.fontSize=this.transcriptStyle.fontSize,e.style.fontFamily=this.transcriptStyle.fontFamily,e.style.color=this.transcriptStyle.color}),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(e=>{e.style.fontFamily=this.transcriptStyle.fontFamily})}setManagedTimeout(t,i){let e=setTimeout(()=>{this.timeouts.delete(e),t()},i);return this.timeouts.add(e),e}clearManagedTimeout(t){t&&(clearTimeout(t),this.timeouts.delete(t))}destroy(){this.hideResizeModeIndicator(),this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&(this.draggableResizable.disablePointerResizeMode(),this.updateResizeOptionState()),this.draggableResizable.destroy(),this.draggableResizable=null),this.transcriptWindow&&this.customKeyHandler&&(this.transcriptWindow.removeEventListener("keydown",this.customKeyHandler),this.customKeyHandler=null),this.handlers.timeupdate&&this.player.off("timeupdate",this.handlers.timeupdate),this.handlers.audiodescriptionenabled&&this.player.off("audiodescriptionenabled",this.handlers.audiodescriptionenabled),this.handlers.audiodescriptiondisabled&&this.player.off("audiodescriptiondisabled",this.handlers.audiodescriptiondisabled),this.settingsButton&&(this.handlers.settingsClick&&this.settingsButton.removeEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown&&this.settingsButton.removeEventListener("keydown",this.handlers.settingsKeydown)),this.handlers.styleDialogKeydown&&document.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.handlers.documentClick&&document.removeEventListener("click",this.handlers.documentClick),this.handlers.resize&&window.removeEventListener("resize",this.handlers.resize),this.timeouts.forEach(t=>clearTimeout(t)),this.timeouts.clear(),this.handlers=null,this.transcriptWindow&&this.transcriptWindow.parentNode&&this.transcriptWindow.parentNode.removeChild(this.transcriptWindow),this.transcriptWindow=null,this.transcriptHeader=null,this.transcriptContent=null,this.transcriptEntries=[],this.settingsMenu=null,this.styleDialog=null,this.transcriptResizeHandles=[],this.resizeOptionButton=null,this.resizeOptionText=null,this.liveRegion=null}announceLive(t){this.liveRegion&&(this.liveRegion.textContent=t||"")}};export{W as TranscriptManager};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Universal, Accessible Video Player
|
|
3
|
+
* (c) 2025 Matthias Peltzer
|
|
4
|
+
* Released under GPL-2.0-or-later License
|
|
5
|
+
*/
|
|
6
|
+
var a=class{constructor(e){this.player=e,this.vimeo=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.element.src),!this.videoId)throw new Error("Invalid Vimeo URL");await this.loadVimeoAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/vimeo\.com\/(\d+)/,/vimeo\.com\/video\/(\d+)/,/player\.vimeo\.com\/video\/(\d+)/];for(let i of t){let s=e.match(i);if(s&&s[1])return s[1]}return null}async loadVimeoAPI(){return window.Vimeo&&window.Vimeo.Player?Promise.resolve():new Promise((e,t)=>{let i=document.createElement("script");i.src="https://player.vimeo.com/api/player.js",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load Vimeo API")),document.head.appendChild(i)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`vimeo-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.height="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){let e={id:this.videoId,width:"100%",height:"100%",controls:!1,autoplay:this.player.options.autoplay,muted:this.player.options.muted,loop:this.player.options.loop,keyboard:!1};this.player.options.startTime>0&&(e.startTime=this.player.options.startTime),this.vimeo=new window.Vimeo.Player(this.iframe.id,e),await this.vimeo.ready(),this.isReady=!0,this.attachEvents();try{let t=await this.vimeo.getDuration();this.player.state.duration=t,this.player.emit("loadedmetadata")}catch(t){this.player.log("Error getting duration:",t,"warn")}}attachEvents(){this.vimeo.on("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.vimeo.on("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.vimeo.on("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player)}),this.vimeo.on("timeupdate",e=>{this.player.state.currentTime=e.seconds,this.player.state.duration=e.duration,this.player.emit("timeupdate",e.seconds),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,e.seconds)}),this.vimeo.on("volumechange",e=>{this.player.state.volume=e.volume,this.player.emit("volumechange",e.volume)}),this.vimeo.on("bufferstart",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.vimeo.on("bufferend",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.vimeo.on("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.vimeo.on("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.vimeo.on("playbackratechange",e=>{this.player.state.playbackSpeed=e.playbackRate,this.player.emit("ratechange",e.playbackRate)}),this.vimeo.on("error",e=>{this.player.handleError(new Error(`Vimeo error: ${e.message}`))})}play(){if(this.isReady&&this.vimeo){let e=window.scrollX,t=window.scrollY;this.vimeo.play().catch(i=>{this.player.log("Play error:",i,"warn")}),window.scrollTo(e,t)}}pause(){this.isReady&&this.vimeo&&this.vimeo.pause().catch(e=>{this.player.log("Pause error:",e,"warn")})}seek(e){this.isReady&&this.vimeo&&this.vimeo.setCurrentTime(e).catch(t=>{this.player.log("Seek error:",t,"warn")})}setVolume(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e).catch(t=>{this.player.log("Volume error:",t,"warn")}),this.player.state.volume=e)}setMuted(e){this.isReady&&this.vimeo&&(e?this.vimeo.setVolume(0):this.vimeo.setVolume(this.player.state.volume),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.vimeo&&(this.vimeo.setPlaybackRate(e).catch(t=>{this.player.log("Playback rate error:",t,"warn")}),this.player.state.playbackSpeed=e)}destroy(){this.vimeo&&this.vimeo.destroy&&this.vimeo.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};export{a as VimeoRenderer};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Universal, Accessible Video Player
|
|
3
|
+
* (c) 2025 Matthias Peltzer
|
|
4
|
+
* Released under GPL-2.0-or-later License
|
|
5
|
+
*/
|
|
6
|
+
var s=class{constructor(e){this.player=e,this.youtube=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.element.src),!this.videoId)throw new Error("Invalid YouTube URL");await this.loadYouTubeAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&\s]+)/,/youtube\.com\/embed\/([^&\s]+)/];for(let i of t){let a=e.match(i);if(a&&a[1])return a[1]}return null}async loadYouTubeAPI(){return window.YT&&window.YT.Player?Promise.resolve():new Promise((e,t)=>{if(window.onYouTubeIframeAPIReady){let r=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=()=>{r(),e()};return}let i=document.createElement("script");i.src="https://www.youtube.com/iframe_api",window.onYouTubeIframeAPIReady=()=>{e()},i.onerror=()=>t(new Error("Failed to load YouTube API"));let a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(i,a)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`youtube-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.height="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){return new Promise(e=>{this.youtube=new window.YT.Player(this.iframe.id,{videoId:this.videoId,width:"100%",height:"100%",playerVars:{controls:0,disablekb:1,fs:0,modestbranding:1,rel:0,showinfo:0,iv_load_policy:3,autoplay:this.player.options.autoplay?1:0,mute:this.player.options.muted?1:0,start:this.player.options.startTime||0},events:{onReady:t=>{this.isReady=!0,this.attachEvents(),e()},onStateChange:t=>this.handleStateChange(t),onError:t=>this.handleError(t)}})})}attachEvents(){this.timeUpdateInterval=setInterval(()=>{if(this.isReady&&this.youtube){let e=this.youtube.getCurrentTime(),t=this.youtube.getDuration();this.player.state.currentTime=e,this.player.state.duration=t,this.player.emit("timeupdate",e)}},250),this.youtube.getDuration&&(this.player.state.duration=this.youtube.getDuration(),this.player.emit("loadedmetadata"))}handleStateChange(e){let t=window.YT.PlayerState;switch(e.data){case t.PLAYING:this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.state.buffering=!1,this.player.emit("play"),this.player.emit("playing"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player);break;case t.PAUSED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player);break;case t.ENDED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.youtube.seekTo(0),this.youtube.playVideo());break;case t.BUFFERING:this.player.state.buffering=!0,this.player.emit("waiting");break;case t.CUED:this.player.emit("loadedmetadata");break}}handleError(e){let t={2:"Invalid video ID",5:"HTML5 player error",100:"Video not found",101:"Video not allowed to be played in embedded players",150:"Video not allowed to be played in embedded players"},i=new Error(t[e.data]||"YouTube player error");this.player.handleError(i)}play(){if(this.isReady&&this.youtube){let e=window.scrollX,t=window.scrollY;this.youtube.playVideo(),window.scrollTo(e,t)}}pause(){this.isReady&&this.youtube&&this.youtube.pauseVideo()}seek(e){this.isReady&&this.youtube&&this.youtube.seekTo(e,!0)}setVolume(e){this.isReady&&this.youtube&&(this.youtube.setVolume(e*100),this.player.state.volume=e)}setMuted(e){this.isReady&&this.youtube&&(e?this.youtube.mute():this.youtube.unMute(),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.youtube&&(this.youtube.setPlaybackRate(e),this.player.state.playbackSpeed=e)}destroy(){this.timeUpdateInterval&&clearInterval(this.timeUpdateInterval),this.youtube&&this.youtube.destroy&&this.youtube.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};export{s as YouTubeRenderer};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Universal, Accessible Video Player
|
|
3
|
+
* (c) 2025 Matthias Peltzer
|
|
4
|
+
* Released under GPL-2.0-or-later License
|
|
5
|
+
*/
|
|
6
|
+
var n=class{constructor(e){this.player=e,this.media=e.element}async init(){this.media.controls=!1,this.media.removeAttribute("controls"),this.attachEvents(),this.media.preload=this.player.options.preload,this.media.load()}attachEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player),this.player.options.pauseOthersOnPlay&&this.pauseOtherPlayers()}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume),this.player.options.onVolumeChange&&this.player.options.onVolumeChange.call(this.player,this.media.volume)}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("progress",()=>{if(this.media.buffered.length>0){let e=this.media.buffered.end(this.media.buffered.length-1);this.player.emit("progress",e)}}),this.media.addEventListener("error",e=>{this.player.handleError(this.media.error)}),this.media.addEventListener("ratechange",()=>{this.player.state.playbackSpeed=this.media.playbackRate,this.player.emit("ratechange",this.media.playbackRate)})}pauseOtherPlayers(){document.querySelectorAll(".vidply-player").forEach(t=>{if(t!==this.player.container){let i=t.querySelector("video, audio");i&&!i.paused&&i.pause()}})}play(){let e=window.scrollX,t=window.scrollY,i=this.media.play();window.scrollTo(e,t),i!==void 0&&i.catch(s=>{if(this.player.log("Play failed:",s,"warn"),this.player.options.autoplay&&!this.player.state.muted){this.player.log("Retrying play with muted audio","info"),this.media.muted=!0;let a=window.scrollX,r=window.scrollY;this.media.play().then(()=>{window.scrollTo(a,r)}).catch(l=>{this.player.handleError(l)})}})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}getQualities(){let e=Array.from(this.media.querySelectorAll("source"));return e.length<=1?[]:e.map((t,i)=>{let s=t.getAttribute("data-quality")||t.getAttribute("label")||"",a=t.getAttribute("data-height")||this.extractHeightFromLabel(s),r=t.getAttribute("data-width")||"";return{index:i,height:a?parseInt(a):0,width:r?parseInt(r):0,src:t.src,type:t.type,name:s||(a?`${a}p`:`Quality ${i+1}`)}}).filter(t=>t.height>0)}extractHeightFromLabel(e){let t=e.match(/(\d+)p/i);return t?parseInt(t[1]):0}switchQuality(e){let t=this.getQualities();if(e<0||e>=t.length){this.player.log("Invalid quality index","warn");return}let i=t[e],s=this.media.currentTime,a=!this.media.paused;if(this.media.currentSrc===i.src){this.player.log("Already at this quality level","info");return}this.player.log(`Switching to quality: ${i.name}`,"info"),this.media.src=i.src;let l=()=>{this.media.removeEventListener("loadedmetadata",l),this.media.currentTime=s,a&&this.media.play().catch(h=>{this.player.log("Failed to resume playback after quality switch","warn")}),this.player.emit("qualitychange",{quality:i.name,index:e})};this.media.addEventListener("loadedmetadata",l),this.media.load()}getCurrentQuality(){let e=this.getQualities(),t=this.media.currentSrc;for(let i=0;i<e.length;i++)if(e[i].src===t)return i;return 0}destroy(){this.media.removeEventListener("loadedmetadata",()=>{}),this.media.removeEventListener("play",()=>{}),this.media.removeEventListener("pause",()=>{})}};export{n as a};
|