react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / nwmatcher / src / nwmatcher-base.js
81141 views/*1* Copyright (C) 2007-2015 Diego Perini2* All rights reserved.3*4* nwmatcher-base.js - A fast CSS selector engine and matcher5*6* Author: Diego Perini <diego.perini at gmail com>7* Version: 1.3.48* Created: 200707229* Release: 2015010110*11* License:12* http://javascript.nwbox.com/NWMatcher/MIT-LICENSE13* Download:14* http://javascript.nwbox.com/NWMatcher/nwmatcher.js15*/1617(function(global, factory) {1819if (typeof module == 'object' && typeof exports == 'object') {20module.exports = function (browserGlobal) {21// passed global does not contain22// references to native objects23browserGlobal.console = console;24browserGlobal.parseInt = parseInt;25browserGlobal.Function = Function;26browserGlobal.Boolean = Boolean;27browserGlobal.Number = Number;28browserGlobal.RegExp = RegExp;29browserGlobal.String = String;30browserGlobal.Object = Object;31browserGlobal.Array = Array;32browserGlobal.Error = Error;33browserGlobal.Date = Date;34browserGlobal.Math = Math;35var exports = browserGlobal.Object();36factory(browserGlobal, exports);37return exports;38};39module.factory = factory;40} else {41factory(global,42(global.NW || (global.NW = global.Object())) &&43(global.NW.Dom || (global.NW.Dom = global.Object())));44global.NW.Dom.factory = factory;45}4647})(this, function(global, exports) {4849var version = 'nwmatcher-1.3.4',5051Dom = exports,5253doc = global.document,54root = doc.documentElement,5556slice = global.Array.slice,5758isSingleMatch,59isSingleSelect,6061lastSlice,62lastContext,63lastPosition,6465lastMatcher,66lastSelector,6768lastPartsMatch,69lastPartsSelect,7071prefixes = '[#.:]?',72operators = '([~*^$|!]?={1})',73whitespace = '[\\x20\\t\\n\\r\\f]*',74combinators = '[\\x20]|[>+~][^>+~]',75pseudoparms = '(?:[-+]?\\d*n)?[-+]?\\d*',7677quotedvalue = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"' + "|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'",78skipgroup = '\\[.*\\]|\\(.*\\)|\\{.*\\}',7980encoding = '(?:[-\\w]|[^\\x00-\\xa0]|\\\\.)',81identifier = '(?:-?[_a-zA-Z]{1}[-\\w]*|[^\\x00-\\xa0]+|\\\\.+)+',8283attrcheck = '(' + quotedvalue + '|' + identifier + ')',84attributes = whitespace + '(' + encoding + '*:?' + encoding + '+)' +85whitespace + '(?:' + operators + whitespace + attrcheck + ')?' + whitespace,8687attrmatcher = attributes.replace(attrcheck, '([\\x22\\x27]*)((?:\\\\?.)*?)\\3'),8889pseudoclass = '((?:' +90pseudoparms + '|' + quotedvalue + '|' +91prefixes + '|' + encoding + '+|' +92'\\[' + attributes + '\\]|' +93'\\(.+\\)|' + whitespace + '|' +94',)+)',9596extensions = '.+',9798standardValidator =99'(?=[\\x20\\t\\n\\r\\f]*[^>+~(){}<>])' +100'(' +101'\\*' +102'|(?:' + prefixes + identifier + ')' +103'|' + combinators +104'|\\[' + attributes + '\\]' +105'|\\(' + pseudoclass + '\\)' +106'|\\{' + extensions + '\\}' +107'|(?:,|' + whitespace + ')' +108')+',109110extendedValidator = standardValidator.replace(pseudoclass, '.*'),111112reValidator = global.RegExp(standardValidator, 'g'),113114reTrimSpaces = global.RegExp('^' +115whitespace + '|' + whitespace + '$', 'g'),116117reSplitGroup = global.RegExp('(' +118'[^,\\\\()[\\]]+' +119'|\\[[^[\\]]*\\]|\\[.*\\]' +120'|\\([^()]+\\)|\\(.*\\)' +121'|\\{[^{}]+\\}|\\{.*\\}' +122'|\\\\.' +123')+', 'g'),124125reSplitToken = global.RegExp('(' +126'\\[' + attributes + '\\]|' +127'\\(' + pseudoclass + '\\)|' +128'\\\\.|[^\\x20\\t\\n\\r\\f>+~])+', 'g'),129130reWhiteSpace = /[\x20\t\n\r\f]+/g,131132reOptimizeSelector = global.RegExp(identifier + '|^$'),133134ATTR_BOOLEAN = global.Object({135checked: 1, disabled: 1, ismap: 1,136multiple: 1, readonly: 1, selected: 1137}),138139ATTR_DEFAULT = global.Object({140value: 'defaultValue',141checked: 'defaultChecked',142selected: 'defaultSelected'143}),144145ATTR_URIDATA = global.Object({146action: 2, cite: 2, codebase: 2, data: 2, href: 2,147longdesc: 2, lowsrc: 2, src: 2, usemap: 2148}),149150Selectors = global.Object(),151152Operators = global.Object({153'=': "n=='%m'",154'^=': "n.indexOf('%m')==0",155'*=': "n.indexOf('%m')>-1",156'|=': "(n+'-').indexOf('%m-')==0",157'~=': "(' '+n+' ').indexOf(' %m ')>-1",158'$=': "n.substr(n.length-'%m'.length)=='%m'"159}),160161Optimize = global.Object({162ID: global.RegExp('^\\*?#(' + encoding + '+)|' + skipgroup),163TAG: global.RegExp('^(' + encoding + '+)|' + skipgroup),164CLASS: global.RegExp('^\\*?\\.(' + encoding + '+$)|' + skipgroup)165}),166167Patterns = global.Object({168universal: /^\*(.*)/,169id: global.RegExp('^#(' + encoding + '+)(.*)'),170tagName: global.RegExp('^(' + encoding + '+)(.*)'),171className: global.RegExp('^\\.(' + encoding + '+)(.*)'),172attribute: global.RegExp('^\\[' + attrmatcher + '\\](.*)'),173children: /^[\x20\t\n\r\f]*\>[\x20\t\n\r\f]*(.*)/,174adjacent: /^[\x20\t\n\r\f]*\+[\x20\t\n\r\f]*(.*)/,175relative: /^[\x20\t\n\r\f]*\~[\x20\t\n\r\f]*(.*)/,176ancestor: /^[\x20\t\n\r\f]+(.*)/177}),178179QUIRKS_MODE,180XML_DOCUMENT,181182GEBTN = 'getElementsByTagName' in doc,183GEBCN = 'getElementsByClassName' in doc,184185IE_LT_9 = typeof doc.addEventListener != 'function',186187INSENSITIVE_MAP = global.Object({188'href': 1, 'lang': 1, 'src': 1, 'style': 1, 'title': 1,189'type': 1, 'xmlns': 1, 'xml:lang': 1, 'xml:space': 1190}),191192TO_UPPER_CASE = IE_LT_9 ? '.toUpperCase()' : '',193194ACCEPT_NODE = 'r[r.length]=c[k];if(f&&false===f(c[k]))break main;else continue main;',195REJECT_NODE = IE_LT_9 ? 'if(e.nodeName<"A")continue;' : '',196197Config = global.Object({198CACHING: false,199SIMPLENOT: true,200UNIQUE_ID: true,201USE_HTML5: true,202VERBOSITY: true203}),204205configure =206function(option) {207if (typeof option == 'string') { return Config[option] || Config; }208if (typeof option != 'object') { return false; }209for (var i in option) {210Config[i] = !!option[i];211if (i == 'SIMPLENOT') {212matchContexts = global.Object();213matchResolvers = global.Object();214selectContexts = global.Object();215selectResolvers = global.Object();216}217}218reValidator = global.RegExp(Config.SIMPLENOT ?219standardValidator : extendedValidator, 'g');220return true;221},222223concatCall =224function(data, elements, callback) {225var i = -1, element;226while ((element = elements[++i])) {227if (false === callback(data[data.length] = element)) { break; }228}229return data;230},231232emit =233function(message) {234if (Config.VERBOSITY) { throw global.Error(message); }235if (global.console && global.console.log) {236global.console.log(message);237}238},239240switchContext =241function(from, force) {242var oldDoc = doc;243lastContext = from;244doc = from.ownerDocument || from;245if (force || oldDoc !== doc) {246root = doc.documentElement;247XML_DOCUMENT = doc.createElement('DiV').nodeName == 'DiV';248QUIRKS_MODE = !XML_DOCUMENT &&249typeof doc.compatMode == 'string' ?250doc.compatMode.indexOf('CSS') < 0 :251(function() {252var style = doc.createElement('div').style;253return style && (style.width = 1) && style.width == '1px';254})();255256Config.CACHING && Dom.setCache(true, doc);257}258},259260convertEscapes =261function(str) {262return str.replace(/\\([0-9a-fA-F]{1,6}\x20?|.)|([\x22\x27])/g, function(substring, p1, p2) {263var codePoint, highHex, highSurrogate, lowHex, lowSurrogate;264265if (p2) {266return '\\' + p2;267}268269if (/^[0-9a-fA-F]/.test(p1)) {270codePoint = parseInt(p1, 16);271272if (codePoint < 0 || codePoint > 0x10ffff) {273return '\\ufffd';274}275276if (codePoint <= 0xffff) {277lowHex = '000' + codePoint.toString(16);278return '\\u' + lowHex.substr(lowHex.length - 4);279}280281codePoint -= 0x10000;282highSurrogate = (codePoint >> 10) + 0xd800;283lowSurrogate = (codePoint % 0x400) + 0xdc00;284highHex = '000' + highSurrogate.toString(16);285lowHex = '000' + lowSurrogate.toString(16);286287return '\\u' + highHex.substr(highHex.length - 4) +288'\\u' + lowHex.substr(lowHex.length - 4);289}290291if (/^[\\\x22\x27]/.test(p1)) {292return substring;293}294295return p1;296});297},298299byIdRaw =300function(id, elements) {301var i = 0, element = null;302while ((element = elements[i])) {303if (element.getAttribute('id') == id) {304break;305}306++i;307}308return element;309},310311_byId = !('fileSize' in doc) ?312function(id, from) {313id = id.replace(/\\([^\\]{1})/g, '$1');314return from.getElementById && from.getElementById(id) ||315byIdRaw(id, from.getElementsByTagName('*'));316} :317function(id, from) {318var element = null;319id = id.replace(/\\([^\\]{1})/g, '$1');320if (XML_DOCUMENT || from.nodeType != 9) {321return byIdRaw(id, from.getElementsByTagName('*'));322}323if ((element = from.getElementById(id)) &&324element.name == id && from.getElementsByName) {325return byIdRaw(id, from.getElementsByName(id));326}327return element;328},329330byId =331function(id, from) {332from || (from = doc);333if (lastContext !== from) { switchContext(from); }334return _byId(id, from);335},336337byTagRaw =338function(tag, from) {339var any = tag == '*', element = from, elements = global.Array(), next = element.firstChild;340any || (tag = tag.toUpperCase());341while ((element = next)) {342if (element.tagName > '@' && (any || element.tagName.toUpperCase() == tag)) {343elements[elements.length] = element;344}345if ((next = element.firstChild || element.nextSibling)) continue;346while (!next && (element = element.parentNode) && element !== from) {347next = element.nextSibling;348}349}350return elements;351},352353getAttribute =354function(node, attribute) {355attribute = attribute.toLowerCase();356if (typeof node[attribute] == 'object') {357return node.attributes[attribute] &&358node.attributes[attribute].value || '';359}360return (361attribute == 'type' ? node.getAttribute(attribute) || '' :362ATTR_URIDATA[attribute] ? node.getAttribute(attribute, 2) || '' :363ATTR_BOOLEAN[attribute] ? node.getAttribute(attribute) ? attribute : 'false' :364((node = node.getAttributeNode(attribute)) && node.value) || '');365},366367hasAttribute = root.hasAttribute ?368function(node, attribute) {369return node.hasAttribute(attribute);370} :371function(node, attribute) {372attribute = attribute.toLowerCase();373if (ATTR_DEFAULT[attribute]) {374return !!node[ATTR_DEFAULT[attribute]];375}376node = node.getAttributeNode(attribute);377return !!(node && node.specified);378},379380compile =381function(selector, source, mode) {382383var parts = typeof selector == 'string' ? selector.match(reSplitGroup) : selector;384385typeof source == 'string' || (source = '');386387if (parts.length == 1) {388source += compileSelector(parts[0], mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode);389} else {390var i = -1, seen = global.Object(), token;391while ((token = parts[++i])) {392token = token.replace(reTrimSpaces, '');393if (!seen[token] && (seen[token] = true)) {394source += compileSelector(token, mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode);395}396}397}398399if (mode)400return global.Function('c,s,r,d,h,g,f,v',401'var N,n,x=0,k=-1,e;main:while((e=c[++k])){' + source + '}return r;');402else403return global.Function('e,s,r,d,h,g,f,v',404'var N,n,x=0,k=e;' + source + 'return false;');405},406407FILTER =408'var z=v[@]||(v[@]=[]),l=z.length-1;' +409'while(l>=0&&z[l]!==e)--l;' +410'if(l!==-1){break;}' +411'z[z.length]=e;',412413compileSelector =414function(selector, source, mode) {415416var k = 0, expr, match, name, result, status, test, type;417418while (selector) {419420k++;421422if ((match = selector.match(Patterns.universal))) {423expr = '';424}425426else if ((match = selector.match(Patterns.id))) {427source = 'if(' + (XML_DOCUMENT ?428's.getAttribute(e,"id")' :429'(e.submit?s.getAttribute(e,"id"):e.id)') +430'=="' + match[1] + '"' +431'){' + source + '}';432}433434else if ((match = selector.match(Patterns.tagName))) {435source = 'if(e.nodeName' + (XML_DOCUMENT ?436'=="' + match[1] + '"' : TO_UPPER_CASE +437'=="' + match[1].toUpperCase() + '"') +438'){' + source + '}';439}440441else if ((match = selector.match(Patterns.className))) {442source = 'if((n=' + (XML_DOCUMENT ?443'e.getAttribute("class")' : 'e.className') +444')&&n.length&&(" "+' + (QUIRKS_MODE ? 'n.toLowerCase()' : 'n') +445'.replace(' + reWhiteSpace + '," ")+" ").indexOf(" ' +446(QUIRKS_MODE ? match[1].toLowerCase() : match[1]) + ' ")>-1' +447'){' + source + '}';448}449450else if ((match = selector.match(Patterns.attribute))) {451if (match[2] && !Operators[match[2]]) {452emit('Unsupported operator in attribute selectors "' + selector + '"');453return '';454}455test = 'false';456if (match[2] && match[4] && (test = Operators[match[2]])) {457match[4] = convertEscapes(match[4]);458type = INSENSITIVE_MAP[match[1].toLowerCase()];459test = test.replace(/\%m/g, type ? match[4].toLowerCase() : match[4]);460} else if (match[2] == '!=' || match[2] == '=') {461test = 'n' + match[2] + '=""';462}463expr = 'n=s.' + (match[2] ? 'get' : 'has') + 'Attribute(e,"' + match[1] + '")' + (type && match[2] ? '.toLowerCase();' : ';');464source = expr + 'if(' + (match[2] ? test : 'n') + '){' + source + '}';465}466467else if ((match = selector.match(Patterns.adjacent))) {468source = (mode ? '' : FILTER.replace(/@/g, k)) + source;469source = 'var N' + k + '=e;while(e&&(e=e.previousSibling)){if(e.nodeName>"@"){' + source + 'break;}}e=N' + k + ';';470}471472else if ((match = selector.match(Patterns.relative))) {473source = (mode ? '' : FILTER.replace(/@/g, k)) + source;474source = 'var N' + k + '=e;e=e.parentNode.firstChild;while(e&&e!==N' + k + '){if(e.nodeName>"@"){' + source + '}e=e.nextSibling;}e=N' + k + ';';475}476477else if ((match = selector.match(Patterns.children))) {478source = (mode ? '' : FILTER.replace(/@/g, k)) + source;479source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + 'break;}e=N' + k + ';';480}481482else if ((match = selector.match(Patterns.ancestor))) {483source = (mode ? '' : FILTER.replace(/@/g, k)) + source;484source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + '}e=N' + k + ';';485}486487else {488489expr = false;490status = false;491for (expr in Selectors) {492if ((match = selector.match(Selectors[expr].Expression)) && match[1]) {493result = Selectors[expr].Callback(match, source);494source = result.source;495status = result.status;496if (status) { break; }497}498}499500if (!status) {501emit('Unknown pseudo-class selector "' + selector + '"');502return '';503}504505if (!expr) {506emit('Unknown token in selector "' + selector + '"');507return '';508}509510}511512if (!match) {513emit('Invalid syntax in selector "' + selector + '"');514return '';515}516517selector = match && match[match.length - 1];518}519520return source;521},522523match =524function(element, selector, from, callback) {525526var parts;527528if (!(element && element.nodeType == 1)) {529emit('Invalid element argument');530return false;531} else if (typeof selector != 'string') {532emit('Invalid selector argument');533return false;534} else if (lastContext !== from) {535switchContext(from || (from = element.ownerDocument));536}537538selector = selector.replace(reTrimSpaces, '');539540Config.SHORTCUTS && (selector = Dom.shortcuts(selector, element, from));541542if (lastMatcher != selector) {543if ((parts = selector.match(reValidator)) && parts[0] == selector) {544isSingleMatch = (parts = selector.match(reSplitGroup)).length < 2;545lastMatcher = selector;546lastPartsMatch = parts;547} else {548emit('The string "' + selector + '", is not a valid CSS selector');549return false;550}551} else parts = lastPartsMatch;552553if (!matchResolvers[selector] || matchContexts[selector] !== from) {554matchResolvers[selector] = compile(isSingleMatch ? [selector] : parts, '', false);555matchContexts[selector] = from;556}557558return matchResolvers[selector](element, Snapshot, [ ], doc, root, from, callback, { });559},560561first =562function(selector, from) {563return select(selector, from, function() { return false; })[0] || null;564},565566select =567function(selector, from, callback) {568569var i, changed, element, elements, parts, token, original = selector;570571if (arguments.length === 0) {572emit('Not enough arguments');573return [ ];574} else if (typeof selector != 'string') {575return [ ];576} else if (from && !(/1|9|11/).test(from.nodeType)) {577emit('Invalid or illegal context element');578return [ ];579} else if (lastContext !== from) {580switchContext(from || (from = doc));581}582583if (Config.CACHING && (elements = Dom.loadResults(original, from, doc, root))) {584return callback ? concatCall([ ], elements, callback) : elements;585}586587selector = selector.replace(reTrimSpaces, '');588589Config.SHORTCUTS && (selector = Dom.shortcuts(selector, from));590591if ((changed = lastSelector != selector)) {592if ((parts = selector.match(reValidator)) && parts[0] == selector) {593isSingleSelect = (parts = selector.match(reSplitGroup)).length < 2;594lastSelector = selector;595lastPartsSelect = parts;596} else {597emit('The string "' + selector + '", is not a valid CSS selector');598return [ ];599}600} else parts = lastPartsSelect;601602if (from.nodeType == 11) {603604elements = byTagRaw('*', from);605606} else if (isSingleSelect) {607608if (changed) {609parts = selector.match(reSplitToken);610token = parts[parts.length - 1];611lastSlice = token.split(':not')[0];612lastPosition = selector.length - token.length;613}614615if (Config.UNIQUE_ID && (parts = lastSlice.match(Optimize.ID)) && (token = parts[1])) {616if ((element = _byId(token, from))) {617if (match(element, selector)) {618callback && callback(element);619elements = global.Array(element);620} else elements = global.Array();621}622}623624else if (Config.UNIQUE_ID && (parts = selector.match(Optimize.ID)) && (token = parts[1])) {625if ((element = _byId(token, doc))) {626if ('#' + token == selector) {627callback && callback(element);628elements = global.Array(element);629} else if (/[>+~]/.test(selector)) {630from = element.parentNode;631} else {632from = element;633}634} else elements = global.Array();635}636637if (elements) {638Config.CACHING && Dom.saveResults(original, from, doc, elements);639return elements;640}641642if (!XML_DOCUMENT && GEBTN && (parts = lastSlice.match(Optimize.TAG)) && (token = parts[1])) {643if ((elements = from.getElementsByTagName(token)).length === 0) return [ ];644selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace(token, '*');645}646647else if (!XML_DOCUMENT && GEBCN && (parts = lastSlice.match(Optimize.CLASS)) && (token = parts[1])) {648if ((elements = from.getElementsByClassName(token.replace(/\\([^\\]{1})/g, '$1'))).length === 0) return [ ];649selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace('.' + token,650reOptimizeSelector.test(selector.charAt(selector.indexOf(token) - 1)) ? '' : '*');651}652653}654655if (!elements) {656if (IE_LT_9) {657elements = /^(?:applet|object)$/i.test(from.nodeName) ?658from.childNodes : from.all;659} else {660elements = from.getElementsByTagName('*');661}662}663664if (!selectResolvers[selector] || selectContexts[selector] !== from) {665selectResolvers[selector] = compile(isSingleSelect ? [selector] : parts, REJECT_NODE, true);666selectContexts[selector] = from;667}668669elements = selectResolvers[selector](elements, Snapshot, [ ], doc, root, from, callback, { });670671Config.CACHING && Dom.saveResults(original, from, doc, elements);672673return elements;674},675676FN = function(x) { return x; },677678matchContexts = global.Object(),679matchResolvers = global.Object(),680681selectContexts = global.Object(),682selectResolvers = global.Object(),683684Snapshot = global.Object({685byId: _byId,686match: match,687select: select,688getAttribute: getAttribute,689hasAttribute: hasAttribute690});691692Tokens = global.Object({693prefixes: prefixes,694encoding: encoding,695operators: operators,696whitespace: whitespace,697identifier: identifier,698attributes: attributes,699combinators: combinators,700pseudoclass: pseudoclass,701pseudoparms: pseudoparms,702quotedvalue: quotedvalue703});704705Dom.ACCEPT_NODE = ACCEPT_NODE;706707Dom.byId = byId;708Dom.match = match;709Dom.first = first;710Dom.select = select;711Dom.compile = compile;712Dom.configure = configure;713714Dom.setCache = FN;715Dom.shortcuts = FN;716Dom.loadResults = FN;717Dom.saveResults = FN;718719Dom.emit = emit;720Dom.Config = Config;721Dom.Snapshot = Snapshot;722723Dom.Operators = Operators;724Dom.Selectors = Selectors;725726Dom.Tokens = Tokens;727Dom.Version = version;728729Dom.registerOperator =730function(symbol, resolver) {731Operators[symbol] || (Operators[symbol] = resolver);732};733734Dom.registerSelector =735function(name, rexp, func) {736Selectors[name] || (Selectors[name] = global.Object({737Expression: rexp,738Callback: func739}));740};741742switchContext(doc, true);743744});745746747