|
|
@@ -27,29 +27,31 @@ this.mediasMinifier = this.mediasMinifier || (() => {
|
|
|
const stats = { processed: 0, discarded: 0 };
|
|
|
doc.querySelectorAll("style").forEach(styleElement => {
|
|
|
if (styleElement.sheet) {
|
|
|
- styleElement.textContent = processRules(doc, styleElement.sheet.cssRules, stats);
|
|
|
+ styleElement.textContent = processRules(doc, styleElement.sheet.cssRules, styleElement.media || "all", stats);
|
|
|
}
|
|
|
});
|
|
|
return stats;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- function processRules(doc, cssRules, stats) {
|
|
|
+ function processRules(doc, cssRules, media, stats) {
|
|
|
let sheetContent = "";
|
|
|
- Array.from(cssRules).forEach(cssRule => {
|
|
|
- if (cssRule.type == CSSRule.MEDIA_RULE) {
|
|
|
- stats.processed++;
|
|
|
- if (matchesMediaType(cssRule.media, "screen")) {
|
|
|
- sheetContent += "@media " + Array.from(cssRule.media).join(",") + "{";
|
|
|
- sheetContent += processRules(doc, cssRule.cssRules, stats);
|
|
|
- sheetContent += "}";
|
|
|
+ if (matchesMediaType(media, "screen")) {
|
|
|
+ Array.from(cssRules).forEach(cssRule => {
|
|
|
+ if (cssRule.type == CSSRule.MEDIA_RULE) {
|
|
|
+ stats.processed++;
|
|
|
+ if (matchesMediaType(cssRule.media.mediaText, "screen")) {
|
|
|
+ sheetContent += "@media " + Array.from(cssRule.media).join(",") + "{";
|
|
|
+ sheetContent += processRules(doc, cssRule.cssRules, cssRule.media.mediaText, stats);
|
|
|
+ sheetContent += "}";
|
|
|
+ } else {
|
|
|
+ stats.discarded++;
|
|
|
+ }
|
|
|
} else {
|
|
|
- stats.discarded++;
|
|
|
+ sheetContent += cssRule.cssText;
|
|
|
}
|
|
|
- } else {
|
|
|
- sheetContent += cssRule.cssText;
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
return sheetContent;
|
|
|
}
|
|
|
|
|
|
@@ -57,8 +59,8 @@ this.mediasMinifier = this.mediasMinifier || (() => {
|
|
|
return array.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
|
|
|
}
|
|
|
|
|
|
- function matchesMediaType(media, mediaType) {
|
|
|
- const foundMediaTypes = flatten(mediaQueryParser.parseMediaList(media.mediaText).map(node => getMediaTypes(node, mediaType)));
|
|
|
+ function matchesMediaType(mediaText, mediaType) {
|
|
|
+ const foundMediaTypes = flatten(mediaQueryParser.parseMediaList(mediaText).map(node => getMediaTypes(node, mediaType)));
|
|
|
return foundMediaTypes.find(mediaTypeInfo => (!mediaTypeInfo.not && (mediaTypeInfo.value == mediaType || mediaTypeInfo.value == "all")) || (mediaTypeInfo.not && (mediaTypeInfo.value == "all" || mediaTypeInfo.value != mediaType)));
|
|
|
}
|
|
|
|