|
|
@@ -33,22 +33,17 @@ this.lazyLoader = this.lazyLoader || (() => {
|
|
|
function process(options) {
|
|
|
return new Promise(async resolve => {
|
|
|
let timeoutId, srcAttributeChanged;
|
|
|
- const idleTimeoutId = setTimeout(() => {
|
|
|
+ const idleTimeoutId = await setTimeout(() => {
|
|
|
if (!srcAttributeChanged) {
|
|
|
clearTimeout(timeoutId);
|
|
|
lazyLoadEnd(maxTimeoutId, idleTimeoutId, observer, options, resolve);
|
|
|
}
|
|
|
}, options.maxLazyLoadImagesIdleTime * 1.2);
|
|
|
- const maxTimeoutId = await browser.runtime.sendMessage({ setTimeoutRequest: true, delay: options.maxLazyLoadImagesIdleTime * 3 });
|
|
|
- const maxTimeoutCallback = message => {
|
|
|
- browser.runtime.onMessage.removeListener(maxTimeoutCallback);
|
|
|
- if (message.onTimeout) {
|
|
|
- clearTimeout(timeoutId);
|
|
|
- lazyLoadEnd(maxTimeoutId, idleTimeoutId, observer, options, resolve);
|
|
|
- }
|
|
|
- };
|
|
|
- browser.runtime.onMessage.addListener(maxTimeoutCallback);
|
|
|
- const observer = new MutationObserver(mutations => {
|
|
|
+ const maxTimeoutId = await setTimeout(() => {
|
|
|
+ clearTimeout(timeoutId);
|
|
|
+ lazyLoadEnd(maxTimeoutId, idleTimeoutId, observer, options, resolve);
|
|
|
+ }, options.maxLazyLoadImagesIdleTime * 3);
|
|
|
+ const observer = new MutationObserver(async mutations => {
|
|
|
mutations = mutations.filter(mutation => mutation.type == ATTRIBUTES_MUTATION_TYPE);
|
|
|
if (mutations.length) {
|
|
|
mutations.forEach(mutation => {
|
|
|
@@ -57,7 +52,7 @@ this.lazyLoader = this.lazyLoader || (() => {
|
|
|
}
|
|
|
});
|
|
|
srcAttributeChanged = true;
|
|
|
- timeoutId = deferLazyLoadEnd(timeoutId, maxTimeoutId, idleTimeoutId, observer, options, resolve);
|
|
|
+ timeoutId = await deferLazyLoadEnd(timeoutId, maxTimeoutId, idleTimeoutId, observer, options, resolve);
|
|
|
}
|
|
|
});
|
|
|
observer.observe(document, { attributeFilter: MONITORED_ATTRIBUTES, subtree: true, childList: true, attributes: true });
|
|
|
@@ -65,16 +60,15 @@ this.lazyLoader = this.lazyLoader || (() => {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- function deferLazyLoadEnd(timeoutId, maxTimeoutId, idleTimeoutId, observer, options, resolve) {
|
|
|
- clearTimeout(timeoutId);
|
|
|
- return setTimeout(() => lazyLoadEnd(maxTimeoutId, idleTimeoutId, observer, options, resolve), options.maxLazyLoadImagesIdleTime);
|
|
|
+ async function deferLazyLoadEnd(timeoutId, maxTimeoutId, idleTimeoutId, observer, options, resolve) {
|
|
|
+ await clearTimeout(timeoutId);
|
|
|
+ return await setTimeout(async () => await lazyLoadEnd(maxTimeoutId, idleTimeoutId, observer, options, resolve), options.maxLazyLoadImagesIdleTime);
|
|
|
}
|
|
|
|
|
|
- function lazyLoadEnd(maxTimeoutId, idleTimeoutId, observer, options, resolve) {
|
|
|
- browser.runtime.sendMessage({ clearTimeout: true, id: maxTimeoutId });
|
|
|
- clearTimeout(idleTimeoutId);
|
|
|
+ async function lazyLoadEnd(maxTimeoutId, idleTimeoutId, observer, options, resolve) {
|
|
|
+ await clearTimeout(idleTimeoutId);
|
|
|
injectScript(SCRIPT_AFTER_PATH);
|
|
|
- setTimeout(resolve, 100);
|
|
|
+ await setTimeout(resolve, 100);
|
|
|
observer.disconnect();
|
|
|
}
|
|
|
|