|
@@ -8,47 +8,48 @@ const defaultObserverOptions: SelectorObserverOptions = {
|
|
defaultDebounce: 100,
|
|
defaultDebounce: 100,
|
|
};
|
|
};
|
|
|
|
|
|
-export const observers = {} as Record<ObserverName, SelectorObserver>;
|
|
|
|
|
|
+/** Global SelectorObserver instances usable throughout the script for improved performance */
|
|
|
|
+export const globservers = {} as Record<ObserverName, SelectorObserver>;
|
|
|
|
|
|
/** Call after DOM load to initialize all SelectorObserver instances */
|
|
/** Call after DOM load to initialize all SelectorObserver instances */
|
|
export function initObservers() {
|
|
export function initObservers() {
|
|
try {
|
|
try {
|
|
// #SECTION body = the entire <body> element - use sparingly due to performance impacts!
|
|
// #SECTION body = the entire <body> element - use sparingly due to performance impacts!
|
|
- observers.body = new SelectorObserver(document.body, {
|
|
|
|
|
|
+ globservers.body = new SelectorObserver(document.body, {
|
|
...defaultObserverOptions,
|
|
...defaultObserverOptions,
|
|
subtree: false,
|
|
subtree: false,
|
|
});
|
|
});
|
|
- observers.body.enable();
|
|
|
|
|
|
+ globservers.body.enable();
|
|
|
|
|
|
// #SECTION playerBar = media controls bar at the bottom of the page
|
|
// #SECTION playerBar = media controls bar at the bottom of the page
|
|
const playerBarSelector = "ytmusic-app-layout ytmusic-player-bar.ytmusic-app";
|
|
const playerBarSelector = "ytmusic-app-layout ytmusic-player-bar.ytmusic-app";
|
|
- observers.playerBar = new SelectorObserver(playerBarSelector, {
|
|
|
|
|
|
+ globservers.playerBar = new SelectorObserver(playerBarSelector, {
|
|
...defaultObserverOptions,
|
|
...defaultObserverOptions,
|
|
defaultDebounce: 200,
|
|
defaultDebounce: 200,
|
|
});
|
|
});
|
|
- observers.body.addListener(playerBarSelector, {
|
|
|
|
|
|
+ globservers.body.addListener(playerBarSelector, {
|
|
listener: () => {
|
|
listener: () => {
|
|
log("#DBG-UU enabling playerBar observer");
|
|
log("#DBG-UU enabling playerBar observer");
|
|
- observers.playerBar.enable();
|
|
|
|
|
|
+ globservers.playerBar.enable();
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
|
|
// #SECTION playerBarInfo = song title, artist, album, etc. inside the player bar
|
|
// #SECTION playerBarInfo = song title, artist, album, etc. inside the player bar
|
|
const playerBarInfoSelector = `${playerBarSelector} .middle-controls .content-info-wrapper`;
|
|
const playerBarInfoSelector = `${playerBarSelector} .middle-controls .content-info-wrapper`;
|
|
- observers.playerBarInfo = new SelectorObserver(playerBarInfoSelector, {
|
|
|
|
|
|
+ globservers.playerBarInfo = new SelectorObserver(playerBarInfoSelector, {
|
|
...defaultObserverOptions,
|
|
...defaultObserverOptions,
|
|
attributes: true,
|
|
attributes: true,
|
|
attributeFilter: ["title"],
|
|
attributeFilter: ["title"],
|
|
});
|
|
});
|
|
- observers.playerBarInfo.addListener(playerBarInfoSelector, {
|
|
|
|
|
|
+ globservers.playerBarInfo.addListener(playerBarInfoSelector, {
|
|
listener: () => {
|
|
listener: () => {
|
|
log("#DBG-UU enabling playerBarTitle observer");
|
|
log("#DBG-UU enabling playerBarTitle observer");
|
|
- observers.playerBarInfo.enable();
|
|
|
|
|
|
+ globservers.playerBarInfo.enable();
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
|
|
// #DEBUG example: listen for title change:
|
|
// #DEBUG example: listen for title change:
|
|
- observers.playerBarInfo.addListener("yt-formatted-string.title", {
|
|
|
|
|
|
+ globservers.playerBarInfo.addListener("yt-formatted-string.title", {
|
|
continuous: true,
|
|
continuous: true,
|
|
listener: (titleElem) => {
|
|
listener: (titleElem) => {
|
|
log("#DBG-UU >>>>> title changed", titleElem.title);
|
|
log("#DBG-UU >>>>> title changed", titleElem.title);
|
|
@@ -64,5 +65,5 @@ export function initObservers() {
|
|
|
|
|
|
/** Interface function for adding listeners to the already present observers */
|
|
/** Interface function for adding listeners to the already present observers */
|
|
export function addSelectorListener<TElem extends Element>(observerName: ObserverName, selector: string, options: SelectorListenerOptions<TElem>) {
|
|
export function addSelectorListener<TElem extends Element>(observerName: ObserverName, selector: string, options: SelectorListenerOptions<TElem>) {
|
|
- observers[observerName].addListener(selector, options);
|
|
|
|
|
|
+ globservers[observerName].addListener(selector, options);
|
|
}
|
|
}
|