|
|
@@ -30,13 +30,10 @@ this.rulesMinifier = this.rulesMinifier || (() => {
|
|
|
discarded: 0
|
|
|
};
|
|
|
doc.querySelectorAll("style").forEach(style => {
|
|
|
- const cssRules = [];
|
|
|
if (style.sheet) {
|
|
|
const processed = style.sheet.cssRules.length;
|
|
|
stats.processed += processed;
|
|
|
- processRules(doc, style.sheet.cssRules, cssRules, rulesCache);
|
|
|
- const stylesheetContent = cssRules.join("");
|
|
|
- style.textContent = stylesheetContent;
|
|
|
+ style.textContent = processRules(doc, style.sheet.cssRules, rulesCache);
|
|
|
stats.discarded += processed - style.sheet.cssRules.length;
|
|
|
}
|
|
|
});
|
|
|
@@ -44,30 +41,32 @@ this.rulesMinifier = this.rulesMinifier || (() => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- function processRules(doc, rules, cssRules, cache) {
|
|
|
+ function processRules(doc, rules, cache) {
|
|
|
+ let stylesheetContent = "";
|
|
|
if (rules) {
|
|
|
Array.from(rules).forEach(rule => {
|
|
|
if (rule.media) {
|
|
|
- cssRules.push("@media " + Array.prototype.join.call(rule.media, ",") + " {");
|
|
|
- processRules(doc, rule.cssRules, cssRules, cache);
|
|
|
- cssRules.push("}");
|
|
|
+ stylesheetContent += "@media " + Array.prototype.join.call(rule.media, ",") + " {";
|
|
|
+ stylesheetContent += processRules(doc, rule.cssRules, cache);
|
|
|
+ stylesheetContent += "}";
|
|
|
} else if (rule.selectorText) {
|
|
|
const selector = getFilteredSelector(rule.selectorText);
|
|
|
if (selector) {
|
|
|
try {
|
|
|
if (cache[selector] || doc.querySelector(selector)) {
|
|
|
- cssRules.push(rule.cssText);
|
|
|
+ stylesheetContent += rule.cssText;
|
|
|
cache[selector] = true;
|
|
|
}
|
|
|
} catch (error) {
|
|
|
- cssRules.push(rule.cssText);
|
|
|
+ stylesheetContent += rule.cssText;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- cssRules.push(rule.cssText);
|
|
|
+ stylesheetContent += rule.cssText;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+ return stylesheetContent;
|
|
|
}
|
|
|
|
|
|
function getFilteredSelector(selector) {
|