vendor/node_modules/cssom/lib/parse.js in stylus-source-0.23.0 vs vendor/node_modules/cssom/lib/parse.js in stylus-source-0.24.0

- old
+ new

@@ -11,16 +11,14 @@ ///CommonJS /** * @param {string} token - * @param {Object} [options] */ -CSSOM.parse = function parse(token, options) { +CSSOM.parse = function parse(token) { - options = options || {}; - var i = options.startIndex || 0; + var i = 0; /** "before-selector" or "selector" or "atRule" or @@ -28,14 +26,13 @@ "before-name" or "name" or "before-value" or "value" */ - var state = options.state || "before-selector"; + var state = "before-selector"; var index; - var j = i; var buffer = ""; var SIGNIFICANT_WHITESPACE = { "selector": true, "value": true, @@ -45,13 +42,16 @@ "atBlock": true }; var styleSheet = new CSSOM.CSSStyleSheet; - // @type CSSStyleSheet|CSSMediaRule + // @type CSSStyleSheet|CSSMediaRule|CSSKeyframesRule var currentScope = styleSheet; - + + // @type CSSMediaRule|CSSKeyframesRule + var parentRule; + var selector, name, value, priority="", styleRule, mediaRule, importRule, keyframesRule, keyframeRule; for (var character; character = token.charAt(i); i++) { switch (character) { @@ -66,12 +66,11 @@ } break; // String case '"': - j = i + 1; - index = token.indexOf('"', j) + 1; + index = token.indexOf('"', i + 1) + 1; if (!index) { throw '" is missing'; } buffer += token.slice(i, index); i = index - 1; @@ -84,12 +83,11 @@ break; } break; case "'": - j = i + 1; - index = token.indexOf("'", j) + 1; + index = token.indexOf("'", i + 1) + 1; if (!index) { throw "' is missing"; } buffer += token.slice(i, index); i = index - 1; @@ -103,106 +101,109 @@ } break; // Comment case "/": - if (token.charAt(i + 1) == "*") { + if (token.charAt(i + 1) === "*") { i += 2; index = token.indexOf("*/", i); - if (index == -1) { - throw SyntaxError("Missing */"); + if (index === -1) { + throw new SyntaxError("Missing */"); } else { i = index + 1; } } else { buffer += character; } - if (state == "importRule-begin") { + if (state === "importRule-begin") { buffer += " "; state = "importRule"; } break; // At-rule case "@": - if (token.indexOf("@media", i) == i) { + if (token.indexOf("@media", i) === i) { state = "atBlock"; mediaRule = new CSSOM.CSSMediaRule; mediaRule.__starts = i; i += "media".length; buffer = ""; break; - } else if (token.indexOf("@import", i) == i) { + } else if (token.indexOf("@import", i) === i) { state = "importRule-begin"; i += "import".length; buffer += "@import"; break; - } else if (token.indexOf("@-webkit-keyframes", i) == i) { + } else if (token.indexOf("@-webkit-keyframes", i) === i) { state = "keyframesRule-begin"; keyframesRule = new CSSOM.CSSKeyframesRule; keyframesRule.__starts = i; i += "-webkit-keyframes".length; buffer = ""; break; - } else if (state == "selector") { + } else if (state === "selector") { state = "atRule"; } buffer += character; break; case "{": - if (state == "selector" || state == "atRule") { - styleRule.selectorText = buffer.trimRight(); + if (state === "selector" || state === "atRule") { + styleRule.selectorText = buffer.trim(); styleRule.style.__starts = i; buffer = ""; state = "before-name"; - } else if (state == "atBlock") { + } else if (state === "atBlock") { mediaRule.media.mediaText = buffer.trim(); - mediaRule.parentRule = currentScope; - currentScope = mediaRule; + currentScope = parentRule = mediaRule; + mediaRule.parentStyleSheet = styleSheet; buffer = ""; state = "before-selector"; - } else if (state == "keyframesRule-begin") { - keyframesRule.name = buffer.trimRight(); - keyframesRule.parentRule = currentScope; - currentScope = keyframesRule; + } else if (state === "keyframesRule-begin") { + keyframesRule.name = buffer.trim(); + if (parentRule) { + keyframesRule.parentRule = parentRule; + } + keyframesRule.parentStyleSheet = styleSheet; + currentScope = parentRule = keyframesRule; buffer = ""; state = "keyframeRule-begin"; - } else if (state == "keyframeRule-begin") { + } else if (state === "keyframeRule-begin") { styleRule = new CSSOM.CSSKeyframeRule; - styleRule.keyText = buffer.trimRight(); + styleRule.keyText = buffer.trim(); styleRule.__starts = i; buffer = ""; state = "before-name"; } break; case ":": - if (state == "name") { + if (state === "name") { name = buffer.trim(); buffer = ""; state = "before-value"; } else { buffer += character; } break; case '(': - if (state == 'value') { + if (state === 'value') { index = token.indexOf(')', i + 1); - if (index == -1) { + if (index === -1) { throw i + ': unclosed "("'; } buffer += token.slice(i, index + 1); i = index; } else { buffer += character; } break; case "!": - if (state == "value" && token.indexOf("!important", i) === i) { + if (state === "value" && token.indexOf("!important", i) === i) { priority = "important"; i += "important".length; } else { buffer += character; } @@ -220,13 +221,13 @@ buffer = ""; state = "before-selector"; break; case "importRule": importRule = new CSSOM.CSSImportRule; - importRule.parentRule = currentScope; + importRule.parentStyleSheet = importRule.styleSheet.parentStyleSheet = styleSheet; importRule.cssText = buffer + character; - currentScope.cssRules.push(importRule); + styleSheet.cssRules.push(importRule); buffer = ""; state = "before-selector"; break; default: buffer += character; @@ -240,29 +241,33 @@ styleRule.style.setProperty(name, buffer.trim(), priority); priority = ""; case "before-name": case "name": styleRule.__ends = i + 1; - styleRule.parentRule = currentScope; + if (parentRule) { + styleRule.parentRule = parentRule; + } + styleRule.parentStyleSheet = styleSheet; currentScope.cssRules.push(styleRule); buffer = ""; - if (currentScope.constructor == CSSOM.CSSKeyframesRule) { + if (currentScope.constructor === CSSOM.CSSKeyframesRule) { state = "keyframeRule-begin"; } else { state = "before-selector"; } break; case "keyframeRule-begin": case "before-selector": case "selector": // End of media rule. - // Nesting rules aren't supported yet - if (!currentScope.parentRule) { + if (!parentRule) { throw "unexpected }"; } currentScope.__ends = i + 1; - currentScope.parentRule.cssRules.push(currentScope); - currentScope = currentScope.parentRule; + // Nesting rules aren’t supported yet + styleSheet.cssRules.push(currentScope); + currentScope = styleSheet; + parentRule = null; buffer = ""; state = "before-selector"; break; } break;