myetv-player 1.2.0 → 1.4.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.
Files changed (47) hide show
  1. package/css/myetv-player.css +242 -168
  2. package/css/myetv-player.min.css +1 -1
  3. package/dist/myetv-player.js +638 -203
  4. package/dist/myetv-player.min.js +548 -170
  5. package/package.json +35 -16
  6. package/plugins/twitch/myetv-player-twitch-plugin.js +125 -11
  7. package/plugins/vimeo/myetv-player-vimeo.js +80 -49
  8. package/plugins/youtube/README.md +5 -2
  9. package/plugins/youtube/myetv-player-youtube-plugin.js +766 -6
  10. package/.github/workflows/codeql.yml +0 -100
  11. package/.github/workflows/npm-publish.yml +0 -30
  12. package/SECURITY.md +0 -50
  13. package/build.js +0 -195
  14. package/scss/README.md +0 -161
  15. package/scss/_audio-player.scss +0 -21
  16. package/scss/_base.scss +0 -116
  17. package/scss/_controls.scss +0 -204
  18. package/scss/_loading.scss +0 -111
  19. package/scss/_menus.scss +0 -432
  20. package/scss/_mixins.scss +0 -112
  21. package/scss/_poster.scss +0 -8
  22. package/scss/_progress-bar.scss +0 -319
  23. package/scss/_resolution.scss +0 -68
  24. package/scss/_responsive.scss +0 -1368
  25. package/scss/_themes.scss +0 -30
  26. package/scss/_title-overlay.scss +0 -60
  27. package/scss/_tooltips.scss +0 -7
  28. package/scss/_variables.scss +0 -49
  29. package/scss/_video.scss +0 -221
  30. package/scss/_volume.scss +0 -122
  31. package/scss/_watermark.scss +0 -128
  32. package/scss/myetv-player.scss +0 -51
  33. package/scss/package.json +0 -16
  34. package/src/README.md +0 -560
  35. package/src/chapters.js +0 -521
  36. package/src/controls.js +0 -1242
  37. package/src/core.js +0 -1922
  38. package/src/events.js +0 -537
  39. package/src/fullscreen.js +0 -82
  40. package/src/i18n.js +0 -374
  41. package/src/playlist.js +0 -177
  42. package/src/plugins.js +0 -384
  43. package/src/quality.js +0 -963
  44. package/src/streaming.js +0 -346
  45. package/src/subtitles.js +0 -524
  46. package/src/utils.js +0 -65
  47. package/src/watermark.js +0 -246
@@ -480,6 +480,18 @@ body {
480
480
  -moz-osx-font-smoothing: grayscale;
481
481
  }
482
482
 
483
+ .chapter-name {
484
+ font-size: 13px;
485
+ font-weight: 500;
486
+ color: rgba(255, 255, 255, 0.9);
487
+ margin-top: 6px;
488
+ max-width: 400px;
489
+ overflow: hidden;
490
+ text-overflow: ellipsis;
491
+ white-space: nowrap;
492
+ transition: opacity 0.3s;
493
+ }
494
+
483
495
  /* CONTROLS CONTAINER - IMPROVED RESPONSIVE DESIGN */
484
496
  .controls {
485
497
  position: absolute;
@@ -985,6 +997,125 @@ body {
985
997
  transition: height 0.15s ease;
986
998
  }
987
999
  }
