diff --git a/src/parser/model/ParserCss.js b/src/parser/model/ParserCss.js index 7746a49eb..d88f49975 100644 --- a/src/parser/model/ParserCss.js +++ b/src/parser/model/ParserCss.js @@ -1,3 +1,20 @@ +import { keys } from 'underscore'; + +// At-rules +// https://developer.mozilla.org/it/docs/Web/API/CSSRule#Type_constants +const atRules = { + 4: 'media', + 5: 'font-face', + 6: 'page', + 7: 'keyframes', + 11: 'counter-style', + 12: 'supports', + 13: 'document', + 14: 'font-feature-values', + 15: 'viewport' +}; +const atRuleKeys = keys(atRules); + module.exports = config => ({ /** * Parse selector string to array. @@ -37,28 +54,35 @@ module.exports = config => ({ /** * Fetch data from node - * @param {StyleSheet|CSSMediaRule} el + * @param {StyleSheet|CSSRule} el * @return {Array} */ parseNode(el) { var result = []; - var nodes = el.cssRules; + var nodes = el.cssRules || []; for (var i = 0, len = nodes.length; i < len; i++) { var node = nodes[i]; var sels = node.selectorText; var selsAdd = []; + const type = node.type.toString(); - // It's a CSSMediaRule - if (node.cssRules) { + if (atRuleKeys.indexOf(type) >= 0) { + console.log(node); var subRules = this.parseNode(node); - var mediaText = node.media.mediaText; + const condition = + node.conditionText || + (node.media && node.media.mediaText) || + node.selectorText || + node.name || + ''; for (var s = 0, lens = subRules.length; s < lens; s++) { var subRule = subRules[s]; - subRule.mediaText = mediaText ? mediaText.trim() : ''; + subRule.mediaText = condition.trim(); + subRule.atRuleType = atRules[type]; } - + console.log(subRules); result = result.concat(subRules); }