addRule method

void addRule(
  1. CSSRule rule, {
  2. required String? baseHref,
})

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}');
  }
}