diff --git a/.changeset/fair-dolphins-type.md b/.changeset/fair-dolphins-type.md new file mode 100644 index 0000000..076be14 --- /dev/null +++ b/.changeset/fair-dolphins-type.md @@ -0,0 +1,5 @@ +--- +"@acemir/cssom": patch +--- + +fix: selectors starting with hyphen diff --git a/lib/parse.js b/lib/parse.js index 09d4ade..d11ecb9 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -925,14 +925,14 @@ CSSOM.parse = function parse(token, opts, errorHandler) { } } // Match type selector with optional namespace: [namespace|]identifier - else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\' || selector[i] === '*' || selector[i] === '|')) { + else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\' || selector[i] === '*' || selector[i] === '|' || selector[i] === '-')) { parseNamespace(); // Optional namespace prefix if (i < len && selector[i] === '*') { i++; // Universal selector hasMatchedComponent = true; matched = true; - } else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\')) { + } else if (i < len && (isIdentStart(selector[i]) || selector[i] === '\\' || selector[i] === '-')) { if (parseIdentifier()) { hasMatchedComponent = true; matched = true; @@ -2054,7 +2054,7 @@ CSSOM.parse = function parse(token, opts, errorHandler) { // Helper functions to check character types function isSelectorStartChar(char) { - return '.:#&*['.indexOf(char) !== -1; + return '.:#&*[\\'.indexOf(char) !== -1; } function isWhitespaceChar(char) { diff --git a/spec/parse.spec.js b/spec/parse.spec.js index 50e66a4..d2c3246 100644 --- a/spec/parse.spec.js +++ b/spec/parse.spec.js @@ -4333,6 +4333,54 @@ var VALIDATION_TESTS = [ return result; })() }, + { + input: "-test {} \\-test {} --test {} \\--test {}", + result: (function() { + var result = { + cssRules: [ + { + cssRules: [], + selectorText: "-test", + style: { + length: 0 + }, + parentRule: null, + }, + { + cssRules: [], + selectorText: "-test", + style: { + length: 0 + }, + parentRule: null, + }, + { + cssRules: [], + selectorText: "--test", + style: { + length: 0 + }, + parentRule: null, + }, + { + cssRules: [], + selectorText: "--test", + style: { + length: 0 + }, + parentRule: null, + } + ], + parentStyleSheet: null + }; + result.cssRules[0].parentStyleSheet = result.cssRules[1].parentStyleSheet = result.cssRules[2].parentStyleSheet = result.cssRules[3].parentStyleSheet = result; + result.cssRules[0].style.parentRule = result.cssRules[0]; + result.cssRules[1].style.parentRule = result.cssRules[1]; + result.cssRules[2].style.parentRule = result.cssRules[2]; + result.cssRules[3].style.parentRule = result.cssRules[3]; + return result; + })() + } ]; function itParse(input, result) {