1000
+ /* ===================================
1001
+ CHAPTERS IMPROVEMENTS
1002
+ =================================== */
1003
+ .chapter-segment {
1004
+ box-sizing: border-box;
1005
+ }
1006
+
1007
+ .chapter-marker:hover {
1008
+ background: rgba(0, 0, 0, 0.9) !important;
1009
+ }
1010
+
1011
+ .chapter-tooltip {
1012
+ animation: fadeIn 0.15s ease-in-out;
1013
+ }
1014
+
1015
+ @keyframes fadeIn {
1016
+ from {
1017
+ opacity: 0;
1018
+ transform: translateX(-50%) translateY(-5px);
1019
+ }
1020
+ to {
1021
+ opacity: 1;
1022
+ transform: translateX(-50%) translateY(0);
1023
+ }
1024
+ }
1025
+ .progress-container:hover .chapter-segment {
1026
+ background: rgba(255, 255, 255, 0.4) !important;
1027
+ }
1028
+
1029
+ .chapter-tooltip {
1030
+ animation: fadeIn 0.15s ease-in-out;
1031
+ }
1032
+ .chapter-tooltip .chapter-tooltip-content {
1033
+ display: flex;
1034
+ flex-direction: column;
1035
+ }
1036
+ .chapter-tooltip .chapter-tooltip-image {
1037
+ background-size: cover;
1038
+ background-position: center;
1039
+ background-repeat: no-repeat;
1040
+ border-radius: 3px;
1041
+ }
1042
+ .chapter-tooltip .chapter-tooltip-title {
1043
+ line-height: 1.3;
1044
+ }
1045
+ .chapter-tooltip .chapter-tooltip-time {
1046
+ opacity: 0.8;
1047
+ }
1048
+
1049
+ @keyframes fadeIn {
1050
+ from {
1051
+ opacity: 0;
1052
+ transform: translateX(-50%) translateY(-5px);
1053
+ }
1054
+ to {
1055
+ opacity: 1;
1056
+ transform: translateX(-50%) translateY(0);
1057
+ }
1058
+ }
1059
+ .chapter-tooltip-hover .chapter-tooltip-content {
1060
+ display: flex;
1061
+ flex-direction: column;
1062
+ gap: 6px;
1063
+ }
1064
+ .chapter-tooltip-hover .chapter-tooltip-image {
1065
+ width: 100%;
1066
+ aspect-ratio: 16/9;
1067
+ background-size: cover;
1068
+ background-position: center;
1069
+ background-repeat: no-repeat;
1070
+ border-radius: 3px;
1071
+ max-width: 180px;
1072
+ }
1073
+ .chapter-tooltip-hover .chapter-tooltip-title {
1074
+ font-size: 13px;
1075
+ font-weight: 600;
1076
+ max-width: 180px;
1077
+ overflow: hidden;
1078
+ text-overflow: ellipsis;
1079
+ white-space: nowrap;
1080
+ }
1081
+ .chapter-tooltip-hover .chapter-tooltip-time {
1082
+ font-size: 12px;
1083
+ font-weight: 400;
1084
+ color: rgba(255, 255, 255, 0.8);
1085
+ max-width: 180px;
1086
+ }
1087
+
1088
+ @media (max-width: 1200px) {
1089
+ .chapter-tooltip-hover .chapter-tooltip-image {
1090
+ max-width: 150px;
1091
+ }
1092
+ .chapter-tooltip-hover .chapter-tooltip-title,
1093
+ .chapter-tooltip-hover .chapter-tooltip-time {
1094
+ max-width: 150px;
1095
+ }
1096
+ }
1097
+ @media (max-width: 768px) {
1098
+ .chapter-tooltip-hover .chapter-tooltip-image {
1099
+ max-width: 100px;
1100
+ }
1101
+ .chapter-tooltip-hover .chapter-tooltip-title,
1102
+ .chapter-tooltip-hover .chapter-tooltip-time {
1103
+ max-width: 100px;
1104
+ }
1105
+ }
1106
+ @media (max-width: 480px) {
1107
+ .chapter-tooltip-hover .chapter-tooltip-image {
1108
+ max-width: 80px;
1109
+ }
1110
+ .chapter-tooltip-hover .chapter-tooltip-title {
1111
+ font-size: 11px;
1112
+ max-width: 80px;
1113
+ }
1114
+ .chapter-tooltip-hover .chapter-tooltip-time {
1115
+ font-size: 10px;
1116
+ max-width: 80px;
1117
+ }
1118
+ }
988
1119
  /* VOLUME CONTROLS - IMPROVED RESPONSIVE */
