Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Unified Diff: node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/node_modules/CSSwhat/index.js

Issue 800513006: Added vulcanize under third_party/npm_modules (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/node_modules/CSSwhat/index.js
diff --git a/node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/node_modules/CSSwhat/index.js b/node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/node_modules/CSSwhat/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bd5a24d9d46f6d91e3a820c23aa1e82dfe9dddb
--- /dev/null
+++ b/node_modules/vulcanize/node_modules/whacko/node_modules/CSSselect/node_modules/CSSwhat/index.js
@@ -0,0 +1,182 @@
+"use strict";
+
+module.exports = parse;
+
+var re_ws = /^\s/,
+ re_name = /^(?:\\.|[\w\-\u00c0-\uFFFF])+/,
+ re_escape = /\\([\da-f]{1,6}\s?|(\s)|.)/ig,
+ //modified version of https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L87
+ re_attr = /^\s*((?:\\.|[\w\u00c0-\uFFFF\-])+)\s*(?:(\S?)=\s*(?:(['"])(.*?)\3|(#?(?:\\.|[\w\u00c0-\uFFFF\-])*)|)|)\s*(i)?\]/;
+
+var actionTypes = {
+ __proto__: null,
+ "undefined": "exists",
+ "": "equals",
+ "~": "element",
+ "^": "start",
+ "$": "end",
+ "*": "any",
+ "!": "not",
+ "|": "hyphen"
+};
+
+var simpleSelectors = {
+ __proto__: null,
+ ">": "child",
+ "<": "parent",
+ "~": "sibling",
+ "+": "adjacent"
+};
+
+var attribSelectors = {
+ __proto__: null,
+ "#": ["id", "equals"],
+ ".": ["class", "element"]
+};
+
+//unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L139
+function funescape( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ // BMP codepoint
+ high < 0 ?
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+}
+
+function unescapeCSS(str){
+ return str.replace(re_escape, funescape);
+}
+
+function getClosingPos(selector){
+ var pos = 1, counter = 1, len = selector.length;
+
+ for(; counter > 0 && pos < len; pos++){
+ if(selector.charAt(pos) === "(") counter++;
+ else if(selector.charAt(pos) === ")") counter--;
+ }
+
+ return pos;
+}
+
+function parse(selector, options){
+ selector = (selector + "").trimLeft();
+
+ var subselects = [],
+ tokens = [],
+ sawWS = false,
+ data, firstChar, name;
+
+ function getName(){
+ var sub = selector.match(re_name)[0];
+ selector = selector.substr(sub.length);
+ return unescapeCSS(sub);
+ }
+
+ while(selector !== ""){
+ if(re_name.test(selector)){
+ if(sawWS){
+ tokens.push({type: "descendant"});
+ sawWS = false;
+ }
+
+ name = getName();
+
+ if(!options || ("lowerCaseTags" in options ? options.lowerCaseTags : !options.xmlMode)){
+ name = name.toLowerCase();
+ }
+
+ tokens.push({type: "tag", name: name});
+ } else if(re_ws.test(selector)){
+ sawWS = true;
+ selector = selector.trimLeft();
+ } else {
+ firstChar = selector.charAt(0);
+ selector = selector.substr(1);
+
+ if(firstChar in simpleSelectors){
+ tokens.push({type: simpleSelectors[firstChar]});
+ selector = selector.trimLeft();
+ sawWS = false;
+ continue;
+ } else if(firstChar === ","){
+ if(tokens.length === 0){
+ throw new SyntaxError("empty sub-selector");
+ }
+ subselects.push(tokens);
+ tokens = [];
+
+ selector = selector.trimLeft();
+ sawWS = false;
+ continue;
+ } else if(sawWS){
+ tokens.push({type: "descendant"});
+ sawWS = false;
+ }
+
+ if(firstChar === "*"){
+ tokens.push({type: "universal"});
+ } else if(firstChar in attribSelectors){
+ tokens.push({
+ type: "attribute",
+ name: attribSelectors[firstChar][0],
+ action: attribSelectors[firstChar][1],
+ value: getName(),
+ ignoreCase: false
+ });
+ } else if(firstChar === "["){
+ data = selector.match(re_attr);
+ if(!data){
+ throw new SyntaxError("Malformed attribute selector: " + selector);
+ }
+ selector = selector.substr(data[0].length);
+ name = unescapeCSS(data[1]);
+
+ if(
+ !options || (
+ "lowerCaseAttributeNames" in options ?
+ options.lowerCaseAttributeNames :
+ !options.xmlMode
+ )
+ ){
+ name = name.toLowerCase();
+ }
+
+ tokens.push({
+ type: "attribute",
+ name: name,
+ action: actionTypes[data[2]],
+ value: unescapeCSS(data[4] || data[5] || ""),
+ ignoreCase: !!data[6]
+ });
+
+ } else if(firstChar === ":"){
+ //if(selector.charAt(0) === ":"){} //TODO pseudo-element
+ name = getName().toLowerCase();
+ data = null;
+
+ if(selector.charAt(0) === "("){
+ var pos = getClosingPos(selector);
+ data = selector.substr(1, pos - 2);
+ selector = selector.substr(pos);
+ }
+
+ tokens.push({type: "pseudo", name: name, data: data});
+ } else {
+ //otherwise, the parser needs to throw or it would enter an infinite loop
+ throw new SyntaxError("Unmatched selector: " + firstChar + selector);
+ }
+ }
+ }
+
+ if(subselects.length > 0 && tokens.length === 0){
+ throw new SyntaxError("empty sub-selector");
+ }
+ subselects.push(tokens);
+ return subselects;
+}

Powered by Google App Engine
This is Rietveld 408576698