Procházet zdrojové kódy

added an option to load lazy loaded images

Gildas před 7 roky
rodič
revize
c9beb5abc8

+ 5 - 0
extension/core/scripts/bg/config.js

@@ -36,6 +36,10 @@ singlefile.config = (() => {
 			config.compressCSS = true;
 			localStorage.config = JSON.stringify(config);
 		}
+		if (config.lazyLoadImages === undefined) {
+			config.lazyLoadImages = true;
+			localStorage.config = JSON.stringify(config);
+		}		
 		if (config.contextMenuEnabled == undefined) {
 			config.contextMenuEnabled = true;
 			localStorage.config = JSON.stringify(config);
@@ -59,6 +63,7 @@ singlefile.config = (() => {
 				rawDocument: false,
 				compressHTML: true,
 				compressCSS: true,
+				lazyLoadImages: true,
 				appendSaveDate: true
 			};
 		},

+ 4 - 0
extension/ui/pages/options.html

@@ -19,6 +19,10 @@
 				<label for="compressCSSInput">compress CSS</label>
 				<input type="checkbox" id="compressCSSInput">
 			</div>
+			<div class="option">
+				<label for="lazyLoadImagesInput">load lazy loaded images</label>
+				<input type="checkbox" id="lazyLoadImagesInput">
+			</div>
 			<div class="option">
 				<label for="removeFramesInput">remove frames</label>
 				<input type="checkbox" id="removeFramesInput">

+ 3 - 0
extension/ui/scripts/bg/options.js

@@ -32,6 +32,7 @@
 		const saveRawPageInput = document.getElementById("saveRawPageInput");
 		const compressHTMLInput = document.getElementById("compressHTMLInput");
 		const compressCSSInput = document.getElementById("compressCSSInput");
+		const lazyLoadImagesInput = document.getElementById("lazyLoadImagesInput");
 		const contextMenuEnabledInput = document.getElementById("contextMenuEnabledInput");
 		const appendSaveDateInput = document.getElementById("appendSaveDateInput");
 		document.getElementById("resetButton").addEventListener("click", () => {
@@ -51,6 +52,7 @@
 			saveRawPageInput.checked = config.saveRawPage;
 			compressHTMLInput.checked = config.compressHTML;
 			compressCSSInput.checked = config.compressCSS;
+			lazyLoadImagesInput.checked = config.lazyLoadImages;
 			contextMenuEnabledInput.checked = config.contextMenuEnabled;
 			appendSaveDateInput.checked = config.appendSaveDate;
 		}
@@ -64,6 +66,7 @@
 				saveRawPage: saveRawPageInput.checked,
 				compressHTML: compressHTMLInput.checked,
 				compressCSS: compressCSSInput.checked,
+				lazyLoadImages: lazyLoadImagesInput.checked,
 				contextMenuEnabled: contextMenuEnabledInput.checked,
 				appendSaveDate: appendSaveDateInput.checked
 			});

+ 12 - 0
lib/single-file/single-file-core.js

@@ -82,6 +82,9 @@ const SingleFileCore = (() => {
 			if (!this.options.jsEnabled || (this.options.saveRawPage && this.options.removeScripts)) {
 				this.processor.insertNoscriptContents();
 			}
+			if (this.options.lazyLoadImages) {
+				this.processor.lazyLoadImages();
+			}
 			if (this.options.removeFrames) {
 				this.processor.removeFrames();
 			}
@@ -267,6 +270,14 @@ const SingleFileCore = (() => {
 			}
 		}
 
+		lazyLoadImages() {
+			this.doc.querySelectorAll("img[data-src]").forEach(imgElement => {
+				if (imgElement.dataset.src && imgElement.src != imgElement.dataset.src) {
+					imgElement.src = imgElement.dataset.src;
+				}
+			});
+		}
+
 		removeDiscardedResources() {
 			this.doc.querySelectorAll("applet, meta[http-equiv=refresh], object:not([type=\"image/svg+xml\"]):not([type=\"image/svg-xml\"]), embed:not([src*=\".svg\"]), link[rel*=preload], link[rel*=prefetch]").forEach(element => element.remove());
 			this.doc.querySelectorAll("[onload]").forEach(element => element.removeAttribute("onload"));
@@ -451,6 +462,7 @@ const SingleFileCore = (() => {
 							saveRawPage: this.options.saveRawPage,
 							compressHTML: this.options.compressHTML,
 							compressCSS: this.options.compressCSS,
+							lazyLoadImages: this.options.lazyLoadImages,
 							framesData: this.options.framesData
 						};
 						if (frameData.content) {