unified-video-framework 1.4.244 → 1.4.245
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.
|
@@ -1176,14 +1176,15 @@ export class WebPlayer extends BasePlayer {
|
|
|
1176
1176
|
height: '100%',
|
|
1177
1177
|
playerVars: {
|
|
1178
1178
|
controls: 0, // Hide YouTube controls
|
|
1179
|
-
disablekb:
|
|
1179
|
+
disablekb: 0, // Allow keyboard controls
|
|
1180
1180
|
fs: 0, // Hide fullscreen button
|
|
1181
1181
|
iv_load_policy: 3, // Hide annotations
|
|
1182
1182
|
modestbranding: 1, // Minimal YouTube branding
|
|
1183
1183
|
rel: 0, // Don't show related videos
|
|
1184
1184
|
showinfo: 0, // Hide video info
|
|
1185
1185
|
autoplay: this.config.autoPlay ? 1 : 0,
|
|
1186
|
-
mute: this.config.muted ? 1 : 0
|
|
1186
|
+
mute: this.config.muted ? 1 : 0,
|
|
1187
|
+
widget_referrer: window.location.href // Hide YouTube recommendations
|
|
1187
1188
|
},
|
|
1188
1189
|
events: {
|
|
1189
1190
|
onReady: () => this.onYouTubePlayerReady(),
|
|
@@ -6222,6 +6223,28 @@ export class WebPlayer extends BasePlayer {
|
|
|
6222
6223
|
}
|
|
6223
6224
|
}
|
|
6224
6225
|
|
|
6226
|
+
/* Hide YouTube UI elements */
|
|
6227
|
+
iframe[src*="youtube.com"] {
|
|
6228
|
+
pointer-events: auto !important;
|
|
6229
|
+
}
|
|
6230
|
+
|
|
6231
|
+
/* Hide YouTube title, logo, and controls overlay */
|
|
6232
|
+
.ytp-chrome-top,
|
|
6233
|
+
.ytp-chrome-bottom,
|
|
6234
|
+
.ytp-watermark,
|
|
6235
|
+
.ytp-gradient-top,
|
|
6236
|
+
.ytp-gradient-bottom,
|
|
6237
|
+
.ytp-show-cards-title,
|
|
6238
|
+
.ytp-cards-teaser,
|
|
6239
|
+
.ytp-endscreen-element,
|
|
6240
|
+
.ytp-ce-element,
|
|
6241
|
+
.ytp-suggested-action,
|
|
6242
|
+
.ytp-pause-overlay {
|
|
6243
|
+
display: none !important;
|
|
6244
|
+
visibility: hidden !important;
|
|
6245
|
+
opacity: 0 !important;
|
|
6246
|
+
}
|
|
6247
|
+
|
|
6225
6248
|
/* Ultra-wide screens */
|
|
6226
6249
|
@media screen and (min-width: 1440px) {
|
|
6227
6250
|
.uvf-video-title {
|
|
@@ -7345,45 +7368,61 @@ export class WebPlayer extends BasePlayer {
|
|
|
7345
7368
|
case 'ArrowLeft':
|
|
7346
7369
|
e.preventDefault();
|
|
7347
7370
|
e.stopImmediatePropagation(); // Prevent duplicate handler triggers
|
|
7348
|
-
|
|
7349
|
-
|
|
7371
|
+
const currentTime = this.getCurrentTime();
|
|
7372
|
+
const duration = this.getDuration();
|
|
7373
|
+
if (!isNaN(duration) && duration > 0) {
|
|
7374
|
+
this.seek(Math.max(0, currentTime - 10));
|
|
7350
7375
|
shortcutText = '-10s';
|
|
7351
7376
|
}
|
|
7352
7377
|
break;
|
|
7353
7378
|
case 'ArrowRight':
|
|
7354
7379
|
e.preventDefault();
|
|
7355
7380
|
e.stopImmediatePropagation(); // Prevent duplicate handler triggers
|
|
7356
|
-
|
|
7357
|
-
|
|
7381
|
+
const currentTimeRight = this.getCurrentTime();
|
|
7382
|
+
const durationRight = this.getDuration();
|
|
7383
|
+
if (!isNaN(durationRight) && durationRight > 0) {
|
|
7384
|
+
this.seek(Math.min(durationRight, currentTimeRight + 10));
|
|
7358
7385
|
shortcutText = '+10s';
|
|
7359
7386
|
}
|
|
7360
7387
|
break;
|
|
7361
7388
|
case 'ArrowUp':
|
|
7362
7389
|
e.preventDefault();
|
|
7363
7390
|
this.changeVolume(0.1);
|
|
7364
|
-
|
|
7365
|
-
|
|
7391
|
+
let volumeUp = 0;
|
|
7392
|
+
if (this.youtubePlayer && this.youtubePlayerReady) {
|
|
7393
|
+
volumeUp = this.youtubePlayer.getVolume();
|
|
7394
|
+
} else if (this.isCasting && this.remotePlayer) {
|
|
7395
|
+
volumeUp = (this.remotePlayer.volumeLevel || 0) * 100;
|
|
7366
7396
|
} else {
|
|
7367
|
-
|
|
7397
|
+
volumeUp = (this.video?.volume || 0) * 100;
|
|
7368
7398
|
}
|
|
7399
|
+
shortcutText = `Volume ${Math.round(volumeUp)}%`;
|
|
7369
7400
|
break;
|
|
7370
7401
|
case 'ArrowDown':
|
|
7371
7402
|
e.preventDefault();
|
|
7372
7403
|
this.changeVolume(-0.1);
|
|
7373
|
-
|
|
7374
|
-
|
|
7404
|
+
let volumeDown = 0;
|
|
7405
|
+
if (this.youtubePlayer && this.youtubePlayerReady) {
|
|
7406
|
+
volumeDown = this.youtubePlayer.getVolume();
|
|
7407
|
+
} else if (this.isCasting && this.remotePlayer) {
|
|
7408
|
+
volumeDown = (this.remotePlayer.volumeLevel || 0) * 100;
|
|
7375
7409
|
} else {
|
|
7376
|
-
|
|
7410
|
+
volumeDown = (this.video?.volume || 0) * 100;
|
|
7377
7411
|
}
|
|
7412
|
+
shortcutText = `Volume ${Math.round(volumeDown)}%`;
|
|
7378
7413
|
break;
|
|
7379
7414
|
case 'm':
|
|
7380
7415
|
e.preventDefault();
|
|
7381
7416
|
this.toggleMuteAction();
|
|
7382
|
-
|
|
7383
|
-
|
|
7417
|
+
let isMuted = false;
|
|
7418
|
+
if (this.youtubePlayer && this.youtubePlayerReady) {
|
|
7419
|
+
isMuted = this.youtubePlayer.isMuted();
|
|
7420
|
+
} else if (this.isCasting && this.remotePlayer) {
|
|
7421
|
+
isMuted = this.remotePlayer.isMuted;
|
|
7384
7422
|
} else {
|
|
7385
|
-
|
|
7423
|
+
isMuted = this.video?.muted || false;
|
|
7386
7424
|
}
|
|
7425
|
+
shortcutText = isMuted ? 'Muted' : 'Unmuted';
|
|
7387
7426
|
break;
|
|
7388
7427
|
case 'f':
|
|
7389
7428
|
e.preventDefault();
|
|
@@ -7422,9 +7461,11 @@ export class WebPlayer extends BasePlayer {
|
|
|
7422
7461
|
case '9':
|
|
7423
7462
|
e.preventDefault();
|
|
7424
7463
|
// Only jump to position if video is loaded and duration is valid
|
|
7425
|
-
|
|
7464
|
+
const durationForSeek = this.getDuration();
|
|
7465
|
+
if (!isNaN(durationForSeek) && durationForSeek > 0) {
|
|
7426
7466
|
const percent = parseInt(e.key) * 10;
|
|
7427
|
-
|
|
7467
|
+
const seekTime = (durationForSeek * percent) / 100;
|
|
7468
|
+
this.seek(seekTime);
|
|
7428
7469
|
shortcutText = `${percent}%`;
|
|
7429
7470
|
}
|
|
7430
7471
|
break;
|