Sfoglia il codice sorgente

clone options when reading linked stylesheets

Gildas 5 anni fa
parent
commit
e0b5f9315f
1 ha cambiato i file con 29 aggiunte e 32 eliminazioni
  1. 29 32
      lib/single-file/single-file-core.js

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

@@ -899,43 +899,40 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 		}
 
 		async resolveStylesheetURLs() {
-			const options = {
-				maxResourceSize: this.options.maxResourceSize,
-				maxResourceSizeEnabled: this.options.maxResourceSizeEnabled,
-				url: this.options.url,
-				charset: this.charset,
-				compressCSS: this.options.compressCSS,
-				updatedResources: this.options.updatedResources,
-				rootDocument: this.options.rootDocument,
-				frameId: this.options.windowId,
-				resourceReferrer: this.options.resourceReferrer
-			};
-			await Promise.all(Array.from(this.doc.querySelectorAll("style, link[rel*=stylesheet]"))
-				.map(async element => {
-					let mediaText;
-					if (element.media) {
-						mediaText = element.media.toLowerCase();
-					}
-					const stylesheetInfo = { mediaText };
-					if (element.closest("[" + SHADOW_MODE_ATTRIBUTE_NAME + "]")) {
-						stylesheetInfo.scoped = true;
-					}
-					if (element.tagName.toLowerCase() == "link") {
-						if (element.charset) {
-							options.charset = element.charset;
-						}
-					}
-					await processElement(element, stylesheetInfo, this.stylesheets, this.baseURI, options, this.workStyleElement);
-				}));
-			if (options.rootDocument) {
-				const newResources = Object.keys(options.updatedResources).filter(url => options.updatedResources[url].type == "stylesheet" && !options.updatedResources[url].retrieved).map(url => options.updatedResources[url]);
+			await Promise.all(Array.from(this.doc.querySelectorAll("style, link[rel*=stylesheet]")).map(async element => {
+				const options = {
+					maxResourceSize: this.options.maxResourceSize,
+					maxResourceSizeEnabled: this.options.maxResourceSizeEnabled,
+					url: this.options.url,
+					charset: this.charset,
+					compressCSS: this.options.compressCSS,
+					updatedResources: this.options.updatedResources,
+					rootDocument: this.options.rootDocument,
+					frameId: this.options.windowId,
+					resourceReferrer: this.options.resourceReferrer
+				};
+				let mediaText;
+				if (element.media) {
+					mediaText = element.media.toLowerCase();
+				}
+				const stylesheetInfo = { mediaText };
+				if (element.closest("[" + SHADOW_MODE_ATTRIBUTE_NAME + "]")) {
+					stylesheetInfo.scoped = true;
+				}
+				if (element.tagName == "LINK" && element.charset) {
+					options.charset = element.charset;
+				}
+				await processElement(element, stylesheetInfo, this.stylesheets, this.baseURI, options, this.workStyleElement);
+			}));
+			if (this.options.rootDocument) {
+				const newResources = Object.keys(this.options.updatedResources).filter(url => this.options.updatedResources[url].type == "stylesheet" && !this.options.updatedResources[url].retrieved).map(url => this.options.updatedResources[url]);
 				await Promise.all(newResources.map(async resource => {
 					resource.retrieved = true;
 					const stylesheetInfo = {};
 					const element = this.doc.createElement("style");
 					this.doc.body.appendChild(element);
 					element.textContent = resource.content;
-					await processElement(element, stylesheetInfo, this.stylesheets, this.baseURI, options, this.workStyleElement);
+					await processElement(element, stylesheetInfo, this.stylesheets, this.baseURI, this.options, this.workStyleElement);
 				}));
 			}
 
@@ -964,7 +961,7 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 
 			async function getStylesheetContent(element, baseURI, options, workStyleElement) {
 				let content;
-				if (element.tagName.toLowerCase() == "link") {
+				if (element.tagName == "LINK") {
 					content = await ProcessorHelper.resolveLinkStylesheetURLs(element.href, baseURI, options, workStyleElement);
 				} else {
 					content = await ProcessorHelper.resolveImportURLs(element.textContent, baseURI, options, workStyleElement);