opal-rails 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1442 @@
1
+ /*!
2
+ * Sizzle CSS Selector Engine
3
+ * Copyright 2011, The Dojo Foundation
4
+ * Released under the MIT, BSD, and GPL Licenses.
5
+ * More information: http://sizzlejs.com/
6
+ */
7
+ (function(){
8
+
9
+ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
10
+ expando = "sizcache" + (Math.random() + '').replace('.', ''),
11
+ done = 0,
12
+ toString = Object.prototype.toString,
13
+ hasDuplicate = false,
14
+ baseHasDuplicate = true,
15
+ rBackslash = /\\/g,
16
+ rNonWord = /\W/;
17
+
18
+ // Here we check if the JavaScript engine is using some sort of
19
+ // optimization where it does not always call our comparision
20
+ // function. If that is the case, discard the hasDuplicate value.
21
+ // Thus far that includes Google Chrome.
22
+ [0, 0].sort(function() {
23
+ baseHasDuplicate = false;
24
+ return 0;
25
+ });
26
+
27
+ var Sizzle = function( selector, context, results, seed ) {
28
+ results = results || [];
29
+ context = context || document;
30
+
31
+ var origContext = context;
32
+
33
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
34
+ return [];
35
+ }
36
+
37
+ if ( !selector || typeof selector !== "string" ) {
38
+ return results;
39
+ }
40
+
41
+ var m, set, checkSet, extra, ret, cur, pop, i,
42
+ prune = true,
43
+ contextXML = Sizzle.isXML( context ),
44
+ parts = [],
45
+ soFar = selector;
46
+
47
+ // Reset the position of the chunker regexp (start from head)
48
+ do {
49
+ chunker.exec( "" );
50
+ m = chunker.exec( soFar );
51
+
52
+ if ( m ) {
53
+ soFar = m[3];
54
+
55
+ parts.push( m[1] );
56
+
57
+ if ( m[2] ) {
58
+ extra = m[3];
59
+ break;
60
+ }
61
+ }
62
+ } while ( m );
63
+
64
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
65
+
66
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
67
+ set = posProcess( parts[0] + parts[1], context, seed );
68
+
69
+ } else {
70
+ set = Expr.relative[ parts[0] ] ?
71
+ [ context ] :
72
+ Sizzle( parts.shift(), context );
73
+
74
+ while ( parts.length ) {
75
+ selector = parts.shift();
76
+
77
+ if ( Expr.relative[ selector ] ) {
78
+ selector += parts.shift();
79
+ }
80
+
81
+ set = posProcess( selector, set, seed );
82
+ }
83
+ }
84
+
85
+ } else {
86
+ // Take a shortcut and set the context if the root selector is an ID
87
+ // (but not if it'll be faster if the inner selector is an ID)
88
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
89
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
90
+
91
+ ret = Sizzle.find( parts.shift(), context, contextXML );
92
+ context = ret.expr ?
93
+ Sizzle.filter( ret.expr, ret.set )[0] :
94
+ ret.set[0];
95
+ }
96
+
97
+ if ( context ) {
98
+ ret = seed ?
99
+ { expr: parts.pop(), set: makeArray(seed) } :
100
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
101
+
102
+ set = ret.expr ?
103
+ Sizzle.filter( ret.expr, ret.set ) :
104
+ ret.set;
105
+
106
+ if ( parts.length > 0 ) {
107
+ checkSet = makeArray( set );
108
+
109
+ } else {
110
+ prune = false;
111
+ }
112
+
113
+ while ( parts.length ) {
114
+ cur = parts.pop();
115
+ pop = cur;
116
+
117
+ if ( !Expr.relative[ cur ] ) {
118
+ cur = "";
119
+ } else {
120
+ pop = parts.pop();
121
+ }
122
+
123
+ if ( pop == null ) {
124
+ pop = context;
125
+ }
126
+
127
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
128
+ }
129
+
130
+ } else {
131
+ checkSet = parts = [];
132
+ }
133
+ }
134
+
135
+ if ( !checkSet ) {
136
+ checkSet = set;
137
+ }
138
+
139
+ if ( !checkSet ) {
140
+ Sizzle.error( cur || selector );
141
+ }
142
+
143
+ if ( toString.call(checkSet) === "[object Array]" ) {
144
+ if ( !prune ) {
145
+ results.push.apply( results, checkSet );
146
+
147
+ } else if ( context && context.nodeType === 1 ) {
148
+ for ( i = 0; checkSet[i] != null; i++ ) {
149
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
150
+ results.push( set[i] );
151
+ }
152
+ }
153
+
154
+ } else {
155
+ for ( i = 0; checkSet[i] != null; i++ ) {
156
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
157
+ results.push( set[i] );
158
+ }
159
+ }
160
+ }
161
+
162
+ } else {
163
+ makeArray( checkSet, results );
164
+ }
165
+
166
+ if ( extra ) {
167
+ Sizzle( extra, origContext, results, seed );
168
+ Sizzle.uniqueSort( results );
169
+ }
170
+
171
+ return results;
172
+ };
173
+
174
+ Sizzle.uniqueSort = function( results ) {
175
+ if ( sortOrder ) {
176
+ hasDuplicate = baseHasDuplicate;
177
+ results.sort( sortOrder );
178
+
179
+ if ( hasDuplicate ) {
180
+ for ( var i = 1; i < results.length; i++ ) {
181
+ if ( results[i] === results[ i - 1 ] ) {
182
+ results.splice( i--, 1 );
183
+ }
184
+ }
185
+ }
186
+ }
187
+
188
+ return results;
189
+ };
190
+
191
+ Sizzle.matches = function( expr, set ) {
192
+ return Sizzle( expr, null, null, set );
193
+ };
194
+
195
+ Sizzle.matchesSelector = function( node, expr ) {
196
+ return Sizzle( expr, null, null, [node] ).length > 0;
197
+ };
198
+
199
+ Sizzle.find = function( expr, context, isXML ) {
200
+ var set, i, len, match, type, left;
201
+
202
+ if ( !expr ) {
203
+ return [];
204
+ }
205
+
206
+ for ( i = 0, len = Expr.order.length; i < len; i++ ) {
207
+ type = Expr.order[i];
208
+
209
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
210
+ left = match[1];
211
+ match.splice( 1, 1 );
212
+
213
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
214
+ match[1] = (match[1] || "").replace( rBackslash, "" );
215
+ set = Expr.find[ type ]( match, context, isXML );
216
+
217
+ if ( set != null ) {
218
+ expr = expr.replace( Expr.match[ type ], "" );
219
+ break;
220
+ }
221
+ }
222
+ }
223
+ }
224
+
225
+ if ( !set ) {
226
+ set = typeof context.getElementsByTagName !== "undefined" ?
227
+ context.getElementsByTagName( "*" ) :
228
+ [];
229
+ }
230
+
231
+ return { set: set, expr: expr };
232
+ };
233
+
234
+ Sizzle.filter = function( expr, set, inplace, not ) {
235
+ var match, anyFound,
236
+ type, found, item, filter, left,
237
+ i, pass,
238
+ old = expr,
239
+ result = [],
240
+ curLoop = set,
241
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
242
+
243
+ while ( expr && set.length ) {
244
+ for ( type in Expr.filter ) {
245
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
246
+ filter = Expr.filter[ type ];
247
+ left = match[1];
248
+
249
+ anyFound = false;
250
+
251
+ match.splice(1,1);
252
+
253
+ if ( left.substr( left.length - 1 ) === "\\" ) {
254
+ continue;
255
+ }
256
+
257
+ if ( curLoop === result ) {
258
+ result = [];
259
+ }
260
+
261
+ if ( Expr.preFilter[ type ] ) {
262
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
263
+
264
+ if ( !match ) {
265
+ anyFound = found = true;
266
+
267
+ } else if ( match === true ) {
268
+ continue;
269
+ }
270
+ }
271
+
272
+ if ( match ) {
273
+ for ( i = 0; (item = curLoop[i]) != null; i++ ) {
274
+ if ( item ) {
275
+ found = filter( item, match, i, curLoop );
276
+ pass = not ^ found;
277
+
278
+ if ( inplace && found != null ) {
279
+ if ( pass ) {
280
+ anyFound = true;
281
+
282
+ } else {
283
+ curLoop[i] = false;
284
+ }
285
+
286
+ } else if ( pass ) {
287
+ result.push( item );
288
+ anyFound = true;
289
+ }
290
+ }
291
+ }
292
+ }
293
+
294
+ if ( found !== undefined ) {
295
+ if ( !inplace ) {
296
+ curLoop = result;
297
+ }
298
+
299
+ expr = expr.replace( Expr.match[ type ], "" );
300
+
301
+ if ( !anyFound ) {
302
+ return [];
303
+ }
304
+
305
+ break;
306
+ }
307
+ }
308
+ }
309
+
310
+ // Improper expression
311
+ if ( expr === old ) {
312
+ if ( anyFound == null ) {
313
+ Sizzle.error( expr );
314
+
315
+ } else {
316
+ break;
317
+ }
318
+ }
319
+
320
+ old = expr;
321
+ }
322
+
323
+ return curLoop;
324
+ };
325
+
326
+ Sizzle.error = function( msg ) {
327
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
328
+ };
329
+
330
+ /**
331
+ * Utility function for retreiving the text value of an array of DOM nodes
332
+ * @param {Array|Element} elem
333
+ */
334
+ var getText = Sizzle.getText = function( elem ) {
335
+ var i, node,
336
+ nodeType = elem.nodeType,
337
+ ret = "";
338
+
339
+ if ( nodeType ) {
340
+ if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
341
+ // Use textContent for elements
342
+ // innerText usage removed for consistency of new lines (see #11153)
343
+ if ( typeof elem.textContent === "string" ) {
344
+ return elem.textContent;
345
+ } else {
346
+ // Traverse it's children
347
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
348
+ ret += getText( elem );
349
+ }
350
+ }
351
+ } else if ( nodeType === 3 || nodeType === 4 ) {
352
+ return elem.nodeValue;
353
+ }
354
+ } else {
355
+
356
+ // If no nodeType, this is expected to be an array
357
+ for ( i = 0; (node = elem[i]); i++ ) {
358
+ // Do not traverse comment nodes
359
+ if ( node.nodeType !== 8 ) {
360
+ ret += getText( node );
361
+ }
362
+ }
363
+ }
364
+ return ret;
365
+ };
366
+
367
+ var Expr = Sizzle.selectors = {
368
+ order: [ "ID", "NAME", "TAG" ],
369
+
370
+ match: {
371
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
372
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
373
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
374
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
375
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
376
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
377
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
378
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
379
+ },
380
+
381
+ leftMatch: {},
382
+
383
+ attrMap: {
384
+ "class": "className",
385
+ "for": "htmlFor"
386
+ },
387
+
388
+ attrHandle: {
389
+ href: function( elem ) {
390
+ return elem.getAttribute( "href" );
391
+ },
392
+ type: function( elem ) {
393
+ return elem.getAttribute( "type" );
394
+ }
395
+ },
396
+
397
+ relative: {
398
+ "+": function(checkSet, part){
399
+ var isPartStr = typeof part === "string",
400
+ isTag = isPartStr && !rNonWord.test( part ),
401
+ isPartStrNotTag = isPartStr && !isTag;
402
+
403
+ if ( isTag ) {
404
+ part = part.toLowerCase();
405
+ }
406
+
407
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
408
+ if ( (elem = checkSet[i]) ) {
409
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
410
+
411
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
412
+ elem || false :
413
+ elem === part;
414
+ }
415
+ }
416
+
417
+ if ( isPartStrNotTag ) {
418
+ Sizzle.filter( part, checkSet, true );
419
+ }
420
+ },
421
+
422
+ ">": function( checkSet, part ) {
423
+ var elem,
424
+ isPartStr = typeof part === "string",
425
+ i = 0,
426
+ l = checkSet.length;
427
+
428
+ if ( isPartStr && !rNonWord.test( part ) ) {
429
+ part = part.toLowerCase();
430
+
431
+ for ( ; i < l; i++ ) {
432
+ elem = checkSet[i];
433
+
434
+ if ( elem ) {
435
+ var parent = elem.parentNode;
436
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
437
+ }
438
+ }
439
+
440
+ } else {
441
+ for ( ; i < l; i++ ) {
442
+ elem = checkSet[i];
443
+
444
+ if ( elem ) {
445
+ checkSet[i] = isPartStr ?
446
+ elem.parentNode :
447
+ elem.parentNode === part;
448
+ }
449
+ }
450
+
451
+ if ( isPartStr ) {
452
+ Sizzle.filter( part, checkSet, true );
453
+ }
454
+ }
455
+ },
456
+
457
+ "": function(checkSet, part, isXML){
458
+ var nodeCheck,
459
+ doneName = done++,
460
+ checkFn = dirCheck;
461
+
462
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
463
+ part = part.toLowerCase();
464
+ nodeCheck = part;
465
+ checkFn = dirNodeCheck;
466
+ }
467
+
468
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
469
+ },
470
+
471
+ "~": function( checkSet, part, isXML ) {
472
+ var nodeCheck,
473
+ doneName = done++,
474
+ checkFn = dirCheck;
475
+
476
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
477
+ part = part.toLowerCase();
478
+ nodeCheck = part;
479
+ checkFn = dirNodeCheck;
480
+ }
481
+
482
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
483
+ }
484
+ },
485
+
486
+ find: {
487
+ ID: function( match, context, isXML ) {
488
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
489
+ var m = context.getElementById(match[1]);
490
+ // Check parentNode to catch when Blackberry 4.6 returns
491
+ // nodes that are no longer in the document #6963
492
+ return m && m.parentNode ? [m] : [];
493
+ }
494
+ },
495
+
496
+ NAME: function( match, context ) {
497
+ if ( typeof context.getElementsByName !== "undefined" ) {
498
+ var ret = [],
499
+ results = context.getElementsByName( match[1] );
500
+
501
+ for ( var i = 0, l = results.length; i < l; i++ ) {
502
+ if ( results[i].getAttribute("name") === match[1] ) {
503
+ ret.push( results[i] );
504
+ }
505
+ }
506
+
507
+ return ret.length === 0 ? null : ret;
508
+ }
509
+ },
510
+
511
+ TAG: function( match, context ) {
512
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
513
+ return context.getElementsByTagName( match[1] );
514
+ }
515
+ }
516
+ },
517
+ preFilter: {
518
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
519
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
520
+
521
+ if ( isXML ) {
522
+ return match;
523
+ }
524
+
525
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
526
+ if ( elem ) {
527
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
528
+ if ( !inplace ) {
529
+ result.push( elem );
530
+ }
531
+
532
+ } else if ( inplace ) {
533
+ curLoop[i] = false;
534
+ }
535
+ }
536
+ }
537
+
538
+ return false;
539
+ },
540
+
541
+ ID: function( match ) {
542
+ return match[1].replace( rBackslash, "" );
543
+ },
544
+
545
+ TAG: function( match, curLoop ) {
546
+ return match[1].replace( rBackslash, "" ).toLowerCase();
547
+ },
548
+
549
+ CHILD: function( match ) {
550
+ if ( match[1] === "nth" ) {
551
+ if ( !match[2] ) {
552
+ Sizzle.error( match[0] );
553
+ }
554
+
555
+ match[2] = match[2].replace(/^\+|\s*/g, '');
556
+
557
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
558
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
559
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
560
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
561
+
562
+ // calculate the numbers (first)n+(last) including if they are negative
563
+ match[2] = (test[1] + (test[2] || 1)) - 0;
564
+ match[3] = test[3] - 0;
565
+ }
566
+ else if ( match[2] ) {
567
+ Sizzle.error( match[0] );
568
+ }
569
+
570
+ // TODO: Move to normal caching system
571
+ match[0] = done++;
572
+
573
+ return match;
574
+ },
575
+
576
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
577
+ var name = match[1] = match[1].replace( rBackslash, "" );
578
+
579
+ if ( !isXML && Expr.attrMap[name] ) {
580
+ match[1] = Expr.attrMap[name];
581
+ }
582
+
583
+ // Handle if an un-quoted value was used
584
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
585
+
586
+ if ( match[2] === "~=" ) {
587
+ match[4] = " " + match[4] + " ";
588
+ }
589
+
590
+ return match;
591
+ },
592
+
593
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
594
+ if ( match[1] === "not" ) {
595
+ // If we're dealing with a complex expression, or a simple one
596
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
597
+ match[3] = Sizzle(match[3], null, null, curLoop);
598
+
599
+ } else {
600
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
601
+
602
+ if ( !inplace ) {
603
+ result.push.apply( result, ret );
604
+ }
605
+
606
+ return false;
607
+ }
608
+
609
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
610
+ return true;
611
+ }
612
+
613
+ return match;
614
+ },
615
+
616
+ POS: function( match ) {
617
+ match.unshift( true );
618
+
619
+ return match;
620
+ }
621
+ },
622
+
623
+ filters: {
624
+ enabled: function( elem ) {
625
+ return elem.disabled === false && elem.type !== "hidden";
626
+ },
627
+
628
+ disabled: function( elem ) {
629
+ return elem.disabled === true;
630
+ },
631
+
632
+ checked: function( elem ) {
633
+ return elem.checked === true;
634
+ },
635
+
636
+ selected: function( elem ) {
637
+ // Accessing this property makes selected-by-default
638
+ // options in Safari work properly
639
+ if ( elem.parentNode ) {
640
+ elem.parentNode.selectedIndex;
641
+ }
642
+
643
+ return elem.selected === true;
644
+ },
645
+
646
+ parent: function( elem ) {
647
+ return !!elem.firstChild;
648
+ },
649
+
650
+ empty: function( elem ) {
651
+ return !elem.firstChild;
652
+ },
653
+
654
+ has: function( elem, i, match ) {
655
+ return !!Sizzle( match[3], elem ).length;
656
+ },
657
+
658
+ header: function( elem ) {
659
+ return (/h\d/i).test( elem.nodeName );
660
+ },
661
+
662
+ text: function( elem ) {
663
+ var attr = elem.getAttribute( "type" ), type = elem.type;
664
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
665
+ // use getAttribute instead to test this case
666
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
667
+ },
668
+
669
+ radio: function( elem ) {
670
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
671
+ },
672
+
673
+ checkbox: function( elem ) {
674
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
675
+ },
676
+
677
+ file: function( elem ) {
678
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
679
+ },
680
+
681
+ password: function( elem ) {
682
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
683
+ },
684
+
685
+ submit: function( elem ) {
686
+ var name = elem.nodeName.toLowerCase();
687
+ return (name === "input" || name === "button") && "submit" === elem.type;
688
+ },
689
+
690
+ image: function( elem ) {
691
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
692
+ },
693
+
694
+ reset: function( elem ) {
695
+ var name = elem.nodeName.toLowerCase();
696
+ return (name === "input" || name === "button") && "reset" === elem.type;
697
+ },
698
+
699
+ button: function( elem ) {
700
+ var name = elem.nodeName.toLowerCase();
701
+ return name === "input" && "button" === elem.type || name === "button";
702
+ },
703
+
704
+ input: function( elem ) {
705
+ return (/input|select|textarea|button/i).test( elem.nodeName );
706
+ },
707
+
708
+ focus: function( elem ) {
709
+ return elem === elem.ownerDocument.activeElement;
710
+ }
711
+ },
712
+ setFilters: {
713
+ first: function( elem, i ) {
714
+ return i === 0;
715
+ },
716
+
717
+ last: function( elem, i, match, array ) {
718
+ return i === array.length - 1;
719
+ },
720
+
721
+ even: function( elem, i ) {
722
+ return i % 2 === 0;
723
+ },
724
+
725
+ odd: function( elem, i ) {
726
+ return i % 2 === 1;
727
+ },
728
+
729
+ lt: function( elem, i, match ) {
730
+ return i < match[3] - 0;
731
+ },
732
+
733
+ gt: function( elem, i, match ) {
734
+ return i > match[3] - 0;
735
+ },
736
+
737
+ nth: function( elem, i, match ) {
738
+ return match[3] - 0 === i;
739
+ },
740
+
741
+ eq: function( elem, i, match ) {
742
+ return match[3] - 0 === i;
743
+ }
744
+ },
745
+ filter: {
746
+ PSEUDO: function( elem, match, i, array ) {
747
+ var name = match[1],
748
+ filter = Expr.filters[ name ];
749
+
750
+ if ( filter ) {
751
+ return filter( elem, i, match, array );
752
+
753
+ } else if ( name === "contains" ) {
754
+ return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
755
+
756
+ } else if ( name === "not" ) {
757
+ var not = match[3];
758
+
759
+ for ( var j = 0, l = not.length; j < l; j++ ) {
760
+ if ( not[j] === elem ) {
761
+ return false;
762
+ }
763
+ }
764
+
765
+ return true;
766
+
767
+ } else {
768
+ Sizzle.error( name );
769
+ }
770
+ },
771
+
772
+ CHILD: function( elem, match ) {
773
+ var first, last,
774
+ doneName, parent, cache,
775
+ count, diff,
776
+ type = match[1],
777
+ node = elem;
778
+
779
+ switch ( type ) {
780
+ case "only":
781
+ case "first":
782
+ while ( (node = node.previousSibling) ) {
783
+ if ( node.nodeType === 1 ) {
784
+ return false;
785
+ }
786
+ }
787
+
788
+ if ( type === "first" ) {
789
+ return true;
790
+ }
791
+
792
+ node = elem;
793
+
794
+ /* falls through */
795
+ case "last":
796
+ while ( (node = node.nextSibling) ) {
797
+ if ( node.nodeType === 1 ) {
798
+ return false;
799
+ }
800
+ }
801
+
802
+ return true;
803
+
804
+ case "nth":
805
+ first = match[2];
806
+ last = match[3];
807
+
808
+ if ( first === 1 && last === 0 ) {
809
+ return true;
810
+ }
811
+
812
+ doneName = match[0];
813
+ parent = elem.parentNode;
814
+
815
+ if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
816
+ count = 0;
817
+
818
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
819
+ if ( node.nodeType === 1 ) {
820
+ node.nodeIndex = ++count;
821
+ }
822
+ }
823
+
824
+ parent[ expando ] = doneName;
825
+ }
826
+
827
+ diff = elem.nodeIndex - last;
828
+
829
+ if ( first === 0 ) {
830
+ return diff === 0;
831
+
832
+ } else {
833
+ return ( diff % first === 0 && diff / first >= 0 );
834
+ }
835
+ }
836
+ },
837
+
838
+ ID: function( elem, match ) {
839
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
840
+ },
841
+
842
+ TAG: function( elem, match ) {
843
+ return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
844
+ },
845
+
846
+ CLASS: function( elem, match ) {
847
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
848
+ .indexOf( match ) > -1;
849
+ },
850
+
851
+ ATTR: function( elem, match ) {
852
+ var name = match[1],
853
+ result = Sizzle.attr ?
854
+ Sizzle.attr( elem, name ) :
855
+ Expr.attrHandle[ name ] ?
856
+ Expr.attrHandle[ name ]( elem ) :
857
+ elem[ name ] != null ?
858
+ elem[ name ] :
859
+ elem.getAttribute( name ),
860
+ value = result + "",
861
+ type = match[2],
862
+ check = match[4];
863
+
864
+ return result == null ?
865
+ type === "!=" :
866
+ !type && Sizzle.attr ?
867
+ result != null :
868
+ type === "=" ?
869
+ value === check :
870
+ type === "*=" ?
871
+ value.indexOf(check) >= 0 :
872
+ type === "~=" ?
873
+ (" " + value + " ").indexOf(check) >= 0 :
874
+ !check ?
875
+ value && result !== false :
876
+ type === "!=" ?
877
+ value !== check :
878
+ type === "^=" ?
879
+ value.indexOf(check) === 0 :
880
+ type === "$=" ?
881
+ value.substr(value.length - check.length) === check :
882
+ type === "|=" ?
883
+ value === check || value.substr(0, check.length + 1) === check + "-" :
884
+ false;
885
+ },
886
+
887
+ POS: function( elem, match, i, array ) {
888
+ var name = match[2],
889
+ filter = Expr.setFilters[ name ];
890
+
891
+ if ( filter ) {
892
+ return filter( elem, i, match, array );
893
+ }
894
+ }
895
+ }
896
+ };
897
+
898
+ var origPOS = Expr.match.POS,
899
+ fescape = function(all, num){
900
+ return "\\" + (num - 0 + 1);
901
+ };
902
+
903
+ for ( var type in Expr.match ) {
904
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
905
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
906
+ }
907
+ // Expose origPOS
908
+ // "global" as in regardless of relation to brackets/parens
909
+ Expr.match.globalPOS = origPOS;
910
+
911
+ var makeArray = function( array, results ) {
912
+ array = Array.prototype.slice.call( array, 0 );
913
+
914
+ if ( results ) {
915
+ results.push.apply( results, array );
916
+ return results;
917
+ }
918
+
919
+ return array;
920
+ };
921
+
922
+ // Perform a simple check to determine if the browser is capable of
923
+ // converting a NodeList to an array using builtin methods.
924
+ // Also verifies that the returned array holds DOM nodes
925
+ // (which is not the case in the Blackberry browser)
926
+ try {
927
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
928
+
929
+ // Provide a fallback method if it does not work
930
+ } catch( e ) {
931
+ makeArray = function( array, results ) {
932
+ var i = 0,
933
+ ret = results || [];
934
+
935
+ if ( toString.call(array) === "[object Array]" ) {
936
+ Array.prototype.push.apply( ret, array );
937
+
938
+ } else {
939
+ if ( typeof array.length === "number" ) {
940
+ for ( var l = array.length; i < l; i++ ) {
941
+ ret.push( array[i] );
942
+ }
943
+
944
+ } else {
945
+ for ( ; array[i]; i++ ) {
946
+ ret.push( array[i] );
947
+ }
948
+ }
949
+ }
950
+
951
+ return ret;
952
+ };
953
+ }
954
+
955
+ var sortOrder, siblingCheck;
956
+
957
+ if ( document.documentElement.compareDocumentPosition ) {
958
+ sortOrder = function( a, b ) {
959
+ if ( a === b ) {
960
+ hasDuplicate = true;
961
+ return 0;
962
+ }
963
+
964
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
965
+ return a.compareDocumentPosition ? -1 : 1;
966
+ }
967
+
968
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
969
+ };
970
+
971
+ } else {
972
+ sortOrder = function( a, b ) {
973
+ // The nodes are identical, we can exit early
974
+ if ( a === b ) {
975
+ hasDuplicate = true;
976
+ return 0;
977
+
978
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
979
+ } else if ( a.sourceIndex && b.sourceIndex ) {
980
+ return a.sourceIndex - b.sourceIndex;
981
+ }
982
+
983
+ var al, bl,
984
+ ap = [],
985
+ bp = [],
986
+ aup = a.parentNode,
987
+ bup = b.parentNode,
988
+ cur = aup;
989
+
990
+ // If the nodes are siblings (or identical) we can do a quick check
991
+ if ( aup === bup ) {
992
+ return siblingCheck( a, b );
993
+
994
+ // If no parents were found then the nodes are disconnected
995
+ } else if ( !aup ) {
996
+ return -1;
997
+
998
+ } else if ( !bup ) {
999
+ return 1;
1000
+ }
1001
+
1002
+ // Otherwise they're somewhere else in the tree so we need
1003
+ // to build up a full list of the parentNodes for comparison
1004
+ while ( cur ) {
1005
+ ap.unshift( cur );
1006
+ cur = cur.parentNode;
1007
+ }
1008
+
1009
+ cur = bup;
1010
+
1011
+ while ( cur ) {
1012
+ bp.unshift( cur );
1013
+ cur = cur.parentNode;
1014
+ }
1015
+
1016
+ al = ap.length;
1017
+ bl = bp.length;
1018
+
1019
+ // Start walking down the tree looking for a discrepancy
1020
+ for ( var i = 0; i < al && i < bl; i++ ) {
1021
+ if ( ap[i] !== bp[i] ) {
1022
+ return siblingCheck( ap[i], bp[i] );
1023
+ }
1024
+ }
1025
+
1026
+ // We ended someplace up the tree so do a sibling check
1027
+ return i === al ?
1028
+ siblingCheck( a, bp[i], -1 ) :
1029
+ siblingCheck( ap[i], b, 1 );
1030
+ };
1031
+
1032
+ siblingCheck = function( a, b, ret ) {
1033
+ if ( a === b ) {
1034
+ return ret;
1035
+ }
1036
+
1037
+ var cur = a.nextSibling;
1038
+
1039
+ while ( cur ) {
1040
+ if ( cur === b ) {
1041
+ return -1;
1042
+ }
1043
+
1044
+ cur = cur.nextSibling;
1045
+ }
1046
+
1047
+ return 1;
1048
+ };
1049
+ }
1050
+
1051
+ // Check to see if the browser returns elements by name when
1052
+ // querying by getElementById (and provide a workaround)
1053
+ (function(){
1054
+ // We're going to inject a fake input element with a specified name
1055
+ var form = document.createElement("div"),
1056
+ id = "script" + (new Date()).getTime(),
1057
+ root = document.documentElement;
1058
+
1059
+ form.innerHTML = "<a name='" + id + "'/>";
1060
+
1061
+ // Inject it into the root element, check its status, and remove it quickly
1062
+ root.insertBefore( form, root.firstChild );
1063
+
1064
+ // The workaround has to do additional checks after a getElementById
1065
+ // Which slows things down for other browsers (hence the branching)
1066
+ if ( document.getElementById( id ) ) {
1067
+ Expr.find.ID = function( match, context, isXML ) {
1068
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
1069
+ var m = context.getElementById(match[1]);
1070
+
1071
+ return m ?
1072
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
1073
+ [m] :
1074
+ undefined :
1075
+ [];
1076
+ }
1077
+ };
1078
+
1079
+ Expr.filter.ID = function( elem, match ) {
1080
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
1081
+
1082
+ return elem.nodeType === 1 && node && node.nodeValue === match;
1083
+ };
1084
+ }
1085
+
1086
+ root.removeChild( form );
1087
+
1088
+ // release memory in IE
1089
+ root = form = null;
1090
+ })();
1091
+
1092
+ (function(){
1093
+ // Check to see if the browser returns only elements
1094
+ // when doing getElementsByTagName("*")
1095
+
1096
+ // Create a fake element
1097
+ var div = document.createElement("div");
1098
+ div.appendChild( document.createComment("") );
1099
+
1100
+ // Make sure no comments are found
1101
+ if ( div.getElementsByTagName("*").length > 0 ) {
1102
+ Expr.find.TAG = function( match, context ) {
1103
+ var results = context.getElementsByTagName( match[1] );
1104
+
1105
+ // Filter out possible comments
1106
+ if ( match[1] === "*" ) {
1107
+ var tmp = [];
1108
+
1109
+ for ( var i = 0; results[i]; i++ ) {
1110
+ if ( results[i].nodeType === 1 ) {
1111
+ tmp.push( results[i] );
1112
+ }
1113
+ }
1114
+
1115
+ results = tmp;
1116
+ }
1117
+
1118
+ return results;
1119
+ };
1120
+ }
1121
+
1122
+ // Check to see if an attribute returns normalized href attributes
1123
+ div.innerHTML = "<a href='#'></a>";
1124
+
1125
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
1126
+ div.firstChild.getAttribute("href") !== "#" ) {
1127
+
1128
+ Expr.attrHandle.href = function( elem ) {
1129
+ return elem.getAttribute( "href", 2 );
1130
+ };
1131
+ }
1132
+
1133
+ // release memory in IE
1134
+ div = null;
1135
+ })();
1136
+
1137
+ if ( document.querySelectorAll ) {
1138
+ (function(){
1139
+ var oldSizzle = Sizzle,
1140
+ div = document.createElement("div"),
1141
+ id = "__sizzle__";
1142
+
1143
+ div.innerHTML = "<p class='TEST'></p>";
1144
+
1145
+ // Safari can't handle uppercase or unicode characters when
1146
+ // in quirks mode.
1147
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
1148
+ return;
1149
+ }
1150
+
1151
+ Sizzle = function( query, context, extra, seed ) {
1152
+ context = context || document;
1153
+
1154
+ // Only use querySelectorAll on non-XML documents
1155
+ // (ID selectors don't work in non-HTML documents)
1156
+ if ( !seed && !Sizzle.isXML(context) ) {
1157
+ // See if we find a selector to speed up
1158
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
1159
+
1160
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
1161
+ // Speed-up: Sizzle("TAG")
1162
+ if ( match[1] ) {
1163
+ return makeArray( context.getElementsByTagName( query ), extra );
1164
+
1165
+ // Speed-up: Sizzle(".CLASS")
1166
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
1167
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
1168
+ }
1169
+ }
1170
+
1171
+ if ( context.nodeType === 9 ) {
1172
+ // Speed-up: Sizzle("body")
1173
+ // The body element only exists once, optimize finding it
1174
+ if ( query === "body" && context.body ) {
1175
+ return makeArray( [ context.body ], extra );
1176
+
1177
+ // Speed-up: Sizzle("#ID")
1178
+ } else if ( match && match[3] ) {
1179
+ var elem = context.getElementById( match[3] );
1180
+
1181
+ // Check parentNode to catch when Blackberry 4.6 returns
1182
+ // nodes that are no longer in the document #6963
1183
+ if ( elem && elem.parentNode ) {
1184
+ // Handle the case where IE and Opera return items
1185
+ // by name instead of ID
1186
+ if ( elem.id === match[3] ) {
1187
+ return makeArray( [ elem ], extra );
1188
+ }
1189
+
1190
+ } else {
1191
+ return makeArray( [], extra );
1192
+ }
1193
+ }
1194
+
1195
+ try {
1196
+ return makeArray( context.querySelectorAll(query), extra );
1197
+ } catch(qsaError) {}
1198
+
1199
+ // qSA works strangely on Element-rooted queries
1200
+ // We can work around this by specifying an extra ID on the root
1201
+ // and working up from there (Thanks to Andrew Dupont for the technique)
1202
+ // IE 8 doesn't work on object elements
1203
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
1204
+ var oldContext = context,
1205
+ old = context.getAttribute( "id" ),
1206
+ nid = old || id,
1207
+ hasParent = context.parentNode,
1208
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
1209
+
1210
+ if ( !old ) {
1211
+ context.setAttribute( "id", nid );
1212
+ } else {
1213
+ nid = nid.replace( /'/g, "\\$&" );
1214
+ }
1215
+ if ( relativeHierarchySelector && hasParent ) {
1216
+ context = context.parentNode;
1217
+ }
1218
+
1219
+ try {
1220
+ if ( !relativeHierarchySelector || hasParent ) {
1221
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
1222
+ }
1223
+
1224
+ } catch(pseudoError) {
1225
+ } finally {
1226
+ if ( !old ) {
1227
+ oldContext.removeAttribute( "id" );
1228
+ }
1229
+ }
1230
+ }
1231
+ }
1232
+
1233
+ return oldSizzle(query, context, extra, seed);
1234
+ };
1235
+
1236
+ for ( var prop in oldSizzle ) {
1237
+ Sizzle[ prop ] = oldSizzle[ prop ];
1238
+ }
1239
+
1240
+ // release memory in IE
1241
+ div = null;
1242
+ })();
1243
+ }
1244
+
1245
+ (function(){
1246
+ var html = document.documentElement,
1247
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
1248
+
1249
+ if ( matches ) {
1250
+ // Check to see if it's possible to do matchesSelector
1251
+ // on a disconnected node (IE 9 fails this)
1252
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
1253
+ pseudoWorks = false;
1254
+
1255
+ try {
1256
+ // This should fail with an exception
1257
+ // Gecko does not error, returns false instead
1258
+ matches.call( document.documentElement, "[test!='']:sizzle" );
1259
+
1260
+ } catch( pseudoError ) {
1261
+ pseudoWorks = true;
1262
+ }
1263
+
1264
+ Sizzle.matchesSelector = function( node, expr ) {
1265
+ // Make sure that attribute selectors are quoted
1266
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
1267
+
1268
+ if ( !Sizzle.isXML( node ) ) {
1269
+ try {
1270
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
1271
+ var ret = matches.call( node, expr );
1272
+
1273
+ // IE 9's matchesSelector returns false on disconnected nodes
1274
+ if ( ret || !disconnectedMatch ||
1275
+ // As well, disconnected nodes are said to be in a document
1276
+ // fragment in IE 9, so check for that
1277
+ node.document && node.document.nodeType !== 11 ) {
1278
+ return ret;
1279
+ }
1280
+ }
1281
+ } catch(e) {}
1282
+ }
1283
+
1284
+ return Sizzle(expr, null, null, [node]).length > 0;
1285
+ };
1286
+ }
1287
+ })();
1288
+
1289
+ (function(){
1290
+ var div = document.createElement("div");
1291
+
1292
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
1293
+
1294
+ // Opera can't find a second classname (in 9.6)
1295
+ // Also, make sure that getElementsByClassName actually exists
1296
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
1297
+ return;
1298
+ }
1299
+
1300
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
1301
+ div.lastChild.className = "e";
1302
+
1303
+ if ( div.getElementsByClassName("e").length === 1 ) {
1304
+ return;
1305
+ }
1306
+
1307
+ Expr.order.splice(1, 0, "CLASS");
1308
+ Expr.find.CLASS = function( match, context, isXML ) {
1309
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
1310
+ return context.getElementsByClassName(match[1]);
1311
+ }
1312
+ };
1313
+
1314
+ // release memory in IE
1315
+ div = null;
1316
+ })();
1317
+
1318
+ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
1319
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
1320
+ var elem = checkSet[i];
1321
+
1322
+ if ( elem ) {
1323
+ var match = false;
1324
+
1325
+ elem = elem[dir];
1326
+
1327
+ while ( elem ) {
1328
+ if ( elem[ expando ] === doneName ) {
1329
+ match = checkSet[elem.sizset];
1330
+ break;
1331
+ }
1332
+
1333
+ if ( elem.nodeType === 1 && !isXML ){
1334
+ elem[ expando ] = doneName;
1335
+ elem.sizset = i;
1336
+ }
1337
+
1338
+ if ( elem.nodeName.toLowerCase() === cur ) {
1339
+ match = elem;
1340
+ break;
1341
+ }
1342
+
1343
+ elem = elem[dir];
1344
+ }
1345
+
1346
+ checkSet[i] = match;
1347
+ }
1348
+ }
1349
+ }
1350
+
1351
+ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
1352
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
1353
+ var elem = checkSet[i];
1354
+
1355
+ if ( elem ) {
1356
+ var match = false;
1357
+
1358
+ elem = elem[dir];
1359
+
1360
+ while ( elem ) {
1361
+ if ( elem[ expando ] === doneName ) {
1362
+ match = checkSet[elem.sizset];
1363
+ break;
1364
+ }
1365
+
1366
+ if ( elem.nodeType === 1 ) {
1367
+ if ( !isXML ) {
1368
+ elem[ expando ] = doneName;
1369
+ elem.sizset = i;
1370
+ }
1371
+
1372
+ if ( typeof cur !== "string" ) {
1373
+ if ( elem === cur ) {
1374
+ match = true;
1375
+ break;
1376
+ }
1377
+
1378
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
1379
+ match = elem;
1380
+ break;
1381
+ }
1382
+ }
1383
+
1384
+ elem = elem[dir];
1385
+ }
1386
+
1387
+ checkSet[i] = match;
1388
+ }
1389
+ }
1390
+ }
1391
+
1392
+ if ( document.documentElement.contains ) {
1393
+ Sizzle.contains = function( a, b ) {
1394
+ return a !== b && (a.contains ? a.contains(b) : true);
1395
+ };
1396
+
1397
+ } else if ( document.documentElement.compareDocumentPosition ) {
1398
+ Sizzle.contains = function( a, b ) {
1399
+ return !!(a.compareDocumentPosition(b) & 16);
1400
+ };
1401
+
1402
+ } else {
1403
+ Sizzle.contains = function() {
1404
+ return false;
1405
+ };
1406
+ }
1407
+
1408
+ Sizzle.isXML = function( elem ) {
1409
+ // documentElement is verified for cases where it doesn't yet exist
1410
+ // (such as loading iframes in IE - #4833)
1411
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
1412
+
1413
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
1414
+ };
1415
+
1416
+ var posProcess = function( selector, context, seed ) {
1417
+ var match,
1418
+ tmpSet = [],
1419
+ later = "",
1420
+ root = context.nodeType ? [context] : context;
1421
+
1422
+ // Position selectors must be done after the filter
1423
+ // And so must :not(positional) so we move all PSEUDOs to the end
1424
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
1425
+ later += match[0];
1426
+ selector = selector.replace( Expr.match.PSEUDO, "" );
1427
+ }
1428
+
1429
+ selector = Expr.relative[selector] ? selector + "*" : selector;
1430
+
1431
+ for ( var i = 0, l = root.length; i < l; i++ ) {
1432
+ Sizzle( selector, root[i], tmpSet, seed );
1433
+ }
1434
+
1435
+ return Sizzle.filter( later, tmpSet );
1436
+ };
1437
+
1438
+ // EXPOSE
1439
+
1440
+ window.Sizzle = Sizzle;
1441
+
1442
+ })();