jquery-source 1.8.2 → 1.8.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.
- data/lib/jquery-source/version.rb +1 -1
- data/vendor/assets/javascripts/jquery.js +1933 -1901
- metadata +1 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* jQuery JavaScript Library v1.8.
|
2
|
+
* jQuery JavaScript Library v1.8.3
|
3
3
|
* http://jquery.com/
|
4
4
|
*
|
5
5
|
* Includes Sizzle.js
|
@@ -9,7 +9,7 @@
|
|
9
9
|
* Released under the MIT license
|
10
10
|
* http://jquery.org/license
|
11
11
|
*
|
12
|
-
* Date:
|
12
|
+
* Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
|
13
13
|
*/
|
14
14
|
(function( window, undefined ) {
|
15
15
|
var
|
@@ -186,7 +186,7 @@ jQuery.fn = jQuery.prototype = {
|
|
186
186
|
selector: "",
|
187
187
|
|
188
188
|
// The current version of jQuery being used
|
189
|
-
jquery: "1.8.
|
189
|
+
jquery: "1.8.3",
|
190
190
|
|
191
191
|
// The default length of a jQuery object is 0
|
192
192
|
length: 0,
|
@@ -999,8 +999,10 @@ jQuery.Callbacks = function( options ) {
|
|
999
999
|
(function add( args ) {
|
1000
1000
|
jQuery.each( args, function( _, arg ) {
|
1001
1001
|
var type = jQuery.type( arg );
|
1002
|
-
if ( type === "function"
|
1003
|
-
|
1002
|
+
if ( type === "function" ) {
|
1003
|
+
if ( !options.unique || !self.has( arg ) ) {
|
1004
|
+
list.push( arg );
|
1005
|
+
}
|
1004
1006
|
} else if ( arg && arg.length && type !== "string" ) {
|
1005
1007
|
// Inspect recursively
|
1006
1008
|
add( arg );
|
@@ -1253,24 +1255,23 @@ jQuery.support = (function() {
|
|
1253
1255
|
clickFn,
|
1254
1256
|
div = document.createElement("div");
|
1255
1257
|
|
1256
|
-
//
|
1258
|
+
// Setup
|
1257
1259
|
div.setAttribute( "className", "t" );
|
1258
1260
|
div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
|
1259
1261
|
|
1262
|
+
// Support tests won't run in some limited or non-browser environments
|
1260
1263
|
all = div.getElementsByTagName("*");
|
1261
1264
|
a = div.getElementsByTagName("a")[ 0 ];
|
1262
|
-
a.
|
1263
|
-
|
1264
|
-
// Can't get basic test support
|
1265
|
-
if ( !all || !all.length ) {
|
1265
|
+
if ( !all || !a || !all.length ) {
|
1266
1266
|
return {};
|
1267
1267
|
}
|
1268
1268
|
|
1269
|
-
// First batch of
|
1269
|
+
// First batch of tests
|
1270
1270
|
select = document.createElement("select");
|
1271
1271
|
opt = select.appendChild( document.createElement("option") );
|
1272
1272
|
input = div.getElementsByTagName("input")[ 0 ];
|
1273
1273
|
|
1274
|
+
a.style.cssText = "top:1px;float:left;opacity:.5";
|
1274
1275
|
support = {
|
1275
1276
|
// IE strips leading whitespace when .innerHTML is used
|
1276
1277
|
leadingWhitespace: ( div.firstChild.nodeType === 3 ),
|
@@ -1312,7 +1313,7 @@ jQuery.support = (function() {
|
|
1312
1313
|
// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
|
1313
1314
|
getSetAttribute: div.className !== "t",
|
1314
1315
|
|
1315
|
-
// Tests for enctype support on a form(#6743)
|
1316
|
+
// Tests for enctype support on a form (#6743)
|
1316
1317
|
enctype: !!document.createElement("form").enctype,
|
1317
1318
|
|
1318
1319
|
// Makes sure cloning an html5 element does not cause problems
|
@@ -2217,26 +2218,25 @@ jQuery.extend({
|
|
2217
2218
|
},
|
2218
2219
|
select: {
|
2219
2220
|
get: function( elem ) {
|
2220
|
-
var value,
|
2221
|
-
index = elem.selectedIndex,
|
2222
|
-
values = [],
|
2221
|
+
var value, option,
|
2223
2222
|
options = elem.options,
|
2224
|
-
|
2225
|
-
|
2226
|
-
|
2227
|
-
|
2228
|
-
|
2229
|
-
|
2223
|
+
index = elem.selectedIndex,
|
2224
|
+
one = elem.type === "select-one" || index < 0,
|
2225
|
+
values = one ? null : [],
|
2226
|
+
max = one ? index + 1 : options.length,
|
2227
|
+
i = index < 0 ?
|
2228
|
+
max :
|
2229
|
+
one ? index : 0;
|
2230
2230
|
|
2231
2231
|
// Loop through all the selected options
|
2232
|
-
i = one ? index : 0;
|
2233
|
-
max = one ? index + 1 : options.length;
|
2234
2232
|
for ( ; i < max; i++ ) {
|
2235
2233
|
option = options[ i ];
|
2236
2234
|
|
2237
|
-
//
|
2238
|
-
if (
|
2239
|
-
|
2235
|
+
// oldIE doesn't update selected after form reset (#2551)
|
2236
|
+
if ( ( option.selected || i === index ) &&
|
2237
|
+
// Don't return options that are disabled or in a disabled optgroup
|
2238
|
+
( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
|
2239
|
+
( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
|
2240
2240
|
|
2241
2241
|
// Get the specific value for the option
|
2242
2242
|
value = jQuery( option ).val();
|
@@ -2251,11 +2251,6 @@ jQuery.extend({
|
|
2251
2251
|
}
|
2252
2252
|
}
|
2253
2253
|
|
2254
|
-
// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
|
2255
|
-
if ( one && !values.length && options.length ) {
|
2256
|
-
return jQuery( options[ index ] ).val();
|
2257
|
-
}
|
2258
|
-
|
2259
2254
|
return values;
|
2260
2255
|
},
|
2261
2256
|
|
@@ -3233,7 +3228,7 @@ jQuery.removeEvent = document.removeEventListener ?
|
|
3233
3228
|
|
3234
3229
|
if ( elem.detachEvent ) {
|
3235
3230
|
|
3236
|
-
// #8545, #7054, preventing memory leaks for custom events in IE6-8
|
3231
|
+
// #8545, #7054, preventing memory leaks for custom events in IE6-8
|
3237
3232
|
// detachEvent needed property on element, by name of that event, to properly expose it to GC
|
3238
3233
|
if ( typeof elem[ name ] === "undefined" ) {
|
3239
3234
|
elem[ name ] = null;
|
@@ -3428,1904 +3423,1922 @@ if ( !jQuery.support.changeBubbles ) {
|
|
3428
3423
|
}
|
3429
3424
|
return false;
|
3430
3425
|
}
|
3431
|
-
// Delegated event; lazy-add a change handler on descendant inputs
|
3432
|
-
jQuery.event.add( this, "beforeactivate._change", function( e ) {
|
3433
|
-
var elem = e.target;
|
3434
|
-
|
3435
|
-
if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
|
3436
|
-
jQuery.event.add( elem, "change._change", function( event ) {
|
3437
|
-
if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
|
3438
|
-
jQuery.event.simulate( "change", this.parentNode, event, true );
|
3439
|
-
}
|
3440
|
-
});
|
3441
|
-
jQuery._data( elem, "_change_attached", true );
|
3442
|
-
}
|
3443
|
-
});
|
3444
|
-
},
|
3445
|
-
|
3446
|
-
handle: function( event ) {
|
3447
|
-
var elem = event.target;
|
3448
|
-
|
3449
|
-
// Swallow native change events from checkbox/radio, we already triggered them above
|
3450
|
-
if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
|
3451
|
-
return event.handleObj.handler.apply( this, arguments );
|
3452
|
-
}
|
3453
|
-
},
|
3454
|
-
|
3455
|
-
teardown: function() {
|
3456
|
-
jQuery.event.remove( this, "._change" );
|
3457
|
-
|
3458
|
-
return !rformElems.test( this.nodeName );
|
3459
|
-
}
|
3460
|
-
};
|
3461
|
-
}
|
3462
|
-
|
3463
|
-
// Create "bubbling" focus and blur events
|
3464
|
-
if ( !jQuery.support.focusinBubbles ) {
|
3465
|
-
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
|
3466
|
-
|
3467
|
-
// Attach a single capturing handler while someone wants focusin/focusout
|
3468
|
-
var attaches = 0,
|
3469
|
-
handler = function( event ) {
|
3470
|
-
jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
|
3471
|
-
};
|
3472
|
-
|
3473
|
-
jQuery.event.special[ fix ] = {
|
3474
|
-
setup: function() {
|
3475
|
-
if ( attaches++ === 0 ) {
|
3476
|
-
document.addEventListener( orig, handler, true );
|
3477
|
-
}
|
3478
|
-
},
|
3479
|
-
teardown: function() {
|
3480
|
-
if ( --attaches === 0 ) {
|
3481
|
-
document.removeEventListener( orig, handler, true );
|
3482
|
-
}
|
3483
|
-
}
|
3484
|
-
};
|
3485
|
-
});
|
3486
|
-
}
|
3487
|
-
|
3488
|
-
jQuery.fn.extend({
|
3489
|
-
|
3490
|
-
on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
|
3491
|
-
var origFn, type;
|
3492
|
-
|
3493
|
-
// Types can be a map of types/handlers
|
3494
|
-
if ( typeof types === "object" ) {
|
3495
|
-
// ( types-Object, selector, data )
|
3496
|
-
if ( typeof selector !== "string" ) { // && selector != null
|
3497
|
-
// ( types-Object, data )
|
3498
|
-
data = data || selector;
|
3499
|
-
selector = undefined;
|
3500
|
-
}
|
3501
|
-
for ( type in types ) {
|
3502
|
-
this.on( type, selector, data, types[ type ], one );
|
3503
|
-
}
|
3504
|
-
return this;
|
3505
|
-
}
|
3506
|
-
|
3507
|
-
if ( data == null && fn == null ) {
|
3508
|
-
// ( types, fn )
|
3509
|
-
fn = selector;
|
3510
|
-
data = selector = undefined;
|
3511
|
-
} else if ( fn == null ) {
|
3512
|
-
if ( typeof selector === "string" ) {
|
3513
|
-
// ( types, selector, fn )
|
3514
|
-
fn = data;
|
3515
|
-
data = undefined;
|
3516
|
-
} else {
|
3517
|
-
// ( types, data, fn )
|
3518
|
-
fn = data;
|
3519
|
-
data = selector;
|
3520
|
-
selector = undefined;
|
3521
|
-
}
|
3522
|
-
}
|
3523
|
-
if ( fn === false ) {
|
3524
|
-
fn = returnFalse;
|
3525
|
-
} else if ( !fn ) {
|
3526
|
-
return this;
|
3527
|
-
}
|
3528
|
-
|
3529
|
-
if ( one === 1 ) {
|
3530
|
-
origFn = fn;
|
3531
|
-
fn = function( event ) {
|
3532
|
-
// Can use an empty set, since event contains the info
|
3533
|
-
jQuery().off( event );
|
3534
|
-
return origFn.apply( this, arguments );
|
3535
|
-
};
|
3536
|
-
// Use same guid so caller can remove using origFn
|
3537
|
-
fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
|
3538
|
-
}
|
3539
|
-
return this.each( function() {
|
3540
|
-
jQuery.event.add( this, types, fn, data, selector );
|
3541
|
-
});
|
3542
|
-
},
|
3543
|
-
one: function( types, selector, data, fn ) {
|
3544
|
-
return this.on( types, selector, data, fn, 1 );
|
3545
|
-
},
|
3546
|
-
off: function( types, selector, fn ) {
|
3547
|
-
var handleObj, type;
|
3548
|
-
if ( types && types.preventDefault && types.handleObj ) {
|
3549
|
-
// ( event ) dispatched jQuery.Event
|
3550
|
-
handleObj = types.handleObj;
|
3551
|
-
jQuery( types.delegateTarget ).off(
|
3552
|
-
handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
|
3553
|
-
handleObj.selector,
|
3554
|
-
handleObj.handler
|
3555
|
-
);
|
3556
|
-
return this;
|
3557
|
-
}
|
3558
|
-
if ( typeof types === "object" ) {
|
3559
|
-
// ( types-object [, selector] )
|
3560
|
-
for ( type in types ) {
|
3561
|
-
this.off( type, selector, types[ type ] );
|
3562
|
-
}
|
3563
|
-
return this;
|
3564
|
-
}
|
3565
|
-
if ( selector === false || typeof selector === "function" ) {
|
3566
|
-
// ( types [, fn] )
|
3567
|
-
fn = selector;
|
3568
|
-
selector = undefined;
|
3569
|
-
}
|
3570
|
-
if ( fn === false ) {
|
3571
|
-
fn = returnFalse;
|
3572
|
-
}
|
3573
|
-
return this.each(function() {
|
3574
|
-
jQuery.event.remove( this, types, fn, selector );
|
3575
|
-
});
|
3576
|
-
},
|
3577
|
-
|
3578
|
-
bind: function( types, data, fn ) {
|
3579
|
-
return this.on( types, null, data, fn );
|
3580
|
-
},
|
3581
|
-
unbind: function( types, fn ) {
|
3582
|
-
return this.off( types, null, fn );
|
3583
|
-
},
|
3584
|
-
|
3585
|
-
live: function( types, data, fn ) {
|
3586
|
-
jQuery( this.context ).on( types, this.selector, data, fn );
|
3587
|
-
return this;
|
3588
|
-
},
|
3589
|
-
die: function( types, fn ) {
|
3590
|
-
jQuery( this.context ).off( types, this.selector || "**", fn );
|
3591
|
-
return this;
|
3592
|
-
},
|
3593
|
-
|
3594
|
-
delegate: function( selector, types, data, fn ) {
|
3595
|
-
return this.on( types, selector, data, fn );
|
3596
|
-
},
|
3597
|
-
undelegate: function( selector, types, fn ) {
|
3598
|
-
// ( namespace ) or ( selector, types [, fn] )
|
3599
|
-
return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
|
3600
|
-
},
|
3601
|
-
|
3602
|
-
trigger: function( type, data ) {
|
3603
|
-
return this.each(function() {
|
3604
|
-
jQuery.event.trigger( type, data, this );
|
3605
|
-
});
|
3606
|
-
},
|
3607
|
-
triggerHandler: function( type, data ) {
|
3608
|
-
if ( this[0] ) {
|
3609
|
-
return jQuery.event.trigger( type, data, this[0], true );
|
3610
|
-
}
|
3611
|
-
},
|
3612
|
-
|
3613
|
-
toggle: function( fn ) {
|
3614
|
-
// Save reference to arguments for access in closure
|
3615
|
-
var args = arguments,
|
3616
|
-
guid = fn.guid || jQuery.guid++,
|
3617
|
-
i = 0,
|
3618
|
-
toggler = function( event ) {
|
3619
|
-
// Figure out which function to execute
|
3620
|
-
var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
|
3621
|
-
jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
|
3622
|
-
|
3623
|
-
// Make sure that clicks stop
|
3624
|
-
event.preventDefault();
|
3625
|
-
|
3626
|
-
// and execute the function
|
3627
|
-
return args[ lastToggle ].apply( this, arguments ) || false;
|
3628
|
-
};
|
3629
|
-
|
3630
|
-
// link all the functions, so any of them can unbind this click handler
|
3631
|
-
toggler.guid = guid;
|
3632
|
-
while ( i < args.length ) {
|
3633
|
-
args[ i++ ].guid = guid;
|
3634
|
-
}
|
3635
|
-
|
3636
|
-
return this.click( toggler );
|
3637
|
-
},
|
3638
|
-
|
3639
|
-
hover: function( fnOver, fnOut ) {
|
3640
|
-
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
|
3641
|
-
}
|
3642
|
-
});
|
3643
|
-
|
3644
|
-
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
|
3645
|
-
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
|
3646
|
-
"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
|
3647
|
-
|
3648
|
-
// Handle event binding
|
3649
|
-
jQuery.fn[ name ] = function( data, fn ) {
|
3650
|
-
if ( fn == null ) {
|
3651
|
-
fn = data;
|
3652
|
-
data = null;
|
3653
|
-
}
|
3654
|
-
|
3655
|
-
return arguments.length > 0 ?
|
3656
|
-
this.on( name, null, data, fn ) :
|
3657
|
-
this.trigger( name );
|
3658
|
-
};
|
3659
|
-
|
3660
|
-
if ( rkeyEvent.test( name ) ) {
|
3661
|
-
jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
|
3662
|
-
}
|
3663
|
-
|
3664
|
-
if ( rmouseEvent.test( name ) ) {
|
3665
|
-
jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
|
3666
|
-
}
|
3667
|
-
});
|
3668
|
-
/*!
|
3669
|
-
* Sizzle CSS Selector Engine
|
3670
|
-
* Copyright 2012 jQuery Foundation and other contributors
|
3671
|
-
* Released under the MIT license
|
3672
|
-
* http://sizzlejs.com/
|
3673
|
-
*/
|
3674
|
-
(function( window, undefined ) {
|
3675
|
-
|
3676
|
-
var cachedruns,
|
3677
|
-
assertGetIdNotName,
|
3678
|
-
Expr,
|
3679
|
-
getText,
|
3680
|
-
isXML,
|
3681
|
-
contains,
|
3682
|
-
compile,
|
3683
|
-
sortOrder,
|
3684
|
-
hasDuplicate,
|
3685
|
-
outermostContext,
|
3686
|
-
|
3687
|
-
baseHasDuplicate = true,
|
3688
|
-
strundefined = "undefined",
|
3689
|
-
|
3690
|
-
expando = ( "sizcache" + Math.random() ).replace( ".", "" ),
|
3691
|
-
|
3692
|
-
Token = String,
|
3693
|
-
document = window.document,
|
3694
|
-
docElem = document.documentElement,
|
3695
|
-
dirruns = 0,
|
3696
|
-
done = 0,
|
3697
|
-
pop = [].pop,
|
3698
|
-
push = [].push,
|
3699
|
-
slice = [].slice,
|
3700
|
-
// Use a stripped-down indexOf if a native one is unavailable
|
3701
|
-
indexOf = [].indexOf || function( elem ) {
|
3702
|
-
var i = 0,
|
3703
|
-
len = this.length;
|
3704
|
-
for ( ; i < len; i++ ) {
|
3705
|
-
if ( this[i] === elem ) {
|
3706
|
-
return i;
|
3707
|
-
}
|
3708
|
-
}
|
3709
|
-
return -1;
|
3710
|
-
},
|
3711
|
-
|
3712
|
-
// Augment a function for special use by Sizzle
|
3713
|
-
markFunction = function( fn, value ) {
|
3714
|
-
fn[ expando ] = value == null || value;
|
3715
|
-
return fn;
|
3716
|
-
},
|
3717
|
-
|
3718
|
-
createCache = function() {
|
3719
|
-
var cache = {},
|
3720
|
-
keys = [];
|
3721
|
-
|
3722
|
-
return markFunction(function( key, value ) {
|
3723
|
-
// Only keep the most recent entries
|
3724
|
-
if ( keys.push( key ) > Expr.cacheLength ) {
|
3725
|
-
delete cache[ keys.shift() ];
|
3726
|
-
}
|
3727
|
-
|
3728
|
-
return (cache[ key ] = value);
|
3729
|
-
}, cache );
|
3730
|
-
},
|
3731
|
-
|
3732
|
-
classCache = createCache(),
|
3733
|
-
tokenCache = createCache(),
|
3734
|
-
compilerCache = createCache(),
|
3735
|
-
|
3736
|
-
// Regex
|
3737
|
-
|
3738
|
-
// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
|
3739
|
-
whitespace = "[\\x20\\t\\r\\n\\f]",
|
3740
|
-
// http://www.w3.org/TR/css3-syntax/#characters
|
3741
|
-
characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
|
3742
|
-
|
3743
|
-
// Loosely modeled on CSS identifier characters
|
3744
|
-
// An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)
|
3745
|
-
// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
|
3746
|
-
identifier = characterEncoding.replace( "w", "w#" ),
|
3747
|
-
|
3748
|
-
// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
|
3749
|
-
operators = "([*^$|!~]?=)",
|
3750
|
-
attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
|
3751
|
-
"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
|
3752
|
-
|
3753
|
-
// Prefer arguments not in parens/brackets,
|
3754
|
-
// then attribute selectors and non-pseudos (denoted by :),
|
3755
|
-
// then anything else
|
3756
|
-
// These preferences are here to reduce the number of selectors
|
3757
|
-
// needing tokenize in the PSEUDO preFilter
|
3758
|
-
pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",
|
3759
|
-
|
3760
|
-
// For matchExpr.POS and matchExpr.needsContext
|
3761
|
-
pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
|
3762
|
-
"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)",
|
3763
|
-
|
3764
|
-
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
|
3765
|
-
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
|
3766
|
-
|
3767
|
-
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
3768
|
-
rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
|
3769
|
-
rpseudo = new RegExp( pseudos ),
|
3770
|
-
|
3771
|
-
// Easily-parseable/retrievable ID or TAG or CLASS selectors
|
3772
|
-
rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
|
3773
|
-
|
3774
|
-
rnot = /^:not/,
|
3775
|
-
rsibling = /[\x20\t\r\n\f]*[+~]/,
|
3776
|
-
rendsWithNot = /:not\($/,
|
3777
|
-
|
3778
|
-
rheader = /h\d/i,
|
3779
|
-
rinputs = /input|select|textarea|button/i,
|
3780
|
-
|
3781
|
-
rbackslash = /\\(?!\\)/g,
|
3782
|
-
|
3783
|
-
matchExpr = {
|
3784
|
-
"ID": new RegExp( "^#(" + characterEncoding + ")" ),
|
3785
|
-
"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
|
3786
|
-
"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
|
3787
|
-
"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
|
3788
|
-
"ATTR": new RegExp( "^" + attributes ),
|
3789
|
-
"PSEUDO": new RegExp( "^" + pseudos ),
|
3790
|
-
"POS": new RegExp( pos, "i" ),
|
3791
|
-
"CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace +
|
3792
|
-
"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
|
3793
|
-
"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
|
3794
|
-
// For use in libraries implementing .is()
|
3795
|
-
"needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )
|
3796
|
-
},
|
3797
|
-
|
3798
|
-
// Support
|
3799
|
-
|
3800
|
-
// Used for testing something on an element
|
3801
|
-
assert = function( fn ) {
|
3802
|
-
var div = document.createElement("div");
|
3803
|
-
|
3804
|
-
try {
|
3805
|
-
return fn( div );
|
3806
|
-
} catch (e) {
|
3807
|
-
return false;
|
3808
|
-
} finally {
|
3809
|
-
// release memory in IE
|
3810
|
-
div = null;
|
3811
|
-
}
|
3812
|
-
},
|
3813
|
-
|
3814
|
-
// Check if getElementsByTagName("*") returns only elements
|
3815
|
-
assertTagNameNoComments = assert(function( div ) {
|
3816
|
-
div.appendChild( document.createComment("") );
|
3817
|
-
return !div.getElementsByTagName("*").length;
|
3818
|
-
}),
|
3819
|
-
|
3820
|
-
// Check if getAttribute returns normalized href attributes
|
3821
|
-
assertHrefNotNormalized = assert(function( div ) {
|
3822
|
-
div.innerHTML = "<a href='#'></a>";
|
3823
|
-
return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
|
3824
|
-
div.firstChild.getAttribute("href") === "#";
|
3825
|
-
}),
|
3826
|
-
|
3827
|
-
// Check if attributes should be retrieved by attribute nodes
|
3828
|
-
assertAttributes = assert(function( div ) {
|
3829
|
-
div.innerHTML = "<select></select>";
|
3830
|
-
var type = typeof div.lastChild.getAttribute("multiple");
|
3831
|
-
// IE8 returns a string for some attributes even when not present
|
3832
|
-
return type !== "boolean" && type !== "string";
|
3833
|
-
}),
|
3834
|
-
|
3835
|
-
// Check if getElementsByClassName can be trusted
|
3836
|
-
assertUsableClassName = assert(function( div ) {
|
3837
|
-
// Opera can't find a second classname (in 9.6)
|
3838
|
-
div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
|
3839
|
-
if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
|
3840
|
-
return false;
|
3841
|
-
}
|
3842
|
-
|
3843
|
-
// Safari 3.2 caches class attributes and doesn't catch changes
|
3844
|
-
div.lastChild.className = "e";
|
3845
|
-
return div.getElementsByClassName("e").length === 2;
|
3846
|
-
}),
|
3847
|
-
|
3848
|
-
// Check if getElementById returns elements by name
|
3849
|
-
// Check if getElementsByName privileges form controls or returns elements by ID
|
3850
|
-
assertUsableName = assert(function( div ) {
|
3851
|
-
// Inject content
|
3852
|
-
div.id = expando + 0;
|
3853
|
-
div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
|
3854
|
-
docElem.insertBefore( div, docElem.firstChild );
|
3855
|
-
|
3856
|
-
// Test
|
3857
|
-
var pass = document.getElementsByName &&
|
3858
|
-
// buggy browsers will return fewer than the correct 2
|
3859
|
-
document.getElementsByName( expando ).length === 2 +
|
3860
|
-
// buggy browsers will return more than the correct 0
|
3861
|
-
document.getElementsByName( expando + 0 ).length;
|
3862
|
-
assertGetIdNotName = !document.getElementById( expando );
|
3863
|
-
|
3864
|
-
// Cleanup
|
3865
|
-
docElem.removeChild( div );
|
3866
|
-
|
3867
|
-
return pass;
|
3868
|
-
});
|
3869
|
-
|
3870
|
-
// If slice is not available, provide a backup
|
3871
|
-
try {
|
3872
|
-
slice.call( docElem.childNodes, 0 )[0].nodeType;
|
3873
|
-
} catch ( e ) {
|
3874
|
-
slice = function( i ) {
|
3875
|
-
var elem,
|
3876
|
-
results = [];
|
3877
|
-
for ( ; (elem = this[i]); i++ ) {
|
3878
|
-
results.push( elem );
|
3879
|
-
}
|
3880
|
-
return results;
|
3881
|
-
};
|
3882
|
-
}
|
3883
|
-
|
3884
|
-
function Sizzle( selector, context, results, seed ) {
|
3885
|
-
results = results || [];
|
3886
|
-
context = context || document;
|
3887
|
-
var match, elem, xml, m,
|
3888
|
-
nodeType = context.nodeType;
|
3889
|
-
|
3890
|
-
if ( !selector || typeof selector !== "string" ) {
|
3891
|
-
return results;
|
3892
|
-
}
|
3893
|
-
|
3894
|
-
if ( nodeType !== 1 && nodeType !== 9 ) {
|
3895
|
-
return [];
|
3896
|
-
}
|
3897
|
-
|
3898
|
-
xml = isXML( context );
|
3899
|
-
|
3900
|
-
if ( !xml && !seed ) {
|
3901
|
-
if ( (match = rquickExpr.exec( selector )) ) {
|
3902
|
-
// Speed-up: Sizzle("#ID")
|
3903
|
-
if ( (m = match[1]) ) {
|
3904
|
-
if ( nodeType === 9 ) {
|
3905
|
-
elem = context.getElementById( m );
|
3906
|
-
// Check parentNode to catch when Blackberry 4.6 returns
|
3907
|
-
// nodes that are no longer in the document #6963
|
3908
|
-
if ( elem && elem.parentNode ) {
|
3909
|
-
// Handle the case where IE, Opera, and Webkit return items
|
3910
|
-
// by name instead of ID
|
3911
|
-
if ( elem.id === m ) {
|
3912
|
-
results.push( elem );
|
3913
|
-
return results;
|
3914
|
-
}
|
3915
|
-
} else {
|
3916
|
-
return results;
|
3917
|
-
}
|
3918
|
-
} else {
|
3919
|
-
// Context is not a document
|
3920
|
-
if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
|
3921
|
-
contains( context, elem ) && elem.id === m ) {
|
3922
|
-
results.push( elem );
|
3923
|
-
return results;
|
3924
|
-
}
|
3925
|
-
}
|
3926
|
-
|
3927
|
-
// Speed-up: Sizzle("TAG")
|
3928
|
-
} else if ( match[2] ) {
|
3929
|
-
push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
|
3930
|
-
return results;
|
3931
|
-
|
3932
|
-
// Speed-up: Sizzle(".CLASS")
|
3933
|
-
} else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {
|
3934
|
-
push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
|
3935
|
-
return results;
|
3936
|
-
}
|
3937
|
-
}
|
3938
|
-
}
|
3939
|
-
|
3940
|
-
// All others
|
3941
|
-
return select( selector.replace( rtrim, "$1" ), context, results, seed, xml );
|
3942
|
-
}
|
3943
|
-
|
3944
|
-
Sizzle.matches = function( expr, elements ) {
|
3945
|
-
return Sizzle( expr, null, null, elements );
|
3946
|
-
};
|
3947
|
-
|
3948
|
-
Sizzle.matchesSelector = function( elem, expr ) {
|
3949
|
-
return Sizzle( expr, null, null, [ elem ] ).length > 0;
|
3950
|
-
};
|
3951
|
-
|
3952
|
-
// Returns a function to use in pseudos for input types
|
3953
|
-
function createInputPseudo( type ) {
|
3954
|
-
return function( elem ) {
|
3955
|
-
var name = elem.nodeName.toLowerCase();
|
3956
|
-
return name === "input" && elem.type === type;
|
3957
|
-
};
|
3958
|
-
}
|
3959
|
-
|
3960
|
-
// Returns a function to use in pseudos for buttons
|
3961
|
-
function createButtonPseudo( type ) {
|
3962
|
-
return function( elem ) {
|
3963
|
-
var name = elem.nodeName.toLowerCase();
|
3964
|
-
return (name === "input" || name === "button") && elem.type === type;
|
3965
|
-
};
|
3966
|
-
}
|
3967
|
-
|
3968
|
-
// Returns a function to use in pseudos for positionals
|
3969
|
-
function createPositionalPseudo( fn ) {
|
3970
|
-
return markFunction(function( argument ) {
|
3971
|
-
argument = +argument;
|
3972
|
-
return markFunction(function( seed, matches ) {
|
3973
|
-
var j,
|
3974
|
-
matchIndexes = fn( [], seed.length, argument ),
|
3975
|
-
i = matchIndexes.length;
|
3976
|
-
|
3977
|
-
// Match elements found at the specified indexes
|
3978
|
-
while ( i-- ) {
|
3979
|
-
if ( seed[ (j = matchIndexes[i]) ] ) {
|
3980
|
-
seed[j] = !(matches[j] = seed[j]);
|
3981
|
-
}
|
3982
|
-
}
|
3983
|
-
});
|
3984
|
-
});
|
3985
|
-
}
|
3986
|
-
|
3987
|
-
/**
|
3988
|
-
* Utility function for retrieving the text value of an array of DOM nodes
|
3989
|
-
* @param {Array|Element} elem
|
3990
|
-
*/
|
3991
|
-
getText = Sizzle.getText = function( elem ) {
|
3992
|
-
var node,
|
3993
|
-
ret = "",
|
3994
|
-
i = 0,
|
3995
|
-
nodeType = elem.nodeType;
|
3996
|
-
|
3997
|
-
if ( nodeType ) {
|
3998
|
-
if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
|
3999
|
-
// Use textContent for elements
|
4000
|
-
// innerText usage removed for consistency of new lines (see #11153)
|
4001
|
-
if ( typeof elem.textContent === "string" ) {
|
4002
|
-
return elem.textContent;
|
4003
|
-
} else {
|
4004
|
-
// Traverse its children
|
4005
|
-
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
|
4006
|
-
ret += getText( elem );
|
4007
|
-
}
|
4008
|
-
}
|
4009
|
-
} else if ( nodeType === 3 || nodeType === 4 ) {
|
4010
|
-
return elem.nodeValue;
|
4011
|
-
}
|
4012
|
-
// Do not include comment or processing instruction nodes
|
4013
|
-
} else {
|
4014
|
-
|
4015
|
-
// If no nodeType, this is expected to be an array
|
4016
|
-
for ( ; (node = elem[i]); i++ ) {
|
4017
|
-
// Do not traverse comment nodes
|
4018
|
-
ret += getText( node );
|
4019
|
-
}
|
4020
|
-
}
|
4021
|
-
return ret;
|
4022
|
-
};
|
4023
|
-
|
4024
|
-
isXML = Sizzle.isXML = function( elem ) {
|
4025
|
-
// documentElement is verified for cases where it doesn't yet exist
|
4026
|
-
// (such as loading iframes in IE - #4833)
|
4027
|
-
var documentElement = elem && (elem.ownerDocument || elem).documentElement;
|
4028
|
-
return documentElement ? documentElement.nodeName !== "HTML" : false;
|
4029
|
-
};
|
4030
|
-
|
4031
|
-
// Element contains another
|
4032
|
-
contains = Sizzle.contains = docElem.contains ?
|
4033
|
-
function( a, b ) {
|
4034
|
-
var adown = a.nodeType === 9 ? a.documentElement : a,
|
4035
|
-
bup = b && b.parentNode;
|
4036
|
-
return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );
|
4037
|
-
} :
|
4038
|
-
docElem.compareDocumentPosition ?
|
4039
|
-
function( a, b ) {
|
4040
|
-
return b && !!( a.compareDocumentPosition( b ) & 16 );
|
4041
|
-
} :
|
4042
|
-
function( a, b ) {
|
4043
|
-
while ( (b = b.parentNode) ) {
|
4044
|
-
if ( b === a ) {
|
4045
|
-
return true;
|
4046
|
-
}
|
4047
|
-
}
|
4048
|
-
return false;
|
4049
|
-
};
|
4050
|
-
|
4051
|
-
Sizzle.attr = function( elem, name ) {
|
4052
|
-
var val,
|
4053
|
-
xml = isXML( elem );
|
4054
|
-
|
4055
|
-
if ( !xml ) {
|
4056
|
-
name = name.toLowerCase();
|
4057
|
-
}
|
4058
|
-
if ( (val = Expr.attrHandle[ name ]) ) {
|
4059
|
-
return val( elem );
|
4060
|
-
}
|
4061
|
-
if ( xml || assertAttributes ) {
|
4062
|
-
return elem.getAttribute( name );
|
4063
|
-
}
|
4064
|
-
val = elem.getAttributeNode( name );
|
4065
|
-
return val ?
|
4066
|
-
typeof elem[ name ] === "boolean" ?
|
4067
|
-
elem[ name ] ? name : null :
|
4068
|
-
val.specified ? val.value : null :
|
4069
|
-
null;
|
4070
|
-
};
|
4071
|
-
|
4072
|
-
Expr = Sizzle.selectors = {
|
4073
|
-
|
4074
|
-
// Can be adjusted by the user
|
4075
|
-
cacheLength: 50,
|
4076
|
-
|
4077
|
-
createPseudo: markFunction,
|
4078
|
-
|
4079
|
-
match: matchExpr,
|
4080
|
-
|
4081
|
-
// IE6/7 return a modified href
|
4082
|
-
attrHandle: assertHrefNotNormalized ?
|
4083
|
-
{} :
|
4084
|
-
{
|
4085
|
-
"href": function( elem ) {
|
4086
|
-
return elem.getAttribute( "href", 2 );
|
4087
|
-
},
|
4088
|
-
"type": function( elem ) {
|
4089
|
-
return elem.getAttribute("type");
|
4090
|
-
}
|
4091
|
-
},
|
4092
|
-
|
4093
|
-
find: {
|
4094
|
-
"ID": assertGetIdNotName ?
|
4095
|
-
function( id, context, xml ) {
|
4096
|
-
if ( typeof context.getElementById !== strundefined && !xml ) {
|
4097
|
-
var m = context.getElementById( id );
|
4098
|
-
// Check parentNode to catch when Blackberry 4.6 returns
|
4099
|
-
// nodes that are no longer in the document #6963
|
4100
|
-
return m && m.parentNode ? [m] : [];
|
4101
|
-
}
|
4102
|
-
} :
|
4103
|
-
function( id, context, xml ) {
|
4104
|
-
if ( typeof context.getElementById !== strundefined && !xml ) {
|
4105
|
-
var m = context.getElementById( id );
|
4106
|
-
|
4107
|
-
return m ?
|
4108
|
-
m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
|
4109
|
-
[m] :
|
4110
|
-
undefined :
|
4111
|
-
[];
|
4112
|
-
}
|
4113
|
-
},
|
4114
|
-
|
4115
|
-
"TAG": assertTagNameNoComments ?
|
4116
|
-
function( tag, context ) {
|
4117
|
-
if ( typeof context.getElementsByTagName !== strundefined ) {
|
4118
|
-
return context.getElementsByTagName( tag );
|
4119
|
-
}
|
4120
|
-
} :
|
4121
|
-
function( tag, context ) {
|
4122
|
-
var results = context.getElementsByTagName( tag );
|
4123
|
-
|
4124
|
-
// Filter out possible comments
|
4125
|
-
if ( tag === "*" ) {
|
4126
|
-
var elem,
|
4127
|
-
tmp = [],
|
4128
|
-
i = 0;
|
4129
|
-
|
4130
|
-
for ( ; (elem = results[i]); i++ ) {
|
4131
|
-
if ( elem.nodeType === 1 ) {
|
4132
|
-
tmp.push( elem );
|
4133
|
-
}
|
4134
|
-
}
|
4135
|
-
|
4136
|
-
return tmp;
|
4137
|
-
}
|
4138
|
-
return results;
|
4139
|
-
},
|
4140
|
-
|
4141
|
-
"NAME": assertUsableName && function( tag, context ) {
|
4142
|
-
if ( typeof context.getElementsByName !== strundefined ) {
|
4143
|
-
return context.getElementsByName( name );
|
4144
|
-
}
|
4145
|
-
},
|
4146
|
-
|
4147
|
-
"CLASS": assertUsableClassName && function( className, context, xml ) {
|
4148
|
-
if ( typeof context.getElementsByClassName !== strundefined && !xml ) {
|
4149
|
-
return context.getElementsByClassName( className );
|
4150
|
-
}
|
4151
|
-
}
|
4152
|
-
},
|
4153
|
-
|
4154
|
-
relative: {
|
4155
|
-
">": { dir: "parentNode", first: true },
|
4156
|
-
" ": { dir: "parentNode" },
|
4157
|
-
"+": { dir: "previousSibling", first: true },
|
4158
|
-
"~": { dir: "previousSibling" }
|
4159
|
-
},
|
4160
|
-
|
4161
|
-
preFilter: {
|
4162
|
-
"ATTR": function( match ) {
|
4163
|
-
match[1] = match[1].replace( rbackslash, "" );
|
4164
|
-
|
4165
|
-
// Move the given value to match[3] whether quoted or unquoted
|
4166
|
-
match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );
|
4167
|
-
|
4168
|
-
if ( match[2] === "~=" ) {
|
4169
|
-
match[3] = " " + match[3] + " ";
|
4170
|
-
}
|
4171
|
-
|
4172
|
-
return match.slice( 0, 4 );
|
4173
|
-
},
|
4174
|
-
|
4175
|
-
"CHILD": function( match ) {
|
4176
|
-
/* matches from matchExpr["CHILD"]
|
4177
|
-
1 type (only|nth|...)
|
4178
|
-
2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
|
4179
|
-
3 xn-component of xn+y argument ([+-]?\d*n|)
|
4180
|
-
4 sign of xn-component
|
4181
|
-
5 x of xn-component
|
4182
|
-
6 sign of y-component
|
4183
|
-
7 y of y-component
|
4184
|
-
*/
|
4185
|
-
match[1] = match[1].toLowerCase();
|
4186
|
-
|
4187
|
-
if ( match[1] === "nth" ) {
|
4188
|
-
// nth-child requires argument
|
4189
|
-
if ( !match[2] ) {
|
4190
|
-
Sizzle.error( match[0] );
|
4191
|
-
}
|
4192
|
-
|
4193
|
-
// numeric x and y parameters for Expr.filter.CHILD
|
4194
|
-
// remember that false/true cast respectively to 0/1
|
4195
|
-
match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );
|
4196
|
-
match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );
|
4197
|
-
|
4198
|
-
// other types prohibit arguments
|
4199
|
-
} else if ( match[2] ) {
|
4200
|
-
Sizzle.error( match[0] );
|
4201
|
-
}
|
4202
|
-
|
4203
|
-
return match;
|
4204
|
-
},
|
4205
|
-
|
4206
|
-
"PSEUDO": function( match ) {
|
4207
|
-
var unquoted, excess;
|
4208
|
-
if ( matchExpr["CHILD"].test( match[0] ) ) {
|
4209
|
-
return null;
|
4210
|
-
}
|
4211
|
-
|
4212
|
-
if ( match[3] ) {
|
4213
|
-
match[2] = match[3];
|
4214
|
-
} else if ( (unquoted = match[4]) ) {
|
4215
|
-
// Only check arguments that contain a pseudo
|
4216
|
-
if ( rpseudo.test(unquoted) &&
|
4217
|
-
// Get excess from tokenize (recursively)
|
4218
|
-
(excess = tokenize( unquoted, true )) &&
|
4219
|
-
// advance to the next closing parenthesis
|
4220
|
-
(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
|
4221
|
-
|
4222
|
-
// excess is a negative index
|
4223
|
-
unquoted = unquoted.slice( 0, excess );
|
4224
|
-
match[0] = match[0].slice( 0, excess );
|
4225
|
-
}
|
4226
|
-
match[2] = unquoted;
|
4227
|
-
}
|
4228
|
-
|
4229
|
-
// Return only captures needed by the pseudo filter method (type and argument)
|
4230
|
-
return match.slice( 0, 3 );
|
4231
|
-
}
|
4232
|
-
},
|
4233
|
-
|
4234
|
-
filter: {
|
4235
|
-
"ID": assertGetIdNotName ?
|
4236
|
-
function( id ) {
|
4237
|
-
id = id.replace( rbackslash, "" );
|
4238
|
-
return function( elem ) {
|
4239
|
-
return elem.getAttribute("id") === id;
|
4240
|
-
};
|
4241
|
-
} :
|
4242
|
-
function( id ) {
|
4243
|
-
id = id.replace( rbackslash, "" );
|
4244
|
-
return function( elem ) {
|
4245
|
-
var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
|
4246
|
-
return node && node.value === id;
|
4247
|
-
};
|
4248
|
-
},
|
4249
|
-
|
4250
|
-
"TAG": function( nodeName ) {
|
4251
|
-
if ( nodeName === "*" ) {
|
4252
|
-
return function() { return true; };
|
4253
|
-
}
|
4254
|
-
nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();
|
4255
|
-
|
4256
|
-
return function( elem ) {
|
4257
|
-
return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
|
4258
|
-
};
|
4259
|
-
},
|
4260
|
-
|
4261
|
-
"CLASS": function( className ) {
|
4262
|
-
var pattern = classCache[ expando ][ className ];
|
4263
|
-
if ( !pattern ) {
|
4264
|
-
pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") );
|
4265
|
-
}
|
4266
|
-
return function( elem ) {
|
4267
|
-
return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
|
4268
|
-
};
|
4269
|
-
},
|
4270
|
-
|
4271
|
-
"ATTR": function( name, operator, check ) {
|
4272
|
-
return function( elem, context ) {
|
4273
|
-
var result = Sizzle.attr( elem, name );
|
4274
|
-
|
4275
|
-
if ( result == null ) {
|
4276
|
-
return operator === "!=";
|
4277
|
-
}
|
4278
|
-
if ( !operator ) {
|
4279
|
-
return true;
|
4280
|
-
}
|
4281
|
-
|
4282
|
-
result += "";
|
4283
|
-
|
4284
|
-
return operator === "=" ? result === check :
|
4285
|
-
operator === "!=" ? result !== check :
|
4286
|
-
operator === "^=" ? check && result.indexOf( check ) === 0 :
|
4287
|
-
operator === "*=" ? check && result.indexOf( check ) > -1 :
|
4288
|
-
operator === "$=" ? check && result.substr( result.length - check.length ) === check :
|
4289
|
-
operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
|
4290
|
-
operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
|
4291
|
-
false;
|
4292
|
-
};
|
4293
|
-
},
|
4294
|
-
|
4295
|
-
"CHILD": function( type, argument, first, last ) {
|
4296
|
-
|
4297
|
-
if ( type === "nth" ) {
|
4298
|
-
return function( elem ) {
|
4299
|
-
var node, diff,
|
4300
|
-
parent = elem.parentNode;
|
4301
|
-
|
4302
|
-
if ( first === 1 && last === 0 ) {
|
4303
|
-
return true;
|
4304
|
-
}
|
4305
|
-
|
4306
|
-
if ( parent ) {
|
4307
|
-
diff = 0;
|
4308
|
-
for ( node = parent.firstChild; node; node = node.nextSibling ) {
|
4309
|
-
if ( node.nodeType === 1 ) {
|
4310
|
-
diff++;
|
4311
|
-
if ( elem === node ) {
|
4312
|
-
break;
|
4313
|
-
}
|
4314
|
-
}
|
4315
|
-
}
|
4316
|
-
}
|
4317
|
-
|
4318
|
-
// Incorporate the offset (or cast to NaN), then check against cycle size
|
4319
|
-
diff -= last;
|
4320
|
-
return diff === first || ( diff % first === 0 && diff / first >= 0 );
|
4321
|
-
};
|
4322
|
-
}
|
4323
|
-
|
4324
|
-
return function( elem ) {
|
4325
|
-
var node = elem;
|
4326
|
-
|
4327
|
-
switch ( type ) {
|
4328
|
-
case "only":
|
4329
|
-
case "first":
|
4330
|
-
while ( (node = node.previousSibling) ) {
|
4331
|
-
if ( node.nodeType === 1 ) {
|
4332
|
-
return false;
|
4333
|
-
}
|
4334
|
-
}
|
4335
|
-
|
4336
|
-
if ( type === "first" ) {
|
4337
|
-
return true;
|
4338
|
-
}
|
4339
|
-
|
4340
|
-
node = elem;
|
4341
|
-
|
4342
|
-
/* falls through */
|
4343
|
-
case "last":
|
4344
|
-
while ( (node = node.nextSibling) ) {
|
4345
|
-
if ( node.nodeType === 1 ) {
|
4346
|
-
return false;
|
4347
|
-
}
|
4348
|
-
}
|
4349
|
-
|
4350
|
-
return true;
|
4351
|
-
}
|
4352
|
-
};
|
4353
|
-
},
|
4354
|
-
|
4355
|
-
"PSEUDO": function( pseudo, argument ) {
|
4356
|
-
// pseudo-class names are case-insensitive
|
4357
|
-
// http://www.w3.org/TR/selectors/#pseudo-classes
|
4358
|
-
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
|
4359
|
-
// Remember that setFilters inherits from pseudos
|
4360
|
-
var args,
|
4361
|
-
fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
|
4362
|
-
Sizzle.error( "unsupported pseudo: " + pseudo );
|
4363
|
-
|
4364
|
-
// The user may use createPseudo to indicate that
|
4365
|
-
// arguments are needed to create the filter function
|
4366
|
-
// just as Sizzle does
|
4367
|
-
if ( fn[ expando ] ) {
|
4368
|
-
return fn( argument );
|
4369
|
-
}
|
4370
|
-
|
4371
|
-
// But maintain support for old signatures
|
4372
|
-
if ( fn.length > 1 ) {
|
4373
|
-
args = [ pseudo, pseudo, "", argument ];
|
4374
|
-
return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
|
4375
|
-
markFunction(function( seed, matches ) {
|
4376
|
-
var idx,
|
4377
|
-
matched = fn( seed, argument ),
|
4378
|
-
i = matched.length;
|
4379
|
-
while ( i-- ) {
|
4380
|
-
idx = indexOf.call( seed, matched[i] );
|
4381
|
-
seed[ idx ] = !( matches[ idx ] = matched[i] );
|
4382
|
-
}
|
4383
|
-
}) :
|
4384
|
-
function( elem ) {
|
4385
|
-
return fn( elem, 0, args );
|
4386
|
-
};
|
4387
|
-
}
|
4388
|
-
|
4389
|
-
return fn;
|
4390
|
-
}
|
4391
|
-
},
|
4392
|
-
|
4393
|
-
pseudos: {
|
4394
|
-
"not": markFunction(function( selector ) {
|
4395
|
-
// Trim the selector passed to compile
|
4396
|
-
// to avoid treating leading and trailing
|
4397
|
-
// spaces as combinators
|
4398
|
-
var input = [],
|
4399
|
-
results = [],
|
4400
|
-
matcher = compile( selector.replace( rtrim, "$1" ) );
|
4401
|
-
|
4402
|
-
return matcher[ expando ] ?
|
4403
|
-
markFunction(function( seed, matches, context, xml ) {
|
4404
|
-
var elem,
|
4405
|
-
unmatched = matcher( seed, null, xml, [] ),
|
4406
|
-
i = seed.length;
|
4407
|
-
|
4408
|
-
// Match elements unmatched by `matcher`
|
4409
|
-
while ( i-- ) {
|
4410
|
-
if ( (elem = unmatched[i]) ) {
|
4411
|
-
seed[i] = !(matches[i] = elem);
|
4412
|
-
}
|
4413
|
-
}
|
4414
|
-
}) :
|
4415
|
-
function( elem, context, xml ) {
|
4416
|
-
input[0] = elem;
|
4417
|
-
matcher( input, null, xml, results );
|
4418
|
-
return !results.pop();
|
4419
|
-
};
|
4420
|
-
}),
|
4421
|
-
|
4422
|
-
"has": markFunction(function( selector ) {
|
4423
|
-
return function( elem ) {
|
4424
|
-
return Sizzle( selector, elem ).length > 0;
|
4425
|
-
};
|
4426
|
-
}),
|
4427
|
-
|
4428
|
-
"contains": markFunction(function( text ) {
|
4429
|
-
return function( elem ) {
|
4430
|
-
return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
|
4431
|
-
};
|
4432
|
-
}),
|
4433
|
-
|
4434
|
-
"enabled": function( elem ) {
|
4435
|
-
return elem.disabled === false;
|
4436
|
-
},
|
4437
|
-
|
4438
|
-
"disabled": function( elem ) {
|
4439
|
-
return elem.disabled === true;
|
4440
|
-
},
|
4441
|
-
|
4442
|
-
"checked": function( elem ) {
|
4443
|
-
// In CSS3, :checked should return both checked and selected elements
|
4444
|
-
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
4445
|
-
var nodeName = elem.nodeName.toLowerCase();
|
4446
|
-
return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
|
4447
|
-
},
|
4448
|
-
|
4449
|
-
"selected": function( elem ) {
|
4450
|
-
// Accessing this property makes selected-by-default
|
4451
|
-
// options in Safari work properly
|
4452
|
-
if ( elem.parentNode ) {
|
4453
|
-
elem.parentNode.selectedIndex;
|
4454
|
-
}
|
4455
|
-
|
4456
|
-
return elem.selected === true;
|
4457
|
-
},
|
4458
|
-
|
4459
|
-
"parent": function( elem ) {
|
4460
|
-
return !Expr.pseudos["empty"]( elem );
|
4461
|
-
},
|
4462
|
-
|
4463
|
-
"empty": function( elem ) {
|
4464
|
-
// http://www.w3.org/TR/selectors/#empty-pseudo
|
4465
|
-
// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
|
4466
|
-
// not comment, processing instructions, or others
|
4467
|
-
// Thanks to Diego Perini for the nodeName shortcut
|
4468
|
-
// Greater than "@" means alpha characters (specifically not starting with "#" or "?")
|
4469
|
-
var nodeType;
|
4470
|
-
elem = elem.firstChild;
|
4471
|
-
while ( elem ) {
|
4472
|
-
if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {
|
4473
|
-
return false;
|
4474
|
-
}
|
4475
|
-
elem = elem.nextSibling;
|
4476
|
-
}
|
4477
|
-
return true;
|
4478
|
-
},
|
4479
|
-
|
4480
|
-
"header": function( elem ) {
|
4481
|
-
return rheader.test( elem.nodeName );
|
4482
|
-
},
|
4483
|
-
|
4484
|
-
"text": function( elem ) {
|
4485
|
-
var type, attr;
|
4486
|
-
// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
|
4487
|
-
// use getAttribute instead to test this case
|
4488
|
-
return elem.nodeName.toLowerCase() === "input" &&
|
4489
|
-
(type = elem.type) === "text" &&
|
4490
|
-
( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );
|
4491
|
-
},
|
4492
|
-
|
4493
|
-
// Input types
|
4494
|
-
"radio": createInputPseudo("radio"),
|
4495
|
-
"checkbox": createInputPseudo("checkbox"),
|
4496
|
-
"file": createInputPseudo("file"),
|
4497
|
-
"password": createInputPseudo("password"),
|
4498
|
-
"image": createInputPseudo("image"),
|
4499
|
-
|
4500
|
-
"submit": createButtonPseudo("submit"),
|
4501
|
-
"reset": createButtonPseudo("reset"),
|
4502
|
-
|
4503
|
-
"button": function( elem ) {
|
4504
|
-
var name = elem.nodeName.toLowerCase();
|
4505
|
-
return name === "input" && elem.type === "button" || name === "button";
|
4506
|
-
},
|
4507
|
-
|
4508
|
-
"input": function( elem ) {
|
4509
|
-
return rinputs.test( elem.nodeName );
|
4510
|
-
},
|
4511
|
-
|
4512
|
-
"focus": function( elem ) {
|
4513
|
-
var doc = elem.ownerDocument;
|
4514
|
-
return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);
|
4515
|
-
},
|
4516
|
-
|
4517
|
-
"active": function( elem ) {
|
4518
|
-
return elem === elem.ownerDocument.activeElement;
|
4519
|
-
},
|
4520
|
-
|
4521
|
-
// Positional types
|
4522
|
-
"first": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4523
|
-
return [ 0 ];
|
4524
|
-
}),
|
4525
|
-
|
4526
|
-
"last": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4527
|
-
return [ length - 1 ];
|
4528
|
-
}),
|
4529
|
-
|
4530
|
-
"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4531
|
-
return [ argument < 0 ? argument + length : argument ];
|
4532
|
-
}),
|
4533
|
-
|
4534
|
-
"even": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4535
|
-
for ( var i = 0; i < length; i += 2 ) {
|
4536
|
-
matchIndexes.push( i );
|
4537
|
-
}
|
4538
|
-
return matchIndexes;
|
4539
|
-
}),
|
4540
|
-
|
4541
|
-
"odd": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4542
|
-
for ( var i = 1; i < length; i += 2 ) {
|
4543
|
-
matchIndexes.push( i );
|
4544
|
-
}
|
4545
|
-
return matchIndexes;
|
4546
|
-
}),
|
4547
|
-
|
4548
|
-
"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4549
|
-
for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {
|
4550
|
-
matchIndexes.push( i );
|
4551
|
-
}
|
4552
|
-
return matchIndexes;
|
4553
|
-
}),
|
4554
|
-
|
4555
|
-
"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4556
|
-
for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {
|
4557
|
-
matchIndexes.push( i );
|
4558
|
-
}
|
4559
|
-
return matchIndexes;
|
4560
|
-
})
|
4561
|
-
}
|
4562
|
-
};
|
4563
|
-
|
4564
|
-
function siblingCheck( a, b, ret ) {
|
4565
|
-
if ( a === b ) {
|
4566
|
-
return ret;
|
4567
|
-
}
|
4568
|
-
|
4569
|
-
var cur = a.nextSibling;
|
4570
|
-
|
4571
|
-
while ( cur ) {
|
4572
|
-
if ( cur === b ) {
|
4573
|
-
return -1;
|
4574
|
-
}
|
4575
|
-
|
4576
|
-
cur = cur.nextSibling;
|
4577
|
-
}
|
4578
|
-
|
4579
|
-
return 1;
|
4580
|
-
}
|
4581
|
-
|
4582
|
-
sortOrder = docElem.compareDocumentPosition ?
|
4583
|
-
function( a, b ) {
|
4584
|
-
if ( a === b ) {
|
4585
|
-
hasDuplicate = true;
|
4586
|
-
return 0;
|
4587
|
-
}
|
4588
|
-
|
4589
|
-
return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?
|
4590
|
-
a.compareDocumentPosition :
|
4591
|
-
a.compareDocumentPosition(b) & 4
|
4592
|
-
) ? -1 : 1;
|
4593
|
-
} :
|
4594
|
-
function( a, b ) {
|
4595
|
-
// The nodes are identical, we can exit early
|
4596
|
-
if ( a === b ) {
|
4597
|
-
hasDuplicate = true;
|
4598
|
-
return 0;
|
4599
|
-
|
4600
|
-
// Fallback to using sourceIndex (in IE) if it's available on both nodes
|
4601
|
-
} else if ( a.sourceIndex && b.sourceIndex ) {
|
4602
|
-
return a.sourceIndex - b.sourceIndex;
|
4603
|
-
}
|
4604
|
-
|
4605
|
-
var al, bl,
|
4606
|
-
ap = [],
|
4607
|
-
bp = [],
|
4608
|
-
aup = a.parentNode,
|
4609
|
-
bup = b.parentNode,
|
4610
|
-
cur = aup;
|
4611
|
-
|
4612
|
-
// If the nodes are siblings (or identical) we can do a quick check
|
4613
|
-
if ( aup === bup ) {
|
4614
|
-
return siblingCheck( a, b );
|
4615
|
-
|
4616
|
-
// If no parents were found then the nodes are disconnected
|
4617
|
-
} else if ( !aup ) {
|
4618
|
-
return -1;
|
4619
|
-
|
4620
|
-
} else if ( !bup ) {
|
4621
|
-
return 1;
|
4622
|
-
}
|
4623
|
-
|
4624
|
-
// Otherwise they're somewhere else in the tree so we need
|
4625
|
-
// to build up a full list of the parentNodes for comparison
|
4626
|
-
while ( cur ) {
|
4627
|
-
ap.unshift( cur );
|
4628
|
-
cur = cur.parentNode;
|
4629
|
-
}
|
4630
|
-
|
4631
|
-
cur = bup;
|
4632
|
-
|
4633
|
-
while ( cur ) {
|
4634
|
-
bp.unshift( cur );
|
4635
|
-
cur = cur.parentNode;
|
4636
|
-
}
|
4637
|
-
|
4638
|
-
al = ap.length;
|
4639
|
-
bl = bp.length;
|
4640
|
-
|
4641
|
-
// Start walking down the tree looking for a discrepancy
|
4642
|
-
for ( var i = 0; i < al && i < bl; i++ ) {
|
4643
|
-
if ( ap[i] !== bp[i] ) {
|
4644
|
-
return siblingCheck( ap[i], bp[i] );
|
4645
|
-
}
|
4646
|
-
}
|
4647
|
-
|
4648
|
-
// We ended someplace up the tree so do a sibling check
|
4649
|
-
return i === al ?
|
4650
|
-
siblingCheck( a, bp[i], -1 ) :
|
4651
|
-
siblingCheck( ap[i], b, 1 );
|
4652
|
-
};
|
4653
|
-
|
4654
|
-
// Always assume the presence of duplicates if sort doesn't
|
4655
|
-
// pass them to our comparison function (as in Google Chrome).
|
4656
|
-
[0, 0].sort( sortOrder );
|
4657
|
-
baseHasDuplicate = !hasDuplicate;
|
4658
|
-
|
4659
|
-
// Document sorting and removing duplicates
|
4660
|
-
Sizzle.uniqueSort = function( results ) {
|
4661
|
-
var elem,
|
4662
|
-
i = 1;
|
4663
|
-
|
4664
|
-
hasDuplicate = baseHasDuplicate;
|
4665
|
-
results.sort( sortOrder );
|
4666
|
-
|
4667
|
-
if ( hasDuplicate ) {
|
4668
|
-
for ( ; (elem = results[i]); i++ ) {
|
4669
|
-
if ( elem === results[ i - 1 ] ) {
|
4670
|
-
results.splice( i--, 1 );
|
4671
|
-
}
|
4672
|
-
}
|
4673
|
-
}
|
4674
|
-
|
4675
|
-
return results;
|
4676
|
-
};
|
4677
|
-
|
4678
|
-
Sizzle.error = function( msg ) {
|
4679
|
-
throw new Error( "Syntax error, unrecognized expression: " + msg );
|
4680
|
-
};
|
4681
|
-
|
4682
|
-
function tokenize( selector, parseOnly ) {
|
4683
|
-
var matched, match, tokens, type, soFar, groups, preFilters,
|
4684
|
-
cached = tokenCache[ expando ][ selector ];
|
4685
|
-
|
4686
|
-
if ( cached ) {
|
4687
|
-
return parseOnly ? 0 : cached.slice( 0 );
|
4688
|
-
}
|
4689
|
-
|
4690
|
-
soFar = selector;
|
4691
|
-
groups = [];
|
4692
|
-
preFilters = Expr.preFilter;
|
4693
|
-
|
4694
|
-
while ( soFar ) {
|
4695
|
-
|
4696
|
-
// Comma and first run
|
4697
|
-
if ( !matched || (match = rcomma.exec( soFar )) ) {
|
4698
|
-
if ( match ) {
|
4699
|
-
soFar = soFar.slice( match[0].length );
|
4700
|
-
}
|
4701
|
-
groups.push( tokens = [] );
|
4702
|
-
}
|
4703
|
-
|
4704
|
-
matched = false;
|
4705
|
-
|
4706
|
-
// Combinators
|
4707
|
-
if ( (match = rcombinators.exec( soFar )) ) {
|
4708
|
-
tokens.push( matched = new Token( match.shift() ) );
|
4709
|
-
soFar = soFar.slice( matched.length );
|
4710
|
-
|
4711
|
-
// Cast descendant combinators to space
|
4712
|
-
matched.type = match[0].replace( rtrim, " " );
|
4713
|
-
}
|
4714
|
-
|
4715
|
-
// Filters
|
4716
|
-
for ( type in Expr.filter ) {
|
4717
|
-
if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
|
4718
|
-
// The last two arguments here are (context, xml) for backCompat
|
4719
|
-
(match = preFilters[ type ]( match, document, true ))) ) {
|
4720
|
-
|
4721
|
-
tokens.push( matched = new Token( match.shift() ) );
|
4722
|
-
soFar = soFar.slice( matched.length );
|
4723
|
-
matched.type = type;
|
4724
|
-
matched.matches = match;
|
4725
|
-
}
|
4726
|
-
}
|
4727
|
-
|
4728
|
-
if ( !matched ) {
|
4729
|
-
break;
|
4730
|
-
}
|
4731
|
-
}
|
4732
|
-
|
4733
|
-
// Return the length of the invalid excess
|
4734
|
-
// if we're just parsing
|
4735
|
-
// Otherwise, throw an error or return tokens
|
4736
|
-
return parseOnly ?
|
4737
|
-
soFar.length :
|
4738
|
-
soFar ?
|
4739
|
-
Sizzle.error( selector ) :
|
4740
|
-
// Cache the tokens
|
4741
|
-
tokenCache( selector, groups ).slice( 0 );
|
4742
|
-
}
|
4743
|
-
|
4744
|
-
function addCombinator( matcher, combinator, base ) {
|
4745
|
-
var dir = combinator.dir,
|
4746
|
-
checkNonElements = base && combinator.dir === "parentNode",
|
4747
|
-
doneName = done++;
|
4748
|
-
|
4749
|
-
return combinator.first ?
|
4750
|
-
// Check against closest ancestor/preceding element
|
4751
|
-
function( elem, context, xml ) {
|
4752
|
-
while ( (elem = elem[ dir ]) ) {
|
4753
|
-
if ( checkNonElements || elem.nodeType === 1 ) {
|
4754
|
-
return matcher( elem, context, xml );
|
4755
|
-
}
|
4756
|
-
}
|
4757
|
-
} :
|
4758
|
-
|
4759
|
-
// Check against all ancestor/preceding elements
|
4760
|
-
function( elem, context, xml ) {
|
4761
|
-
// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
|
4762
|
-
if ( !xml ) {
|
4763
|
-
var cache,
|
4764
|
-
dirkey = dirruns + " " + doneName + " ",
|
4765
|
-
cachedkey = dirkey + cachedruns;
|
4766
|
-
while ( (elem = elem[ dir ]) ) {
|
4767
|
-
if ( checkNonElements || elem.nodeType === 1 ) {
|
4768
|
-
if ( (cache = elem[ expando ]) === cachedkey ) {
|
4769
|
-
return elem.sizset;
|
4770
|
-
} else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
|
4771
|
-
if ( elem.sizset ) {
|
4772
|
-
return elem;
|
4773
|
-
}
|
4774
|
-
} else {
|
4775
|
-
elem[ expando ] = cachedkey;
|
4776
|
-
if ( matcher( elem, context, xml ) ) {
|
4777
|
-
elem.sizset = true;
|
4778
|
-
return elem;
|
4779
|
-
}
|
4780
|
-
elem.sizset = false;
|
4781
|
-
}
|
4782
|
-
}
|
4783
|
-
}
|
4784
|
-
} else {
|
4785
|
-
while ( (elem = elem[ dir ]) ) {
|
4786
|
-
if ( checkNonElements || elem.nodeType === 1 ) {
|
4787
|
-
if ( matcher( elem, context, xml ) ) {
|
4788
|
-
return elem;
|
4789
|
-
}
|
4790
|
-
}
|
4791
|
-
}
|
4792
|
-
}
|
4793
|
-
};
|
4794
|
-
}
|
4795
|
-
|
4796
|
-
function elementMatcher( matchers ) {
|
4797
|
-
return matchers.length > 1 ?
|
4798
|
-
function( elem, context, xml ) {
|
4799
|
-
var i = matchers.length;
|
4800
|
-
while ( i-- ) {
|
4801
|
-
if ( !matchers[i]( elem, context, xml ) ) {
|
4802
|
-
return false;
|
4803
|
-
}
|
4804
|
-
}
|
4805
|
-
return true;
|
4806
|
-
} :
|
4807
|
-
matchers[0];
|
4808
|
-
}
|
4809
|
-
|
4810
|
-
function condense( unmatched, map, filter, context, xml ) {
|
4811
|
-
var elem,
|
4812
|
-
newUnmatched = [],
|
4813
|
-
i = 0,
|
4814
|
-
len = unmatched.length,
|
4815
|
-
mapped = map != null;
|
4816
|
-
|
4817
|
-
for ( ; i < len; i++ ) {
|
4818
|
-
if ( (elem = unmatched[i]) ) {
|
4819
|
-
if ( !filter || filter( elem, context, xml ) ) {
|
4820
|
-
newUnmatched.push( elem );
|
4821
|
-
if ( mapped ) {
|
4822
|
-
map.push( i );
|
4823
|
-
}
|
4824
|
-
}
|
4825
|
-
}
|
4826
|
-
}
|
4827
|
-
|
4828
|
-
return newUnmatched;
|
4829
|
-
}
|
4830
|
-
|
4831
|
-
function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
|
4832
|
-
if ( postFilter && !postFilter[ expando ] ) {
|
4833
|
-
postFilter = setMatcher( postFilter );
|
4834
|
-
}
|
4835
|
-
if ( postFinder && !postFinder[ expando ] ) {
|
4836
|
-
postFinder = setMatcher( postFinder, postSelector );
|
4837
|
-
}
|
4838
|
-
return markFunction(function( seed, results, context, xml ) {
|
4839
|
-
// Positional selectors apply to seed elements, so it is invalid to follow them with relative ones
|
4840
|
-
if ( seed && postFinder ) {
|
4841
|
-
return;
|
4842
|
-
}
|
4843
|
-
|
4844
|
-
var i, elem, postFilterIn,
|
4845
|
-
preMap = [],
|
4846
|
-
postMap = [],
|
4847
|
-
preexisting = results.length,
|
4848
|
-
|
4849
|
-
// Get initial elements from seed or context
|
4850
|
-
elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [], seed ),
|
4851
|
-
|
4852
|
-
// Prefilter to get matcher input, preserving a map for seed-results synchronization
|
4853
|
-
matcherIn = preFilter && ( seed || !selector ) ?
|
4854
|
-
condense( elems, preMap, preFilter, context, xml ) :
|
4855
|
-
elems,
|
4856
|
-
|
4857
|
-
matcherOut = matcher ?
|
4858
|
-
// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
|
4859
|
-
postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
|
4860
|
-
|
4861
|
-
// ...intermediate processing is necessary
|
4862
|
-
[] :
|
4863
|
-
|
4864
|
-
// ...otherwise use results directly
|
4865
|
-
results :
|
4866
|
-
matcherIn;
|
4867
|
-
|
4868
|
-
// Find primary matches
|
4869
|
-
if ( matcher ) {
|
4870
|
-
matcher( matcherIn, matcherOut, context, xml );
|
4871
|
-
}
|
4872
|
-
|
4873
|
-
// Apply postFilter
|
4874
|
-
if ( postFilter ) {
|
4875
|
-
postFilterIn = condense( matcherOut, postMap );
|
4876
|
-
postFilter( postFilterIn, [], context, xml );
|
4877
|
-
|
4878
|
-
// Un-match failing elements by moving them back to matcherIn
|
4879
|
-
i = postFilterIn.length;
|
4880
|
-
while ( i-- ) {
|
4881
|
-
if ( (elem = postFilterIn[i]) ) {
|
4882
|
-
matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
|
4883
|
-
}
|
4884
|
-
}
|
4885
|
-
}
|
4886
|
-
|
4887
|
-
// Keep seed and results synchronized
|
4888
|
-
if ( seed ) {
|
4889
|
-
// Ignore postFinder because it can't coexist with seed
|
4890
|
-
i = preFilter && matcherOut.length;
|
4891
|
-
while ( i-- ) {
|
4892
|
-
if ( (elem = matcherOut[i]) ) {
|
4893
|
-
seed[ preMap[i] ] = !(results[ preMap[i] ] = elem);
|
4894
|
-
}
|
4895
|
-
}
|
4896
|
-
} else {
|
4897
|
-
matcherOut = condense(
|
4898
|
-
matcherOut === results ?
|
4899
|
-
matcherOut.splice( preexisting, matcherOut.length ) :
|
4900
|
-
matcherOut
|
4901
|
-
);
|
4902
|
-
if ( postFinder ) {
|
4903
|
-
postFinder( null, results, matcherOut, xml );
|
4904
|
-
} else {
|
4905
|
-
push.apply( results, matcherOut );
|
4906
|
-
}
|
4907
|
-
}
|
4908
|
-
});
|
4909
|
-
}
|
4910
|
-
|
4911
|
-
function matcherFromTokens( tokens ) {
|
4912
|
-
var checkContext, matcher, j,
|
4913
|
-
len = tokens.length,
|
4914
|
-
leadingRelative = Expr.relative[ tokens[0].type ],
|
4915
|
-
implicitRelative = leadingRelative || Expr.relative[" "],
|
4916
|
-
i = leadingRelative ? 1 : 0,
|
4917
|
-
|
4918
|
-
// The foundational matcher ensures that elements are reachable from top-level context(s)
|
4919
|
-
matchContext = addCombinator( function( elem ) {
|
4920
|
-
return elem === checkContext;
|
4921
|
-
}, implicitRelative, true ),
|
4922
|
-
matchAnyContext = addCombinator( function( elem ) {
|
4923
|
-
return indexOf.call( checkContext, elem ) > -1;
|
4924
|
-
}, implicitRelative, true ),
|
4925
|
-
matchers = [ function( elem, context, xml ) {
|
4926
|
-
return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
|
4927
|
-
(checkContext = context).nodeType ?
|
4928
|
-
matchContext( elem, context, xml ) :
|
4929
|
-
matchAnyContext( elem, context, xml ) );
|
4930
|
-
} ];
|
4931
|
-
|
4932
|
-
for ( ; i < len; i++ ) {
|
4933
|
-
if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
|
4934
|
-
matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
|
4935
|
-
} else {
|
4936
|
-
// The concatenated values are (context, xml) for backCompat
|
4937
|
-
matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
|
4938
|
-
|
4939
|
-
// Return special upon seeing a positional matcher
|
4940
|
-
if ( matcher[ expando ] ) {
|
4941
|
-
// Find the next relative operator (if any) for proper handling
|
4942
|
-
j = ++i;
|
4943
|
-
for ( ; j < len; j++ ) {
|
4944
|
-
if ( Expr.relative[ tokens[j].type ] ) {
|
4945
|
-
break;
|
4946
|
-
}
|
4947
|
-
}
|
4948
|
-
return setMatcher(
|
4949
|
-
i > 1 && elementMatcher( matchers ),
|
4950
|
-
i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),
|
4951
|
-
matcher,
|
4952
|
-
i < j && matcherFromTokens( tokens.slice( i, j ) ),
|
4953
|
-
j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
|
4954
|
-
j < len && tokens.join("")
|
4955
|
-
);
|
4956
|
-
}
|
4957
|
-
matchers.push( matcher );
|
4958
|
-
}
|
4959
|
-
}
|
4960
|
-
|
4961
|
-
return elementMatcher( matchers );
|
4962
|
-
}
|
4963
|
-
|
4964
|
-
function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
4965
|
-
var bySet = setMatchers.length > 0,
|
4966
|
-
byElement = elementMatchers.length > 0,
|
4967
|
-
superMatcher = function( seed, context, xml, results, expandContext ) {
|
4968
|
-
var elem, j, matcher,
|
4969
|
-
setMatched = [],
|
4970
|
-
matchedCount = 0,
|
4971
|
-
i = "0",
|
4972
|
-
unmatched = seed && [],
|
4973
|
-
outermost = expandContext != null,
|
4974
|
-
contextBackup = outermostContext,
|
4975
|
-
// We must always have either seed elements or context
|
4976
|
-
elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
|
4977
|
-
// Nested matchers should use non-integer dirruns
|
4978
|
-
dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
|
4979
|
-
|
4980
|
-
if ( outermost ) {
|
4981
|
-
outermostContext = context !== document && context;
|
4982
|
-
cachedruns = superMatcher.el;
|
4983
|
-
}
|
4984
|
-
|
4985
|
-
// Add elements passing elementMatchers directly to results
|
4986
|
-
for ( ; (elem = elems[i]) != null; i++ ) {
|
4987
|
-
if ( byElement && elem ) {
|
4988
|
-
for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
|
4989
|
-
if ( matcher( elem, context, xml ) ) {
|
4990
|
-
results.push( elem );
|
4991
|
-
break;
|
4992
|
-
}
|
4993
|
-
}
|
4994
|
-
if ( outermost ) {
|
4995
|
-
dirruns = dirrunsUnique;
|
4996
|
-
cachedruns = ++superMatcher.el;
|
4997
|
-
}
|
4998
|
-
}
|
4999
|
-
|
5000
|
-
// Track unmatched elements for set filters
|
5001
|
-
if ( bySet ) {
|
5002
|
-
// They will have gone through all possible matchers
|
5003
|
-
if ( (elem = !matcher && elem) ) {
|
5004
|
-
matchedCount--;
|
5005
|
-
}
|
5006
|
-
|
5007
|
-
// Lengthen the array for every element, matched or not
|
5008
|
-
if ( seed ) {
|
5009
|
-
unmatched.push( elem );
|
5010
|
-
}
|
5011
|
-
}
|
5012
|
-
}
|
5013
|
-
|
5014
|
-
// Apply set filters to unmatched elements
|
5015
|
-
matchedCount += i;
|
5016
|
-
if ( bySet && i !== matchedCount ) {
|
5017
|
-
for ( j = 0; (matcher = setMatchers[j]); j++ ) {
|
5018
|
-
matcher( unmatched, setMatched, context, xml );
|
5019
|
-
}
|
3426
|
+
// Delegated event; lazy-add a change handler on descendant inputs
|
3427
|
+
jQuery.event.add( this, "beforeactivate._change", function( e ) {
|
3428
|
+
var elem = e.target;
|
5020
3429
|
|
5021
|
-
if (
|
5022
|
-
|
5023
|
-
|
5024
|
-
|
5025
|
-
if ( !(unmatched[i] || setMatched[i]) ) {
|
5026
|
-
setMatched[i] = pop.call( results );
|
5027
|
-
}
|
3430
|
+
if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
|
3431
|
+
jQuery.event.add( elem, "change._change", function( event ) {
|
3432
|
+
if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
|
3433
|
+
jQuery.event.simulate( "change", this.parentNode, event, true );
|
5028
3434
|
}
|
5029
|
-
}
|
5030
|
-
|
5031
|
-
// Discard index placeholder values to get only actual matches
|
5032
|
-
setMatched = condense( setMatched );
|
3435
|
+
});
|
3436
|
+
jQuery._data( elem, "_change_attached", true );
|
5033
3437
|
}
|
3438
|
+
});
|
3439
|
+
},
|
5034
3440
|
|
5035
|
-
|
5036
|
-
|
5037
|
-
|
5038
|
-
// Seedless set matches succeeding multiple successful matchers stipulate sorting
|
5039
|
-
if ( outermost && !seed && setMatched.length > 0 &&
|
5040
|
-
( matchedCount + setMatchers.length ) > 1 ) {
|
5041
|
-
|
5042
|
-
Sizzle.uniqueSort( results );
|
5043
|
-
}
|
5044
|
-
}
|
3441
|
+
handle: function( event ) {
|
3442
|
+
var elem = event.target;
|
5045
3443
|
|
5046
|
-
//
|
5047
|
-
if (
|
5048
|
-
|
5049
|
-
outermostContext = contextBackup;
|
3444
|
+
// Swallow native change events from checkbox/radio, we already triggered them above
|
3445
|
+
if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
|
3446
|
+
return event.handleObj.handler.apply( this, arguments );
|
5050
3447
|
}
|
3448
|
+
},
|
5051
3449
|
|
5052
|
-
|
5053
|
-
|
5054
|
-
|
5055
|
-
superMatcher.el = 0;
|
5056
|
-
return bySet ?
|
5057
|
-
markFunction( superMatcher ) :
|
5058
|
-
superMatcher;
|
5059
|
-
}
|
3450
|
+
teardown: function() {
|
3451
|
+
jQuery.event.remove( this, "._change" );
|
5060
3452
|
|
5061
|
-
|
5062
|
-
var i,
|
5063
|
-
setMatchers = [],
|
5064
|
-
elementMatchers = [],
|
5065
|
-
cached = compilerCache[ expando ][ selector ];
|
5066
|
-
|
5067
|
-
if ( !cached ) {
|
5068
|
-
// Generate a function of recursive functions that can be used to check each element
|
5069
|
-
if ( !group ) {
|
5070
|
-
group = tokenize( selector );
|
5071
|
-
}
|
5072
|
-
i = group.length;
|
5073
|
-
while ( i-- ) {
|
5074
|
-
cached = matcherFromTokens( group[i] );
|
5075
|
-
if ( cached[ expando ] ) {
|
5076
|
-
setMatchers.push( cached );
|
5077
|
-
} else {
|
5078
|
-
elementMatchers.push( cached );
|
5079
|
-
}
|
3453
|
+
return !rformElems.test( this.nodeName );
|
5080
3454
|
}
|
5081
|
-
|
5082
|
-
// Cache the compiled function
|
5083
|
-
cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
|
5084
|
-
}
|
5085
|
-
return cached;
|
5086
|
-
};
|
5087
|
-
|
5088
|
-
function multipleContexts( selector, contexts, results, seed ) {
|
5089
|
-
var i = 0,
|
5090
|
-
len = contexts.length;
|
5091
|
-
for ( ; i < len; i++ ) {
|
5092
|
-
Sizzle( selector, contexts[i], results, seed );
|
5093
|
-
}
|
5094
|
-
return results;
|
3455
|
+
};
|
5095
3456
|
}
|
5096
3457
|
|
5097
|
-
|
5098
|
-
|
5099
|
-
|
5100
|
-
j = match.length;
|
5101
|
-
|
5102
|
-
if ( !seed ) {
|
5103
|
-
// Try to minimize operations if there is only one group
|
5104
|
-
if ( match.length === 1 ) {
|
3458
|
+
// Create "bubbling" focus and blur events
|
3459
|
+
if ( !jQuery.support.focusinBubbles ) {
|
3460
|
+
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
|
5105
3461
|
|
5106
|
-
|
5107
|
-
|
5108
|
-
|
5109
|
-
|
5110
|
-
|
3462
|
+
// Attach a single capturing handler while someone wants focusin/focusout
|
3463
|
+
var attaches = 0,
|
3464
|
+
handler = function( event ) {
|
3465
|
+
jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
|
3466
|
+
};
|
5111
3467
|
|
5112
|
-
|
5113
|
-
|
5114
|
-
|
3468
|
+
jQuery.event.special[ fix ] = {
|
3469
|
+
setup: function() {
|
3470
|
+
if ( attaches++ === 0 ) {
|
3471
|
+
document.addEventListener( orig, handler, true );
|
3472
|
+
}
|
3473
|
+
},
|
3474
|
+
teardown: function() {
|
3475
|
+
if ( --attaches === 0 ) {
|
3476
|
+
document.removeEventListener( orig, handler, true );
|
5115
3477
|
}
|
5116
|
-
|
5117
|
-
selector = selector.slice( tokens.shift().length );
|
5118
3478
|
}
|
3479
|
+
};
|
3480
|
+
});
|
3481
|
+
}
|
5119
3482
|
|
5120
|
-
|
5121
|
-
for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
|
5122
|
-
token = tokens[i];
|
3483
|
+
jQuery.fn.extend({
|
5123
3484
|
|
5124
|
-
|
5125
|
-
|
5126
|
-
break;
|
5127
|
-
}
|
5128
|
-
if ( (find = Expr.find[ type ]) ) {
|
5129
|
-
// Search, expanding context for leading sibling combinators
|
5130
|
-
if ( (seed = find(
|
5131
|
-
token.matches[0].replace( rbackslash, "" ),
|
5132
|
-
rsibling.test( tokens[0].type ) && context.parentNode || context,
|
5133
|
-
xml
|
5134
|
-
)) ) {
|
5135
|
-
|
5136
|
-
// If seed is empty or no tokens remain, we can return early
|
5137
|
-
tokens.splice( i, 1 );
|
5138
|
-
selector = seed.length && tokens.join("");
|
5139
|
-
if ( !selector ) {
|
5140
|
-
push.apply( results, slice.call( seed, 0 ) );
|
5141
|
-
return results;
|
5142
|
-
}
|
3485
|
+
on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
|
3486
|
+
var origFn, type;
|
5143
3487
|
|
5144
|
-
|
5145
|
-
|
5146
|
-
|
3488
|
+
// Types can be a map of types/handlers
|
3489
|
+
if ( typeof types === "object" ) {
|
3490
|
+
// ( types-Object, selector, data )
|
3491
|
+
if ( typeof selector !== "string" ) { // && selector != null
|
3492
|
+
// ( types-Object, data )
|
3493
|
+
data = data || selector;
|
3494
|
+
selector = undefined;
|
5147
3495
|
}
|
3496
|
+
for ( type in types ) {
|
3497
|
+
this.on( type, selector, data, types[ type ], one );
|
3498
|
+
}
|
3499
|
+
return this;
|
5148
3500
|
}
|
5149
|
-
}
|
5150
3501
|
|
5151
|
-
|
5152
|
-
|
5153
|
-
|
5154
|
-
|
5155
|
-
|
5156
|
-
|
5157
|
-
|
5158
|
-
|
5159
|
-
|
5160
|
-
|
5161
|
-
|
3502
|
+
if ( data == null && fn == null ) {
|
3503
|
+
// ( types, fn )
|
3504
|
+
fn = selector;
|
3505
|
+
data = selector = undefined;
|
3506
|
+
} else if ( fn == null ) {
|
3507
|
+
if ( typeof selector === "string" ) {
|
3508
|
+
// ( types, selector, fn )
|
3509
|
+
fn = data;
|
3510
|
+
data = undefined;
|
3511
|
+
} else {
|
3512
|
+
// ( types, data, fn )
|
3513
|
+
fn = data;
|
3514
|
+
data = selector;
|
3515
|
+
selector = undefined;
|
3516
|
+
}
|
3517
|
+
}
|
3518
|
+
if ( fn === false ) {
|
3519
|
+
fn = returnFalse;
|
3520
|
+
} else if ( !fn ) {
|
3521
|
+
return this;
|
3522
|
+
}
|
5162
3523
|
|
5163
|
-
if (
|
5164
|
-
|
5165
|
-
|
5166
|
-
|
5167
|
-
|
5168
|
-
|
5169
|
-
|
5170
|
-
//
|
5171
|
-
|
5172
|
-
|
5173
|
-
|
5174
|
-
|
5175
|
-
|
5176
|
-
|
5177
|
-
|
5178
|
-
|
5179
|
-
|
5180
|
-
|
5181
|
-
|
5182
|
-
|
5183
|
-
|
5184
|
-
|
5185
|
-
|
5186
|
-
|
5187
|
-
|
5188
|
-
|
5189
|
-
|
5190
|
-
|
5191
|
-
|
5192
|
-
|
5193
|
-
|
5194
|
-
|
5195
|
-
|
5196
|
-
if ( !div.querySelectorAll("[selected]").length ) {
|
5197
|
-
rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
|
5198
|
-
}
|
5199
|
-
|
5200
|
-
// Webkit/Opera - :checked should return selected option elements
|
5201
|
-
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
5202
|
-
// IE8 throws error here (do not put tests after this one)
|
5203
|
-
if ( !div.querySelectorAll(":checked").length ) {
|
5204
|
-
rbuggyQSA.push(":checked");
|
3524
|
+
if ( one === 1 ) {
|
3525
|
+
origFn = fn;
|
3526
|
+
fn = function( event ) {
|
3527
|
+
// Can use an empty set, since event contains the info
|
3528
|
+
jQuery().off( event );
|
3529
|
+
return origFn.apply( this, arguments );
|
3530
|
+
};
|
3531
|
+
// Use same guid so caller can remove using origFn
|
3532
|
+
fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
|
3533
|
+
}
|
3534
|
+
return this.each( function() {
|
3535
|
+
jQuery.event.add( this, types, fn, data, selector );
|
3536
|
+
});
|
3537
|
+
},
|
3538
|
+
one: function( types, selector, data, fn ) {
|
3539
|
+
return this.on( types, selector, data, fn, 1 );
|
3540
|
+
},
|
3541
|
+
off: function( types, selector, fn ) {
|
3542
|
+
var handleObj, type;
|
3543
|
+
if ( types && types.preventDefault && types.handleObj ) {
|
3544
|
+
// ( event ) dispatched jQuery.Event
|
3545
|
+
handleObj = types.handleObj;
|
3546
|
+
jQuery( types.delegateTarget ).off(
|
3547
|
+
handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
|
3548
|
+
handleObj.selector,
|
3549
|
+
handleObj.handler
|
3550
|
+
);
|
3551
|
+
return this;
|
3552
|
+
}
|
3553
|
+
if ( typeof types === "object" ) {
|
3554
|
+
// ( types-object [, selector] )
|
3555
|
+
for ( type in types ) {
|
3556
|
+
this.off( type, selector, types[ type ] );
|
5205
3557
|
}
|
3558
|
+
return this;
|
3559
|
+
}
|
3560
|
+
if ( selector === false || typeof selector === "function" ) {
|
3561
|
+
// ( types [, fn] )
|
3562
|
+
fn = selector;
|
3563
|
+
selector = undefined;
|
3564
|
+
}
|
3565
|
+
if ( fn === false ) {
|
3566
|
+
fn = returnFalse;
|
3567
|
+
}
|
3568
|
+
return this.each(function() {
|
3569
|
+
jQuery.event.remove( this, types, fn, selector );
|
5206
3570
|
});
|
3571
|
+
},
|
5207
3572
|
|
5208
|
-
|
5209
|
-
|
5210
|
-
|
5211
|
-
|
5212
|
-
|
5213
|
-
|
5214
|
-
rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
|
5215
|
-
}
|
3573
|
+
bind: function( types, data, fn ) {
|
3574
|
+
return this.on( types, null, data, fn );
|
3575
|
+
},
|
3576
|
+
unbind: function( types, fn ) {
|
3577
|
+
return this.off( types, null, fn );
|
3578
|
+
},
|
5216
3579
|
|
5217
|
-
|
5218
|
-
|
5219
|
-
|
5220
|
-
|
5221
|
-
|
5222
|
-
|
5223
|
-
|
3580
|
+
live: function( types, data, fn ) {
|
3581
|
+
jQuery( this.context ).on( types, this.selector, data, fn );
|
3582
|
+
return this;
|
3583
|
+
},
|
3584
|
+
die: function( types, fn ) {
|
3585
|
+
jQuery( this.context ).off( types, this.selector || "**", fn );
|
3586
|
+
return this;
|
3587
|
+
},
|
5224
3588
|
|
5225
|
-
|
5226
|
-
|
5227
|
-
|
5228
|
-
|
5229
|
-
|
5230
|
-
|
5231
|
-
|
5232
|
-
if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
|
5233
|
-
var groups, i,
|
5234
|
-
old = true,
|
5235
|
-
nid = expando,
|
5236
|
-
newContext = context,
|
5237
|
-
newSelector = context.nodeType === 9 && selector;
|
5238
|
-
|
5239
|
-
// qSA works strangely on Element-rooted queries
|
5240
|
-
// We can work around this by specifying an extra ID on the root
|
5241
|
-
// and working up from there (Thanks to Andrew Dupont for the technique)
|
5242
|
-
// IE 8 doesn't work on object elements
|
5243
|
-
if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
|
5244
|
-
groups = tokenize( selector );
|
5245
|
-
|
5246
|
-
if ( (old = context.getAttribute("id")) ) {
|
5247
|
-
nid = old.replace( rescape, "\\$&" );
|
5248
|
-
} else {
|
5249
|
-
context.setAttribute( "id", nid );
|
5250
|
-
}
|
5251
|
-
nid = "[id='" + nid + "'] ";
|
3589
|
+
delegate: function( selector, types, data, fn ) {
|
3590
|
+
return this.on( types, selector, data, fn );
|
3591
|
+
},
|
3592
|
+
undelegate: function( selector, types, fn ) {
|
3593
|
+
// ( namespace ) or ( selector, types [, fn] )
|
3594
|
+
return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
|
3595
|
+
},
|
5252
3596
|
|
5253
|
-
|
5254
|
-
|
5255
|
-
|
5256
|
-
|
5257
|
-
|
5258
|
-
|
5259
|
-
|
3597
|
+
trigger: function( type, data ) {
|
3598
|
+
return this.each(function() {
|
3599
|
+
jQuery.event.trigger( type, data, this );
|
3600
|
+
});
|
3601
|
+
},
|
3602
|
+
triggerHandler: function( type, data ) {
|
3603
|
+
if ( this[0] ) {
|
3604
|
+
return jQuery.event.trigger( type, data, this[0], true );
|
3605
|
+
}
|
3606
|
+
},
|
5260
3607
|
|
5261
|
-
|
5262
|
-
|
5263
|
-
|
5264
|
-
|
5265
|
-
|
5266
|
-
|
5267
|
-
|
5268
|
-
|
5269
|
-
|
5270
|
-
context.removeAttribute("id");
|
5271
|
-
}
|
5272
|
-
}
|
5273
|
-
}
|
5274
|
-
}
|
3608
|
+
toggle: function( fn ) {
|
3609
|
+
// Save reference to arguments for access in closure
|
3610
|
+
var args = arguments,
|
3611
|
+
guid = fn.guid || jQuery.guid++,
|
3612
|
+
i = 0,
|
3613
|
+
toggler = function( event ) {
|
3614
|
+
// Figure out which function to execute
|
3615
|
+
var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
|
3616
|
+
jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
|
5275
3617
|
|
5276
|
-
|
5277
|
-
|
3618
|
+
// Make sure that clicks stop
|
3619
|
+
event.preventDefault();
|
5278
3620
|
|
5279
|
-
|
5280
|
-
|
5281
|
-
|
5282
|
-
// on a disconnected node (IE 9)
|
5283
|
-
disconnectedMatch = matches.call( div, "div" );
|
3621
|
+
// and execute the function
|
3622
|
+
return args[ lastToggle ].apply( this, arguments ) || false;
|
3623
|
+
};
|
5284
3624
|
|
5285
|
-
|
5286
|
-
|
5287
|
-
|
5288
|
-
|
5289
|
-
|
5290
|
-
} catch ( e ) {}
|
5291
|
-
});
|
3625
|
+
// link all the functions, so any of them can unbind this click handler
|
3626
|
+
toggler.guid = guid;
|
3627
|
+
while ( i < args.length ) {
|
3628
|
+
args[ i++ ].guid = guid;
|
3629
|
+
}
|
5292
3630
|
|
5293
|
-
|
5294
|
-
|
3631
|
+
return this.click( toggler );
|
3632
|
+
},
|
5295
3633
|
|
5296
|
-
|
5297
|
-
|
5298
|
-
|
3634
|
+
hover: function( fnOver, fnOut ) {
|
3635
|
+
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
|
3636
|
+
}
|
3637
|
+
});
|
5299
3638
|
|
5300
|
-
|
5301
|
-
|
5302
|
-
|
5303
|
-
var ret = matches.call( elem, expr );
|
5304
|
-
|
5305
|
-
// IE 9's matchesSelector returns false on disconnected nodes
|
5306
|
-
if ( ret || disconnectedMatch ||
|
5307
|
-
// As well, disconnected nodes are said to be in a document
|
5308
|
-
// fragment in IE 9
|
5309
|
-
elem.document && elem.document.nodeType !== 11 ) {
|
5310
|
-
return ret;
|
5311
|
-
}
|
5312
|
-
} catch(e) {}
|
5313
|
-
}
|
3639
|
+
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
|
3640
|
+
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
|
3641
|
+
"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
|
5314
3642
|
|
5315
|
-
|
5316
|
-
|
3643
|
+
// Handle event binding
|
3644
|
+
jQuery.fn[ name ] = function( data, fn ) {
|
3645
|
+
if ( fn == null ) {
|
3646
|
+
fn = data;
|
3647
|
+
data = null;
|
5317
3648
|
}
|
5318
|
-
})();
|
5319
|
-
}
|
5320
3649
|
|
5321
|
-
|
5322
|
-
|
3650
|
+
return arguments.length > 0 ?
|
3651
|
+
this.on( name, null, data, fn ) :
|
3652
|
+
this.trigger( name );
|
3653
|
+
};
|
5323
3654
|
|
5324
|
-
|
5325
|
-
|
5326
|
-
|
5327
|
-
Expr.setFilters = new setFilters();
|
3655
|
+
if ( rkeyEvent.test( name ) ) {
|
3656
|
+
jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
|
3657
|
+
}
|
5328
3658
|
|
3659
|
+
if ( rmouseEvent.test( name ) ) {
|
3660
|
+
jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
|
3661
|
+
}
|
3662
|
+
});
|
3663
|
+
/*!
|
3664
|
+
* Sizzle CSS Selector Engine
|
3665
|
+
* Copyright 2012 jQuery Foundation and other contributors
|
3666
|
+
* Released under the MIT license
|
3667
|
+
* http://sizzlejs.com/
|
3668
|
+
*/
|
3669
|
+
(function( window, undefined ) {
|
3670
|
+
|
3671
|
+
var cachedruns,
|
3672
|
+
assertGetIdNotName,
|
3673
|
+
Expr,
|
3674
|
+
getText,
|
3675
|
+
isXML,
|
3676
|
+
contains,
|
3677
|
+
compile,
|
3678
|
+
sortOrder,
|
3679
|
+
hasDuplicate,
|
3680
|
+
outermostContext,
|
3681
|
+
|
3682
|
+
baseHasDuplicate = true,
|
3683
|
+
strundefined = "undefined",
|
3684
|
+
|
3685
|
+
expando = ( "sizcache" + Math.random() ).replace( ".", "" ),
|
3686
|
+
|
3687
|
+
Token = String,
|
3688
|
+
document = window.document,
|
3689
|
+
docElem = document.documentElement,
|
3690
|
+
dirruns = 0,
|
3691
|
+
done = 0,
|
3692
|
+
pop = [].pop,
|
3693
|
+
push = [].push,
|
3694
|
+
slice = [].slice,
|
3695
|
+
// Use a stripped-down indexOf if a native one is unavailable
|
3696
|
+
indexOf = [].indexOf || function( elem ) {
|
3697
|
+
var i = 0,
|
3698
|
+
len = this.length;
|
3699
|
+
for ( ; i < len; i++ ) {
|
3700
|
+
if ( this[i] === elem ) {
|
3701
|
+
return i;
|
3702
|
+
}
|
3703
|
+
}
|
3704
|
+
return -1;
|
3705
|
+
},
|
3706
|
+
|
3707
|
+
// Augment a function for special use by Sizzle
|
3708
|
+
markFunction = function( fn, value ) {
|
3709
|
+
fn[ expando ] = value == null || value;
|
3710
|
+
return fn;
|
3711
|
+
},
|
3712
|
+
|
3713
|
+
createCache = function() {
|
3714
|
+
var cache = {},
|
3715
|
+
keys = [];
|
3716
|
+
|
3717
|
+
return markFunction(function( key, value ) {
|
3718
|
+
// Only keep the most recent entries
|
3719
|
+
if ( keys.push( key ) > Expr.cacheLength ) {
|
3720
|
+
delete cache[ keys.shift() ];
|
3721
|
+
}
|
3722
|
+
|
3723
|
+
// Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157)
|
3724
|
+
return (cache[ key + " " ] = value);
|
3725
|
+
}, cache );
|
3726
|
+
},
|
3727
|
+
|
3728
|
+
classCache = createCache(),
|
3729
|
+
tokenCache = createCache(),
|
3730
|
+
compilerCache = createCache(),
|
3731
|
+
|
3732
|
+
// Regex
|
3733
|
+
|
3734
|
+
// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
|
3735
|
+
whitespace = "[\\x20\\t\\r\\n\\f]",
|
3736
|
+
// http://www.w3.org/TR/css3-syntax/#characters
|
3737
|
+
characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
|
3738
|
+
|
3739
|
+
// Loosely modeled on CSS identifier characters
|
3740
|
+
// An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)
|
3741
|
+
// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
|
3742
|
+
identifier = characterEncoding.replace( "w", "w#" ),
|
3743
|
+
|
3744
|
+
// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
|
3745
|
+
operators = "([*^$|!~]?=)",
|
3746
|
+
attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
|
3747
|
+
"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
|
3748
|
+
|
3749
|
+
// Prefer arguments not in parens/brackets,
|
3750
|
+
// then attribute selectors and non-pseudos (denoted by :),
|
3751
|
+
// then anything else
|
3752
|
+
// These preferences are here to reduce the number of selectors
|
3753
|
+
// needing tokenize in the PSEUDO preFilter
|
3754
|
+
pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",
|
3755
|
+
|
3756
|
+
// For matchExpr.POS and matchExpr.needsContext
|
3757
|
+
pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
|
3758
|
+
"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)",
|
3759
|
+
|
3760
|
+
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
|
3761
|
+
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
|
3762
|
+
|
3763
|
+
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
3764
|
+
rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
|
3765
|
+
rpseudo = new RegExp( pseudos ),
|
3766
|
+
|
3767
|
+
// Easily-parseable/retrievable ID or TAG or CLASS selectors
|
3768
|
+
rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
|
3769
|
+
|
3770
|
+
rnot = /^:not/,
|
3771
|
+
rsibling = /[\x20\t\r\n\f]*[+~]/,
|
3772
|
+
rendsWithNot = /:not\($/,
|
3773
|
+
|
3774
|
+
rheader = /h\d/i,
|
3775
|
+
rinputs = /input|select|textarea|button/i,
|
3776
|
+
|
3777
|
+
rbackslash = /\\(?!\\)/g,
|
3778
|
+
|
3779
|
+
matchExpr = {
|
3780
|
+
"ID": new RegExp( "^#(" + characterEncoding + ")" ),
|
3781
|
+
"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
|
3782
|
+
"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
|
3783
|
+
"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
|
3784
|
+
"ATTR": new RegExp( "^" + attributes ),
|
3785
|
+
"PSEUDO": new RegExp( "^" + pseudos ),
|
3786
|
+
"POS": new RegExp( pos, "i" ),
|
3787
|
+
"CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace +
|
3788
|
+
"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
|
3789
|
+
"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
|
3790
|
+
// For use in libraries implementing .is()
|
3791
|
+
"needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )
|
3792
|
+
},
|
3793
|
+
|
3794
|
+
// Support
|
3795
|
+
|
3796
|
+
// Used for testing something on an element
|
3797
|
+
assert = function( fn ) {
|
3798
|
+
var div = document.createElement("div");
|
3799
|
+
|
3800
|
+
try {
|
3801
|
+
return fn( div );
|
3802
|
+
} catch (e) {
|
3803
|
+
return false;
|
3804
|
+
} finally {
|
3805
|
+
// release memory in IE
|
3806
|
+
div = null;
|
3807
|
+
}
|
3808
|
+
},
|
3809
|
+
|
3810
|
+
// Check if getElementsByTagName("*") returns only elements
|
3811
|
+
assertTagNameNoComments = assert(function( div ) {
|
3812
|
+
div.appendChild( document.createComment("") );
|
3813
|
+
return !div.getElementsByTagName("*").length;
|
3814
|
+
}),
|
3815
|
+
|
3816
|
+
// Check if getAttribute returns normalized href attributes
|
3817
|
+
assertHrefNotNormalized = assert(function( div ) {
|
3818
|
+
div.innerHTML = "<a href='#'></a>";
|
3819
|
+
return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
|
3820
|
+
div.firstChild.getAttribute("href") === "#";
|
3821
|
+
}),
|
3822
|
+
|
3823
|
+
// Check if attributes should be retrieved by attribute nodes
|
3824
|
+
assertAttributes = assert(function( div ) {
|
3825
|
+
div.innerHTML = "<select></select>";
|
3826
|
+
var type = typeof div.lastChild.getAttribute("multiple");
|
3827
|
+
// IE8 returns a string for some attributes even when not present
|
3828
|
+
return type !== "boolean" && type !== "string";
|
3829
|
+
}),
|
3830
|
+
|
3831
|
+
// Check if getElementsByClassName can be trusted
|
3832
|
+
assertUsableClassName = assert(function( div ) {
|
3833
|
+
// Opera can't find a second classname (in 9.6)
|
3834
|
+
div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
|
3835
|
+
if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
|
3836
|
+
return false;
|
3837
|
+
}
|
3838
|
+
|
3839
|
+
// Safari 3.2 caches class attributes and doesn't catch changes
|
3840
|
+
div.lastChild.className = "e";
|
3841
|
+
return div.getElementsByClassName("e").length === 2;
|
3842
|
+
}),
|
3843
|
+
|
3844
|
+
// Check if getElementById returns elements by name
|
3845
|
+
// Check if getElementsByName privileges form controls or returns elements by ID
|
3846
|
+
assertUsableName = assert(function( div ) {
|
3847
|
+
// Inject content
|
3848
|
+
div.id = expando + 0;
|
3849
|
+
div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
|
3850
|
+
docElem.insertBefore( div, docElem.firstChild );
|
3851
|
+
|
3852
|
+
// Test
|
3853
|
+
var pass = document.getElementsByName &&
|
3854
|
+
// buggy browsers will return fewer than the correct 2
|
3855
|
+
document.getElementsByName( expando ).length === 2 +
|
3856
|
+
// buggy browsers will return more than the correct 0
|
3857
|
+
document.getElementsByName( expando + 0 ).length;
|
3858
|
+
assertGetIdNotName = !document.getElementById( expando );
|
3859
|
+
|
3860
|
+
// Cleanup
|
3861
|
+
docElem.removeChild( div );
|
3862
|
+
|
3863
|
+
return pass;
|
3864
|
+
});
|
3865
|
+
|
3866
|
+
// If slice is not available, provide a backup
|
3867
|
+
try {
|
3868
|
+
slice.call( docElem.childNodes, 0 )[0].nodeType;
|
3869
|
+
} catch ( e ) {
|
3870
|
+
slice = function( i ) {
|
3871
|
+
var elem,
|
3872
|
+
results = [];
|
3873
|
+
for ( ; (elem = this[i]); i++ ) {
|
3874
|
+
results.push( elem );
|
3875
|
+
}
|
3876
|
+
return results;
|
3877
|
+
};
|
3878
|
+
}
|
3879
|
+
|
3880
|
+
function Sizzle( selector, context, results, seed ) {
|
3881
|
+
results = results || [];
|
3882
|
+
context = context || document;
|
3883
|
+
var match, elem, xml, m,
|
3884
|
+
nodeType = context.nodeType;
|
3885
|
+
|
3886
|
+
if ( !selector || typeof selector !== "string" ) {
|
3887
|
+
return results;
|
3888
|
+
}
|
3889
|
+
|
3890
|
+
if ( nodeType !== 1 && nodeType !== 9 ) {
|
3891
|
+
return [];
|
3892
|
+
}
|
3893
|
+
|
3894
|
+
xml = isXML( context );
|
3895
|
+
|
3896
|
+
if ( !xml && !seed ) {
|
3897
|
+
if ( (match = rquickExpr.exec( selector )) ) {
|
3898
|
+
// Speed-up: Sizzle("#ID")
|
3899
|
+
if ( (m = match[1]) ) {
|
3900
|
+
if ( nodeType === 9 ) {
|
3901
|
+
elem = context.getElementById( m );
|
3902
|
+
// Check parentNode to catch when Blackberry 4.6 returns
|
3903
|
+
// nodes that are no longer in the document #6963
|
3904
|
+
if ( elem && elem.parentNode ) {
|
3905
|
+
// Handle the case where IE, Opera, and Webkit return items
|
3906
|
+
// by name instead of ID
|
3907
|
+
if ( elem.id === m ) {
|
3908
|
+
results.push( elem );
|
3909
|
+
return results;
|
3910
|
+
}
|
3911
|
+
} else {
|
3912
|
+
return results;
|
3913
|
+
}
|
3914
|
+
} else {
|
3915
|
+
// Context is not a document
|
3916
|
+
if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
|
3917
|
+
contains( context, elem ) && elem.id === m ) {
|
3918
|
+
results.push( elem );
|
3919
|
+
return results;
|
3920
|
+
}
|
3921
|
+
}
|
3922
|
+
|
3923
|
+
// Speed-up: Sizzle("TAG")
|
3924
|
+
} else if ( match[2] ) {
|
3925
|
+
push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
|
3926
|
+
return results;
|
3927
|
+
|
3928
|
+
// Speed-up: Sizzle(".CLASS")
|
3929
|
+
} else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {
|
3930
|
+
push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
|
3931
|
+
return results;
|
3932
|
+
}
|
3933
|
+
}
|
3934
|
+
}
|
3935
|
+
|
3936
|
+
// All others
|
3937
|
+
return select( selector.replace( rtrim, "$1" ), context, results, seed, xml );
|
3938
|
+
}
|
3939
|
+
|
3940
|
+
Sizzle.matches = function( expr, elements ) {
|
3941
|
+
return Sizzle( expr, null, null, elements );
|
3942
|
+
};
|
3943
|
+
|
3944
|
+
Sizzle.matchesSelector = function( elem, expr ) {
|
3945
|
+
return Sizzle( expr, null, null, [ elem ] ).length > 0;
|
3946
|
+
};
|
3947
|
+
|
3948
|
+
// Returns a function to use in pseudos for input types
|
3949
|
+
function createInputPseudo( type ) {
|
3950
|
+
return function( elem ) {
|
3951
|
+
var name = elem.nodeName.toLowerCase();
|
3952
|
+
return name === "input" && elem.type === type;
|
3953
|
+
};
|
3954
|
+
}
|
3955
|
+
|
3956
|
+
// Returns a function to use in pseudos for buttons
|
3957
|
+
function createButtonPseudo( type ) {
|
3958
|
+
return function( elem ) {
|
3959
|
+
var name = elem.nodeName.toLowerCase();
|
3960
|
+
return (name === "input" || name === "button") && elem.type === type;
|
3961
|
+
};
|
3962
|
+
}
|
3963
|
+
|
3964
|
+
// Returns a function to use in pseudos for positionals
|
3965
|
+
function createPositionalPseudo( fn ) {
|
3966
|
+
return markFunction(function( argument ) {
|
3967
|
+
argument = +argument;
|
3968
|
+
return markFunction(function( seed, matches ) {
|
3969
|
+
var j,
|
3970
|
+
matchIndexes = fn( [], seed.length, argument ),
|
3971
|
+
i = matchIndexes.length;
|
3972
|
+
|
3973
|
+
// Match elements found at the specified indexes
|
3974
|
+
while ( i-- ) {
|
3975
|
+
if ( seed[ (j = matchIndexes[i]) ] ) {
|
3976
|
+
seed[j] = !(matches[j] = seed[j]);
|
3977
|
+
}
|
3978
|
+
}
|
3979
|
+
});
|
3980
|
+
});
|
3981
|
+
}
|
3982
|
+
|
3983
|
+
/**
|
3984
|
+
* Utility function for retrieving the text value of an array of DOM nodes
|
3985
|
+
* @param {Array|Element} elem
|
3986
|
+
*/
|
3987
|
+
getText = Sizzle.getText = function( elem ) {
|
3988
|
+
var node,
|
3989
|
+
ret = "",
|
3990
|
+
i = 0,
|
3991
|
+
nodeType = elem.nodeType;
|
3992
|
+
|
3993
|
+
if ( nodeType ) {
|
3994
|
+
if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
|
3995
|
+
// Use textContent for elements
|
3996
|
+
// innerText usage removed for consistency of new lines (see #11153)
|
3997
|
+
if ( typeof elem.textContent === "string" ) {
|
3998
|
+
return elem.textContent;
|
3999
|
+
} else {
|
4000
|
+
// Traverse its children
|
4001
|
+
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
|
4002
|
+
ret += getText( elem );
|
4003
|
+
}
|
4004
|
+
}
|
4005
|
+
} else if ( nodeType === 3 || nodeType === 4 ) {
|
4006
|
+
return elem.nodeValue;
|
4007
|
+
}
|
4008
|
+
// Do not include comment or processing instruction nodes
|
4009
|
+
} else {
|
4010
|
+
|
4011
|
+
// If no nodeType, this is expected to be an array
|
4012
|
+
for ( ; (node = elem[i]); i++ ) {
|
4013
|
+
// Do not traverse comment nodes
|
4014
|
+
ret += getText( node );
|
4015
|
+
}
|
4016
|
+
}
|
4017
|
+
return ret;
|
4018
|
+
};
|
4019
|
+
|
4020
|
+
isXML = Sizzle.isXML = function( elem ) {
|
4021
|
+
// documentElement is verified for cases where it doesn't yet exist
|
4022
|
+
// (such as loading iframes in IE - #4833)
|
4023
|
+
var documentElement = elem && (elem.ownerDocument || elem).documentElement;
|
4024
|
+
return documentElement ? documentElement.nodeName !== "HTML" : false;
|
4025
|
+
};
|
4026
|
+
|
4027
|
+
// Element contains another
|
4028
|
+
contains = Sizzle.contains = docElem.contains ?
|
4029
|
+
function( a, b ) {
|
4030
|
+
var adown = a.nodeType === 9 ? a.documentElement : a,
|
4031
|
+
bup = b && b.parentNode;
|
4032
|
+
return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );
|
4033
|
+
} :
|
4034
|
+
docElem.compareDocumentPosition ?
|
4035
|
+
function( a, b ) {
|
4036
|
+
return b && !!( a.compareDocumentPosition( b ) & 16 );
|
4037
|
+
} :
|
4038
|
+
function( a, b ) {
|
4039
|
+
while ( (b = b.parentNode) ) {
|
4040
|
+
if ( b === a ) {
|
4041
|
+
return true;
|
4042
|
+
}
|
4043
|
+
}
|
4044
|
+
return false;
|
4045
|
+
};
|
4046
|
+
|
4047
|
+
Sizzle.attr = function( elem, name ) {
|
4048
|
+
var val,
|
4049
|
+
xml = isXML( elem );
|
4050
|
+
|
4051
|
+
if ( !xml ) {
|
4052
|
+
name = name.toLowerCase();
|
4053
|
+
}
|
4054
|
+
if ( (val = Expr.attrHandle[ name ]) ) {
|
4055
|
+
return val( elem );
|
4056
|
+
}
|
4057
|
+
if ( xml || assertAttributes ) {
|
4058
|
+
return elem.getAttribute( name );
|
4059
|
+
}
|
4060
|
+
val = elem.getAttributeNode( name );
|
4061
|
+
return val ?
|
4062
|
+
typeof elem[ name ] === "boolean" ?
|
4063
|
+
elem[ name ] ? name : null :
|
4064
|
+
val.specified ? val.value : null :
|
4065
|
+
null;
|
4066
|
+
};
|
4067
|
+
|
4068
|
+
Expr = Sizzle.selectors = {
|
4069
|
+
|
4070
|
+
// Can be adjusted by the user
|
4071
|
+
cacheLength: 50,
|
4072
|
+
|
4073
|
+
createPseudo: markFunction,
|
4074
|
+
|
4075
|
+
match: matchExpr,
|
4076
|
+
|
4077
|
+
// IE6/7 return a modified href
|
4078
|
+
attrHandle: assertHrefNotNormalized ?
|
4079
|
+
{} :
|
4080
|
+
{
|
4081
|
+
"href": function( elem ) {
|
4082
|
+
return elem.getAttribute( "href", 2 );
|
4083
|
+
},
|
4084
|
+
"type": function( elem ) {
|
4085
|
+
return elem.getAttribute("type");
|
4086
|
+
}
|
4087
|
+
},
|
4088
|
+
|
4089
|
+
find: {
|
4090
|
+
"ID": assertGetIdNotName ?
|
4091
|
+
function( id, context, xml ) {
|
4092
|
+
if ( typeof context.getElementById !== strundefined && !xml ) {
|
4093
|
+
var m = context.getElementById( id );
|
4094
|
+
// Check parentNode to catch when Blackberry 4.6 returns
|
4095
|
+
// nodes that are no longer in the document #6963
|
4096
|
+
return m && m.parentNode ? [m] : [];
|
4097
|
+
}
|
4098
|
+
} :
|
4099
|
+
function( id, context, xml ) {
|
4100
|
+
if ( typeof context.getElementById !== strundefined && !xml ) {
|
4101
|
+
var m = context.getElementById( id );
|
4102
|
+
|
4103
|
+
return m ?
|
4104
|
+
m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
|
4105
|
+
[m] :
|
4106
|
+
undefined :
|
4107
|
+
[];
|
4108
|
+
}
|
4109
|
+
},
|
4110
|
+
|
4111
|
+
"TAG": assertTagNameNoComments ?
|
4112
|
+
function( tag, context ) {
|
4113
|
+
if ( typeof context.getElementsByTagName !== strundefined ) {
|
4114
|
+
return context.getElementsByTagName( tag );
|
4115
|
+
}
|
4116
|
+
} :
|
4117
|
+
function( tag, context ) {
|
4118
|
+
var results = context.getElementsByTagName( tag );
|
4119
|
+
|
4120
|
+
// Filter out possible comments
|
4121
|
+
if ( tag === "*" ) {
|
4122
|
+
var elem,
|
4123
|
+
tmp = [],
|
4124
|
+
i = 0;
|
4125
|
+
|
4126
|
+
for ( ; (elem = results[i]); i++ ) {
|
4127
|
+
if ( elem.nodeType === 1 ) {
|
4128
|
+
tmp.push( elem );
|
4129
|
+
}
|
4130
|
+
}
|
4131
|
+
|
4132
|
+
return tmp;
|
4133
|
+
}
|
4134
|
+
return results;
|
4135
|
+
},
|
4136
|
+
|
4137
|
+
"NAME": assertUsableName && function( tag, context ) {
|
4138
|
+
if ( typeof context.getElementsByName !== strundefined ) {
|
4139
|
+
return context.getElementsByName( name );
|
4140
|
+
}
|
4141
|
+
},
|
4142
|
+
|
4143
|
+
"CLASS": assertUsableClassName && function( className, context, xml ) {
|
4144
|
+
if ( typeof context.getElementsByClassName !== strundefined && !xml ) {
|
4145
|
+
return context.getElementsByClassName( className );
|
4146
|
+
}
|
4147
|
+
}
|
4148
|
+
},
|
4149
|
+
|
4150
|
+
relative: {
|
4151
|
+
">": { dir: "parentNode", first: true },
|
4152
|
+
" ": { dir: "parentNode" },
|
4153
|
+
"+": { dir: "previousSibling", first: true },
|
4154
|
+
"~": { dir: "previousSibling" }
|
4155
|
+
},
|
4156
|
+
|
4157
|
+
preFilter: {
|
4158
|
+
"ATTR": function( match ) {
|
4159
|
+
match[1] = match[1].replace( rbackslash, "" );
|
4160
|
+
|
4161
|
+
// Move the given value to match[3] whether quoted or unquoted
|
4162
|
+
match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );
|
4163
|
+
|
4164
|
+
if ( match[2] === "~=" ) {
|
4165
|
+
match[3] = " " + match[3] + " ";
|
4166
|
+
}
|
4167
|
+
|
4168
|
+
return match.slice( 0, 4 );
|
4169
|
+
},
|
4170
|
+
|
4171
|
+
"CHILD": function( match ) {
|
4172
|
+
/* matches from matchExpr["CHILD"]
|
4173
|
+
1 type (only|nth|...)
|
4174
|
+
2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
|
4175
|
+
3 xn-component of xn+y argument ([+-]?\d*n|)
|
4176
|
+
4 sign of xn-component
|
4177
|
+
5 x of xn-component
|
4178
|
+
6 sign of y-component
|
4179
|
+
7 y of y-component
|
4180
|
+
*/
|
4181
|
+
match[1] = match[1].toLowerCase();
|
4182
|
+
|
4183
|
+
if ( match[1] === "nth" ) {
|
4184
|
+
// nth-child requires argument
|
4185
|
+
if ( !match[2] ) {
|
4186
|
+
Sizzle.error( match[0] );
|
4187
|
+
}
|
4188
|
+
|
4189
|
+
// numeric x and y parameters for Expr.filter.CHILD
|
4190
|
+
// remember that false/true cast respectively to 0/1
|
4191
|
+
match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );
|
4192
|
+
match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );
|
4193
|
+
|
4194
|
+
// other types prohibit arguments
|
4195
|
+
} else if ( match[2] ) {
|
4196
|
+
Sizzle.error( match[0] );
|
4197
|
+
}
|
4198
|
+
|
4199
|
+
return match;
|
4200
|
+
},
|
4201
|
+
|
4202
|
+
"PSEUDO": function( match ) {
|
4203
|
+
var unquoted, excess;
|
4204
|
+
if ( matchExpr["CHILD"].test( match[0] ) ) {
|
4205
|
+
return null;
|
4206
|
+
}
|
4207
|
+
|
4208
|
+
if ( match[3] ) {
|
4209
|
+
match[2] = match[3];
|
4210
|
+
} else if ( (unquoted = match[4]) ) {
|
4211
|
+
// Only check arguments that contain a pseudo
|
4212
|
+
if ( rpseudo.test(unquoted) &&
|
4213
|
+
// Get excess from tokenize (recursively)
|
4214
|
+
(excess = tokenize( unquoted, true )) &&
|
4215
|
+
// advance to the next closing parenthesis
|
4216
|
+
(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
|
4217
|
+
|
4218
|
+
// excess is a negative index
|
4219
|
+
unquoted = unquoted.slice( 0, excess );
|
4220
|
+
match[0] = match[0].slice( 0, excess );
|
4221
|
+
}
|
4222
|
+
match[2] = unquoted;
|
4223
|
+
}
|
4224
|
+
|
4225
|
+
// Return only captures needed by the pseudo filter method (type and argument)
|
4226
|
+
return match.slice( 0, 3 );
|
4227
|
+
}
|
4228
|
+
},
|
4229
|
+
|
4230
|
+
filter: {
|
4231
|
+
"ID": assertGetIdNotName ?
|
4232
|
+
function( id ) {
|
4233
|
+
id = id.replace( rbackslash, "" );
|
4234
|
+
return function( elem ) {
|
4235
|
+
return elem.getAttribute("id") === id;
|
4236
|
+
};
|
4237
|
+
} :
|
4238
|
+
function( id ) {
|
4239
|
+
id = id.replace( rbackslash, "" );
|
4240
|
+
return function( elem ) {
|
4241
|
+
var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
|
4242
|
+
return node && node.value === id;
|
4243
|
+
};
|
4244
|
+
},
|
4245
|
+
|
4246
|
+
"TAG": function( nodeName ) {
|
4247
|
+
if ( nodeName === "*" ) {
|
4248
|
+
return function() { return true; };
|
4249
|
+
}
|
4250
|
+
nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();
|
4251
|
+
|
4252
|
+
return function( elem ) {
|
4253
|
+
return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
|
4254
|
+
};
|
4255
|
+
},
|
4256
|
+
|
4257
|
+
"CLASS": function( className ) {
|
4258
|
+
var pattern = classCache[ expando ][ className + " " ];
|
4259
|
+
|
4260
|
+
return pattern ||
|
4261
|
+
(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
|
4262
|
+
classCache( className, function( elem ) {
|
4263
|
+
return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
|
4264
|
+
});
|
4265
|
+
},
|
4266
|
+
|
4267
|
+
"ATTR": function( name, operator, check ) {
|
4268
|
+
return function( elem, context ) {
|
4269
|
+
var result = Sizzle.attr( elem, name );
|
4270
|
+
|
4271
|
+
if ( result == null ) {
|
4272
|
+
return operator === "!=";
|
4273
|
+
}
|
4274
|
+
if ( !operator ) {
|
4275
|
+
return true;
|
4276
|
+
}
|
4277
|
+
|
4278
|
+
result += "";
|
4279
|
+
|
4280
|
+
return operator === "=" ? result === check :
|
4281
|
+
operator === "!=" ? result !== check :
|
4282
|
+
operator === "^=" ? check && result.indexOf( check ) === 0 :
|
4283
|
+
operator === "*=" ? check && result.indexOf( check ) > -1 :
|
4284
|
+
operator === "$=" ? check && result.substr( result.length - check.length ) === check :
|
4285
|
+
operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
|
4286
|
+
operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
|
4287
|
+
false;
|
4288
|
+
};
|
4289
|
+
},
|
4290
|
+
|
4291
|
+
"CHILD": function( type, argument, first, last ) {
|
4292
|
+
|
4293
|
+
if ( type === "nth" ) {
|
4294
|
+
return function( elem ) {
|
4295
|
+
var node, diff,
|
4296
|
+
parent = elem.parentNode;
|
4297
|
+
|
4298
|
+
if ( first === 1 && last === 0 ) {
|
4299
|
+
return true;
|
4300
|
+
}
|
4301
|
+
|
4302
|
+
if ( parent ) {
|
4303
|
+
diff = 0;
|
4304
|
+
for ( node = parent.firstChild; node; node = node.nextSibling ) {
|
4305
|
+
if ( node.nodeType === 1 ) {
|
4306
|
+
diff++;
|
4307
|
+
if ( elem === node ) {
|
4308
|
+
break;
|
4309
|
+
}
|
4310
|
+
}
|
4311
|
+
}
|
4312
|
+
}
|
4313
|
+
|
4314
|
+
// Incorporate the offset (or cast to NaN), then check against cycle size
|
4315
|
+
diff -= last;
|
4316
|
+
return diff === first || ( diff % first === 0 && diff / first >= 0 );
|
4317
|
+
};
|
4318
|
+
}
|
4319
|
+
|
4320
|
+
return function( elem ) {
|
4321
|
+
var node = elem;
|
4322
|
+
|
4323
|
+
switch ( type ) {
|
4324
|
+
case "only":
|
4325
|
+
case "first":
|
4326
|
+
while ( (node = node.previousSibling) ) {
|
4327
|
+
if ( node.nodeType === 1 ) {
|
4328
|
+
return false;
|
4329
|
+
}
|
4330
|
+
}
|
4331
|
+
|
4332
|
+
if ( type === "first" ) {
|
4333
|
+
return true;
|
4334
|
+
}
|
4335
|
+
|
4336
|
+
node = elem;
|
4337
|
+
|
4338
|
+
/* falls through */
|
4339
|
+
case "last":
|
4340
|
+
while ( (node = node.nextSibling) ) {
|
4341
|
+
if ( node.nodeType === 1 ) {
|
4342
|
+
return false;
|
4343
|
+
}
|
4344
|
+
}
|
4345
|
+
|
4346
|
+
return true;
|
4347
|
+
}
|
4348
|
+
};
|
4349
|
+
},
|
4350
|
+
|
4351
|
+
"PSEUDO": function( pseudo, argument ) {
|
4352
|
+
// pseudo-class names are case-insensitive
|
4353
|
+
// http://www.w3.org/TR/selectors/#pseudo-classes
|
4354
|
+
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
|
4355
|
+
// Remember that setFilters inherits from pseudos
|
4356
|
+
var args,
|
4357
|
+
fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
|
4358
|
+
Sizzle.error( "unsupported pseudo: " + pseudo );
|
4359
|
+
|
4360
|
+
// The user may use createPseudo to indicate that
|
4361
|
+
// arguments are needed to create the filter function
|
4362
|
+
// just as Sizzle does
|
4363
|
+
if ( fn[ expando ] ) {
|
4364
|
+
return fn( argument );
|
4365
|
+
}
|
4366
|
+
|
4367
|
+
// But maintain support for old signatures
|
4368
|
+
if ( fn.length > 1 ) {
|
4369
|
+
args = [ pseudo, pseudo, "", argument ];
|
4370
|
+
return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
|
4371
|
+
markFunction(function( seed, matches ) {
|
4372
|
+
var idx,
|
4373
|
+
matched = fn( seed, argument ),
|
4374
|
+
i = matched.length;
|
4375
|
+
while ( i-- ) {
|
4376
|
+
idx = indexOf.call( seed, matched[i] );
|
4377
|
+
seed[ idx ] = !( matches[ idx ] = matched[i] );
|
4378
|
+
}
|
4379
|
+
}) :
|
4380
|
+
function( elem ) {
|
4381
|
+
return fn( elem, 0, args );
|
4382
|
+
};
|
4383
|
+
}
|
4384
|
+
|
4385
|
+
return fn;
|
4386
|
+
}
|
4387
|
+
},
|
4388
|
+
|
4389
|
+
pseudos: {
|
4390
|
+
"not": markFunction(function( selector ) {
|
4391
|
+
// Trim the selector passed to compile
|
4392
|
+
// to avoid treating leading and trailing
|
4393
|
+
// spaces as combinators
|
4394
|
+
var input = [],
|
4395
|
+
results = [],
|
4396
|
+
matcher = compile( selector.replace( rtrim, "$1" ) );
|
4397
|
+
|
4398
|
+
return matcher[ expando ] ?
|
4399
|
+
markFunction(function( seed, matches, context, xml ) {
|
4400
|
+
var elem,
|
4401
|
+
unmatched = matcher( seed, null, xml, [] ),
|
4402
|
+
i = seed.length;
|
4403
|
+
|
4404
|
+
// Match elements unmatched by `matcher`
|
4405
|
+
while ( i-- ) {
|
4406
|
+
if ( (elem = unmatched[i]) ) {
|
4407
|
+
seed[i] = !(matches[i] = elem);
|
4408
|
+
}
|
4409
|
+
}
|
4410
|
+
}) :
|
4411
|
+
function( elem, context, xml ) {
|
4412
|
+
input[0] = elem;
|
4413
|
+
matcher( input, null, xml, results );
|
4414
|
+
return !results.pop();
|
4415
|
+
};
|
4416
|
+
}),
|
4417
|
+
|
4418
|
+
"has": markFunction(function( selector ) {
|
4419
|
+
return function( elem ) {
|
4420
|
+
return Sizzle( selector, elem ).length > 0;
|
4421
|
+
};
|
4422
|
+
}),
|
4423
|
+
|
4424
|
+
"contains": markFunction(function( text ) {
|
4425
|
+
return function( elem ) {
|
4426
|
+
return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
|
4427
|
+
};
|
4428
|
+
}),
|
4429
|
+
|
4430
|
+
"enabled": function( elem ) {
|
4431
|
+
return elem.disabled === false;
|
4432
|
+
},
|
4433
|
+
|
4434
|
+
"disabled": function( elem ) {
|
4435
|
+
return elem.disabled === true;
|
4436
|
+
},
|
4437
|
+
|
4438
|
+
"checked": function( elem ) {
|
4439
|
+
// In CSS3, :checked should return both checked and selected elements
|
4440
|
+
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
4441
|
+
var nodeName = elem.nodeName.toLowerCase();
|
4442
|
+
return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
|
4443
|
+
},
|
4444
|
+
|
4445
|
+
"selected": function( elem ) {
|
4446
|
+
// Accessing this property makes selected-by-default
|
4447
|
+
// options in Safari work properly
|
4448
|
+
if ( elem.parentNode ) {
|
4449
|
+
elem.parentNode.selectedIndex;
|
4450
|
+
}
|
4451
|
+
|
4452
|
+
return elem.selected === true;
|
4453
|
+
},
|
4454
|
+
|
4455
|
+
"parent": function( elem ) {
|
4456
|
+
return !Expr.pseudos["empty"]( elem );
|
4457
|
+
},
|
4458
|
+
|
4459
|
+
"empty": function( elem ) {
|
4460
|
+
// http://www.w3.org/TR/selectors/#empty-pseudo
|
4461
|
+
// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
|
4462
|
+
// not comment, processing instructions, or others
|
4463
|
+
// Thanks to Diego Perini for the nodeName shortcut
|
4464
|
+
// Greater than "@" means alpha characters (specifically not starting with "#" or "?")
|
4465
|
+
var nodeType;
|
4466
|
+
elem = elem.firstChild;
|
4467
|
+
while ( elem ) {
|
4468
|
+
if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {
|
4469
|
+
return false;
|
4470
|
+
}
|
4471
|
+
elem = elem.nextSibling;
|
4472
|
+
}
|
4473
|
+
return true;
|
4474
|
+
},
|
4475
|
+
|
4476
|
+
"header": function( elem ) {
|
4477
|
+
return rheader.test( elem.nodeName );
|
4478
|
+
},
|
4479
|
+
|
4480
|
+
"text": function( elem ) {
|
4481
|
+
var type, attr;
|
4482
|
+
// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
|
4483
|
+
// use getAttribute instead to test this case
|
4484
|
+
return elem.nodeName.toLowerCase() === "input" &&
|
4485
|
+
(type = elem.type) === "text" &&
|
4486
|
+
( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );
|
4487
|
+
},
|
4488
|
+
|
4489
|
+
// Input types
|
4490
|
+
"radio": createInputPseudo("radio"),
|
4491
|
+
"checkbox": createInputPseudo("checkbox"),
|
4492
|
+
"file": createInputPseudo("file"),
|
4493
|
+
"password": createInputPseudo("password"),
|
4494
|
+
"image": createInputPseudo("image"),
|
4495
|
+
|
4496
|
+
"submit": createButtonPseudo("submit"),
|
4497
|
+
"reset": createButtonPseudo("reset"),
|
4498
|
+
|
4499
|
+
"button": function( elem ) {
|
4500
|
+
var name = elem.nodeName.toLowerCase();
|
4501
|
+
return name === "input" && elem.type === "button" || name === "button";
|
4502
|
+
},
|
4503
|
+
|
4504
|
+
"input": function( elem ) {
|
4505
|
+
return rinputs.test( elem.nodeName );
|
4506
|
+
},
|
4507
|
+
|
4508
|
+
"focus": function( elem ) {
|
4509
|
+
var doc = elem.ownerDocument;
|
4510
|
+
return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
|
4511
|
+
},
|
4512
|
+
|
4513
|
+
"active": function( elem ) {
|
4514
|
+
return elem === elem.ownerDocument.activeElement;
|
4515
|
+
},
|
4516
|
+
|
4517
|
+
// Positional types
|
4518
|
+
"first": createPositionalPseudo(function() {
|
4519
|
+
return [ 0 ];
|
4520
|
+
}),
|
4521
|
+
|
4522
|
+
"last": createPositionalPseudo(function( matchIndexes, length ) {
|
4523
|
+
return [ length - 1 ];
|
4524
|
+
}),
|
4525
|
+
|
4526
|
+
"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4527
|
+
return [ argument < 0 ? argument + length : argument ];
|
4528
|
+
}),
|
4529
|
+
|
4530
|
+
"even": createPositionalPseudo(function( matchIndexes, length ) {
|
4531
|
+
for ( var i = 0; i < length; i += 2 ) {
|
4532
|
+
matchIndexes.push( i );
|
4533
|
+
}
|
4534
|
+
return matchIndexes;
|
4535
|
+
}),
|
4536
|
+
|
4537
|
+
"odd": createPositionalPseudo(function( matchIndexes, length ) {
|
4538
|
+
for ( var i = 1; i < length; i += 2 ) {
|
4539
|
+
matchIndexes.push( i );
|
4540
|
+
}
|
4541
|
+
return matchIndexes;
|
4542
|
+
}),
|
4543
|
+
|
4544
|
+
"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4545
|
+
for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {
|
4546
|
+
matchIndexes.push( i );
|
4547
|
+
}
|
4548
|
+
return matchIndexes;
|
4549
|
+
}),
|
4550
|
+
|
4551
|
+
"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
4552
|
+
for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {
|
4553
|
+
matchIndexes.push( i );
|
4554
|
+
}
|
4555
|
+
return matchIndexes;
|
4556
|
+
})
|
4557
|
+
}
|
4558
|
+
};
|
4559
|
+
|
4560
|
+
function siblingCheck( a, b, ret ) {
|
4561
|
+
if ( a === b ) {
|
4562
|
+
return ret;
|
4563
|
+
}
|
4564
|
+
|
4565
|
+
var cur = a.nextSibling;
|
4566
|
+
|
4567
|
+
while ( cur ) {
|
4568
|
+
if ( cur === b ) {
|
4569
|
+
return -1;
|
4570
|
+
}
|
4571
|
+
|
4572
|
+
cur = cur.nextSibling;
|
4573
|
+
}
|
4574
|
+
|
4575
|
+
return 1;
|
4576
|
+
}
|
4577
|
+
|
4578
|
+
sortOrder = docElem.compareDocumentPosition ?
|
4579
|
+
function( a, b ) {
|
4580
|
+
if ( a === b ) {
|
4581
|
+
hasDuplicate = true;
|
4582
|
+
return 0;
|
4583
|
+
}
|
4584
|
+
|
4585
|
+
return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?
|
4586
|
+
a.compareDocumentPosition :
|
4587
|
+
a.compareDocumentPosition(b) & 4
|
4588
|
+
) ? -1 : 1;
|
4589
|
+
} :
|
4590
|
+
function( a, b ) {
|
4591
|
+
// The nodes are identical, we can exit early
|
4592
|
+
if ( a === b ) {
|
4593
|
+
hasDuplicate = true;
|
4594
|
+
return 0;
|
4595
|
+
|
4596
|
+
// Fallback to using sourceIndex (in IE) if it's available on both nodes
|
4597
|
+
} else if ( a.sourceIndex && b.sourceIndex ) {
|
4598
|
+
return a.sourceIndex - b.sourceIndex;
|
4599
|
+
}
|
4600
|
+
|
4601
|
+
var al, bl,
|
4602
|
+
ap = [],
|
4603
|
+
bp = [],
|
4604
|
+
aup = a.parentNode,
|
4605
|
+
bup = b.parentNode,
|
4606
|
+
cur = aup;
|
4607
|
+
|
4608
|
+
// If the nodes are siblings (or identical) we can do a quick check
|
4609
|
+
if ( aup === bup ) {
|
4610
|
+
return siblingCheck( a, b );
|
4611
|
+
|
4612
|
+
// If no parents were found then the nodes are disconnected
|
4613
|
+
} else if ( !aup ) {
|
4614
|
+
return -1;
|
4615
|
+
|
4616
|
+
} else if ( !bup ) {
|
4617
|
+
return 1;
|
4618
|
+
}
|
4619
|
+
|
4620
|
+
// Otherwise they're somewhere else in the tree so we need
|
4621
|
+
// to build up a full list of the parentNodes for comparison
|
4622
|
+
while ( cur ) {
|
4623
|
+
ap.unshift( cur );
|
4624
|
+
cur = cur.parentNode;
|
4625
|
+
}
|
4626
|
+
|
4627
|
+
cur = bup;
|
4628
|
+
|
4629
|
+
while ( cur ) {
|
4630
|
+
bp.unshift( cur );
|
4631
|
+
cur = cur.parentNode;
|
4632
|
+
}
|
4633
|
+
|
4634
|
+
al = ap.length;
|
4635
|
+
bl = bp.length;
|
4636
|
+
|
4637
|
+
// Start walking down the tree looking for a discrepancy
|
4638
|
+
for ( var i = 0; i < al && i < bl; i++ ) {
|
4639
|
+
if ( ap[i] !== bp[i] ) {
|
4640
|
+
return siblingCheck( ap[i], bp[i] );
|
4641
|
+
}
|
4642
|
+
}
|
4643
|
+
|
4644
|
+
// We ended someplace up the tree so do a sibling check
|
4645
|
+
return i === al ?
|
4646
|
+
siblingCheck( a, bp[i], -1 ) :
|
4647
|
+
siblingCheck( ap[i], b, 1 );
|
4648
|
+
};
|
4649
|
+
|
4650
|
+
// Always assume the presence of duplicates if sort doesn't
|
4651
|
+
// pass them to our comparison function (as in Google Chrome).
|
4652
|
+
[0, 0].sort( sortOrder );
|
4653
|
+
baseHasDuplicate = !hasDuplicate;
|
4654
|
+
|
4655
|
+
// Document sorting and removing duplicates
|
4656
|
+
Sizzle.uniqueSort = function( results ) {
|
4657
|
+
var elem,
|
4658
|
+
duplicates = [],
|
4659
|
+
i = 1,
|
4660
|
+
j = 0;
|
4661
|
+
|
4662
|
+
hasDuplicate = baseHasDuplicate;
|
4663
|
+
results.sort( sortOrder );
|
4664
|
+
|
4665
|
+
if ( hasDuplicate ) {
|
4666
|
+
for ( ; (elem = results[i]); i++ ) {
|
4667
|
+
if ( elem === results[ i - 1 ] ) {
|
4668
|
+
j = duplicates.push( i );
|
4669
|
+
}
|
4670
|
+
}
|
4671
|
+
while ( j-- ) {
|
4672
|
+
results.splice( duplicates[ j ], 1 );
|
4673
|
+
}
|
4674
|
+
}
|
4675
|
+
|
4676
|
+
return results;
|
4677
|
+
};
|
4678
|
+
|
4679
|
+
Sizzle.error = function( msg ) {
|
4680
|
+
throw new Error( "Syntax error, unrecognized expression: " + msg );
|
4681
|
+
};
|
4682
|
+
|
4683
|
+
function tokenize( selector, parseOnly ) {
|
4684
|
+
var matched, match, tokens, type,
|
4685
|
+
soFar, groups, preFilters,
|
4686
|
+
cached = tokenCache[ expando ][ selector + " " ];
|
4687
|
+
|
4688
|
+
if ( cached ) {
|
4689
|
+
return parseOnly ? 0 : cached.slice( 0 );
|
4690
|
+
}
|
4691
|
+
|
4692
|
+
soFar = selector;
|
4693
|
+
groups = [];
|
4694
|
+
preFilters = Expr.preFilter;
|
4695
|
+
|
4696
|
+
while ( soFar ) {
|
4697
|
+
|
4698
|
+
// Comma and first run
|
4699
|
+
if ( !matched || (match = rcomma.exec( soFar )) ) {
|
4700
|
+
if ( match ) {
|
4701
|
+
// Don't consume trailing commas as valid
|
4702
|
+
soFar = soFar.slice( match[0].length ) || soFar;
|
4703
|
+
}
|
4704
|
+
groups.push( tokens = [] );
|
4705
|
+
}
|
4706
|
+
|
4707
|
+
matched = false;
|
4708
|
+
|
4709
|
+
// Combinators
|
4710
|
+
if ( (match = rcombinators.exec( soFar )) ) {
|
4711
|
+
tokens.push( matched = new Token( match.shift() ) );
|
4712
|
+
soFar = soFar.slice( matched.length );
|
4713
|
+
|
4714
|
+
// Cast descendant combinators to space
|
4715
|
+
matched.type = match[0].replace( rtrim, " " );
|
4716
|
+
}
|
4717
|
+
|
4718
|
+
// Filters
|
4719
|
+
for ( type in Expr.filter ) {
|
4720
|
+
if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
|
4721
|
+
(match = preFilters[ type ]( match ))) ) {
|
4722
|
+
|
4723
|
+
tokens.push( matched = new Token( match.shift() ) );
|
4724
|
+
soFar = soFar.slice( matched.length );
|
4725
|
+
matched.type = type;
|
4726
|
+
matched.matches = match;
|
4727
|
+
}
|
4728
|
+
}
|
4729
|
+
|
4730
|
+
if ( !matched ) {
|
4731
|
+
break;
|
4732
|
+
}
|
4733
|
+
}
|
4734
|
+
|
4735
|
+
// Return the length of the invalid excess
|
4736
|
+
// if we're just parsing
|
4737
|
+
// Otherwise, throw an error or return tokens
|
4738
|
+
return parseOnly ?
|
4739
|
+
soFar.length :
|
4740
|
+
soFar ?
|
4741
|
+
Sizzle.error( selector ) :
|
4742
|
+
// Cache the tokens
|
4743
|
+
tokenCache( selector, groups ).slice( 0 );
|
4744
|
+
}
|
4745
|
+
|
4746
|
+
function addCombinator( matcher, combinator, base ) {
|
4747
|
+
var dir = combinator.dir,
|
4748
|
+
checkNonElements = base && combinator.dir === "parentNode",
|
4749
|
+
doneName = done++;
|
4750
|
+
|
4751
|
+
return combinator.first ?
|
4752
|
+
// Check against closest ancestor/preceding element
|
4753
|
+
function( elem, context, xml ) {
|
4754
|
+
while ( (elem = elem[ dir ]) ) {
|
4755
|
+
if ( checkNonElements || elem.nodeType === 1 ) {
|
4756
|
+
return matcher( elem, context, xml );
|
4757
|
+
}
|
4758
|
+
}
|
4759
|
+
} :
|
4760
|
+
|
4761
|
+
// Check against all ancestor/preceding elements
|
4762
|
+
function( elem, context, xml ) {
|
4763
|
+
// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
|
4764
|
+
if ( !xml ) {
|
4765
|
+
var cache,
|
4766
|
+
dirkey = dirruns + " " + doneName + " ",
|
4767
|
+
cachedkey = dirkey + cachedruns;
|
4768
|
+
while ( (elem = elem[ dir ]) ) {
|
4769
|
+
if ( checkNonElements || elem.nodeType === 1 ) {
|
4770
|
+
if ( (cache = elem[ expando ]) === cachedkey ) {
|
4771
|
+
return elem.sizset;
|
4772
|
+
} else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
|
4773
|
+
if ( elem.sizset ) {
|
4774
|
+
return elem;
|
4775
|
+
}
|
4776
|
+
} else {
|
4777
|
+
elem[ expando ] = cachedkey;
|
4778
|
+
if ( matcher( elem, context, xml ) ) {
|
4779
|
+
elem.sizset = true;
|
4780
|
+
return elem;
|
4781
|
+
}
|
4782
|
+
elem.sizset = false;
|
4783
|
+
}
|
4784
|
+
}
|
4785
|
+
}
|
4786
|
+
} else {
|
4787
|
+
while ( (elem = elem[ dir ]) ) {
|
4788
|
+
if ( checkNonElements || elem.nodeType === 1 ) {
|
4789
|
+
if ( matcher( elem, context, xml ) ) {
|
4790
|
+
return elem;
|
4791
|
+
}
|
4792
|
+
}
|
4793
|
+
}
|
4794
|
+
}
|
4795
|
+
};
|
4796
|
+
}
|
4797
|
+
|
4798
|
+
function elementMatcher( matchers ) {
|
4799
|
+
return matchers.length > 1 ?
|
4800
|
+
function( elem, context, xml ) {
|
4801
|
+
var i = matchers.length;
|
4802
|
+
while ( i-- ) {
|
4803
|
+
if ( !matchers[i]( elem, context, xml ) ) {
|
4804
|
+
return false;
|
4805
|
+
}
|
4806
|
+
}
|
4807
|
+
return true;
|
4808
|
+
} :
|
4809
|
+
matchers[0];
|
4810
|
+
}
|
4811
|
+
|
4812
|
+
function condense( unmatched, map, filter, context, xml ) {
|
4813
|
+
var elem,
|
4814
|
+
newUnmatched = [],
|
4815
|
+
i = 0,
|
4816
|
+
len = unmatched.length,
|
4817
|
+
mapped = map != null;
|
4818
|
+
|
4819
|
+
for ( ; i < len; i++ ) {
|
4820
|
+
if ( (elem = unmatched[i]) ) {
|
4821
|
+
if ( !filter || filter( elem, context, xml ) ) {
|
4822
|
+
newUnmatched.push( elem );
|
4823
|
+
if ( mapped ) {
|
4824
|
+
map.push( i );
|
4825
|
+
}
|
4826
|
+
}
|
4827
|
+
}
|
4828
|
+
}
|
4829
|
+
|
4830
|
+
return newUnmatched;
|
4831
|
+
}
|
4832
|
+
|
4833
|
+
function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
|
4834
|
+
if ( postFilter && !postFilter[ expando ] ) {
|
4835
|
+
postFilter = setMatcher( postFilter );
|
4836
|
+
}
|
4837
|
+
if ( postFinder && !postFinder[ expando ] ) {
|
4838
|
+
postFinder = setMatcher( postFinder, postSelector );
|
4839
|
+
}
|
4840
|
+
return markFunction(function( seed, results, context, xml ) {
|
4841
|
+
var temp, i, elem,
|
4842
|
+
preMap = [],
|
4843
|
+
postMap = [],
|
4844
|
+
preexisting = results.length,
|
4845
|
+
|
4846
|
+
// Get initial elements from seed or context
|
4847
|
+
elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
|
4848
|
+
|
4849
|
+
// Prefilter to get matcher input, preserving a map for seed-results synchronization
|
4850
|
+
matcherIn = preFilter && ( seed || !selector ) ?
|
4851
|
+
condense( elems, preMap, preFilter, context, xml ) :
|
4852
|
+
elems,
|
4853
|
+
|
4854
|
+
matcherOut = matcher ?
|
4855
|
+
// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
|
4856
|
+
postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
|
4857
|
+
|
4858
|
+
// ...intermediate processing is necessary
|
4859
|
+
[] :
|
4860
|
+
|
4861
|
+
// ...otherwise use results directly
|
4862
|
+
results :
|
4863
|
+
matcherIn;
|
4864
|
+
|
4865
|
+
// Find primary matches
|
4866
|
+
if ( matcher ) {
|
4867
|
+
matcher( matcherIn, matcherOut, context, xml );
|
4868
|
+
}
|
4869
|
+
|
4870
|
+
// Apply postFilter
|
4871
|
+
if ( postFilter ) {
|
4872
|
+
temp = condense( matcherOut, postMap );
|
4873
|
+
postFilter( temp, [], context, xml );
|
4874
|
+
|
4875
|
+
// Un-match failing elements by moving them back to matcherIn
|
4876
|
+
i = temp.length;
|
4877
|
+
while ( i-- ) {
|
4878
|
+
if ( (elem = temp[i]) ) {
|
4879
|
+
matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
|
4880
|
+
}
|
4881
|
+
}
|
4882
|
+
}
|
4883
|
+
|
4884
|
+
if ( seed ) {
|
4885
|
+
if ( postFinder || preFilter ) {
|
4886
|
+
if ( postFinder ) {
|
4887
|
+
// Get the final matcherOut by condensing this intermediate into postFinder contexts
|
4888
|
+
temp = [];
|
4889
|
+
i = matcherOut.length;
|
4890
|
+
while ( i-- ) {
|
4891
|
+
if ( (elem = matcherOut[i]) ) {
|
4892
|
+
// Restore matcherIn since elem is not yet a final match
|
4893
|
+
temp.push( (matcherIn[i] = elem) );
|
4894
|
+
}
|
4895
|
+
}
|
4896
|
+
postFinder( null, (matcherOut = []), temp, xml );
|
4897
|
+
}
|
4898
|
+
|
4899
|
+
// Move matched elements from seed to results to keep them synchronized
|
4900
|
+
i = matcherOut.length;
|
4901
|
+
while ( i-- ) {
|
4902
|
+
if ( (elem = matcherOut[i]) &&
|
4903
|
+
(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
|
4904
|
+
|
4905
|
+
seed[temp] = !(results[temp] = elem);
|
4906
|
+
}
|
4907
|
+
}
|
4908
|
+
}
|
4909
|
+
|
4910
|
+
// Add elements to results, through postFinder if defined
|
4911
|
+
} else {
|
4912
|
+
matcherOut = condense(
|
4913
|
+
matcherOut === results ?
|
4914
|
+
matcherOut.splice( preexisting, matcherOut.length ) :
|
4915
|
+
matcherOut
|
4916
|
+
);
|
4917
|
+
if ( postFinder ) {
|
4918
|
+
postFinder( null, results, matcherOut, xml );
|
4919
|
+
} else {
|
4920
|
+
push.apply( results, matcherOut );
|
4921
|
+
}
|
4922
|
+
}
|
4923
|
+
});
|
4924
|
+
}
|
4925
|
+
|
4926
|
+
function matcherFromTokens( tokens ) {
|
4927
|
+
var checkContext, matcher, j,
|
4928
|
+
len = tokens.length,
|
4929
|
+
leadingRelative = Expr.relative[ tokens[0].type ],
|
4930
|
+
implicitRelative = leadingRelative || Expr.relative[" "],
|
4931
|
+
i = leadingRelative ? 1 : 0,
|
4932
|
+
|
4933
|
+
// The foundational matcher ensures that elements are reachable from top-level context(s)
|
4934
|
+
matchContext = addCombinator( function( elem ) {
|
4935
|
+
return elem === checkContext;
|
4936
|
+
}, implicitRelative, true ),
|
4937
|
+
matchAnyContext = addCombinator( function( elem ) {
|
4938
|
+
return indexOf.call( checkContext, elem ) > -1;
|
4939
|
+
}, implicitRelative, true ),
|
4940
|
+
matchers = [ function( elem, context, xml ) {
|
4941
|
+
return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
|
4942
|
+
(checkContext = context).nodeType ?
|
4943
|
+
matchContext( elem, context, xml ) :
|
4944
|
+
matchAnyContext( elem, context, xml ) );
|
4945
|
+
} ];
|
4946
|
+
|
4947
|
+
for ( ; i < len; i++ ) {
|
4948
|
+
if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
|
4949
|
+
matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
|
4950
|
+
} else {
|
4951
|
+
matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
|
4952
|
+
|
4953
|
+
// Return special upon seeing a positional matcher
|
4954
|
+
if ( matcher[ expando ] ) {
|
4955
|
+
// Find the next relative operator (if any) for proper handling
|
4956
|
+
j = ++i;
|
4957
|
+
for ( ; j < len; j++ ) {
|
4958
|
+
if ( Expr.relative[ tokens[j].type ] ) {
|
4959
|
+
break;
|
4960
|
+
}
|
4961
|
+
}
|
4962
|
+
return setMatcher(
|
4963
|
+
i > 1 && elementMatcher( matchers ),
|
4964
|
+
i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),
|
4965
|
+
matcher,
|
4966
|
+
i < j && matcherFromTokens( tokens.slice( i, j ) ),
|
4967
|
+
j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
|
4968
|
+
j < len && tokens.join("")
|
4969
|
+
);
|
4970
|
+
}
|
4971
|
+
matchers.push( matcher );
|
4972
|
+
}
|
4973
|
+
}
|
4974
|
+
|
4975
|
+
return elementMatcher( matchers );
|
4976
|
+
}
|
4977
|
+
|
4978
|
+
function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
4979
|
+
var bySet = setMatchers.length > 0,
|
4980
|
+
byElement = elementMatchers.length > 0,
|
4981
|
+
superMatcher = function( seed, context, xml, results, expandContext ) {
|
4982
|
+
var elem, j, matcher,
|
4983
|
+
setMatched = [],
|
4984
|
+
matchedCount = 0,
|
4985
|
+
i = "0",
|
4986
|
+
unmatched = seed && [],
|
4987
|
+
outermost = expandContext != null,
|
4988
|
+
contextBackup = outermostContext,
|
4989
|
+
// We must always have either seed elements or context
|
4990
|
+
elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
|
4991
|
+
// Nested matchers should use non-integer dirruns
|
4992
|
+
dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
|
4993
|
+
|
4994
|
+
if ( outermost ) {
|
4995
|
+
outermostContext = context !== document && context;
|
4996
|
+
cachedruns = superMatcher.el;
|
4997
|
+
}
|
4998
|
+
|
4999
|
+
// Add elements passing elementMatchers directly to results
|
5000
|
+
for ( ; (elem = elems[i]) != null; i++ ) {
|
5001
|
+
if ( byElement && elem ) {
|
5002
|
+
for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
|
5003
|
+
if ( matcher( elem, context, xml ) ) {
|
5004
|
+
results.push( elem );
|
5005
|
+
break;
|
5006
|
+
}
|
5007
|
+
}
|
5008
|
+
if ( outermost ) {
|
5009
|
+
dirruns = dirrunsUnique;
|
5010
|
+
cachedruns = ++superMatcher.el;
|
5011
|
+
}
|
5012
|
+
}
|
5013
|
+
|
5014
|
+
// Track unmatched elements for set filters
|
5015
|
+
if ( bySet ) {
|
5016
|
+
// They will have gone through all possible matchers
|
5017
|
+
if ( (elem = !matcher && elem) ) {
|
5018
|
+
matchedCount--;
|
5019
|
+
}
|
5020
|
+
|
5021
|
+
// Lengthen the array for every element, matched or not
|
5022
|
+
if ( seed ) {
|
5023
|
+
unmatched.push( elem );
|
5024
|
+
}
|
5025
|
+
}
|
5026
|
+
}
|
5027
|
+
|
5028
|
+
// Apply set filters to unmatched elements
|
5029
|
+
matchedCount += i;
|
5030
|
+
if ( bySet && i !== matchedCount ) {
|
5031
|
+
for ( j = 0; (matcher = setMatchers[j]); j++ ) {
|
5032
|
+
matcher( unmatched, setMatched, context, xml );
|
5033
|
+
}
|
5034
|
+
|
5035
|
+
if ( seed ) {
|
5036
|
+
// Reintegrate element matches to eliminate the need for sorting
|
5037
|
+
if ( matchedCount > 0 ) {
|
5038
|
+
while ( i-- ) {
|
5039
|
+
if ( !(unmatched[i] || setMatched[i]) ) {
|
5040
|
+
setMatched[i] = pop.call( results );
|
5041
|
+
}
|
5042
|
+
}
|
5043
|
+
}
|
5044
|
+
|
5045
|
+
// Discard index placeholder values to get only actual matches
|
5046
|
+
setMatched = condense( setMatched );
|
5047
|
+
}
|
5048
|
+
|
5049
|
+
// Add matches to results
|
5050
|
+
push.apply( results, setMatched );
|
5051
|
+
|
5052
|
+
// Seedless set matches succeeding multiple successful matchers stipulate sorting
|
5053
|
+
if ( outermost && !seed && setMatched.length > 0 &&
|
5054
|
+
( matchedCount + setMatchers.length ) > 1 ) {
|
5055
|
+
|
5056
|
+
Sizzle.uniqueSort( results );
|
5057
|
+
}
|
5058
|
+
}
|
5059
|
+
|
5060
|
+
// Override manipulation of globals by nested matchers
|
5061
|
+
if ( outermost ) {
|
5062
|
+
dirruns = dirrunsUnique;
|
5063
|
+
outermostContext = contextBackup;
|
5064
|
+
}
|
5065
|
+
|
5066
|
+
return unmatched;
|
5067
|
+
};
|
5068
|
+
|
5069
|
+
superMatcher.el = 0;
|
5070
|
+
return bySet ?
|
5071
|
+
markFunction( superMatcher ) :
|
5072
|
+
superMatcher;
|
5073
|
+
}
|
5074
|
+
|
5075
|
+
compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
|
5076
|
+
var i,
|
5077
|
+
setMatchers = [],
|
5078
|
+
elementMatchers = [],
|
5079
|
+
cached = compilerCache[ expando ][ selector + " " ];
|
5080
|
+
|
5081
|
+
if ( !cached ) {
|
5082
|
+
// Generate a function of recursive functions that can be used to check each element
|
5083
|
+
if ( !group ) {
|
5084
|
+
group = tokenize( selector );
|
5085
|
+
}
|
5086
|
+
i = group.length;
|
5087
|
+
while ( i-- ) {
|
5088
|
+
cached = matcherFromTokens( group[i] );
|
5089
|
+
if ( cached[ expando ] ) {
|
5090
|
+
setMatchers.push( cached );
|
5091
|
+
} else {
|
5092
|
+
elementMatchers.push( cached );
|
5093
|
+
}
|
5094
|
+
}
|
5095
|
+
|
5096
|
+
// Cache the compiled function
|
5097
|
+
cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
|
5098
|
+
}
|
5099
|
+
return cached;
|
5100
|
+
};
|
5101
|
+
|
5102
|
+
function multipleContexts( selector, contexts, results ) {
|
5103
|
+
var i = 0,
|
5104
|
+
len = contexts.length;
|
5105
|
+
for ( ; i < len; i++ ) {
|
5106
|
+
Sizzle( selector, contexts[i], results );
|
5107
|
+
}
|
5108
|
+
return results;
|
5109
|
+
}
|
5110
|
+
|
5111
|
+
function select( selector, context, results, seed, xml ) {
|
5112
|
+
var i, tokens, token, type, find,
|
5113
|
+
match = tokenize( selector ),
|
5114
|
+
j = match.length;
|
5115
|
+
|
5116
|
+
if ( !seed ) {
|
5117
|
+
// Try to minimize operations if there is only one group
|
5118
|
+
if ( match.length === 1 ) {
|
5119
|
+
|
5120
|
+
// Take a shortcut and set the context if the root selector is an ID
|
5121
|
+
tokens = match[0] = match[0].slice( 0 );
|
5122
|
+
if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
|
5123
|
+
context.nodeType === 9 && !xml &&
|
5124
|
+
Expr.relative[ tokens[1].type ] ) {
|
5125
|
+
|
5126
|
+
context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];
|
5127
|
+
if ( !context ) {
|
5128
|
+
return results;
|
5129
|
+
}
|
5130
|
+
|
5131
|
+
selector = selector.slice( tokens.shift().length );
|
5132
|
+
}
|
5133
|
+
|
5134
|
+
// Fetch a seed set for right-to-left matching
|
5135
|
+
for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
|
5136
|
+
token = tokens[i];
|
5137
|
+
|
5138
|
+
// Abort if we hit a combinator
|
5139
|
+
if ( Expr.relative[ (type = token.type) ] ) {
|
5140
|
+
break;
|
5141
|
+
}
|
5142
|
+
if ( (find = Expr.find[ type ]) ) {
|
5143
|
+
// Search, expanding context for leading sibling combinators
|
5144
|
+
if ( (seed = find(
|
5145
|
+
token.matches[0].replace( rbackslash, "" ),
|
5146
|
+
rsibling.test( tokens[0].type ) && context.parentNode || context,
|
5147
|
+
xml
|
5148
|
+
)) ) {
|
5149
|
+
|
5150
|
+
// If seed is empty or no tokens remain, we can return early
|
5151
|
+
tokens.splice( i, 1 );
|
5152
|
+
selector = seed.length && tokens.join("");
|
5153
|
+
if ( !selector ) {
|
5154
|
+
push.apply( results, slice.call( seed, 0 ) );
|
5155
|
+
return results;
|
5156
|
+
}
|
5157
|
+
|
5158
|
+
break;
|
5159
|
+
}
|
5160
|
+
}
|
5161
|
+
}
|
5162
|
+
}
|
5163
|
+
}
|
5164
|
+
|
5165
|
+
// Compile and execute a filtering function
|
5166
|
+
// Provide `match` to avoid retokenization if we modified the selector above
|
5167
|
+
compile( selector, match )(
|
5168
|
+
seed,
|
5169
|
+
context,
|
5170
|
+
xml,
|
5171
|
+
results,
|
5172
|
+
rsibling.test( selector )
|
5173
|
+
);
|
5174
|
+
return results;
|
5175
|
+
}
|
5176
|
+
|
5177
|
+
if ( document.querySelectorAll ) {
|
5178
|
+
(function() {
|
5179
|
+
var disconnectedMatch,
|
5180
|
+
oldSelect = select,
|
5181
|
+
rescape = /'|\\/g,
|
5182
|
+
rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
|
5183
|
+
|
5184
|
+
// qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA
|
5185
|
+
// A support test would require too much code (would include document ready)
|
5186
|
+
rbuggyQSA = [ ":focus" ],
|
5187
|
+
|
5188
|
+
// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
|
5189
|
+
// A support test would require too much code (would include document ready)
|
5190
|
+
// just skip matchesSelector for :active
|
5191
|
+
rbuggyMatches = [ ":active" ],
|
5192
|
+
matches = docElem.matchesSelector ||
|
5193
|
+
docElem.mozMatchesSelector ||
|
5194
|
+
docElem.webkitMatchesSelector ||
|
5195
|
+
docElem.oMatchesSelector ||
|
5196
|
+
docElem.msMatchesSelector;
|
5197
|
+
|
5198
|
+
// Build QSA regex
|
5199
|
+
// Regex strategy adopted from Diego Perini
|
5200
|
+
assert(function( div ) {
|
5201
|
+
// Select is set to empty string on purpose
|
5202
|
+
// This is to test IE's treatment of not explictly
|
5203
|
+
// setting a boolean content attribute,
|
5204
|
+
// since its presence should be enough
|
5205
|
+
// http://bugs.jquery.com/ticket/12359
|
5206
|
+
div.innerHTML = "<select><option selected=''></option></select>";
|
5207
|
+
|
5208
|
+
// IE8 - Some boolean attributes are not treated correctly
|
5209
|
+
if ( !div.querySelectorAll("[selected]").length ) {
|
5210
|
+
rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
|
5211
|
+
}
|
5212
|
+
|
5213
|
+
// Webkit/Opera - :checked should return selected option elements
|
5214
|
+
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
5215
|
+
// IE8 throws error here (do not put tests after this one)
|
5216
|
+
if ( !div.querySelectorAll(":checked").length ) {
|
5217
|
+
rbuggyQSA.push(":checked");
|
5218
|
+
}
|
5219
|
+
});
|
5220
|
+
|
5221
|
+
assert(function( div ) {
|
5222
|
+
|
5223
|
+
// Opera 10-12/IE9 - ^= $= *= and empty values
|
5224
|
+
// Should not select anything
|
5225
|
+
div.innerHTML = "<p test=''></p>";
|
5226
|
+
if ( div.querySelectorAll("[test^='']").length ) {
|
5227
|
+
rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
|
5228
|
+
}
|
5229
|
+
|
5230
|
+
// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
|
5231
|
+
// IE8 throws error here (do not put tests after this one)
|
5232
|
+
div.innerHTML = "<input type='hidden'/>";
|
5233
|
+
if ( !div.querySelectorAll(":enabled").length ) {
|
5234
|
+
rbuggyQSA.push(":enabled", ":disabled");
|
5235
|
+
}
|
5236
|
+
});
|
5237
|
+
|
5238
|
+
// rbuggyQSA always contains :focus, so no need for a length check
|
5239
|
+
rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") );
|
5240
|
+
|
5241
|
+
select = function( selector, context, results, seed, xml ) {
|
5242
|
+
// Only use querySelectorAll when not filtering,
|
5243
|
+
// when this is not xml,
|
5244
|
+
// and when no QSA bugs apply
|
5245
|
+
if ( !seed && !xml && !rbuggyQSA.test( selector ) ) {
|
5246
|
+
var groups, i,
|
5247
|
+
old = true,
|
5248
|
+
nid = expando,
|
5249
|
+
newContext = context,
|
5250
|
+
newSelector = context.nodeType === 9 && selector;
|
5251
|
+
|
5252
|
+
// qSA works strangely on Element-rooted queries
|
5253
|
+
// We can work around this by specifying an extra ID on the root
|
5254
|
+
// and working up from there (Thanks to Andrew Dupont for the technique)
|
5255
|
+
// IE 8 doesn't work on object elements
|
5256
|
+
if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
|
5257
|
+
groups = tokenize( selector );
|
5258
|
+
|
5259
|
+
if ( (old = context.getAttribute("id")) ) {
|
5260
|
+
nid = old.replace( rescape, "\\$&" );
|
5261
|
+
} else {
|
5262
|
+
context.setAttribute( "id", nid );
|
5263
|
+
}
|
5264
|
+
nid = "[id='" + nid + "'] ";
|
5265
|
+
|
5266
|
+
i = groups.length;
|
5267
|
+
while ( i-- ) {
|
5268
|
+
groups[i] = nid + groups[i].join("");
|
5269
|
+
}
|
5270
|
+
newContext = rsibling.test( selector ) && context.parentNode || context;
|
5271
|
+
newSelector = groups.join(",");
|
5272
|
+
}
|
5273
|
+
|
5274
|
+
if ( newSelector ) {
|
5275
|
+
try {
|
5276
|
+
push.apply( results, slice.call( newContext.querySelectorAll(
|
5277
|
+
newSelector
|
5278
|
+
), 0 ) );
|
5279
|
+
return results;
|
5280
|
+
} catch(qsaError) {
|
5281
|
+
} finally {
|
5282
|
+
if ( !old ) {
|
5283
|
+
context.removeAttribute("id");
|
5284
|
+
}
|
5285
|
+
}
|
5286
|
+
}
|
5287
|
+
}
|
5288
|
+
|
5289
|
+
return oldSelect( selector, context, results, seed, xml );
|
5290
|
+
};
|
5291
|
+
|
5292
|
+
if ( matches ) {
|
5293
|
+
assert(function( div ) {
|
5294
|
+
// Check to see if it's possible to do matchesSelector
|
5295
|
+
// on a disconnected node (IE 9)
|
5296
|
+
disconnectedMatch = matches.call( div, "div" );
|
5297
|
+
|
5298
|
+
// This should fail with an exception
|
5299
|
+
// Gecko does not error, returns false instead
|
5300
|
+
try {
|
5301
|
+
matches.call( div, "[test!='']:sizzle" );
|
5302
|
+
rbuggyMatches.push( "!=", pseudos );
|
5303
|
+
} catch ( e ) {}
|
5304
|
+
});
|
5305
|
+
|
5306
|
+
// rbuggyMatches always contains :active and :focus, so no need for a length check
|
5307
|
+
rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );
|
5308
|
+
|
5309
|
+
Sizzle.matchesSelector = function( elem, expr ) {
|
5310
|
+
// Make sure that attribute selectors are quoted
|
5311
|
+
expr = expr.replace( rattributeQuotes, "='$1']" );
|
5312
|
+
|
5313
|
+
// rbuggyMatches always contains :active, so no need for an existence check
|
5314
|
+
if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {
|
5315
|
+
try {
|
5316
|
+
var ret = matches.call( elem, expr );
|
5317
|
+
|
5318
|
+
// IE 9's matchesSelector returns false on disconnected nodes
|
5319
|
+
if ( ret || disconnectedMatch ||
|
5320
|
+
// As well, disconnected nodes are said to be in a document
|
5321
|
+
// fragment in IE 9
|
5322
|
+
elem.document && elem.document.nodeType !== 11 ) {
|
5323
|
+
return ret;
|
5324
|
+
}
|
5325
|
+
} catch(e) {}
|
5326
|
+
}
|
5327
|
+
|
5328
|
+
return Sizzle( expr, null, null, [ elem ] ).length > 0;
|
5329
|
+
};
|
5330
|
+
}
|
5331
|
+
})();
|
5332
|
+
}
|
5333
|
+
|
5334
|
+
// Deprecated
|
5335
|
+
Expr.pseudos["nth"] = Expr.pseudos["eq"];
|
5336
|
+
|
5337
|
+
// Back-compat
|
5338
|
+
function setFilters() {}
|
5339
|
+
Expr.filters = setFilters.prototype = Expr.pseudos;
|
5340
|
+
Expr.setFilters = new setFilters();
|
5341
|
+
|
5329
5342
|
// Override sizzle attribute retrieval
|
5330
5343
|
Sizzle.attr = jQuery.attr;
|
5331
5344
|
jQuery.find = Sizzle;
|
@@ -5335,9 +5348,9 @@ jQuery.unique = Sizzle.uniqueSort;
|
|
5335
5348
|
jQuery.text = Sizzle.getText;
|
5336
5349
|
jQuery.isXMLDoc = Sizzle.isXML;
|
5337
5350
|
jQuery.contains = Sizzle.contains;
|
5338
|
-
|
5339
|
-
|
5340
|
-
})( window );
|
5351
|
+
|
5352
|
+
|
5353
|
+
})( window );
|
5341
5354
|
var runtil = /Until$/,
|
5342
5355
|
rparentsprev = /^(?:parents|prev(?:Until|All))/,
|
5343
5356
|
isSimple = /^.[^:#\[\.,]*$/,
|
@@ -6533,7 +6546,7 @@ var curCSS, iframe, iframeDoc,
|
|
6533
6546
|
rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
|
6534
6547
|
rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
|
6535
6548
|
rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
|
6536
|
-
elemdisplay = {},
|
6549
|
+
elemdisplay = { BODY: "block" },
|
6537
6550
|
|
6538
6551
|
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
6539
6552
|
cssNormalTransform = {
|
@@ -6814,7 +6827,9 @@ if ( window.getComputedStyle ) {
|
|
6814
6827
|
|
6815
6828
|
if ( computed ) {
|
6816
6829
|
|
6817
|
-
|
6830
|
+
// getPropertyValue is only needed for .css('filter') in IE9, see #12537
|
6831
|
+
ret = computed.getPropertyValue( name ) || computed[ name ];
|
6832
|
+
|
6818
6833
|
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
|
6819
6834
|
ret = jQuery.style( elem, name );
|
6820
6835
|
}
|
@@ -7843,9 +7858,12 @@ jQuery.extend({
|
|
7843
7858
|
|
7844
7859
|
// A cross-domain request is in order when we have a protocol:host:port mismatch
|
7845
7860
|
if ( s.crossDomain == null ) {
|
7846
|
-
parts = rurl.exec( s.url.toLowerCase() )
|
7847
|
-
s.crossDomain =
|
7848
|
-
(
|
7861
|
+
parts = rurl.exec( s.url.toLowerCase() );
|
7862
|
+
s.crossDomain = !!( parts &&
|
7863
|
+
( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
|
7864
|
+
( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
|
7865
|
+
( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
|
7866
|
+
);
|
7849
7867
|
}
|
7850
7868
|
|
7851
7869
|
// Convert data if not already a string
|
@@ -8464,7 +8482,7 @@ if ( jQuery.support.ajax ) {
|
|
8464
8482
|
// on any attempt to access responseText (#11426)
|
8465
8483
|
try {
|
8466
8484
|
responses.text = xhr.responseText;
|
8467
|
-
} catch(
|
8485
|
+
} catch( e ) {
|
8468
8486
|
}
|
8469
8487
|
|
8470
8488
|
// Firefox throws an exception when accessing
|
@@ -8617,7 +8635,9 @@ function Animation( elem, properties, options ) {
|
|
8617
8635
|
tick = function() {
|
8618
8636
|
var currentTime = fxNow || createFxNow(),
|
8619
8637
|
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
|
8620
|
-
|
8638
|
+
// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
|
8639
|
+
temp = remaining / animation.duration || 0,
|
8640
|
+
percent = 1 - temp,
|
8621
8641
|
index = 0,
|
8622
8642
|
length = animation.tweens.length;
|
8623
8643
|
|
@@ -8769,7 +8789,7 @@ jQuery.Animation = jQuery.extend( Animation, {
|
|
8769
8789
|
});
|
8770
8790
|
|
8771
8791
|
function defaultPrefilter( elem, props, opts ) {
|
8772
|
-
var index, prop, value, length, dataShow, tween, hooks, oldfire,
|
8792
|
+
var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
|
8773
8793
|
anim = this,
|
8774
8794
|
style = elem.style,
|
8775
8795
|
orig = {},
|
@@ -8843,6 +8863,7 @@ function defaultPrefilter( elem, props, opts ) {
|
|
8843
8863
|
value = props[ index ];
|
8844
8864
|
if ( rfxtypes.exec( value ) ) {
|
8845
8865
|
delete props[ index ];
|
8866
|
+
toggle = toggle || value === "toggle";
|
8846
8867
|
if ( value === ( hidden ? "hide" : "show" ) ) {
|
8847
8868
|
continue;
|
8848
8869
|
}
|
@@ -8853,6 +8874,14 @@ function defaultPrefilter( elem, props, opts ) {
|
|
8853
8874
|
length = handled.length;
|
8854
8875
|
if ( length ) {
|
8855
8876
|
dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
|
8877
|
+
if ( "hidden" in dataShow ) {
|
8878
|
+
hidden = dataShow.hidden;
|
8879
|
+
}
|
8880
|
+
|
8881
|
+
// store state if its toggle - enables .stop().toggle() to "reverse"
|
8882
|
+
if ( toggle ) {
|
8883
|
+
dataShow.hidden = !hidden;
|
8884
|
+
}
|
8856
8885
|
if ( hidden ) {
|
8857
8886
|
jQuery( elem ).show();
|
8858
8887
|
} else {
|
@@ -9149,6 +9178,8 @@ jQuery.fx.tick = function() {
|
|
9149
9178
|
timers = jQuery.timers,
|
9150
9179
|
i = 0;
|
9151
9180
|
|
9181
|
+
fxNow = jQuery.now();
|
9182
|
+
|
9152
9183
|
for ( ; i < timers.length; i++ ) {
|
9153
9184
|
timer = timers[ i ];
|
9154
9185
|
// Checks the timer has not already been removed
|
@@ -9160,6 +9191,7 @@ jQuery.fx.tick = function() {
|
|
9160
9191
|
if ( !timers.length ) {
|
9161
9192
|
jQuery.fx.stop();
|
9162
9193
|
}
|
9194
|
+
fxNow = undefined;
|
9163
9195
|
};
|
9164
9196
|
|
9165
9197
|
jQuery.fx.timer = function( timer ) {
|