UNPKG

jsdom

Version:

A JavaScript implementation of many web standards

53 lines (44 loc) 1.37 kB
"use strict"; const CSSRuleImpl = require("./CSSRule-impl.js").implementation; const CSSRuleList = require("../../../generated/idl/CSSRuleList.js"); const CSSStyleRule = require("../../../generated/idl/CSSStyleRule.js"); class CSSGroupingRuleImpl extends CSSRuleImpl { constructor(globalObject, args, privateData) { super(globalObject, args, privateData); this.cssRules = CSSRuleList.createImpl(globalObject); } insertRule(rule, index) { return this.cssRules._insert(rule, index, this._isInNestingContext(), this, this.parentStyleSheet); } deleteRule(index) { this.cssRules._remove(index); } _isInNestingContext() { let ancestor = this; while (ancestor) { if (CSSStyleRule.isImpl(ancestor)) { return true; } ancestor = ancestor.parentRule; } return false; } } /** * Serialize the body of a grouping rule per CSSOM spec. * Produces multi-line output with indented child rules. */ function serializeGroupingRuleBody(rules) { let body = "{\n"; for (const rule of rules) { const ruleText = rule.cssText; // Skip empty CSSNestedDeclarations per CSSOM serialization spec if (ruleText) { body += ` ${ruleText}\n`; } } body += "}"; return body; } exports.implementation = CSSGroupingRuleImpl; exports.serializeGroupingRuleBody = serializeGroupingRuleBody;