Просмотр исходного кода

refactored API

Former-commit-id: f2739eb225b70632d0d7fb0249543c2ead718da2
Gildas 6 лет назад
Родитель
Сommit
f8be56311e

+ 2 - 4
extension/core/content/content-main.js

@@ -28,12 +28,10 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 	const singlefile = this.singlefile;
 
 	const MAX_CONTENT_SIZE = 32 * (1024 * 1024);
-	const SingleFile = singlefile.lib.SingleFile.getClass({
-		fetch: singlefile.extension.lib.fetch.content.resources.fetch
-	});
 
 	let ui, processing = false, processor;
 
+	singlefile.lib.main.init({ fetch: singlefile.extension.lib.fetch.content.resources.fetch });
 	browser.runtime.onMessage.addListener(async message => {
 		if (!ui) {
 			ui = singlefile.extension.ui.content.main;
@@ -86,7 +84,7 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 		const frames = singlefile.lib.frameTree.content.frames;
 		singlefile.lib.helper.initDoc(document);
 		ui.onStartPage(options);
-		processor = new SingleFile(options);
+		processor = new singlefile.lib.SingleFile(options);
 		const preInitializationPromises = [];
 		options.insertSingleFileComment = true;
 		if (!options.saveRawPage) {

+ 1 - 1
extension/ui/content/content-ui-main.js

@@ -25,7 +25,7 @@
 
 this.singlefile.extension.ui.content.main = this.singlefile.extension.ui.content.main || (() => {
 
-	const SELECTED_CONTENT_ATTRIBUTE_NAME = this.singlefile.lib.SingleFile.SELECTED_CONTENT_ATTRIBUTE_NAME;
+	const SELECTED_CONTENT_ATTRIBUTE_NAME = this.singlefile.lib.helper.SELECTED_CONTENT_ATTRIBUTE_NAME;
 
 	const MASK_TAGNAME = "singlefile-mask";
 	const PROGRESS_BAR_TAGNAME = "singlefile-progress-bar";

+ 4 - 4
lib/index.js

@@ -36,7 +36,7 @@ this.singlefile = this.singlefile || {
 		},
 		vendor: {},
 		modules: {},
-		initializeOptions: async function (options = {}, doc = window.document, win = window) {
+		async initializeOptions(options = {}, doc = window.document, win = window) {
 			this.helper.initDoc(doc);
 			const preInitializationPromises = [];
 			if (!options.saveRawPage) {
@@ -52,11 +52,11 @@ this.singlefile = this.singlefile || {
 			options.win = win;
 			return options;
 		},
-		getPageData: async function (options = {}, classOptions) {
+		async getPageData(options = {}, initOptions) {
 			options.insertSingleFileComment = true;
 			options.insertFaviconLink = true;
-			const SingleFile = this.SingleFile.getClass(classOptions);
-			const singleFile = new SingleFile(options);
+			this.main.init(initOptions);
+			const singleFile = new this.SingleFile(options);
 			await singleFile.run();
 			return await singleFile.getPageData();
 		}

+ 5 - 7
lib/single-file/single-file-core.js

@@ -25,10 +25,10 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 
 	const DEBUG = false;
 
-	let util, cssTree, sessionId = 0, SELECTED_CONTENT_ATTRIBUTE_NAME;
+	let util, cssTree, sessionId = 0;
 
 	function getClass(...args) {
-		[util, cssTree, SELECTED_CONTENT_ATTRIBUTE_NAME] = args;
+		[util, cssTree] = args;
 		return SingleFileClass;
 	}
 
@@ -58,8 +58,6 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 		}
 	}
 
-	// SingleFileClass.SELECTED_CONTENT_ATTRIBUTE_NAME = SELECTED_CONTENT_ATTRIBUTE_NAME;
-
 	// -------------
 	// ProgressEvent
 	// -------------
@@ -543,16 +541,16 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 
 		removeUnselectedElements() {
 			removeUnmarkedElements(this.doc.body);
-			this.doc.body.removeAttribute(SELECTED_CONTENT_ATTRIBUTE_NAME);
+			this.doc.body.removeAttribute(util.SELECTED_CONTENT_ATTRIBUTE_NAME);
 
 			function removeUnmarkedElements(element) {
 				let selectedElementFound = false;
 				Array.from(element.childNodes).forEach(node => {
 					if (node.nodeType == 1) {
-						const isSelectedElement = node.getAttribute(SELECTED_CONTENT_ATTRIBUTE_NAME) == "";
+						const isSelectedElement = node.getAttribute(util.SELECTED_CONTENT_ATTRIBUTE_NAME) == "";
 						selectedElementFound = selectedElementFound || isSelectedElement;
 						if (isSelectedElement) {
-							node.removeAttribute(SELECTED_CONTENT_ATTRIBUTE_NAME);
+							node.removeAttribute(util.SELECTED_CONTENT_ATTRIBUTE_NAME);
 							removeUnmarkedElements(node);
 						} else if (selectedElementFound) {
 							removeNode(node);

+ 3 - 1
lib/single-file/single-file-helper.js

@@ -36,6 +36,7 @@ this.singlefile.lib.helper = this.singlefile.lib.helper || (() => {
 	const INPUT_VALUE_ATTRIBUTE_NAME = "data-single-file-input-value";
 	const LAZY_SRC_ATTRIBUTE_NAME = "data-single-file-lazy-loaded-src";
 	const STYLESHEET_ATTRIBUTE_NAME = "data-single-file-stylesheet";
+	const SELECTED_CONTENT_ATTRIBUTE_NAME = "data-single-file-selected-content";
 	const IGNORED_REMOVED_TAG_NAMES = ["NOSCRIPT", "DISABLED-NOSCRIPT", "META", "LINK", "STYLE", "TITLE", "TEMPLATE", "SOURCE", "OBJECT", "SCRIPT"];
 	const REGEXP_SIMPLE_QUOTES_STRING = /^'(.*?)'$/;
 	const REGEXP_DOUBLE_QUOTES_STRING = /^"(.*?)"$/;
@@ -60,7 +61,8 @@ this.singlefile.lib.helper = this.singlefile.lib.helper || (() => {
 		SHADOW_ROOT_ATTRIBUTE_NAME,
 		HTML_IMPORT_ATTRIBUTE_NAME,
 		LAZY_SRC_ATTRIBUTE_NAME,
-		STYLESHEET_ATTRIBUTE_NAME
+		STYLESHEET_ATTRIBUTE_NAME,
+		SELECTED_CONTENT_ATTRIBUTE_NAME
 	};
 
 	function initDoc(doc) {

+ 23 - 17
lib/single-file/single-file-util.js

@@ -37,9 +37,14 @@ this.singlefile.lib.util = this.singlefile.lib.util || (() => {
 	const crypto = window.crypto;
 	const TextDecoder = window.TextDecoder;
 	const TextEncoder = window.TextEncoder;
+	const singlefile = this.singlefile;
 
 	return {
-		getInstance: (modules, utilOptions) => {
+		getInstance(utilOptions) {
+			const modules = singlefile.lib.modules;
+			const vendor = singlefile.lib.vendor;
+			const helper = singlefile.lib.helper;
+
 			if (modules.serializer === undefined) {
 				modules.serializer = {
 					process(doc) {
@@ -152,7 +157,7 @@ this.singlefile.lib.util = this.singlefile.lib.util || (() => {
 					return modules.matchedRules.getMediaAllInfo(doc, stylesheets, styles);
 				},
 				compressCSS(content, options) {
-					return modules.cssMinifier.processString(content, options);
+					return vendor.cssMinifier.processString(content, options);
 				},
 				minifyMedias(stylesheets) {
 					return modules.mediasAltMinifier.process(stylesheets);
@@ -161,30 +166,31 @@ this.singlefile.lib.util = this.singlefile.lib.util || (() => {
 					return modules.imagesAltMinifier.process(doc);
 				},
 				parseSrcset(srcset) {
-					return modules.srcsetParser.process(srcset);
+					return vendor.srcsetParser.process(srcset);
 				},
 				preProcessDoc(doc, win, options) {
-					return modules.helper.preProcessDoc(doc, win, options);
+					return helper.preProcessDoc(doc, win, options);
 				},
 				postProcessDoc(doc, markedElements) {
-					modules.helper.postProcessDoc(doc, markedElements);
+					helper.postProcessDoc(doc, markedElements);
 				},
 				serialize(doc, compressHTML) {
 					return modules.serializer.process(doc, compressHTML);
 				},
 				removeQuotes(string) {
-					return modules.helper.removeQuotes(string);
+					return helper.removeQuotes(string);
 				},
-				WIN_ID_ATTRIBUTE_NAME: modules.helper.WIN_ID_ATTRIBUTE_NAME,
-				REMOVED_CONTENT_ATTRIBUTE_NAME: modules.helper.REMOVED_CONTENT_ATTRIBUTE_NAME,
-				IMAGE_ATTRIBUTE_NAME: modules.helper.IMAGE_ATTRIBUTE_NAME,
-				POSTER_ATTRIBUTE_NAME: modules.helper.POSTER_ATTRIBUTE_NAME,
-				CANVAS_ATTRIBUTE_NAME: modules.helper.CANVAS_ATTRIBUTE_NAME,
-				HTML_IMPORT_ATTRIBUTE_NAME: modules.helper.HTML_IMPORT_ATTRIBUTE_NAME,
-				INPUT_VALUE_ATTRIBUTE_NAME: modules.helper.INPUT_VALUE_ATTRIBUTE_NAME,
-				SHADOW_ROOT_ATTRIBUTE_NAME: modules.helper.SHADOW_ROOT_ATTRIBUTE_NAME,
-				PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME: modules.helper.PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME,
-				STYLESHEET_ATTRIBUTE_NAME: modules.helper.STYLESHEET_ATTRIBUTE_NAME
+				WIN_ID_ATTRIBUTE_NAME: helper.WIN_ID_ATTRIBUTE_NAME,
+				REMOVED_CONTENT_ATTRIBUTE_NAME: helper.REMOVED_CONTENT_ATTRIBUTE_NAME,
+				IMAGE_ATTRIBUTE_NAME: helper.IMAGE_ATTRIBUTE_NAME,
+				POSTER_ATTRIBUTE_NAME: helper.POSTER_ATTRIBUTE_NAME,
+				CANVAS_ATTRIBUTE_NAME: helper.CANVAS_ATTRIBUTE_NAME,
+				HTML_IMPORT_ATTRIBUTE_NAME: helper.HTML_IMPORT_ATTRIBUTE_NAME,
+				INPUT_VALUE_ATTRIBUTE_NAME: helper.INPUT_VALUE_ATTRIBUTE_NAME,
+				SHADOW_ROOT_ATTRIBUTE_NAME: helper.SHADOW_ROOT_ATTRIBUTE_NAME,
+				PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME: helper.PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME,
+				STYLESHEET_ATTRIBUTE_NAME: helper.STYLESHEET_ATTRIBUTE_NAME,
+				SELECTED_CONTENT_ATTRIBUTE_NAME: helper.SELECTED_CONTENT_ATTRIBUTE_NAME
 			};
 
 			async function getContent(resourceURL, options) {
@@ -213,7 +219,7 @@ this.singlefile.lib.util = this.singlefile.lib.util || (() => {
 					if (charsetValue) {
 						const matchCharset = charsetValue.match(/^charset=(.*)/);
 						if (matchCharset && matchCharset[1]) {
-							charset = modules.helper.removeQuotes(matchCharset[1].trim());
+							charset = helper.removeQuotes(matchCharset[1].trim());
 						}
 					}
 				}

+ 4 - 21
lib/single-file/single-file.js

@@ -21,31 +21,14 @@
  *   Source.
  */
 
-this.singlefile.lib.SingleFile = this.singlefile.lib.SingleFile || (() => {
-
-	const SELECTED_CONTENT_ATTRIBUTE_NAME = "data-single-file-selected-content";
+this.singlefile.lib.main = this.singlefile.lib.main || (() => {
 
 	const singlefile = this.singlefile;
 
-	const modules = {
-		helper: singlefile.lib.helper,
-		srcsetParser: singlefile.lib.vendor.srcsetParser,
-		cssMinifier: singlefile.lib.vendor.cssMinifier,
-		htmlMinifier: singlefile.lib.modules.htmlMinifier,
-		serializer: singlefile.lib.modules.serializer,
-		fontsMinifier: singlefile.lib.modules.fontsMinifier,
-		fontsAltMinifier: singlefile.lib.modules.fontsAltMinifier,
-		cssRulesMinifier: singlefile.lib.modules.cssRulesMinifier,
-		matchedRules: singlefile.lib.modules.matchedRules,
-		mediasAltMinifier: singlefile.lib.modules.mediasAltMinifier,
-		imagesAltMinifier: singlefile.lib.modules.imagesAltMinifier
-	};
-
 	return {
-		SELECTED_CONTENT_ATTRIBUTE_NAME,
-		getClass: classOptions => {
-			const SingleFile = singlefile.lib.core.getClass(singlefile.lib.util.getInstance(modules, classOptions), singlefile.lib.vendor.cssTree, SELECTED_CONTENT_ATTRIBUTE_NAME);
-			return SingleFile;
+		init(initOptions) {
+			const util = singlefile.lib.util.getInstance(initOptions);
+			singlefile.lib.SingleFile = singlefile.lib.core.getClass(util, singlefile.lib.vendor.cssTree);
 		}
 	};