12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- const cssom = require('cssom');
-
- /**
- * Returns an array of the selectors.
- *
- * @license Sizzle CSS Selector Engine - MIT
- * @param {String} selectorText from cssom
- * @api public
- */
-
- function extract(selectorText) {
- let attr = 0;
- const sels = [];
- let sel = '';
- let i;
- let c;
- const l = selectorText.length;
-
- for (i = 0; i < l; i++) {
- c = selectorText.charAt(i);
-
- if (attr) {
- if (c === '[' || c === '(') {
- attr--;
- }
- sel += c;
- } else if (c === ',') {
- sels.push(sel);
- sel = '';
- } else {
- if (c === '[' || c === '(') {
- attr++;
- }
- if (sel.length || (c !== ',' && c !== '\n' && c !== ' ')) {
- sel += c;
- }
- }
- }
-
- if (sel.length) {
- sels.push(sel);
- }
-
- return sels;
- }
-
- /**
- * Returns a parse tree for a CSS source.
- * If it encounters multiple selectors separated by a comma, it splits the
- * tree.
- *
- * @param {String} css source
- * @api public
- */
-
- module.exports = css => {
- const rules = cssom.parse(css).cssRules || [];
- const ret = [];
- let i;
- const l = rules.length;
- let rule;
- let selectors;
- let ii;
- let ll;
-
- for (i = 0; i < l; i++) {
- if (rules[i].selectorText) { // media queries don't have selectorText
- rule = rules[i];
- selectors = extract(rule.selectorText);
- ll = selectors.length;
-
- for (ii = 0; ii < ll; ii++) {
- ret.push([ selectors[ii], rule.style ]);
- }
- }
- }
-
- return ret;
- };
|