feat(browser-extension): improve code structure and types

This commit is contained in:
wanhose 2024-08-03 10:07:59 +02:00
parent 2edd94d709
commit bc88e3961e

View File

@ -6,6 +6,11 @@
* @property {{ classes: string[] | undefined, selectors: string[] | undefined } | undefined} tokens * @property {{ classes: string[] | undefined, selectors: string[] | undefined } | undefined} tokens
*/ */
/**
* @typedef {Object} RunParams
* @property {boolean | undefined} skipTriggerEvent
*/
if (typeof browser === 'undefined') { if (typeof browser === 'undefined') {
browser = chrome; browser = chrome;
} }
@ -348,9 +353,10 @@ function restoreDOM() {
/** /**
* @async * @async
* @description Set up everything * @description Run the extension
* @param {RunParams | undefined} params
*/ */
async function setup() { async function run(params) {
state = (await dispatch({ hostname, type: 'GET_HOSTNAME_STATE' })) ?? state; state = (await dispatch({ hostname, type: 'GET_HOSTNAME_STATE' })) ?? state;
dispatch({ type: 'ENABLE_POPUP' }); dispatch({ type: 'ENABLE_POPUP' });
@ -368,6 +374,10 @@ async function setup() {
dispatch({ type: 'ENABLE_ICON' }); dispatch({ type: 'ENABLE_ICON' });
observer.observe(document.body ?? document.documentElement, options); observer.observe(document.body ?? document.documentElement, options);
if (!params?.skipTriggerEvent) {
window.dispatchEvent(new CustomEvent(triggerEventName));
}
} else { } else {
dispatch({ type: 'DISABLE_ICON' }); dispatch({ type: 'DISABLE_ICON' });
observer.disconnect(); observer.disconnect();
@ -399,13 +409,20 @@ browser.runtime.onMessage.addListener(async (message) => {
break; break;
} }
case 'RUN': { case 'RUN': {
if (removables.length) clean(removables, true); if (removables.length) {
window.dispatchEvent(new CustomEvent(triggerEventName), {
detail: {
elements: removables,
skipMatch: true,
},
});
}
break; break;
} }
} }
fix(); fix();
await setup(); await run({ skipTriggerEvent: true });
}); });
/** /**
@ -416,8 +433,7 @@ browser.runtime.onMessage.addListener(async (message) => {
*/ */
window.addEventListener('DOMContentLoaded', async () => { window.addEventListener('DOMContentLoaded', async () => {
if (document.visibilityState === 'visible') { if (document.visibilityState === 'visible') {
await setup(); await run();
window.dispatchEvent(new CustomEvent(triggerEventName));
} }
}); });
@ -428,7 +444,7 @@ window.addEventListener('DOMContentLoaded', async () => {
*/ */
window.addEventListener('pageshow', async (event) => { window.addEventListener('pageshow', async (event) => {
if (document.visibilityState === 'visible' && event.persisted) { if (document.visibilityState === 'visible' && event.persisted) {
await setup(); await run();
window.dispatchEvent(new CustomEvent(triggerEventName)); window.dispatchEvent(new CustomEvent(triggerEventName));
} }
}); });
@ -443,7 +459,7 @@ window.addEventListener(triggerEventName, (event) => {
fix(); fix();
if (event.detail?.elements) { if (event.detail?.elements) {
clean(event.detail.elements); clean(event.detail.elements, event.detail.skipMatch);
} else { } else {
if (readingTime() < 4) { if (readingTime() < 4) {
forceClean(document.body); forceClean(document.body);
@ -457,14 +473,14 @@ window.addEventListener(triggerEventName, (event) => {
/** /**
* @async * @async
* @description Run setup if the page wasn't visible yet * @description Run run if the page wasn't visible yet
* @listens window#visibilitychange * @listens window#visibilitychange
* @returns {void} * @returns {void}
*/ */
window.addEventListener('visibilitychange', async () => { window.addEventListener('visibilitychange', async () => {
if (document.visibilityState === 'visible' && !initiallyVisible) { if (document.visibilityState === 'visible' && !initiallyVisible) {
initiallyVisible = true; initiallyVisible = true;
await setup(); await run();
window.dispatchEvent(new CustomEvent(triggerEventName)); window.dispatchEvent(new CustomEvent(triggerEventName));
} }
}); });