unified-video-framework 1.4.99 → 1.4.101
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unified-video-framework",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.101",
|
|
4
4
|
"description": "Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more",
|
|
5
5
|
"main": "packages/core/dist/index.js",
|
|
6
6
|
"types": "packages/core/dist/index.d.ts",
|
|
@@ -124,6 +124,7 @@ export declare class WebPlayer extends BasePlayer {
|
|
|
124
124
|
private setupFullscreenListeners;
|
|
125
125
|
private updateTimeTooltip;
|
|
126
126
|
private hideTimeTooltip;
|
|
127
|
+
private updateProgressTooltip;
|
|
127
128
|
private showShortcutIndicator;
|
|
128
129
|
setSettingsScrollbarStyle(mode: 'default' | 'compact' | 'overlay'): void;
|
|
129
130
|
setSettingsScrollbarConfig(options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAUjD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,GAAG,EAAE,GAAG,CAAC;QACT,MAAM,EAAE,GAAG,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;KACxD;CACF;AAED,qBAAa,SAAU,SAAQ,UAAU;IACvC,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAChD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,yBAAyB,CAAa;IAC9C,OAAO,CAAC,iBAAiB,CAAa;IAGtC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,KAAK,CAAa;IAG1B,OAAO,CAAC,iBAAiB,CAAa;IAGtC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,mBAAmB,CAAO;IAGlC,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,mBAAmB,CAAa;IAGxC,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,SAAS;cAOD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA+I5C,OAAO,CAAC,wBAAwB;IAsHhC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,oBAAoB;IAYtB,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDtC,OAAO,CAAC,gBAAgB;YAcV,OAAO;IAyDrB,OAAO,CAAC,cAAc;YAyBR,QAAQ;IA4DtB,OAAO,CAAC,iBAAiB;YAQX,UAAU;IAMxB,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,gBAAgB;IAOlB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C3B,KAAK,IAAI,IAAI;IAkBN,YAAY,IAAI,IAAI;IAO3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwBxB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9B,IAAI,IAAI,IAAI;IAMZ,MAAM,IAAI,IAAI;IAOd,cAAc,IAAI,MAAM;IAOxB,YAAY,IAAI,GAAG,EAAE;IAIrB,iBAAiB,IAAI,GAAG;IAIxB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAkBhC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAwDhC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC/B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAetC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3C,WAAW,IAAI,IAAI;IAUnB,iBAAiB,IAAI,IAAI;IAUzB,OAAO,CAAC,cAAc;YAmBR,0BAA0B;IAwCxC,OAAO,CAAC,eAAe;IAwCvB,uBAAuB,IAAI,IAAI;IA4D/B,OAAO,CAAC,4BAA4B;YAoEtB,gCAAgC;IAgBxC,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;IAkGtD,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAmC3C,4BAA4B,IAAI,IAAI;IA4D9B,gCAAgC,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IA8DtE,0BAA0B,IAAI,IAAI;IAqK5B,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IA4C3C,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAc9C,SAAS,CAAC,eAAe,IAAI,IAAI;IASjC,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1543,14 +1543,24 @@ export class WebPlayer extends BasePlayer {
|
|
|
1543
1543
|
to { transform: rotate(360deg); }
|
|
1544
1544
|
}
|
|
1545
1545
|
|
|
1546
|
+
/* Center Play Button Container */
|
|
1547
|
+
.uvf-center-play-container {
|
|
1548
|
+
position: absolute;
|
|
1549
|
+
top: 0;
|
|
1550
|
+
left: 0;
|
|
1551
|
+
width: 100%;
|
|
1552
|
+
height: 100%;
|
|
1553
|
+
display: flex;
|
|
1554
|
+
align-items: center;
|
|
1555
|
+
justify-content: center;
|
|
1556
|
+
pointer-events: none;
|
|
1557
|
+
z-index: 8;
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1546
1560
|
/* Center Play Button */
|
|
1547
1561
|
.uvf-center-play-btn {
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
left: 50%;
|
|
1551
|
-
transform: translate(-50%, -50%);
|
|
1552
|
-
width: clamp(64px, 14vw, 96px);
|
|
1553
|
-
height: clamp(64px, 14vw, 96px);
|
|
1562
|
+
width: clamp(50px, 14vw, 96px);
|
|
1563
|
+
height: clamp(50px, 14vw, 96px);
|
|
1554
1564
|
background: linear-gradient(135deg, var(--uvf-accent-1), var(--uvf-accent-2));
|
|
1555
1565
|
border: 0;
|
|
1556
1566
|
border-radius: 50%;
|
|
@@ -1558,15 +1568,15 @@ export class WebPlayer extends BasePlayer {
|
|
|
1558
1568
|
align-items: center;
|
|
1559
1569
|
justify-content: center;
|
|
1560
1570
|
cursor: pointer;
|
|
1571
|
+
pointer-events: auto;
|
|
1561
1572
|
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1562
|
-
z-index: 8;
|
|
1563
1573
|
opacity: 1;
|
|
1564
1574
|
visibility: visible;
|
|
1565
1575
|
box-shadow: 0 8px 28px var(--uvf-accent-1-20);
|
|
1566
1576
|
}
|
|
1567
1577
|
|
|
1568
1578
|
.uvf-center-play-btn:hover {
|
|
1569
|
-
transform:
|
|
1579
|
+
transform: scale(1.06);
|
|
1570
1580
|
filter: saturate(1.08) brightness(1.05);
|
|
1571
1581
|
box-shadow: 0 12px 36px var(--uvf-accent-1-20);
|
|
1572
1582
|
}
|
|
@@ -1574,7 +1584,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
1574
1584
|
.uvf-center-play-btn.hidden {
|
|
1575
1585
|
opacity: 0 !important;
|
|
1576
1586
|
visibility: hidden !important;
|
|
1577
|
-
transform:
|
|
1587
|
+
transform: scale(0.8) !important;
|
|
1578
1588
|
pointer-events: none !important;
|
|
1579
1589
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1580
1590
|
}
|
|
@@ -1640,22 +1650,24 @@ export class WebPlayer extends BasePlayer {
|
|
|
1640
1650
|
|
|
1641
1651
|
/* Progress Bar */
|
|
1642
1652
|
.uvf-progress-section {
|
|
1653
|
+
width: 100%;
|
|
1643
1654
|
margin-bottom: 15px;
|
|
1644
1655
|
}
|
|
1645
1656
|
|
|
1646
1657
|
.uvf-progress-bar-wrapper {
|
|
1647
|
-
position: relative;
|
|
1648
1658
|
width: 100%;
|
|
1649
|
-
height:
|
|
1650
|
-
|
|
1651
|
-
|
|
1659
|
+
height: 5px;
|
|
1660
|
+
position: relative;
|
|
1661
|
+
background: rgba(255,255,255,0.15);
|
|
1662
|
+
border-radius: 2px;
|
|
1652
1663
|
cursor: pointer;
|
|
1664
|
+
padding: 12px 0;
|
|
1653
1665
|
overflow: visible;
|
|
1654
|
-
transition:
|
|
1666
|
+
transition: height 0.2s ease;
|
|
1655
1667
|
}
|
|
1656
1668
|
|
|
1657
1669
|
.uvf-progress-bar-wrapper:hover {
|
|
1658
|
-
|
|
1670
|
+
height: 7px;
|
|
1659
1671
|
}
|
|
1660
1672
|
|
|
1661
1673
|
.uvf-progress-buffered {
|
|
@@ -1663,39 +1675,106 @@ export class WebPlayer extends BasePlayer {
|
|
|
1663
1675
|
top: 0;
|
|
1664
1676
|
left: 0;
|
|
1665
1677
|
height: 100%;
|
|
1666
|
-
background: rgba(255,255,255,0.
|
|
1667
|
-
border-radius:
|
|
1678
|
+
background: rgba(255,255,255,0.3);
|
|
1679
|
+
border-radius: 2px;
|
|
1668
1680
|
pointer-events: none;
|
|
1681
|
+
transition: width 0.2s ease;
|
|
1682
|
+
z-index: 1;
|
|
1669
1683
|
}
|
|
1670
1684
|
|
|
1671
1685
|
.uvf-progress-filled {
|
|
1672
|
-
position:
|
|
1673
|
-
top: 0;
|
|
1674
|
-
left: 0;
|
|
1686
|
+
position: relative;
|
|
1675
1687
|
height: 100%;
|
|
1676
|
-
background: linear-gradient(90deg,
|
|
1677
|
-
border-radius:
|
|
1688
|
+
background: linear-gradient(90deg, #ff5722, #ff7043);
|
|
1689
|
+
border-radius: 2px;
|
|
1678
1690
|
pointer-events: none;
|
|
1679
|
-
|
|
1691
|
+
transition: width 0.2s ease;
|
|
1692
|
+
z-index: 2;
|
|
1680
1693
|
}
|
|
1681
1694
|
|
|
1682
1695
|
.uvf-progress-handle {
|
|
1683
1696
|
position: absolute;
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
background: #fff;
|
|
1697
|
+
width: 14px;
|
|
1698
|
+
height: 14px;
|
|
1699
|
+
background: #ffffff;
|
|
1700
|
+
border: 2px solid #ff5722;
|
|
1689
1701
|
border-radius: 50%;
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1702
|
+
top: 50%;
|
|
1703
|
+
left: 100%;
|
|
1704
|
+
transform: translate(-50%, -50%) scale(0.8);
|
|
1705
|
+
opacity: 0;
|
|
1706
|
+
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1707
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4);
|
|
1708
|
+
cursor: grab;
|
|
1709
|
+
z-index: 3;
|
|
1693
1710
|
}
|
|
1694
1711
|
|
|
1695
1712
|
.uvf-progress-bar-wrapper:hover .uvf-progress-handle {
|
|
1713
|
+
opacity: 1;
|
|
1696
1714
|
transform: translate(-50%, -50%) scale(1);
|
|
1697
1715
|
}
|
|
1698
1716
|
|
|
1717
|
+
.uvf-progress-handle:hover {
|
|
1718
|
+
transform: translate(-50%, -50%) scale(1.2);
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
.uvf-progress-handle:active,
|
|
1722
|
+
.uvf-progress-handle.dragging {
|
|
1723
|
+
cursor: grabbing;
|
|
1724
|
+
transform: translate(-50%, -50%) scale(1.4);
|
|
1725
|
+
box-shadow: 0 4px 16px rgba(255, 87, 34, 0.6);
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1728
|
+
.uvf-time-tooltip {
|
|
1729
|
+
position: absolute;
|
|
1730
|
+
bottom: 22px;
|
|
1731
|
+
left: 50%;
|
|
1732
|
+
transform: translateX(-50%);
|
|
1733
|
+
background: rgba(0, 0, 0, 0.92);
|
|
1734
|
+
color: #ffffff;
|
|
1735
|
+
padding: 6px 12px;
|
|
1736
|
+
border-radius: 6px;
|
|
1737
|
+
font-size: 13px;
|
|
1738
|
+
font-weight: 500;
|
|
1739
|
+
white-space: nowrap;
|
|
1740
|
+
opacity: 0;
|
|
1741
|
+
transition: opacity 0.2s ease;
|
|
1742
|
+
pointer-events: none;
|
|
1743
|
+
z-index: 4;
|
|
1744
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
1745
|
+
backdrop-filter: blur(10px);
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1748
|
+
.uvf-time-tooltip::after {
|
|
1749
|
+
content: '';
|
|
1750
|
+
position: absolute;
|
|
1751
|
+
bottom: -5px;
|
|
1752
|
+
left: 50%;
|
|
1753
|
+
transform: translateX(-50%);
|
|
1754
|
+
width: 0;
|
|
1755
|
+
height: 0;
|
|
1756
|
+
border-left: 6px solid transparent;
|
|
1757
|
+
border-right: 6px solid transparent;
|
|
1758
|
+
border-top: 6px solid rgba(0, 0, 0, 0.92);
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
.uvf-progress-bar-wrapper:hover .uvf-time-tooltip {
|
|
1762
|
+
opacity: 1;
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
/* Mobile responsive handle sizing */
|
|
1766
|
+
@media (max-width: 768px) {
|
|
1767
|
+
.uvf-progress-handle {
|
|
1768
|
+
width: 18px;
|
|
1769
|
+
height: 18px;
|
|
1770
|
+
opacity: 0.8; /* Slightly visible always on mobile */
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1773
|
+
.uvf-progress-bar-wrapper:hover .uvf-progress-handle,
|
|
1774
|
+
.uvf-progress-handle:active {
|
|
1775
|
+
opacity: 1;
|
|
1776
|
+
}
|
|
1777
|
+
}
|
|
1699
1778
|
/* Controls Row */
|
|
1700
1779
|
.uvf-controls-row {
|
|
1701
1780
|
display: flex;
|
|
@@ -2675,7 +2754,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
2675
2754
|
}
|
|
2676
2755
|
|
|
2677
2756
|
.uvf-center-play-btn:hover {
|
|
2678
|
-
transform:
|
|
2757
|
+
transform: scale(1.06);
|
|
2679
2758
|
filter: saturate(1.08) brightness(1.05);
|
|
2680
2759
|
box-shadow: 0 14px 36px var(--uvf-accent-1-20);
|
|
2681
2760
|
}
|
|
@@ -2974,7 +3053,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
2974
3053
|
}
|
|
2975
3054
|
|
|
2976
3055
|
.uvf-center-play-btn:hover {
|
|
2977
|
-
transform:
|
|
3056
|
+
transform: scale(1.06);
|
|
2978
3057
|
filter: saturate(1.08) brightness(1.05);
|
|
2979
3058
|
box-shadow: 0 12px 32px var(--uvf-accent-1-20);
|
|
2980
3059
|
}
|
|
@@ -3146,7 +3225,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
3146
3225
|
}
|
|
3147
3226
|
|
|
3148
3227
|
.uvf-center-play-btn:hover {
|
|
3149
|
-
transform:
|
|
3228
|
+
transform: scale(1.06);
|
|
3150
3229
|
filter: saturate(1.08) brightness(1.05);
|
|
3151
3230
|
box-shadow: 0 12px 36px var(--uvf-accent-1-20);
|
|
3152
3231
|
}
|
|
@@ -3242,15 +3321,15 @@ export class WebPlayer extends BasePlayer {
|
|
|
3242
3321
|
}
|
|
3243
3322
|
|
|
3244
3323
|
.uvf-center-play-btn {
|
|
3245
|
-
width: clamp(90px, 14vw,
|
|
3246
|
-
height: clamp(90px, 14vw,
|
|
3324
|
+
width: clamp(90px, 14vw, 60px);
|
|
3325
|
+
height: clamp(90px, 14vw, 60px);
|
|
3247
3326
|
background: linear-gradient(135deg, var(--uvf-accent-1), var(--uvf-accent-2));
|
|
3248
3327
|
border: 0;
|
|
3249
3328
|
box-shadow: 0 10px 32px var(--uvf-accent-1-20);
|
|
3250
3329
|
}
|
|
3251
3330
|
|
|
3252
3331
|
.uvf-center-play-btn:hover {
|
|
3253
|
-
transform:
|
|
3332
|
+
transform: scale(1.06);
|
|
3254
3333
|
filter: saturate(1.08) brightness(1.05);
|
|
3255
3334
|
box-shadow: 0 16px 40px var(--uvf-accent-1-20);
|
|
3256
3335
|
}
|
|
@@ -3549,11 +3628,14 @@ export class WebPlayer extends BasePlayer {
|
|
|
3549
3628
|
loadingContainer.id = 'uvf-loading';
|
|
3550
3629
|
loadingContainer.innerHTML = '<div class="uvf-loading-spinner"></div>';
|
|
3551
3630
|
container.appendChild(loadingContainer);
|
|
3631
|
+
const centerPlayContainer = document.createElement('div');
|
|
3632
|
+
centerPlayContainer.className = 'uvf-center-play-container';
|
|
3552
3633
|
const centerPlayBtn = document.createElement('div');
|
|
3553
3634
|
centerPlayBtn.className = 'uvf-center-play-btn uvf-pulse';
|
|
3554
3635
|
centerPlayBtn.id = 'uvf-center-play';
|
|
3555
3636
|
centerPlayBtn.innerHTML = '<svg viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg>';
|
|
3556
|
-
|
|
3637
|
+
centerPlayContainer.appendChild(centerPlayBtn);
|
|
3638
|
+
container.appendChild(centerPlayContainer);
|
|
3557
3639
|
const shortcutIndicator = document.createElement('div');
|
|
3558
3640
|
shortcutIndicator.className = 'uvf-shortcut-indicator';
|
|
3559
3641
|
shortcutIndicator.id = 'uvf-shortcut-indicator';
|
|
@@ -3568,8 +3650,15 @@ export class WebPlayer extends BasePlayer {
|
|
|
3568
3650
|
progressBar.id = 'uvf-progress-bar';
|
|
3569
3651
|
progressBar.innerHTML = `
|
|
3570
3652
|
<div class="uvf-progress-buffered" id="uvf-progress-buffered"></div>
|
|
3571
|
-
<div class="uvf-progress-filled" id="uvf-progress-filled"
|
|
3572
|
-
|
|
3653
|
+
<div class="uvf-progress-filled" id="uvf-progress-filled">
|
|
3654
|
+
<div class="uvf-progress-handle" id="uvf-progress-handle"
|
|
3655
|
+
role="slider"
|
|
3656
|
+
tabindex="0"
|
|
3657
|
+
aria-label="Seek"
|
|
3658
|
+
aria-valuemin="0"
|
|
3659
|
+
aria-valuemax="100"
|
|
3660
|
+
aria-valuenow="0"></div>
|
|
3661
|
+
</div>
|
|
3573
3662
|
<div class="uvf-time-tooltip" id="uvf-time-tooltip">00:00</div>
|
|
3574
3663
|
`;
|
|
3575
3664
|
progressSection.appendChild(progressBar);
|
|
@@ -3784,12 +3873,58 @@ export class WebPlayer extends BasePlayer {
|
|
|
3784
3873
|
e.stopPropagation();
|
|
3785
3874
|
this.handleVolumeChange(e);
|
|
3786
3875
|
});
|
|
3876
|
+
const progressHandle = document.getElementById('uvf-progress-handle');
|
|
3877
|
+
const timeTooltip = document.getElementById('uvf-time-tooltip');
|
|
3878
|
+
progressBar?.addEventListener('click', (e) => {
|
|
3879
|
+
if (!this.isDragging) {
|
|
3880
|
+
this.handleProgressChange(e);
|
|
3881
|
+
}
|
|
3882
|
+
});
|
|
3883
|
+
progressHandle?.addEventListener('mousedown', (e) => {
|
|
3884
|
+
e.stopPropagation();
|
|
3885
|
+
this.isDragging = true;
|
|
3886
|
+
progressHandle.classList.add('dragging');
|
|
3887
|
+
});
|
|
3888
|
+
progressHandle?.addEventListener('keydown', (e) => {
|
|
3889
|
+
if (!this.video)
|
|
3890
|
+
return;
|
|
3891
|
+
const step = 5;
|
|
3892
|
+
let handled = false;
|
|
3893
|
+
switch (e.key) {
|
|
3894
|
+
case 'ArrowLeft':
|
|
3895
|
+
case 'ArrowDown':
|
|
3896
|
+
this.seek(Math.max(0, this.video.currentTime - step));
|
|
3897
|
+
handled = true;
|
|
3898
|
+
break;
|
|
3899
|
+
case 'ArrowRight':
|
|
3900
|
+
case 'ArrowUp':
|
|
3901
|
+
this.seek(Math.min(this.video.duration, this.video.currentTime + step));
|
|
3902
|
+
handled = true;
|
|
3903
|
+
break;
|
|
3904
|
+
}
|
|
3905
|
+
if (handled) {
|
|
3906
|
+
e.preventDefault();
|
|
3907
|
+
e.stopPropagation();
|
|
3908
|
+
}
|
|
3909
|
+
});
|
|
3910
|
+
progressBar?.addEventListener('mousedown', (e) => {
|
|
3911
|
+
if (e.target === progressHandle)
|
|
3912
|
+
return;
|
|
3913
|
+
this.isDragging = true;
|
|
3914
|
+
this.handleProgressChange(e);
|
|
3915
|
+
});
|
|
3916
|
+
progressBar?.addEventListener('mousemove', (e) => {
|
|
3917
|
+
if (!this.isDragging) {
|
|
3918
|
+
this.updateTimeTooltip(e);
|
|
3919
|
+
}
|
|
3920
|
+
});
|
|
3787
3921
|
document.addEventListener('mousemove', (e) => {
|
|
3788
3922
|
if (this.isVolumeSliding) {
|
|
3789
3923
|
this.handleVolumeChange(e);
|
|
3790
3924
|
}
|
|
3791
3925
|
if (this.isDragging && progressBar) {
|
|
3792
3926
|
this.handleProgressChange(e);
|
|
3927
|
+
this.updateProgressTooltip(e);
|
|
3793
3928
|
}
|
|
3794
3929
|
});
|
|
3795
3930
|
document.addEventListener('mouseup', () => {
|
|
@@ -3801,18 +3936,20 @@ export class WebPlayer extends BasePlayer {
|
|
|
3801
3936
|
}
|
|
3802
3937
|
}, 2000);
|
|
3803
3938
|
}
|
|
3804
|
-
this.isDragging
|
|
3939
|
+
if (this.isDragging) {
|
|
3940
|
+
this.isDragging = false;
|
|
3941
|
+
progressHandle?.classList.remove('dragging');
|
|
3942
|
+
}
|
|
3805
3943
|
});
|
|
3806
|
-
progressBar?.addEventListener('click', (e) => this.handleProgressChange(e));
|
|
3807
|
-
progressBar?.addEventListener('mousedown', () => this.isDragging = true);
|
|
3808
3944
|
this.video.addEventListener('timeupdate', () => {
|
|
3809
3945
|
const progressFilled = document.getElementById('uvf-progress-filled');
|
|
3810
3946
|
const progressHandle = document.getElementById('uvf-progress-handle');
|
|
3811
|
-
|
|
3812
|
-
if (this.video && progressFilled && progressHandle) {
|
|
3947
|
+
if (this.video && progressFilled) {
|
|
3813
3948
|
const percent = (this.video.currentTime / this.video.duration) * 100;
|
|
3814
3949
|
progressFilled.style.width = percent + '%';
|
|
3815
|
-
progressHandle
|
|
3950
|
+
if (progressHandle) {
|
|
3951
|
+
progressHandle.setAttribute('aria-valuenow', percent.toString());
|
|
3952
|
+
}
|
|
3816
3953
|
}
|
|
3817
3954
|
this.updateTimeDisplay();
|
|
3818
3955
|
});
|
|
@@ -3913,8 +4050,6 @@ export class WebPlayer extends BasePlayer {
|
|
|
3913
4050
|
this.scheduleHideControls();
|
|
3914
4051
|
}
|
|
3915
4052
|
});
|
|
3916
|
-
progressBar?.addEventListener('mousemove', (e) => this.updateTimeTooltip(e));
|
|
3917
|
-
progressBar?.addEventListener('mouseleave', () => this.hideTimeTooltip());
|
|
3918
4053
|
const settingsMenu = document.getElementById('uvf-settings-menu');
|
|
3919
4054
|
settingsBtn?.addEventListener('click', (e) => {
|
|
3920
4055
|
e.stopPropagation();
|
|
@@ -4452,6 +4587,19 @@ export class WebPlayer extends BasePlayer {
|
|
|
4452
4587
|
timeTooltip.style.opacity = '0';
|
|
4453
4588
|
}
|
|
4454
4589
|
}
|
|
4590
|
+
updateProgressTooltip(e) {
|
|
4591
|
+
const progressBar = document.getElementById('uvf-progress-bar');
|
|
4592
|
+
const timeTooltip = document.getElementById('uvf-time-tooltip');
|
|
4593
|
+
if (!progressBar || !timeTooltip || !this.video)
|
|
4594
|
+
return;
|
|
4595
|
+
const rect = progressBar.getBoundingClientRect();
|
|
4596
|
+
const position = Math.max(0, Math.min(e.clientX - rect.left, rect.width));
|
|
4597
|
+
const percent = (position / rect.width) * 100;
|
|
4598
|
+
const time = (percent / 100) * this.video.duration;
|
|
4599
|
+
timeTooltip.textContent = this.formatTime(time);
|
|
4600
|
+
timeTooltip.style.left = percent + '%';
|
|
4601
|
+
timeTooltip.style.opacity = '1';
|
|
4602
|
+
}
|
|
4455
4603
|
showShortcutIndicator(text) {
|
|
4456
4604
|
const el = document.getElementById('uvf-shortcut-indicator');
|
|
4457
4605
|
this.debugLog('showShortcutIndicator called with:', text, 'element found:', !!el);
|