react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / nwmatcher / src / nwmatcher-noqsa.js
81141 views/*1* Copyright (C) 2007-2015 Diego Perini2* All rights reserved.3*4* nwmatcher-noqsa.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,5556isSingleMatch,57isSingleSelect,5859lastSlice,60lastContext,61lastPosition,6263lastMatcher,64lastSelector,6566lastPartsMatch,67lastPartsSelect,6869operators = '([~*^$|!]?={1})',70combinators = '[\\s]|[>+~][^>+~]',71pseudoparms = '(?:[-+]?\\d*n)?[-+]?\\d*',7273quotedvalue = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"' + "|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'",74skipgroup = '\\[.*\\]|\\(.*\\)|\\{.*\\}',7576encoding = '(?:[-\\w]|[^\\x00-\\xa0]|\\\\.)',77identifier = '(?:-?[_a-zA-Z]{1}[-\\w]*|[^\\x00-\\xa0]+|\\\\.+)+',7879attrcheck = '(' + quotedvalue + '|' + identifier + ')',80attributes = '\\s*(' + encoding + '*:?' + encoding + '+)\\s*(?:' + operators + '\\s*' + attrcheck + ')?\\s*',8182attrmatcher = attributes.replace(attrcheck, '([\\x22\\x27]*)((?:\\\\?.)*?)\\3'),8384pseudoclass = '((?:' +85pseudoparms + '|' + quotedvalue + '|' +86'[#.:]?|' + encoding + '+|' +87'\\[' + attributes + '\\]|' +88'\\(.+\\)|\\s*|' +89',)+)',9091extensions = '.+',9293standardValidator =94'(?=\\s*[^>+~(){}<>])' +95'(' +96'\\*' +97'|(?:[#.:]?' + identifier + ')' +98'|' + combinators +99'|\\[' + attributes + '\\]' +100'|\\(' + pseudoclass + '\\)' +101'|\\{' + extensions + '\\}' +102'|(?:,|\\s*)' +103')+',104105extendedValidator = standardValidator.replace(pseudoclass, '.*'),106107reValidator = global.RegExp(standardValidator, 'g'),108109reTrimSpaces = /^\s*|\s*$/g,110111reSimpleNot = global.RegExp('^(' +112'(?!:not)' +113'([#.:]?' +114'|' + identifier +115'|\\([^()]*\\))+' +116'|\\[' + attributes + '\\]' +117')$'),118119reSplitGroup = /([^,\\()[\]]+|\[[^[\]]*\]|\[.*\]|\([^()]+\)|\(.*\)|\{[^{}]+\}|\{.*\}|\\.)+/g,120121reSplitToken = global.RegExp('(' +122'\\[' + attributes + '\\]|' +123'\\(' + pseudoclass + '\\)|' +124'\\\\.|[^\\s>+~])+', 'g'),125126reOptimizeSelector = global.RegExp(identifier + '|^$'),127128QUIRKS_MODE,129XML_DOCUMENT,130131GEBTN = 'getElementsByTagName' in doc,132GEBCN = 'getElementsByClassName' in doc,133134LINK_NODES = global.Object({ a: 1, A: 1, area: 1, AREA: 1, link: 1, LINK: 1 }),135136ATTR_BOOLEAN = global.Object({137checked: 1, disabled: 1, ismap: 1,138multiple: 1, readonly: 1, selected: 1139}),140141ATTR_DEFAULT = global.Object({142value: 'defaultValue',143checked: 'defaultChecked',144selected: 'defaultSelected'145}),146147ATTR_URIDATA = global.Object({148action: 2, cite: 2, codebase: 2, data: 2, href: 2,149longdesc: 2, lowsrc: 2, src: 2, usemap: 2150}),151152Selectors = global.Object({153}),154155Operators = global.Object({156'=': "n=='%m'",157'^=': "n.indexOf('%m')==0",158'*=': "n.indexOf('%m')>-1",159'|=': "(n+'-').indexOf('%m-')==0",160'~=': "(' '+n+' ').indexOf(' %m ')>-1",161'$=': "n.substr(n.length-'%m'.length)=='%m'"162}),163164Optimize = global.Object({165ID: global.RegExp('^\\*?#(' + encoding + '+)|' + skipgroup),166TAG: global.RegExp('^(' + encoding + '+)|' + skipgroup),167CLASS: global.RegExp('^\\*?\\.(' + encoding + '+$)|' + skipgroup)168}),169170Patterns = global.Object({171spseudos: /^\:(root|empty|(?:first|last|only)(?:-child|-of-type)|nth(?:-last)?(?:-child|-of-type)\(\s*(even|odd|(?:[-+]{0,1}\d*n\s*)?[-+]{0,1}\s*\d*)\s*\))?(.*)/i,172dpseudos: /^\:(link|visited|target|active|focus|hover|checked|disabled|enabled|selected|lang\(([-\w]{2,})\)|not\(([^()]*|.*)\))?(.*)/i,173attribute: global.RegExp('^\\[' + attrmatcher + '\\](.*)'),174children: /^\s*\>\s*(.*)/,175adjacent: /^\s*\+\s*(.*)/,176relative: /^\s*\~\s*(.*)/,177ancestor: /^\s+(.*)/,178universal: /^\*(.*)/,179id: global.RegExp('^#(' + encoding + '+)(.*)'),180tagName: global.RegExp('^(' + encoding + '+)(.*)'),181className: global.RegExp('^\\.(' + encoding + '+)(.*)')182}),183184concatCall =185function(data, elements, callback) {186var i = -1, element;187while ((element = elements[++i])) {188if (false === callback(data[data.length] = element)) { break; }189}190return data;191},192193switchContext =194function(from, force) {195var oldDoc = doc;196lastContext = from;197doc = from.ownerDocument || from;198if (force || oldDoc !== doc) {199root = doc.documentElement;200XML_DOCUMENT = doc.createElement('DiV').nodeName == 'DiV';201QUIRKS_MODE = !XML_DOCUMENT &&202typeof doc.compatMode == 'string' ?203doc.compatMode.indexOf('CSS') < 0 :204(function() {205var style = doc.createElement('div').style;206return style && (style.width = 1) && style.width == '1px';207})();208209Config.CACHING && Dom.setCache(true, doc);210}211},212213convertEscapes =214function(str) {215return str.replace(/\\([0-9a-fA-F]{1,6}\x20?|.)|([\x22\x27])/g, function(substring, p1, p2) {216var codePoint, highHex, highSurrogate, lowHex, lowSurrogate;217218if (p2) {219return '\\' + p2;220}221222if (/^[0-9a-fA-F]/.test(p1)) {223codePoint = parseInt(p1, 16);224225if (codePoint < 0 || codePoint > 0x10ffff) {226return '\\ufffd';227}228229if (codePoint <= 0xffff) {230lowHex = '000' + codePoint.toString(16);231return '\\u' + lowHex.substr(lowHex.length - 4);232}233234codePoint -= 0x10000;235highSurrogate = (codePoint >> 10) + 0xd800;236lowSurrogate = (codePoint % 0x400) + 0xdc00;237highHex = '000' + highSurrogate.toString(16);238lowHex = '000' + lowSurrogate.toString(16);239240return '\\u' + highHex.substr(highHex.length - 4) +241'\\u' + lowHex.substr(lowHex.length - 4);242}243244if (/^[\\\x22\x27]/.test(p1)) {245return substring;246}247248return p1;249});250},251252byIdRaw =253function(id, elements) {254var i = -1, element = null;255while ((element = elements[++i])) {256if (element.getAttribute('id') == id) {257break;258}259}260return element;261},262263_byId = !('fileSize' in doc) ?264function(id, from) {265id = id.replace(/\\([^\\]{1})/g, '$1');266return from.getElementById && from.getElementById(id) ||267byIdRaw(id, from.getElementsByTagName('*'));268} :269function(id, from) {270var element = null;271id = id.replace(/\\([^\\]{1})/g, '$1');272if (XML_DOCUMENT || from.nodeType != 9) {273return byIdRaw(id, from.getElementsByTagName('*'));274}275if ((element = from.getElementById(id)) &&276element.name == id && from.getElementsByName) {277return byIdRaw(id, from.getElementsByName(id));278}279return element;280},281282byId =283function(id, from) {284from || (from = doc);285if (lastContext !== from) { switchContext(from); }286return _byId(id, from);287},288289byTagRaw =290function(tag, from) {291var any = tag == '*', element = from, elements = global.Array(), next = element.firstChild;292any || (tag = tag.toUpperCase());293while ((element = next)) {294if (element.tagName > '@' && (any || element.tagName.toUpperCase() == tag)) {295elements[elements.length] = element;296}297if ((next = element.firstChild || element.nextSibling)) continue;298while (!next && (element = element.parentNode) && element !== from) {299next = element.nextSibling;300}301}302return elements;303},304305contains = 'compareDocumentPosition' in root ?306function(container, element) {307return (container.compareDocumentPosition(element) & 16) == 16;308} : 'contains' in root ?309function(container, element) {310return element.nodeType == 1 && container.contains(element);311} :312function(container, element) {313while ((element = element.parentNode) && element.nodeType == 1) {314if (element === container) return true;315}316return false;317},318319getAttribute =320function(node, attribute) {321attribute = attribute.toLowerCase();322if (typeof node[attribute] == 'object') {323return node.attributes[attribute] &&324node.attributes[attribute].value || '';325}326return (327attribute == 'type' ? node.getAttribute(attribute) || '' :328ATTR_URIDATA[attribute] ? node.getAttribute(attribute, 2) || '' :329ATTR_BOOLEAN[attribute] ? node.getAttribute(attribute) ? attribute : 'false' :330((node = node.getAttributeNode(attribute)) && node.value) || '');331},332333hasAttribute = root.hasAttribute ?334function(node, attribute) {335return node.hasAttribute(attribute);336} :337function(node, attribute) {338attribute = attribute.toLowerCase();339if (ATTR_DEFAULT[attribute]) {340return !!node[ATTR_DEFAULT[attribute]];341}342node = node.getAttributeNode(attribute);343return !!(node && node.specified);344},345346isLink =347function(element) {348return element.getAttribute('href') && LINK_NODES[element.nodeName];349},350351isEmpty =352function(node) {353node = node.firstChild;354while (node) {355if (node.nodeType == 3 || node.nodeName > '@') return false;356node = node.nextSibling;357}358return true;359},360361nthElement =362function(element, last) {363var count = 1, succ = last ? 'nextSibling' : 'previousSibling';364while ((element = element[succ])) {365if (element.nodeName > '@') ++count;366}367return count;368},369370nthOfType =371function(element, last) {372var count = 1, succ = last ? 'nextSibling' : 'previousSibling', type = element.nodeName;373while ((element = element[succ])) {374if (element.nodeName == type) ++count;375}376return count;377},378379configure =380function(option) {381if (typeof option == 'string') { return Config[option] || Config; }382if (typeof option != 'object') { return false; }383for (var i in option) {384Config[i] = !!option[i];385if (i == 'SIMPLENOT') {386matchContexts = global.Object();387matchResolvers = global.Object();388selectContexts = global.Object();389selectResolvers = global.Object();390}391}392reValidator = global.RegExp(Config.SIMPLENOT ?393standardValidator : extendedValidator, 'g');394return true;395},396397emit =398function(message) {399if (Config.VERBOSITY) { throw global.Error(message); }400if (global.console && global.console.log) {401global.console.log(message);402}403},404405Config = global.Object({406CACHING: false,407SIMPLENOT: true,408UNIQUE_ID: true,409USE_HTML5: true,410VERBOSITY: true411}),412413IE_LT_9 = typeof doc.addEventListener != 'function',414415INSENSITIVE_MAP = global.Object({416href: 1, lang: 1, src: 1, style: 1, title: 1,417type: 1, xmlns: 1, 'xml:lang': 1, 'xml:space': 1418}),419420TO_UPPER_CASE = IE_LT_9 ? '.toUpperCase()' : '',421422ACCEPT_NODE = 'r[r.length]=c[k];if(f&&false===f(c[k]))break main;else continue main;',423REJECT_NODE = IE_LT_9 ? 'if(e.nodeName<"A")continue;' : '',424425compile =426function(selector, source, mode) {427428var parts = typeof selector == 'string' ? selector.match(reSplitGroup) : selector;429430typeof source == 'string' || (source = '');431432if (parts.length == 1) {433source += compileSelector(parts[0], mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode);434} else {435var i = -1, seen = global.Object(), token;436while ((token = parts[++i])) {437token = token.replace(reTrimSpaces, '');438if (!seen[token] && (seen[token] = true)) {439source += compileSelector(token, mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode);440}441}442}443444if (mode) {445return global.Function('c,s,r,d,h,g,f,v',446'var N,n,x=0,k=-1,e;main:while((e=c[++k])){' + source + '}return r;');447} else {448return global.Function('e,s,r,d,h,g,f,v',449'var N,n,x=0,k=e;' + source + 'return false;');450}451},452453FILTER =454'var z=v[@]||(v[@]=[]),l=z.length-1;' +455'while(l>=0&&z[l]!==e)--l;' +456'if(l!==-1){break;}' +457'z[z.length]=e;',458459compileSelector =460function(selector, source, mode) {461462var a, b, n, k = 0, expr, match, name, result, status, test, type;463464while (selector) {465466k++;467468if ((match = selector.match(Patterns.universal))) {469expr = '';470}471472else if ((match = selector.match(Patterns.id))) {473source = 'if(' + (XML_DOCUMENT ?474's.getAttribute(e,"id")' :475'(e.submit?s.getAttribute(e,"id"):e.id)') +476'=="' + match[1] + '"' +477'){' + source + '}';478}479480else if ((match = selector.match(Patterns.tagName))) {481source = 'if(e.nodeName' + (XML_DOCUMENT ?482'=="' + match[1] + '"' : TO_UPPER_CASE +483'=="' + match[1].toUpperCase() + '"') +484'){' + source + '}';485}486487else if ((match = selector.match(Patterns.className))) {488source = 'if((n=' + (XML_DOCUMENT ?489'e.getAttribute("class")' : 'e.className') +490')&&n.length&&(" "+' + (QUIRKS_MODE ? 'n.toLowerCase()' : 'n') +491'.replace(/\\s+/g," ")+" ").indexOf(" ' +492(QUIRKS_MODE ? match[1].toLowerCase() : match[1]) + ' ")>-1' +493'){' + source + '}';494}495496else if ((match = selector.match(Patterns.attribute))) {497if (match[2] && !Operators[match[2]]) {498emit('Unsupported operator in attribute selectors "' + selector + '"');499return '';500}501test = 'false';502if (match[2] && match[4] && (test = Operators[match[2]])) {503match[4] = convertEscapes(match[4]);504type = INSENSITIVE_MAP[match[1].toLowerCase()];505test = test.replace(/\%m/g, type ? match[4].toLowerCase() : match[4]);506} else if (match[2] == '!=' || match[2] == '=') {507test = 'n' + match[2] + '=""';508}509expr = 'n=s.' + (match[2] ? 'get' : 'has') + 'Attribute(e,"' + match[1] + '")' + (type && match[2] ? '.toLowerCase();' : ';');510source = expr + 'if(' + (match[2] ? test : 'n') + '){' + source + '}';511}512513else if ((match = selector.match(Patterns.adjacent))) {514source = (mode ? '' : FILTER.replace(/@/g, k)) + source;515source = 'var N' + k + '=e;while(e&&(e=e.previousSibling)){if(e.nodeName>"@"){' + source + 'break;}}e=N' + k + ';';516}517518else if ((match = selector.match(Patterns.relative))) {519source = (mode ? '' : FILTER.replace(/@/g, k)) + source;520source = 'var N' + k + '=e;e=e.parentNode.firstChild;while(e&&e!==N' + k + '){if(e.nodeName>"@"){' + source + '}e=e.nextSibling;}e=N' + k + ';';521}522523else if ((match = selector.match(Patterns.children))) {524source = (mode ? '' : FILTER.replace(/@/g, k)) + source;525source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + 'break;}e=N' + k + ';';526}527528else if ((match = selector.match(Patterns.ancestor))) {529source = (mode ? '' : FILTER.replace(/@/g, k)) + source;530source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + '}e=N' + k + ';';531}532533else if ((match = selector.match(Patterns.spseudos)) && match[1]) {534switch (match[1]) {535case 'root':536if (match[3]) {537source = 'if(e===h||s.contains(h,e)){' + source + '}';538} else {539source = 'if(e===h){' + source + '}';540}541break;542case 'empty':543source = 'if(s.isEmpty(e)){' + source + '}';544break;545default:546if (match[1] && match[2]) {547if (match[2] == 'n') {548source = 'if(e!==h){' + source + '}';549break;550} else if (match[2] == 'even') {551a = 2;552b = 0;553} else if (match[2] == 'odd') {554a = 2;555b = 1;556} else {557b = ((n = match[2].match(/(-?\d+)$/)) ? global.parseInt(n[1], 10) : 0);558a = ((n = match[2].match(/(-?\d*)n/i)) ? global.parseInt(n[1], 10) : 0);559if (n && n[1] == '-') a = -1;560}561test = a > 1 ?562(/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' :563'n>=' + b + '&&(n-(' + b + '))%' + a + '==0' : a < -1 ?564(/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' :565'n<=' + b + '&&(n-(' + b + '))%' + a + '==0' : a === 0 ?566'n==' + b : a == -1 ? 'n<=' + b : 'n>=' + b;567source =568'if(e!==h){' +569'n=s[' + (/-of-type/i.test(match[1]) ? '"nthOfType"' : '"nthElement"') + ']' +570'(e,' + (/last/i.test(match[1]) ? 'true' : 'false') + ');' +571'if(' + test + '){' + source + '}' +572'}';573} else {574a = /first/i.test(match[1]) ? 'previous' : 'next';575n = /only/i.test(match[1]) ? 'previous' : 'next';576b = /first|last/i.test(match[1]);577type = /-of-type/i.test(match[1]) ? '&&n.nodeName!=e.nodeName' : '&&n.nodeName<"@"';578source = 'if(e!==h){' +579( 'n=e;while((n=n.' + a + 'Sibling)' + type + ');if(!n){' + (b ? source :580'n=e;while((n=n.' + n + 'Sibling)' + type + ');if(!n){' + source + '}') + '}' ) + '}';581}582break;583}584}585586else if ((match = selector.match(Patterns.dpseudos)) && match[1]) {587switch (match[1].match(/^\w+/)[0]) {588case 'not':589expr = match[3].replace(reTrimSpaces, '');590if (Config.SIMPLENOT && !reSimpleNot.test(expr)) {591emit('Negation pseudo-class only accepts simple selectors "' + match.join('') + '"');592return '';593} else {594if ('compatMode' in doc) {595source = 'if(!' + compile(expr, '', false) + '(e,s,r,d,h,g)){' + source + '}';596} else {597source = 'if(!s.match(e, "' + expr.replace(/\x22/g, '\\"') + '",g)){' + source +'}';598}599}600break;601case 'checked':602source = 'if((typeof e.form!=="undefined"&&(/^(?:radio|checkbox)$/i).test(e.type)&&e.checked)' +603(Config.USE_HTML5 ? '||(/^option$/i.test(e.nodeName)&&(e.selected||e.checked))' : '') +604'){' + source + '}';605break;606case 'disabled':607source = 'if(((typeof e.form!=="undefined"' +608(Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') +609')||s.isLink(e))&&e.disabled===true){' + source + '}';610break;611case 'enabled':612source = 'if(((typeof e.form!=="undefined"' +613(Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') +614')||s.isLink(e))&&e.disabled===false){' + source + '}';615break;616case 'lang':617test = '';618if (match[2]) test = match[2].substr(0, 2) + '-';619source = 'do{(n=e.lang||"").toLowerCase();' +620'if((n==""&&h.lang=="' + match[2].toLowerCase() + '")||' +621'(n&&(n=="' + match[2].toLowerCase() +622'"||n.substr(0,3)=="' + test.toLowerCase() + '")))' +623'{' + source + 'break;}}while((e=e.parentNode)&&e!==g);';624break;625case 'target':626source = 'if(e.id==d.location.hash.slice(1)){' + source + '}';627break;628case 'link':629source = 'if(s.isLink(e)&&!e.visited){' + source + '}';630break;631case 'visited':632source = 'if(s.isLink(e)&&e.visited){' + source + '}';633break;634case 'active':635source = 'if(e===d.activeElement){' + source + '}';636break;637case 'hover':638source = 'if(e===d.hoverElement){' + source + '}';639break;640case 'focus':641source = 'hasFocus' in doc ?642'if(e===d.activeElement&&d.hasFocus()&&(e.type||e.href||typeof e.tabIndex=="number")){' + source + '}' :643'if(e===d.activeElement&&(e.type||e.href)){' + source + '}';644break;645case 'selected':646source = 'if(/^option$/i.test(e.nodeName)&&(e.selected||e.checked)){' + source + '}';647break;648default:649break;650}651}652653else {654655expr = false;656status = false;657for (expr in Selectors) {658if ((match = selector.match(Selectors[expr].Expression)) && match[1]) {659result = Selectors[expr].Callback(match, source);660source = result.source;661status = result.status;662if (status) { break; }663}664}665666if (!status) {667emit('Unknown pseudo-class selector "' + selector + '"');668return '';669}670671if (!expr) {672emit('Unknown token in selector "' + selector + '"');673return '';674}675676}677678if (!match) {679emit('Invalid syntax in selector "' + selector + '"');680return '';681}682683selector = match && match[match.length - 1];684}685686return source;687},688689match =690function(element, selector, from, callback) {691692var parts;693694if (!(element && element.nodeType == 1)) {695emit('Invalid element argument');696return false;697} else if (typeof selector != 'string') {698emit('Invalid selector argument');699return false;700} else if (lastContext !== from) {701switchContext(from || (from = element.ownerDocument));702}703704selector = selector.replace(reTrimSpaces, '');705706Config.SHORTCUTS && (selector = Dom.shortcuts(selector, element, from));707708if (lastMatcher != selector) {709if ((parts = selector.match(reValidator)) && parts[0] == selector) {710isSingleMatch = (parts = selector.match(reSplitGroup)).length < 2;711lastMatcher = selector;712lastPartsMatch = parts;713} else {714emit('The string "' + selector + '", is not a valid CSS selector');715return false;716}717} else parts = lastPartsMatch;718719if (!matchResolvers[selector] || matchContexts[selector] !== from) {720matchResolvers[selector] = compile(isSingleMatch ? [selector] : parts, '', false);721matchContexts[selector] = from;722}723724return matchResolvers[selector](element, Snapshot, [ ], doc, root, from, callback, { });725},726727first =728function(selector, from) {729return select(selector, from, function() { return false; })[0] || null;730},731732select =733function(selector, from, callback) {734735var i, changed, element, elements, parts, token, original = selector;736737if (arguments.length === 0) {738emit('Not enough arguments');739return [ ];740} else if (typeof selector != 'string') {741return [ ];742} else if (from && !(/1|9|11/).test(from.nodeType)) {743emit('Invalid or illegal context element');744return [ ];745} else if (lastContext !== from) {746switchContext(from || (from = doc));747}748749if (Config.CACHING && (elements = Dom.loadResults(original, from, doc, root))) {750return callback ? concatCall([ ], elements, callback) : elements;751}752753selector = selector.replace(reTrimSpaces, '');754755Config.SHORTCUTS && (selector = Dom.shortcuts(selector, from));756757if ((changed = lastSelector != selector)) {758if ((parts = selector.match(reValidator)) && parts[0] == selector) {759isSingleSelect = (parts = selector.match(reSplitGroup)).length < 2;760lastSelector = selector;761lastPartsSelect = parts;762} else {763emit('The string "' + selector + '", is not a valid CSS selector');764return [ ];765}766} else parts = lastPartsSelect;767768if (from.nodeType == 11) {769770elements = byTagRaw('*', from);771772} else if (isSingleSelect) {773774if (changed) {775parts = selector.match(reSplitToken);776token = parts[parts.length - 1];777lastSlice = token.split(':not')[0];778lastPosition = selector.length - token.length;779}780781if (Config.UNIQUE_ID && (parts = lastSlice.match(Optimize.ID)) && (token = parts[1])) {782if ((element = _byId(token, from))) {783if (match(element, selector)) {784callback && callback(element);785elements = global.Array(element);786} else elements = global.Array();787}788}789790else if (Config.UNIQUE_ID && (parts = selector.match(Optimize.ID)) && (token = parts[1])) {791if ((element = _byId(token, doc))) {792if ('#' + token == selector) {793callback && callback(element);794elements = global.Array(element);795} else if (/[>+~]/.test(selector)) {796from = element.parentNode;797} else {798from = element;799}800} else elements = global.Array();801}802803if (elements) {804Config.CACHING && Dom.saveResults(original, from, doc, elements);805return elements;806}807808if (!XML_DOCUMENT && GEBTN && (parts = lastSlice.match(Optimize.TAG)) && (token = parts[1])) {809if ((elements = from.getElementsByTagName(token)).length === 0) { return [ ]; }810selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace(token, '*');811}812813else if (!XML_DOCUMENT && GEBCN && (parts = lastSlice.match(Optimize.CLASS)) && (token = parts[1])) {814if ((elements = from.getElementsByClassName(token.replace(/\\([^\\]{1})/g, '$1'))).length === 0) { return [ ]; }815selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace('.' + token,816reOptimizeSelector.test(selector.charAt(selector.indexOf(token) - 1)) ? '' : '*');817}818819}820821if (!elements) {822if (IE_LT_9) {823elements = /^(?:applet|object)$/i.test(from.nodeName) ? from.childNodes : from.all;824} else {825elements = from.getElementsByTagName('*');826}827}828829if (!selectResolvers[selector] || selectContexts[selector] !== from) {830selectResolvers[selector] = compile(isSingleSelect ? [selector] : parts, REJECT_NODE, true);831selectContexts[selector] = from;832}833834elements = selectResolvers[selector](elements, Snapshot, [ ], doc, root, from, callback, { });835836Config.CACHING && Dom.saveResults(original, from, doc, elements);837838return elements;839},840841FN = function(x) { return x; },842843matchContexts = global.Object(),844matchResolvers = global.Object(),845846selectContexts = global.Object(),847selectResolvers = global.Object(),848849Snapshot = global.Object({850byId: _byId,851match: match,852select: select,853isLink: isLink,854isEmpty: isEmpty,855contains: contains,856nthOfType: nthOfType,857nthElement: nthElement,858getAttribute: getAttribute,859hasAttribute: hasAttribute860});861862Dom.ACCEPT_NODE = ACCEPT_NODE;863864Dom.byId = byId;865Dom.match = match;866Dom.first = first;867Dom.select = select;868Dom.compile = compile;869Dom.contains = contains;870Dom.configure = configure;871Dom.getAttribute = getAttribute;872Dom.hasAttribute = hasAttribute;873874Dom.setCache = FN;875Dom.shortcuts = FN;876Dom.loadResults = FN;877Dom.saveResults = FN;878879Dom.emit = emit;880Dom.Config = Config;881Dom.Snapshot = Snapshot;882883Dom.Operators = Operators;884Dom.Selectors = Selectors;885886Dom.Version = version;887888Dom.registerOperator =889function(symbol, resolver) {890Operators[symbol] || (Operators[symbol] = resolver);891};892893Dom.registerSelector =894function(name, rexp, func) {895Selectors[name] || (Selectors[name] = global.Object({896Expression: rexp,897Callback: func898}));899};900901switchContext(doc, true);902903});904905906