mirror of
https://github.com/hanzoai/postcss.git
synced 2026-09-24 17:01:56 +00:00
90 lines
2.5 KiB
JavaScript
90 lines
2.5 KiB
JavaScript
import Container from './container'
|
||
import list from './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' }
|
||
*/
|
||
}
|
||
|
||
export default Rule
|