feat(browser-extension): improve code structure and types
This commit is contained in:
parent
2edd94d709
commit
bc88e3961e
@ -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));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user