File tree Expand file tree Collapse file tree 8 files changed +152
-2
lines changed
Sources/ContentScopeScripts/dist
src/features/duckplayer-native Expand file tree Collapse file tree 8 files changed +152
-2
lines changed Original file line number Diff line number Diff line change 1
- - NTP: Scaffold Omnibar widget and message types (#1778 )
1
+ - Duck Player Native: Mute all elements (#1779 )
Original file line number Diff line number Diff line change 5316
5316
}
5317
5317
} ;
5318
5318
}
5319
+ var MUTE_ELEMENTS_QUERY = "audio, video" ;
5320
+ function muteAllElements ( ) {
5321
+ const int = setInterval ( ( ) => {
5322
+ const elements = Array . from ( document . querySelectorAll ( MUTE_ELEMENTS_QUERY ) ) ;
5323
+ elements . forEach ( ( element ) => {
5324
+ if ( element ?. isConnected ) {
5325
+ element . muted = true ;
5326
+ }
5327
+ } ) ;
5328
+ } , 10 ) ;
5329
+ return ( ) => {
5330
+ clearInterval ( int ) ;
5331
+ const elements = Array . from ( document . querySelectorAll ( MUTE_ELEMENTS_QUERY ) ) ;
5332
+ elements . forEach ( ( element ) => {
5333
+ if ( element ?. isConnected ) {
5334
+ element . muted = false ;
5335
+ }
5336
+ } ) ;
5337
+ } ;
5338
+ }
5319
5339
5320
5340
// src/features/duckplayer-native/overlays/thumbnail-overlay.js
5321
5341
init_define_import_meta_trackerLookup ( ) ;
5632
5652
this . paused = pause ;
5633
5653
if ( pause ) {
5634
5654
this . sideEffects . add ( "stopping video from playing" , ( ) => stopVideoFromPlaying ( videoElement ) ) ;
5655
+ this . sideEffects . add ( "muting all elements" , ( ) => muteAllElements ( ) ) ;
5635
5656
this . sideEffects . add ( "appending thumbnail" , ( ) => {
5636
5657
const clickHandler = ( ) => {
5637
5658
this . messages . notifyOverlayDismissed ( ) ;
5646
5667
} ) ;
5647
5668
} else {
5648
5669
this . sideEffects . destroy ( "stopping video from playing" ) ;
5670
+ this . sideEffects . destroy ( "muting all elements" ) ;
5649
5671
this . sideEffects . destroy ( "appending thumbnail" ) ;
5650
5672
}
5651
5673
}
Original file line number Diff line number Diff line change 7251
7251
}
7252
7252
};
7253
7253
}
7254
+ var MUTE_ELEMENTS_QUERY = "audio, video";
7255
+ function muteAllElements() {
7256
+ const int = setInterval(() => {
7257
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
7258
+ elements.forEach((element) => {
7259
+ if (element?.isConnected) {
7260
+ element.muted = true;
7261
+ }
7262
+ });
7263
+ }, 10);
7264
+ return () => {
7265
+ clearInterval(int);
7266
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
7267
+ elements.forEach((element) => {
7268
+ if (element?.isConnected) {
7269
+ element.muted = false;
7270
+ }
7271
+ });
7272
+ };
7273
+ }
7254
7274
7255
7275
// src/features/duckplayer-native/overlays/thumbnail-overlay.js
7256
7276
init_define_import_meta_trackerLookup();
7507
7527
this.paused = pause;
7508
7528
if (pause) {
7509
7529
this.sideEffects.add("stopping video from playing", () => stopVideoFromPlaying(videoElement));
7530
+ this.sideEffects.add("muting all elements", () => muteAllElements());
7510
7531
this.sideEffects.add("appending thumbnail", () => {
7511
7532
const clickHandler = () => {
7512
7533
this.messages.notifyOverlayDismissed();
7521
7542
});
7522
7543
} else {
7523
7544
this.sideEffects.destroy("stopping video from playing");
7545
+ this.sideEffects.destroy("muting all elements");
7524
7546
this.sideEffects.destroy("appending thumbnail");
7525
7547
}
7526
7548
}
Original file line number Diff line number Diff line change 13138
13138
}
13139
13139
};
13140
13140
}
13141
+ var MUTE_ELEMENTS_QUERY = "audio, video";
13142
+ function muteAllElements() {
13143
+ const int = setInterval(() => {
13144
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
13145
+ elements.forEach((element) => {
13146
+ if (element?.isConnected) {
13147
+ element.muted = true;
13148
+ }
13149
+ });
13150
+ }, 10);
13151
+ return () => {
13152
+ clearInterval(int);
13153
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
13154
+ elements.forEach((element) => {
13155
+ if (element?.isConnected) {
13156
+ element.muted = false;
13157
+ }
13158
+ });
13159
+ };
13160
+ }
13141
13161
13142
13162
// src/features/duckplayer-native/overlays/thumbnail-overlay.js
13143
13163
init_define_import_meta_trackerLookup();
13394
13414
this.paused = pause;
13395
13415
if (pause) {
13396
13416
this.sideEffects.add("stopping video from playing", () => stopVideoFromPlaying(videoElement));
13417
+ this.sideEffects.add("muting all elements", () => muteAllElements());
13397
13418
this.sideEffects.add("appending thumbnail", () => {
13398
13419
const clickHandler = () => {
13399
13420
this.messages.notifyOverlayDismissed();
13408
13429
});
13409
13430
} else {
13410
13431
this.sideEffects.destroy("stopping video from playing");
13432
+ this.sideEffects.destroy("muting all elements");
13411
13433
this.sideEffects.destroy("appending thumbnail");
13412
13434
}
13413
13435
}
Original file line number Diff line number Diff line change 13138
13138
}
13139
13139
};
13140
13140
}
13141
+ var MUTE_ELEMENTS_QUERY = "audio, video";
13142
+ function muteAllElements() {
13143
+ const int = setInterval(() => {
13144
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
13145
+ elements.forEach((element) => {
13146
+ if (element?.isConnected) {
13147
+ element.muted = true;
13148
+ }
13149
+ });
13150
+ }, 10);
13151
+ return () => {
13152
+ clearInterval(int);
13153
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
13154
+ elements.forEach((element) => {
13155
+ if (element?.isConnected) {
13156
+ element.muted = false;
13157
+ }
13158
+ });
13159
+ };
13160
+ }
13141
13161
13142
13162
// src/features/duckplayer-native/overlays/thumbnail-overlay.js
13143
13163
init_define_import_meta_trackerLookup();
13394
13414
this.paused = pause;
13395
13415
if (pause) {
13396
13416
this.sideEffects.add("stopping video from playing", () => stopVideoFromPlaying(videoElement));
13417
+ this.sideEffects.add("muting all elements", () => muteAllElements());
13397
13418
this.sideEffects.add("appending thumbnail", () => {
13398
13419
const clickHandler = () => {
13399
13420
this.messages.notifyOverlayDismissed();
13408
13429
});
13409
13430
} else {
13410
13431
this.sideEffects.destroy("stopping video from playing");
13432
+ this.sideEffects.destroy("muting all elements");
13411
13433
this.sideEffects.destroy("appending thumbnail");
13412
13434
}
13413
13435
}
Original file line number Diff line number Diff line change 13138
13138
}
13139
13139
};
13140
13140
}
13141
+ var MUTE_ELEMENTS_QUERY = "audio, video";
13142
+ function muteAllElements() {
13143
+ const int = setInterval(() => {
13144
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
13145
+ elements.forEach((element) => {
13146
+ if (element?.isConnected) {
13147
+ element.muted = true;
13148
+ }
13149
+ });
13150
+ }, 10);
13151
+ return () => {
13152
+ clearInterval(int);
13153
+ const elements = Array.from(document.querySelectorAll(MUTE_ELEMENTS_QUERY));
13154
+ elements.forEach((element) => {
13155
+ if (element?.isConnected) {
13156
+ element.muted = false;
13157
+ }
13158
+ });
13159
+ };
13160
+ }
13141
13161
13142
13162
// src/features/duckplayer-native/overlays/thumbnail-overlay.js
13143
13163
init_define_import_meta_trackerLookup();
13394
13414
this.paused = pause;
13395
13415
if (pause) {
13396
13416
this.sideEffects.add("stopping video from playing", () => stopVideoFromPlaying(videoElement));
13417
+ this.sideEffects.add("muting all elements", () => muteAllElements());
13397
13418
this.sideEffects.add("appending thumbnail", () => {
13398
13419
const clickHandler = () => {
13399
13420
this.messages.notifyOverlayDismissed();
13408
13429
});
13409
13430
} else {
13410
13431
this.sideEffects.destroy("stopping video from playing");
13432
+ this.sideEffects.destroy("muting all elements");
13411
13433
this.sideEffects.destroy("appending thumbnail");
13412
13434
}
13413
13435
}
Original file line number Diff line number Diff line change @@ -29,3 +29,41 @@ export function stopVideoFromPlaying(videoSelector) {
29
29
}
30
30
} ;
31
31
}
32
+
33
+ const MUTE_ELEMENTS_QUERY = 'audio, video' ;
34
+
35
+ /**
36
+ * Mute all audio and video elements
37
+ *
38
+ * @returns {() => void } A function that allows the elements to be unmuted
39
+ */
40
+ export function muteAllElements ( ) {
41
+ /**
42
+ * Set up the interval
43
+ */
44
+ const int = setInterval ( ( ) => {
45
+ /** @type {(HTMLAudioElement | HTMLVideoElement)[] } */
46
+ const elements = Array . from ( document . querySelectorAll ( MUTE_ELEMENTS_QUERY ) ) ;
47
+ elements . forEach ( ( element ) => {
48
+ if ( element ?. isConnected ) {
49
+ element . muted = true ;
50
+ }
51
+ } ) ;
52
+ } , 10 ) ;
53
+
54
+ /**
55
+ * To clean up, we need to stop the interval
56
+ * and then call .play() on the original element, if it's still connected
57
+ */
58
+ return ( ) => {
59
+ clearInterval ( int ) ;
60
+
61
+ /** @type {(HTMLAudioElement | HTMLVideoElement)[] } */
62
+ const elements = Array . from ( document . querySelectorAll ( MUTE_ELEMENTS_QUERY ) ) ;
63
+ elements . forEach ( ( element ) => {
64
+ if ( element ?. isConnected ) {
65
+ element . muted = false ;
66
+ }
67
+ } ) ;
68
+ } ;
69
+ }
Original file line number Diff line number Diff line change 1
1
import { Logger , SideEffects } from '../../duckplayer/util.js' ;
2
2
import { muteAudio } from '../mute-audio.js' ;
3
3
import { pollTimestamp } from '../get-current-timestamp.js' ;
4
- import { stopVideoFromPlaying } from '../pause-video.js' ;
4
+ import { stopVideoFromPlaying , muteAllElements } from '../pause-video.js' ;
5
5
import { showThumbnailOverlay } from '../overlays/thumbnail-overlay.js' ;
6
6
7
7
/**
@@ -86,6 +86,7 @@ export class DuckPlayerNativeYoutube {
86
86
87
87
if ( pause ) {
88
88
this . sideEffects . add ( 'stopping video from playing' , ( ) => stopVideoFromPlaying ( videoElement ) ) ;
89
+ this . sideEffects . add ( 'muting all elements' , ( ) => muteAllElements ( ) ) ;
89
90
this . sideEffects . add ( 'appending thumbnail' , ( ) => {
90
91
const clickHandler = ( ) => {
91
92
this . messages . notifyOverlayDismissed ( ) ;
@@ -95,6 +96,7 @@ export class DuckPlayerNativeYoutube {
95
96
} ) ;
96
97
} else {
97
98
this . sideEffects . destroy ( 'stopping video from playing' ) ;
99
+ this . sideEffects . destroy ( 'muting all elements' ) ;
98
100
this . sideEffects . destroy ( 'appending thumbnail' ) ;
99
101
}
100
102
}
You can’t perform that action at this time.
0 commit comments