getAllViewportMediaCssRuleAsClassRule function
Transforms all CssMediaRule to targetClass
rule applied for viewportWidth
and viewportHeight
.
Implementation
List<String> getAllViewportMediaCssRuleAsClassRule(
int viewportWidth, viewportHeight, String targetClass) {
var rules = getAllViewportMediaCssRule(viewportWidth, viewportHeight);
var rulesFixed = <String, List<String>>{};
for (var mediaRule in rules) {
var cssRules = mediaRule.cssRules.toIterable();
for (var rule in cssRules.whereType<CSSStyleRule>()) {
var block = rule.style.as<CSSStyleDeclaration>();
if (block == null || block.isEmpty) continue;
var selectors = parseCssRuleSelectors(rule);
var selectorsFixed = selectors.map((s) => '.$targetClass $s');
var selectors2 = selectorsFixed.join(' , ');
var blocks = rulesFixed.putIfAbsent(selectors2, () => <String>[]);
blocks.add(block.cssText);
}
}
var rules2 = rulesFixed
.map((sel, blocks) {
var css = blocks.join(' ; ');
if (blocks.length > 1) {
var css2 = newCSSStyleDeclaration(cssText: css).cssText;
if (css2.trim().isNotEmpty) {
css = css2;
}
}
return MapEntry(sel, '$sel { $css }');
})
.values
.toList();
return rules2;
}