فهرست منبع

unescape CSS strings to test font unicode ranges on their content

Gildas 7 سال پیش
والد
کامیت
c5f25c97c8
1فایلهای تغییر یافته به همراه13 افزوده شده و 5 حذف شده
  1. 13 5
      lib/single-file/css-fonts-minifier.js

+ 13 - 5
lib/single-file/css-fonts-minifier.js

@@ -18,7 +18,7 @@
  *   along with SingleFile.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* global cssTree */
+/* global cssTree, docHelper */
 
 this.fontsMinifier = this.fontsMinifier || (() => {
 
@@ -66,7 +66,7 @@ this.fontsMinifier = this.fontsMinifier || (() => {
 				stats.processed += cssRules.getSize();
 				stats.discarded += cssRules.getSize();
 				getFontsInfo(cssRules, fontsInfo);
-				pseudoElementsContent += getPseudoElementsContent(cssRules);
+				pseudoElementsContent += getPseudoElementsContent(doc, cssRules);
 			});
 			styles.forEach(style => {
 				const fontFamilyNames = getFontFamilyNames(style);
@@ -377,14 +377,22 @@ this.fontsMinifier = this.fontsMinifier || (() => {
 		return fontWeights.find(weight => weight > fontWeight);
 	}
 
-	function getPseudoElementsContent(cssRules) {
+	function getPseudoElementsContent(doc, cssRules) {
 		return cssRules.toArray().map(cssRule => {
 			if (cssRule.type == "Atrule" && cssRule.name == "media" && cssRule.block) {
-				return getPseudoElementsContent(cssRule.block.children);
+				return getPseudoElementsContent(doc, cssRule.block.children);
 			} else if (cssRule.type == "Rule") {
 				const selector = cssTree.generate(cssRule.prelude); // TODO use OM
 				if (testPseudoElements(selector)) {
-					return getPropertyValue(cssRule, "content");
+					const value = docHelper.removeQuotes(getPropertyValue(cssRule, "content") || "");
+					if (value) {
+						const styleElement = doc.createElement("style");
+						styleElement.textContent = "tmp { content:\"" + value + "\"}";
+						doc.documentElement.appendChild(styleElement);
+						let content = docHelper.removeQuotes(styleElement.sheet.cssRules[0].style.getPropertyValue("content"));
+						styleElement.remove();
+						return content;
+					}
 				}
 			}
 		}).join("");