Bläddra i källkod

remove duplicate fonts

Gildas 7 år sedan
förälder
incheckning
7aff2d4fa5
1 ändrade filer med 14 tillägg och 9 borttagningar
  1. 14 9
      lib/single-file/css-fonts-minifier.js

+ 14 - 9
lib/single-file/css-fonts-minifier.js

@@ -231,18 +231,23 @@ this.fontsMinifier = this.fontsMinifier || (() => {
 	}
 
 	function processFontFaceRules(cssRules, fontsDetails, media, stats) {
-		cssRules.forEach(cssRule => {
-			if (cssRule.type == "Atrule" && cssRule.name == "media") {
-				const mediaText = cssTree.generate(cssRule.prelude);
-				processFontFaceRules(cssRule.block.children, fontsDetails, mediaText, stats);
-			} else if (cssRule.type == "Atrule" && cssRule.name == "font-face" && (media.includes("all") || media.includes("screen"))) {
-				const fontInfo = fontsDetails.get(getFontKey(cssRule));
+		const removedRules = [];
+		for (let cssRule = cssRules.head; cssRule; cssRule = cssRule.next) {
+			const ruleData = cssRule.data;
+			if (ruleData.type == "Atrule" && ruleData.name == "media") {
+				const mediaText = cssTree.generate(ruleData.prelude);
+				processFontFaceRules(ruleData.block.children, fontsDetails, mediaText, stats);
+			} else if (ruleData.type == "Atrule" && ruleData.name == "font-face" && (media.includes("all") || media.includes("screen"))) {
+				const fontInfo = fontsDetails.get(getFontKey(ruleData));
 				if (fontInfo) {
-					fontsDetails.delete(getFontKey(cssRule));
-					processFontFaceRule(cssRule, fontInfo, stats);
+					fontsDetails.delete(getFontKey(ruleData));
+					processFontFaceRule(ruleData, fontInfo, stats);
+				} else {
+					removedRules.push(cssRule);
 				}
 			}
-		});
+		}
+		removedRules.forEach(cssRule => cssRules.remove(cssRule));
 	}
 
 	function processFontFaceRule(cssRule, fontInfo, stats) {