handlePseudoRules method

void handlePseudoRules(
  1. Element parentElement,
  2. List<CSSStyleRule> rules
)

Implementation

void handlePseudoRules(Element parentElement, List<CSSStyleRule> rules) {
  _didProcessPseudoRules = true;
  if (rules.isEmpty) {
    if (pseudoBeforeStyle != null) {
      pseudoBeforeStyle = null;
      parentElement.markBeforePseudoElementNeedsUpdate();
    }
    if (pseudoAfterStyle != null) {
      pseudoAfterStyle = null;
      parentElement.markAfterPseudoElementNeedsUpdate();
    }
    if (pseudoFirstLetterStyle != null) {
      pseudoFirstLetterStyle = null;
      parentElement.markFirstLetterPseudoNeedsUpdate();
    }
    if (pseudoFirstLineStyle != null) {
      pseudoFirstLineStyle = null;
      parentElement.markFirstLinePseudoNeedsUpdate();
    }
    return;
  }

  List<CSSStyleRule>? beforeRules;
  List<CSSStyleRule>? afterRules;
  List<CSSStyleRule>? firstLetterRules;
  List<CSSStyleRule>? firstLineRules;

  for (CSSStyleRule style in rules) {
    final int pseudoElementMask = style.selectorGroup.pseudoElementMask;
    if ((pseudoElementMask & kPseudoElementMaskBefore) != 0) {
      (beforeRules ??= <CSSStyleRule>[]).add(style);
    }
    if ((pseudoElementMask & kPseudoElementMaskAfter) != 0) {
      (afterRules ??= <CSSStyleRule>[]).add(style);
    }
    if ((pseudoElementMask & kPseudoElementMaskFirstLetter) != 0) {
      (firstLetterRules ??= <CSSStyleRule>[]).add(style);
    }
    if ((pseudoElementMask & kPseudoElementMaskFirstLine) != 0) {
      (firstLineRules ??= <CSSStyleRule>[]).add(style);
    }
  }

  if (beforeRules != null) {
    pseudoBeforeStyle = cascadeMatchedStyleRules(beforeRules,
        cacheVersion: parentElement.ownerDocument.ruleSetVersion,
        copyResult: true);
  } else if (pseudoBeforeStyle != null) {
    pseudoBeforeStyle = null;
  }

  if (afterRules != null) {
    pseudoAfterStyle = cascadeMatchedStyleRules(afterRules,
        cacheVersion: parentElement.ownerDocument.ruleSetVersion,
        copyResult: true);
  } else if (pseudoAfterStyle != null) {
    pseudoAfterStyle = null;
  }

  if (firstLetterRules != null) {
    pseudoFirstLetterStyle = cascadeMatchedStyleRules(firstLetterRules,
        cacheVersion: parentElement.ownerDocument.ruleSetVersion,
        copyResult: true);
  } else if (pseudoFirstLetterStyle != null) {
    pseudoFirstLetterStyle = null;
  }

  if (firstLineRules != null) {
    pseudoFirstLineStyle = cascadeMatchedStyleRules(firstLineRules,
        cacheVersion: parentElement.ownerDocument.ruleSetVersion,
        copyResult: true);
  } else if (pseudoFirstLineStyle != null) {
    pseudoFirstLineStyle = null;
  }
}