|
|
@@ -282,24 +282,7 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
}
|
|
|
|
|
|
lazyLoadImages() {
|
|
|
- DomProcessorHelper.replaceSrc(this.doc.querySelectorAll("img[data-src]"), "src");
|
|
|
- DomProcessorHelper.replaceSrc(this.doc.querySelectorAll("img[data-original]"), "original");
|
|
|
- this.doc.querySelectorAll("[data-bg]").forEach(element => {
|
|
|
- const dataBg = element.dataset.bg;
|
|
|
- if (dataBg && dataBg.startsWith(DATA_URI_PREFIX) && dataBg != EMPTY_DATA_URI && !element.style.backgroundImage.includes(dataBg)) {
|
|
|
- element.style.backgroundImage = "url(" + element.dataset.bg + ")";
|
|
|
- element.removeAttribute("data-bg");
|
|
|
- element.removeAttribute("data-lazyload");
|
|
|
- }
|
|
|
- });
|
|
|
- this.doc.querySelectorAll("[data-srcset]").forEach(imgElement => {
|
|
|
- const srcset = imgElement.dataset.srcset;
|
|
|
- if (srcset && imgElement.srcset != srcset) {
|
|
|
- imgElement.srcset = srcset;
|
|
|
- imgElement.removeAttribute("data-srcset");
|
|
|
- imgElement.removeAttribute("data-lazyload");
|
|
|
- }
|
|
|
- });
|
|
|
+ this.dom.lazyLoader.process(this.doc);
|
|
|
}
|
|
|
|
|
|
removeDiscardedResources() {
|
|
|
@@ -418,10 +401,9 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
resourcePromises.push(DomProcessorHelper.processAttribute(this.doc.querySelectorAll("video[src], video > source[src]"), "src", this.baseURI));
|
|
|
}
|
|
|
if (this.options.lazyLoadImages) {
|
|
|
- resourcePromises.push(DomProcessorHelper.processAttribute(this.doc.querySelectorAll("img[data-src]"), "data-src", this.baseURI));
|
|
|
- resourcePromises.push(DomProcessorHelper.processAttribute(this.doc.querySelectorAll("img[data-original]"), "data-original", this.baseURI));
|
|
|
- resourcePromises.push(DomProcessorHelper.processAttribute(this.doc.querySelectorAll("img[data-bg]"), "data-bg", this.baseURI));
|
|
|
- resourcePromises.push(DomProcessorHelper.processSrcset(this.doc.querySelectorAll("[data-srcset]"), "data-srcset", this.baseURI, this.dom.parseSrcset));
|
|
|
+ const imageSelectors = this.dom.lazyLoader.imageSelectors;
|
|
|
+ Object.keys(imageSelectors.src).forEach(selector => resourcePromises.push(DomProcessorHelper.processAttribute(this.doc.querySelectorAll(selector), imageSelectors.src[selector], this.baseURI)));
|
|
|
+ Object.keys(imageSelectors.srcset).forEach(selector => resourcePromises.push(DomProcessorHelper.processSrcset(this.doc.querySelectorAll(selector), imageSelectors.srcset[selector], this.baseURI, this.dom.parseSrcset)));
|
|
|
}
|
|
|
await resourcePromises;
|
|
|
}
|
|
|
@@ -641,17 +623,6 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
- static replaceSrc(elements, attributeName) {
|
|
|
- elements.forEach(element => {
|
|
|
- const dataSrc = element.dataset[attributeName];
|
|
|
- if (dataSrc && dataSrc.startsWith(DATA_URI_PREFIX) && dataSrc != EMPTY_DATA_URI && element.src != dataSrc) {
|
|
|
- element.src = element.dataset[attributeName];
|
|
|
- element.removeAttribute("data-" + attributeName);
|
|
|
- element.removeAttribute("data-lazyload");
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
static async processSrcset(resourceElements, attributeName, baseURI, parseSrcset) {
|
|
|
await Promise.all(Array.from(resourceElements).map(async resourceElement => {
|
|
|
const srcset = parseSrcset(resourceElement.getAttribute(attributeName));
|