Permalink
Cannot retrieve contributors at this time
91 lines (84 sloc)
2.58 KB
| let Container = require('./container') | |
| let list = require('./list') | |
| /** | |
| * Represents a CSS rule: a selector followed by a declaration block. | |
| * | |
| * @extends Container | |
| * | |
| * @example | |
| * const root = postcss.parse('a{}') | |
| * const rule = root.first | |
| * rule.type //=> 'rule' | |
| * rule.toString() //=> 'a{}' | |
| */ | |
| class Rule extends Container { | |
| constructor (defaults) { | |
| super(defaults) | |
| this.type = 'rule' | |
| if (!this.nodes) this.nodes = [] | |
| } | |
| /** | |
| * An array containing the rule’s individual selectors. | |
| * Groups of selectors are split at commas. | |
| * | |
| * @type {string[]} | |
| * | |
| * @example | |
| * const root = postcss.parse('a, b { }') | |
| * const rule = root.first | |
| * | |
| * rule.selector //=> 'a, b' | |
| * rule.selectors //=> ['a', 'b'] | |
| * | |
| * rule.selectors = ['a', 'strong'] | |
| * rule.selector //=> 'a, strong' | |
| */ | |
| get selectors () { | |
| return list.comma(this.selector) | |
| } | |
| set selectors (values) { | |
| let match = this.selector ? this.selector.match(/,\s*/) : null | |
| let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen') | |
| this.selector = values.join(sep) | |
| } | |
| /** | |
| * @memberof Rule# | |
| * @member {string} selector The rule’s full selector represented | |
| * as a string. | |
| * | |
| * @example | |
| * const root = postcss.parse('a, b { }') | |
| * const rule = root.first | |
| * rule.selector //=> 'a, b' | |
| */ | |
| /** | |
| * @memberof Rule# | |
| * @member {object} raws Information to generate byte-to-byte equal | |
| * node string as it was in the origin input. | |
| * | |
| * Every parser saves its own properties, | |
| * but the default CSS parser uses: | |
| * | |
| * * `before`: the space symbols before the node. It also stores `*` | |
| * and `_` symbols before the declaration (IE hack). | |
| * * `after`: the space symbols after the last child of the node | |
| * to the end of the node. | |
| * * `between`: the symbols between the property and value | |
| * for declarations, selector and `{` for rules, or last parameter | |
| * and `{` for at-rules. | |
| * * `semicolon`: contains `true` if the last child has | |
| * an (optional) semicolon. | |
| * * `ownSemicolon`: contains `true` if there is semicolon after rule. | |
| * | |
| * PostCSS cleans selectors from comments and extra spaces, | |
| * but it stores origin content in raws properties. | |
| * As such, if you don’t change a declaration’s value, | |
| * PostCSS will use the raw value with comments. | |
| * | |
| * @example | |
| * const root = postcss.parse('a {\n color:black\n}') | |
| * root.first.first.raws //=> { before: '', between: ' ', after: '\n' } | |
| */ | |
| } | |
| module.exports = Rule | |
| Container.registerRule(Rule) |