addRule method
Implementation
void addRule(CSSRule rule, {required String? baseHref}) {
rule.position = _lastPosition++;
if (rule is CSSLayerStatementRule) {
layerTree.declareAll(rule.layerNamePaths);
return;
}
if (rule is CSSLayerBlockRule) {
// Ensure the layer is declared even if the block is empty.
if (rule.layerNamePath.isNotEmpty) {
layerTree.declare(rule.layerNamePath);
}
// Add child rules in document order.
addRules(rule.cssRules, baseHref: baseHref);
return;
}
if (rule is CSSStyleRule) {
if (rule.layerPath.isNotEmpty) {
rule.layerOrderKey = layerTree.declare(rule.layerPath);
} else {
rule.layerOrderKey = null;
}
for (final selector in rule.selectorGroup.selectors) {
findBestRuleSetAndAdd(selector, rule);
}
} else if (rule is CSSKeyframesRule) {
keyframesRules[rule.name] = rule;
} else if (rule is CSSFontFaceRule) {
CSSFontFace.resolveFontFaceRules(
rule, ownerDocument.contextId!, baseHref);
} else if (rule is CSSMediaDirective) {
// doNothing
} else if (rule is CSSImportRule) {
// @import rules are resolved and flattened during stylesheet load.
// Ignore any leftover import rules.
} else {
assert(false, 'Unsupported rule type: ${rule.runtimeType}');
}
}