989
1120
  .volume-container {
990
1121
  display: flex;
@@ -1102,12 +1233,21 @@ body {
1102
1233
  }
1103
1234
 
1104
1235
  /* CONTROL MENUS */
1105
- .speed-control,
1106
- .quality-control,
1107
- .subtitles-control {
1236
+ /* show quality menu in the controlbar */
1237
+ .quality-control {
1108
1238
  position: relative;
1109
1239
  }
1110
1240
 
1241
+ /* Hide individual subtitle button - it's now inside settings menu */
1242
+ .subtitles-control {
1243
+ display: none !important;
1244
+ }
1245
+
1246
+ /* Hide individual speed control button - it's now inside settings menu */
1247
+ .speed-control {
1248
+ display: none !important;
1249
+ }
1250
+
1111
1251
  .speed-menu,
1112
1252
  .quality-menu,
1113
1253
  .subtitles-menu {
@@ -1221,10 +1361,12 @@ body {
1221
1361
  color: var(--player-primary-color);
1222
1362
  }
1223
1363
 
1224
- /* SETTINGS DROPDOWN MENU - FOR SMALL SCREENS */
1364
+ /* ========================================
1365
+ SETTINGS DROPDOWN MENU - ALWAYS VISIBLE
1366
+ ======================================== */
1225
1367
  .settings-control {
1226
1368
  position: relative;
1227
- display: none;
1369
+ display: block !important;
1228
1370
  }
1229
1371
 
1230
1372
  .settings-btn {
@@ -1256,11 +1398,7 @@ body {
1256
1398
  background: var(--player-button-active);
1257
1399
  }
1258
1400
 
1259
- .settings-btn .icon::before {
1260
- content: "⚙️";
1261
- font-size: 16px;
1262
- }
1263
-
1401
+ /* SETTINGS MENU CONTAINER */
1264
1402
  .settings-menu {
1265
1403
  position: absolute;
1266
1404
  bottom: 100%;
@@ -1277,15 +1415,44 @@ body {
1277
1415
  border: 1px solid rgba(255, 255, 255, 0.1);
1278
1416
  z-index: 100;
1279
1417
  box-shadow: var(--player-shadow-menu);
1418
+ max-height: 200px;
1419
+ overflow-y: auto;
1420
+ overflow-x: hidden;
1421
+ /* Custom scrollbar styling - Firefox */
1422
+ scrollbar-width: thin;
1423
+ scrollbar-color: var(--player-primary-color) rgba(255, 255, 255, 0.05);
1280
1424
  }
1281
1425
 
1282
- /* ⚠️ Settings menu opens ONLY with .active (CLICK) */
1426
+ /* Settings menu opens ONLY with .active (CLICK) */
1283
1427
  .settings-menu.active {
1284
1428
  opacity: 1 !important;
1285
1429
  visibility: visible !important;
1286
1430
  pointer-events: all !important;
1287
1431
  }
1288
1432
 
1433
+ /* Custom scrollbar styling - Webkit browsers (Chrome, Safari, Edge) */
1434
+ .settings-menu::-webkit-scrollbar {
1435
+ width: 8px;
1436
+ }
1437
+
1438
+ .settings-menu::-webkit-scrollbar-track {
1439
+ background: rgba(255, 255, 255, 0.05);
1440
+ border-radius: 10px;
1441
+ }
1442
+
1443
+ .settings-menu::-webkit-scrollbar-thumb {
1444
+ background: var(--player-primary-color);
1445
+ border-radius: 10px;
1446
+ border: 2px solid transparent;
1447
+ background-clip: content-box;
1448
+ }
1449
+
1450
+ .settings-menu::-webkit-scrollbar-thumb:hover {
1451
+ background: var(--player-primary-hover, var(--player-primary-color));
1452
+ background-clip: content-box;
1453
+ }
1454
+
1455
+ /* SETTINGS OPTIONS */
1289
1456
  .settings-option {
1290
1457
  padding: 8px 16px;
1291
1458
  color: var(--player-text-color);
@@ -1321,196 +1488,115 @@ body {
1321
1488
  opacity: 0.8;
1322
1489
  }
1323
1490
 
1324
- /* Submenu styling - HIDDEN BY DEFAULT */
1325
- .settings-submenu,
1326
- .quality-submenu,
1327
- .speed-submenu {
1328
- position: absolute;
1329
- bottom: 0;
1330
- right: 100%;
1331
- background: var(--player-bg-menu);
1332
- backdrop-filter: blur(10px);
1333
- border-radius: 8px;
1334
- padding: 8px 0;
1335
- margin-right: 5px;
1336
- opacity: 0;
1337
- visibility: hidden;
1338
- transition: all var(--player-transition-fast);
1339
- min-width: 150px;
1340
- max-width: 180px;
1341
- max-height: 250px;
1342
- overflow-y: auto;
1343
- overflow-x: hidden;
1344
- white-space: nowrap;
1345
- border: 1px solid rgba(255, 255, 255, 0.1);
1346
- z-index: 101;
1347
- box-shadow: var(--player-shadow-menu);
1348
- pointer-events: none;
1491
+ /* ========================================
1492
+ EXPANDABLE WRAPPER - For Speed, Subtitles
1493
+ ======================================== */
1494
+ .settings-expandable-wrapper {
1495
+ position: relative;
1496
+ display: block;
1349
1497
  }
1350
1498
 
1351
- /* ⚠️ SOLUTION: Submenus open on HOVER (easier and more intuitive) */
1352
- .settings-option:hover .settings-submenu,
1353
- .settings-option:hover .quality-submenu,
1354
- .settings-option:hover .speed-submenu {
1355
- opacity: 1 !important;
1356
- visibility: visible !important;
1357
- transform: translateX(-2px) !important;
1358
- pointer-events: all !important;
1499
+ .settings-option.expandable-trigger {
1500
+ display: flex;
1501
+ justify-content: space-between;
1502
+ align-items: center;
1503
+ cursor: pointer;
1504
+ }
1505
+ .settings-option.expandable-trigger .settings-option-label {
1506
+ font-size: 14px;
1507
+ }
1508
+ .settings-option.expandable-trigger .expand-arrow {
1509
+ font-size: 12px;
1510
+ transition: transform 0.2s ease;
1511
+ margin-left: 8px;
1359
1512
  }
1360
1513
 
1361
- .settings-submenu .settings-suboption,
1362
- .quality-submenu .quality-option,
1363
- .speed-submenu .speed-option {
1364
- padding: 8px 10px !important;
1365
- font-size: 12px !important;
1366
- white-space: nowrap !important;
1367
- overflow: hidden !important;
1368
- text-overflow: ellipsis !important;
1514
+ .settings-option.expandable-trigger:hover {
1515
+ background: rgba(255, 255, 255, 0.1);
1369
1516
  }
1370
1517
 
1518
+ /* EXPANDABLE CONTENT - THE SUBMENU - HIDDEN BY DEFAULT */
1519
+ .settings-expandable-content {
1520
+ padding-left: 15px;
1521
+ margin-top: 4px;
1522
+ display: none;
1523
+ background: rgba(0, 0, 0, 0.3);
1524
+ border-left: 3px solid var(--player-primary-color);
1525
+ }
1526
+
1527
+ .settings-expandable-content.active {
1528
+ display: block;
1529
+ }
1530
+
1531
+ /* SUBOPTIONS (velocità, tracce sottotitoli) */
1371
1532
  .settings-suboption {
1372
- padding: 8px 16px;
1373
- color: var(--player-text-color);
1533
+ padding: 8px 12px;
1374
1534
  cursor: pointer;
1375
- transition: all var(--player-transition-fast);
1535
+ color: white;
1376
1536
  font-size: 13px;
1537
+ white-space: normal;
1538
+ word-wrap: break-word;
1539
+ opacity: 0.8;
1540
+ transition: opacity 0.2s;
1377
1541
  display: flex;
1378
1542
  align-items: center;
1379
1543
  justify-content: space-between;
1380
1544
  }
1381
1545
 
1382
1546
  .settings-suboption:hover {
1547
+ opacity: 1;
1383
1548
  background: rgba(255, 255, 255, 0.1);
1384
- color: var(--player-primary-color);
1385
1549
  }
1386
1550
 
1387
1551
  .settings-suboption.active {
1552
+ opacity: 1;
1553
+ font-weight: bold;
1388
1554
  color: var(--player-primary-color);
1389
- font-weight: 600;
1390
- background: rgba(255, 255, 255, 0.05);
1391
1555
  }
1392
1556
 
1393
1557
  .settings-suboption.active::after {
1394
1558
  content: "✓";
1395
1559
  font-size: 12px;
1396
- color: var(--player-primary-color);
1397
1560
  }
1398
1561
 
1399
- /* Visual indicator for options with submenus */
1400
- .settings-option:has(.settings-submenu, .quality-submenu, .speed-submenu)::after {
1401
- content: "▶";
1402
- font-size: 10px;
1403
- color: var(--player-text-secondary);
1404
- margin-left: 8px;
1405
- }
1406
-
1407
- .settings-option:hover::after {
1408
- color: var(--player-primary-color);
1409
- }
1410
-
1411
- /* RESPONSIVE - PROGRESSIVE REDUCTION */
1562
+ /* ========================================
1563
+ RESPONSIVE ADJUSTMENTS
1564
+ ======================================== */
1412
1565
  @media (max-width: 768px) {
1413
1566
  .settings-menu > .settings-option {
1414
- font-size: 12px !important;
1567
+ font-size: 13px;
1415
1568
  }
1416
- .settings-submenu,
1417
- .quality-submenu,
1418
- .speed-submenu {
1419
- max-width: min(140px, 100vw - 180px) !important;
1420
- }
1421
- .settings-submenu .settings-suboption,
1422
- .quality-submenu .quality-option,
1423
- .speed-submenu .speed-option {
1424
- padding: 7px 8px !important;
1425
- font-size: 11px !important;
1569
+ .settings-suboption {
1570
+ font-size: 12px;
1571
+ padding: 7px 10px;
1426
1572
  }
1427
1573
  }
1428
1574
  @media (max-width: 600px) {
1429
1575
  .settings-menu > .settings-option {
1430
- font-size: 11px !important;
1431
- }
1432
- .settings-submenu,
1433
- .quality-submenu,
1434
- .speed-submenu {
1435
- max-width: min(120px, 100vw - 160px) !important;
1576
+ font-size: 12px;
1436
1577
  }
1437
- .settings-submenu .settings-suboption,
1438
- .quality-submenu .quality-option,
1439
- .speed-submenu .speed-option {
1440
- padding: 6px 7px !important;
1441
- font-size: 10px !important;
1578
+ .settings-suboption {
1579
+ font-size: 11px;
1580
+ padding: 6px 8px;
1442
1581
  }
1443
1582
  }
1444
1583
  @media (max-width: 450px) {
1445
1584
  .settings-menu > .settings-option {
1446
- font-size: 10px !important;
1447
- }
1448
- .settings-submenu,
1449
- .quality-submenu,
1450
- .speed-submenu {
1451
- max-width: min(100px, 100vw - 140px) !important;
1585
+ font-size: 11px;
1452
1586
  }
1453
- .settings-submenu .settings-suboption,
1454
- .quality-submenu .quality-option,
1455
- .speed-submenu .speed-option {
1456
- padding: 5px 6px !important;
1457
- font-size: 9px !important;
1587
+ .settings-suboption {
1588
+ font-size: 10px;
1589
+ padding: 5px 6px;
1458
1590
  }
1459
1591
  }
1460
1592
  @media (max-width: 350px) {
1461
1593
  .settings-control {
1462
1594
  display: block !important;
1463
1595
  }
1464
- .pip-btn,
1465
- .speed-control,
1466
- .subtitles-control {
1596
+ .pip-btn {
1467
1597
  display: none !important;
1468
1598
  }
1469
1599
  }
1470
- .settings-expandable-wrapper {
1471
- position: relative;
1472
- display: block;
1473
- }
1474
-
1475
- .settings-option.expandable-trigger {
1476
- display: flex;
1477
- justify-content: space-between;
1478
- align-items: center;
1479
- cursor: pointer;
1480
- font-size: 10px !important;
1481
- }
1482
- .settings-option.expandable-trigger .settings-option-label {
1483
- font-size: 10px !important;
1484
- }
1485
- .settings-option.expandable-trigger .expand-arrow {
1486
- font-size: 8px;
1487
- transition: transform 0.2s ease;
1488
- margin-left: 8px;
1489
- }
1490
-
1491
- .settings-expandable-content {
1492
- padding-left: 15px;
1493
- margin-top: 4px;
1494
- }
1495
- .settings-expandable-content .settings-suboption {
1496
- padding: 6px 12px;
1497
- cursor: pointer;
1498
- color: white;
1499
- font-size: 10px;
1500
- white-space: normal;
1501
- word-wrap: break-word;
1502
- opacity: 0.8;
1503
- transition: opacity 0.2s;
1504
- }
1505
- .settings-expandable-content .settings-suboption.active {
1506
- opacity: 1;
1507
- font-weight: bold;
1508
- }
1509
- .settings-expandable-content .settings-suboption:hover {
1510
- opacity: 1;
1511
- background: rgba(255, 255, 255, 0.1);
1512
- }
1513
-
1514
1600
  .audio-player {
1515
1601
  width: 320px;
1516
1602
  height: 80px;
@@ -1766,19 +1852,8 @@ body {
1766
1852
  margin-right: 5px;
1767
1853
  }
1768
1854
  }
1769
- /* SCHERMI MOLTO PICCOLI - ATTIVA MENU SETTINGS DROPDOWN */
1855
+ /* MENU SETTINGS DROPDOWN */
1770
1856
  @media (max-width: 350px) {
1771
- /* Mostra il menu Settings solo su schermi molto piccoli */
1772
- .settings-control {
1773
- display: block !important;
1774
- }
1775
- /* Nascondi i controlli individuali e spostali nel menu */
1776
- .pip-btn,
1777
- .speed-control,
1778
- .subtitles-control {
1779
- display: none !important;
1780
- }
1781
- /* Riduci ulteriormente gli spazi */
1782
1857
  .controls-left,
1783
1858
  .controls-right {
1784
1859
  gap: 4px;
@@ -1805,9 +1880,9 @@ body {
1805
1880
  margin-right: 3px;
1806
1881
  }
1807
1882
  .volume-slider {
1808
- width: 30px; /* Volume slider ancora più piccolo */
1883
+ width: 30px;
1809
1884
  }
1810
- /* Riduci il menu settings per schermi ultra-piccoli */
1885
+ /* screen small */
1811
1886
  .settings-menu {
1812
1887
  min-width: 160px;
1813
1888
  font-size: 12px;
@@ -1854,7 +1929,6 @@ body {
1854
1929
  .volume-slider {
1855
1930
  width: 25px;
1856
1931
  }
1857
- /* Menu settings ultra-compatto */
1858
1932
  .settings-menu {
1859
1933
  min-width: 140px;
1860
1934
  font-size: 11px;
@@ -1871,7 +1945,7 @@ body {
1871
1945
  font-size: 10px;
1872
1946
  }
1873
1947
  }
1874
- /* OVERFLOW HANDLING - CRITICAL FIX */
1948
+ /* OVERFLOW HANDLING */
1875
1949
  @media (max-width: 600px) {
1876
1950
  .controls-main {
1877
1951
  /* Allow horizontal scrolling if absolutely necessary */