Jelajahi Sumber

don't transform universal selector

Gildas 7 tahun lalu
induk
melakukan
b76686e829
1 mengubah file dengan 37 tambahan dan 32 penghapusan
  1. 37 32
      lib/single-file/html-images-minifier.js

+ 37 - 32
lib/single-file/html-images-minifier.js

@@ -75,20 +75,23 @@ this.imagesMinifier = this.imagesMinifier || (() => {
 			if (tagName == "img" || tagName == "svg") {
 				elementInfo.forEach(selectorInfo => {
 					if (selectorInfo.selector) {
-						const selectors = matchedImageSelectors.get(selectorInfo.ruleInfo.cssRule.selectorText) || JSON.parse(JSON.stringify(selectorInfo.ruleInfo.selectors));
-						const selectorIndex = selectorInfo.ruleInfo.selectors.indexOf(selectorInfo.selector);
-						if (selectorIndex != -1 && !selectors[selectorIndex].transformed) {
-							let selector = JSON.parse(JSON.stringify(selectorInfo.selector));
-							selector.push({
-								type: "pseudo",
-								name: "not",
-								data: [[SINGLE_FILE_SELECTOR]]
-							});
-							selector.transformed = true;
-							selectors[selectorIndex] = selector;
-							selector = JSON.parse(JSON.stringify(selectorInfo.selector));
-							selectors.push(selector);
-							matchedImageSelectors.set(selectorInfo.ruleInfo.cssRule.selectorText, selectors);
+						const firstSelector = selectorInfo.selector[0];
+						if (selectorInfo.selector.length > 1 || firstSelector.type != "universal") {
+							const selectors = matchedImageSelectors.get(selectorInfo.ruleInfo.cssRule.selectorText) || JSON.parse(JSON.stringify(selectorInfo.ruleInfo.selectors));
+							const selectorIndex = selectorInfo.ruleInfo.selectors.indexOf(selectorInfo.selector);
+							if (selectorIndex != -1 && !selectors[selectorIndex].transformed) {
+								let selector = JSON.parse(JSON.stringify(selectorInfo.selector));
+								selector.push({
+									type: "pseudo",
+									name: "not",
+									data: [[SINGLE_FILE_SELECTOR]]
+								});
+								selector.transformed = true;
+								selectors[selectorIndex] = selector;
+								selector = JSON.parse(JSON.stringify(selectorInfo.selector));
+								selectors.push(selector);
+								matchedImageSelectors.set(selectorInfo.ruleInfo.cssRule.selectorText, selectors);
+							}
 						}
 					}
 				});
@@ -265,27 +268,29 @@ this.imagesMinifier = this.imagesMinifier || (() => {
 	}
 
 	function getSVGSelector(selector) {
-		selector = JSON.parse(JSON.stringify(selector));
-		let simpleSelector, selectorIndex = selector.length - 1, imageTagFound;
-		while (selectorIndex >= 0 && !imageTagFound) {
-			simpleSelector = selector[selectorIndex];
-			if (simpleSelector.type == "pseudo" && simpleSelector.name == "not") {
-				const negatedSelector = simpleSelector.data[0][0];
-				if (negatedSelector.type == SINGLE_FILE_SELECTOR.type && negatedSelector.action == SINGLE_FILE_SELECTOR.action && negatedSelector.name == SINGLE_FILE_SELECTOR.name) {
-					selector.splice(selectorIndex, 1);
-				}
-				selectorIndex--;
-			} else {
-				imageTagFound = simpleSelector.type == "tag" && simpleSelector.name == "img";
-				if (!imageTagFound) {
+		if (selector.length) {
+			selector = JSON.parse(JSON.stringify(selector));
+			let simpleSelector, selectorIndex = selector.length - 1, imageTagFound;
+			while (selectorIndex >= 0 && !imageTagFound) {
+				simpleSelector = selector[selectorIndex];
+				if (simpleSelector.type == "pseudo" && simpleSelector.name == "not") {
+					const negatedSelector = simpleSelector.data[0][0];
+					if (negatedSelector.type == SINGLE_FILE_SELECTOR.type && negatedSelector.action == SINGLE_FILE_SELECTOR.action && negatedSelector.name == SINGLE_FILE_SELECTOR.name) {
+						selector.splice(selectorIndex, 1);
+					}
 					selectorIndex--;
+				} else {
+					imageTagFound = simpleSelector.type == "tag" && simpleSelector.name == "img";
+					if (!imageTagFound) {
+						selectorIndex--;
+					}
 				}
 			}
-		}
-		if (imageTagFound) {
-			simpleSelector.name = "svg";
-			selector.splice(selectorIndex + 1, 0, SINGLE_FILE_SELECTOR);
-			return selector;
+			if (imageTagFound) {
+				simpleSelector.name = "svg";
+				selector.splice(selectorIndex + 1, 0, SINGLE_FILE_SELECTOR);
+				return selector;
+			}
 		}
 	}