summaryrefslogtreecommitdiff
path: root/bin/wiki/ImportarDesdeURL/node_modules/css-what/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/css-what/index.js')
-rw-r--r--bin/wiki/ImportarDesdeURL/node_modules/css-what/index.js274
1 files changed, 274 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/css-what/index.js b/bin/wiki/ImportarDesdeURL/node_modules/css-what/index.js
new file mode 100644
index 00000000..fdb98c9d
--- /dev/null
+++ b/bin/wiki/ImportarDesdeURL/node_modules/css-what/index.js
@@ -0,0 +1,274 @@
+"use strict";
+
+module.exports = parse;
+
+var re_name = /^(?:\\.|[\w\-\u00b0-\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\u00b0-\uFFFF\-])+)\s*(?:(\S?)=\s*(?:(['"])([^]*?)\3|(#?(?:\\.|[\w\u00b0-\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"]
+};
+
+//pseudos, whose data-property is parsed as well
+var unpackPseudos = {
+ __proto__: null,
+ "has": true,
+ "not": true,
+ "matches": true
+};
+
+var stripQuotesFromPseudos = {
+ __proto__: null,
+ "contains": true,
+ "icontains": true
+};
+
+var quotes = {
+ __proto__: null,
+ "\"": true,
+ "'": true
+};
+
+//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 isWhitespace(c){
+ return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r";
+}
+
+function parse(selector, options){
+ var subselects = [];
+
+ selector = parseSelector(subselects, selector + "", options);
+
+ if(selector !== ""){
+ throw new SyntaxError("Unmatched selector: " + selector);
+ }
+
+ return subselects;
+}
+
+function parseSelector(subselects, selector, options){
+ var tokens = [],
+ sawWS = false,
+ data, firstChar, name, quot;
+
+ function getName(){
+ var sub = selector.match(re_name)[0];
+ selector = selector.substr(sub.length);
+ return unescapeCSS(sub);
+ }
+
+ function stripWhitespace(start){
+ while(isWhitespace(selector.charAt(start))) start++;
+ selector = selector.substr(start);
+ }
+
+ function isEscaped(pos) {
+ var slashCount = 0;
+
+ while (selector.charAt(--pos) === "\\") slashCount++;
+ return (slashCount & 1) === 1;
+ }
+
+ stripWhitespace(0);
+
+ while(selector !== ""){
+ firstChar = selector.charAt(0);
+
+ if(isWhitespace(firstChar)){
+ sawWS = true;
+ stripWhitespace(1);
+ } else if(firstChar in simpleSelectors){
+ tokens.push({type: simpleSelectors[firstChar]});
+ sawWS = false;
+
+ stripWhitespace(1);
+ } else if(firstChar === ","){
+ if(tokens.length === 0){
+ throw new SyntaxError("empty sub-selector");
+ }
+ subselects.push(tokens);
+ tokens = [];
+ sawWS = false;
+ stripWhitespace(1);
+ } else {
+ if(sawWS){
+ if(tokens.length > 0){
+ tokens.push({type: "descendant"});
+ }
+ sawWS = false;
+ }
+
+ if(firstChar === "*"){
+ selector = selector.substr(1);
+ tokens.push({type: "universal"});
+ } else if(firstChar in attribSelectors){
+ selector = selector.substr(1);
+ tokens.push({
+ type: "attribute",
+ name: attribSelectors[firstChar][0],
+ action: attribSelectors[firstChar][1],
+ value: getName(),
+ ignoreCase: false
+ });
+ } else if(firstChar === "["){
+ selector = selector.substr(1);
+ 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(1) === ":"){
+ selector = selector.substr(2);
+ tokens.push({type: "pseudo-element", name: getName().toLowerCase()});
+ continue;
+ }
+
+ selector = selector.substr(1);
+
+ name = getName().toLowerCase();
+ data = null;
+
+ if(selector.charAt(0) === "("){
+ if(name in unpackPseudos){
+ quot = selector.charAt(1);
+ var quoted = quot in quotes;
+
+ selector = selector.substr(quoted + 1);
+
+ data = [];
+ selector = parseSelector(data, selector, options);
+
+ if(quoted){
+ if(selector.charAt(0) !== quot){
+ throw new SyntaxError("unmatched quotes in :" + name);
+ } else {
+ selector = selector.substr(1);
+ }
+ }
+
+ if(selector.charAt(0) !== ")"){
+ throw new SyntaxError("missing closing parenthesis in :" + name + " " + selector);
+ }
+
+ selector = selector.substr(1);
+ } else {
+ var pos = 1, counter = 1;
+
+ for(; counter > 0 && pos < selector.length; pos++){
+ if(selector.charAt(pos) === "(" && !isEscaped(pos)) counter++;
+ else if(selector.charAt(pos) === ")" && !isEscaped(pos)) counter--;
+ }
+
+ if(counter){
+ throw new SyntaxError("parenthesis not matched");
+ }
+
+ data = selector.substr(1, pos - 2);
+ selector = selector.substr(pos);
+
+ if(name in stripQuotesFromPseudos){
+ quot = data.charAt(0);
+
+ if(quot === data.slice(-1) && quot in quotes){
+ data = data.slice(1, -1);
+ }
+
+ data = unescapeCSS(data);
+ }
+ }
+ }
+
+ tokens.push({type: "pseudo", name: name, data: data});
+ } else if(re_name.test(selector)){
+ name = getName();
+
+ if(!options || ("lowerCaseTags" in options ? options.lowerCaseTags : !options.xmlMode)){
+ name = name.toLowerCase();
+ }
+
+ tokens.push({type: "tag", name: name});
+ } else {
+ if(tokens.length && tokens[tokens.length - 1].type === "descendant"){
+ tokens.pop();
+ }
+ addToken(subselects, tokens);
+ return selector;
+ }
+ }
+ }
+
+ addToken(subselects, tokens);
+
+ return selector;
+}
+
+function addToken(subselects, tokens){
+ if(subselects.length > 0 && tokens.length === 0){
+ throw new SyntaxError("empty sub-selector");
+ }
+
+ subselects.push(tokens);
+}