Browse Source

refactored resolveStylesheetURLs

Gildas 7 năm trước cách đây
mục cha
commit
d4e6096acc
1 tập tin đã thay đổi với 32 bổ sung33 xóa
  1. 32 33
      lib/single-file/single-file-core.js

+ 32 - 33
lib/single-file/single-file-core.js

@@ -441,6 +441,7 @@ this.SingleFileCore = this.SingleFileCore || (() => {
 					element.remove();
 				}
 			});
+			this.doc.querySelectorAll("link[rel*=stylesheet][rel*=alternate][title]").forEach(element => element.remove());
 			this.doc.querySelectorAll("meta[http-equiv=\"content-security-policy\"]").forEach(element => element.remove());
 			if (this.options.compressHTML) {
 				this.doc.querySelectorAll("input[type=hidden]").forEach(element => element.remove());
@@ -788,41 +789,28 @@ this.SingleFileCore = this.SingleFileCore || (() => {
 					}
 					this.stylesheets.set(element, { mediaText });
 					const options = { maxResourceSize: this.options.maxResourceSize, maxResourceSizeEnabled: this.options.maxResourceSizeEnabled, url: this.options.url, charset: this.charset, compressCSS: this.options.compressCSS };
-					const isLinkTag = element.tagName.toLowerCase() == "link";
-					if (isLinkTag && element.rel.includes("alternate") && element.title) {
-						this.stylesheets.delete(element);
-						element.remove();
-					} else {
-						let stylesheetContent;
-						if (isLinkTag) {
-							if (element.charset) {
-								options.charset = element.charset;
-							}
-							stylesheetContent = await ProcessorHelper.resolveLinkStylesheetURLs(element.href, this.baseURI, options);
-						} else {
-							stylesheetContent = await ProcessorHelper.resolveImportURLs(element.textContent, this.baseURI, options);
-						}
-						let stylesheet;
-						try {
-							stylesheet = cssTree.parse(stylesheetContent);
-						} catch (error) {
-							// ignored
+					let stylesheetContent;
+					if (element.tagName.toLowerCase() == "link") {
+						if (element.charset) {
+							options.charset = element.charset;
 						}
-						if (stylesheet && stylesheet.children) {
-							if (this.options.compressCSS) {
-								const removedRules = [];
-								for (let cssRule = stylesheet.children.head; cssRule; cssRule = cssRule.next) {
-									const ruleData = cssRule.data;
-									if (ruleData.type == "Raw" && ruleData.value && ruleData.value.trim().startsWith("//")) {
-										removedRules.push(cssRule);
-									}
-								}
-								removedRules.forEach(cssRule => stylesheet.children.remove(cssRule));
-							}
-							this.stylesheets.get(element).stylesheet = stylesheet;
-						} else {
-							this.stylesheets.delete(element);
+						stylesheetContent = await ProcessorHelper.resolveLinkStylesheetURLs(element.href, this.baseURI, options);
+					} else {
+						stylesheetContent = await ProcessorHelper.resolveImportURLs(element.textContent, this.baseURI, options);
+					}
+					let stylesheet;
+					try {
+						stylesheet = cssTree.parse(stylesheetContent);
+					} catch (error) {
+						// ignored
+					}
+					if (stylesheet && stylesheet.children) {
+						if (this.options.compressCSS) {
+							ProcessorHelper.removeSingleLineCssComments(stylesheet);
 						}
+						this.stylesheets.get(element).stylesheet = stylesheet;
+					} else {
+						this.stylesheets.delete(element);
 					}
 				}));
 		}
@@ -1196,6 +1184,17 @@ this.SingleFileCore = this.SingleFileCore || (() => {
 			}
 		}
 
+		static removeSingleLineCssComments(stylesheet) {
+			const removedRules = [];
+			for (let cssRule = stylesheet.children.head; cssRule; cssRule = cssRule.next) {
+				const ruleData = cssRule.data;
+				if (ruleData.type == "Raw" && ruleData.value && ruleData.value.trim().startsWith("//")) {
+					removedRules.push(cssRule);
+				}
+			}
+			removedRules.forEach(cssRule => stylesheet.children.remove(cssRule));
+		}
+
 		static async resolveImportURLs(stylesheetContent, baseURI, options) {
 			stylesheetContent = ProcessorHelper.resolveStylesheetURLs(stylesheetContent, baseURI, options);
 			const imports = Util.getImportFunctions(stylesheetContent);