compass-jquery-plugin 0.3.2.2 → 0.3.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +5 -2
- data/VERSION.yml +1 -1
- data/lib/jquery/jqgrid/jqgrid.rb +2 -2
- data/templates/dynatree/jquery.dynatree.js +1 -1
- data/templates/dynatree/jquery.dynatree.min.js +1 -1
- data/templates/jqtouch/jquery/touch/jqtouch.scss +8 -4
- data/templates/jquery/jquery.js +1968 -866
- data/templates/jquery/jquery.min.js +166 -152
- data/templates/jquery/jquery.pngFix.js +101 -1
- data/templates/jquery/jquery.pngFix.min.js +5 -2
- data/templates/jquery/jquery/ui/pngFix/blank.gif +0 -0
- data/templates/jquery/manifest.rb +1 -0
- metadata +5 -4
data/README.md
CHANGED
@@ -5,12 +5,14 @@ Get gem from [Gemcutter][1].
|
|
5
5
|
|
6
6
|
Get source from [github][2].
|
7
7
|
|
8
|
+
Get example application showing everything live from [github][39].
|
9
|
+
|
8
10
|
Description
|
9
11
|
-----------
|
10
12
|
|
11
13
|
A Sass-based Meta-Framework for Compass that allows you to mix and match any of the following:
|
12
14
|
|
13
|
-
* jRails with jQuery 1.
|
15
|
+
* jRails with jQuery 1.5.0 and jQuery.UI 1.8.9 including themes
|
14
16
|
* jQuery Tools 1.2.5
|
15
17
|
* jquery.jstree.js V1.0rc3
|
16
18
|
* jquery.dynatree.js V1.0.2
|
@@ -286,7 +288,7 @@ Copyright © 2009-2011 Kosmas Schuetz. See LICENSE for details.
|
|
286
288
|
|
287
289
|
[1]: http://gemcutter.org/gems/compass-jquery-plugin
|
288
290
|
[2]: http://github.com/kosmas58/compass-jquery-plugin
|
289
|
-
[3]: http://
|
291
|
+
[3]: http://compass-style.org/docs/
|
290
292
|
[4]: http://groups.google.com/group/ruby-bundler/msg/e375ee77b225609f
|
291
293
|
[5]: http://code.google.com/p/ennerchi/
|
292
294
|
[6]: http://github.com/dturnbull/compass-jquery/tree/master
|
@@ -322,4 +324,5 @@ Copyright © 2009-2011 Kosmas Schuetz. See LICENSE for details.
|
|
322
324
|
[36]: http://github.com/cowboy/jquery-replacetext
|
323
325
|
[37]: http://github.com/cowboy/jquery-dotimeout
|
324
326
|
[38]: http://github.com/gamache/DSt
|
327
|
+
[39]: http://github.com/kosmas58/compass-jquery-plugin-sample
|
325
328
|
|
data/VERSION.yml
CHANGED
data/lib/jquery/jqgrid/jqgrid.rb
CHANGED
@@ -24,11 +24,11 @@ module ActionView
|
|
24
24
|
:add => 'false',
|
25
25
|
:delete => 'false',
|
26
26
|
:search => 'true',
|
27
|
-
:edit => 'false',
|
27
|
+
:edit => 'false',
|
28
28
|
:inline_edit => 'false',
|
29
29
|
:autowidth => 'false',
|
30
30
|
:hidegrid => 'false',
|
31
|
-
:rownumbers => 'false'
|
31
|
+
:rownumbers => 'false'
|
32
32
|
}.merge(options)
|
33
33
|
|
34
34
|
# Stringify options values
|
@@ -498,7 +498,7 @@ DynaTreeNode.prototype = {
|
|
498
498
|
return;
|
499
499
|
}
|
500
500
|
cmp = cmp || function(a, b) {
|
501
|
-
return a.data.title === b.data.title ? 0 : a.data.title > b.data.title;
|
501
|
+
return a.data.title === b.data.title ? 0 : a.data.title > b.data.title ? 1 : -1;
|
502
502
|
};
|
503
503
|
cl.sort(cmp);
|
504
504
|
if( deep ){
|
@@ -11,7 +11,7 @@ j.push(h.combinedExpanderPrefix+(this.bExpanded?"e":"c")+(e.isLazy&&this.childLi
|
|
11
11
|
f.fx&&c===e){d=f.fx.duration||200;g(this.ul).animate(f.fx,d)}else this.ul.style.display=this.bExpanded||!d?"":"none"}},getKeyPath:function(a){var b=[];this.visitParents(function(c){c.parent&&b.unshift(c.data.key)},!a);return"/"+b.join(this.tree.options.keyPathSeparator)},getParent:function(){return this.parent},getChildren:function(){return this.childList},hasChildren:function(){if(this.data.isLazy){if(this.childList===null||this.childList===undefined)return;else if(this.childList.length===0)return false;
|
12
12
|
else if(this.childList.length===1&&this.childList[0].isStatusNode())return;return true}return!!this.childList},isFirstSibling:function(){var a=this.parent;return!a||a.childList[0]===this},isLastSibling:function(){var a=this.parent;return!a||a.childList[a.childList.length-1]===this},getPrevSibling:function(){if(!this.parent)return null;for(var a=this.parent.childList,b=1,c=a.length;b<c;b++)if(a[b]===this)return a[b-1];return null},getNextSibling:function(){if(!this.parent)return null;for(var a=this.parent.childList,
|
13
13
|
b=0,c=a.length-1;b<c;b++)if(a[b]===this)return a[b+1];return null},isStatusNode:function(){return this.data.isStatusNode===true},isChildOf:function(a){return this.parent&&this.parent===a},isDescendantOf:function(a){if(!a)return false;for(var b=this.parent;b;){if(b===a)return true;b=b.parent}return false},countChildren:function(){var a=this.childList;if(!a)return 0;for(var b=a.length,c=0,d=b;c<d;c++)b+=a[c].countChildren();return b},sortChildren:function(a,b){var c=this.childList;if(c){a=a||function(f,
|
14
|
-
h){return f.data.title===h.data.title?0:f.data.title>h.data.title};c.sort(a);if(b)for(var d=0,e=c.length;d<e;d++)c[d].childList&&c[d].sortChildren(a,"$norender$");b!=="$norender$"&&this.render()}},_setStatusNode:function(a){var b=this.childList?this.childList[0]:null;if(a)if(b){a.isStatusNode=true;a.key="_statusNode";b.data=a;b.render()}else{a.isStatusNode=true;a.key="_statusNode";this.addChild(a)}else if(b&&b.isStatusNode()){try{this.ul&&this.ul.removeChild(b.li)}catch(c){}if(this.childList.length===
|
14
|
+
h){return f.data.title===h.data.title?0:f.data.title>h.data.title?1:-1};c.sort(a);if(b)for(var d=0,e=c.length;d<e;d++)c[d].childList&&c[d].sortChildren(a,"$norender$");b!=="$norender$"&&this.render()}},_setStatusNode:function(a){var b=this.childList?this.childList[0]:null;if(a)if(b){a.isStatusNode=true;a.key="_statusNode";b.data=a;b.render()}else{a.isStatusNode=true;a.key="_statusNode";this.addChild(a)}else if(b&&b.isStatusNode()){try{this.ul&&this.ul.removeChild(b.li)}catch(c){}if(this.childList.length===
|
15
15
|
1)this.childList=[];else this.childList.shift()}},setLazyNodeStatus:function(a,b){var c=b&&b.tooltip?b.tooltip:null,d=b&&b.info?" ("+b.info+")":"";switch(a){case DTNodeStatus_Ok:this._setStatusNode(null);g(this.span).removeClass(this.tree.options.classNames.nodeLoading);this.isLoading=false;this.render();if(this.tree.options.autoFocus)this===this.tree.tnRoot&&this.childList&&this.childList.length>0?this.childList[0].focus():this.focus();break;case DTNodeStatus_Loading:this.isLoading=true;g(this.span).addClass(this.tree.options.classNames.nodeLoading);
|
16
16
|
this.parent||this._setStatusNode({title:this.tree.options.strings.loading+d,tooltip:c,addClass:this.tree.options.classNames.nodeWait});break;case DTNodeStatus_Error:this.isLoading=false;this._setStatusNode({title:this.tree.options.strings.loadError+d,tooltip:c,addClass:this.tree.options.classNames.nodeError});break;default:throw"Bad LazyNodeStatus: '"+a+"'.";}},_parentList:function(a,b){for(var c=[],d=b?this:this.parent;d;){if(a||d.parent)c.unshift(d);d=d.parent}return c},getLevel:function(){for(var a=
|
17
17
|
0,b=this.parent;b;){a++;b=b.parent}return a},_getTypeForOuterNodeEvent:function(a){var b=this.tree.options.classNames,c=a.target;if(c.className.indexOf(b.node)<0)return null;var d=a.pageX-c.offsetLeft;a=a.pageY-c.offsetTop;for(var e=0,f=c.childNodes.length;e<f;e++){var h=c.childNodes[e],i=h.offsetLeft-c.offsetLeft,j=h.offsetTop-c.offsetTop,k=h.clientWidth,r=h.clientHeight;if(d>=i&&d<=i+k&&a>=j&&a<=j+r)if(h.className==b.title)return"title";else if(h.className==b.expander)return"expander";else if(h.className==
|
@@ -174,9 +174,11 @@ body {
|
|
174
174
|
|
175
175
|
@-webkit-keyframes slideLeftOut {
|
176
176
|
0% {
|
177
|
-
-webkit-transform: translateX(0px);
|
177
|
+
-webkit-transform: translateX(0px);
|
178
|
+
opacity: 1; }
|
178
179
|
100% {
|
179
|
-
-webkit-transform: translateX(-100%);
|
180
|
+
-webkit-transform: translateX(-100%);
|
181
|
+
opacity: 0; } }
|
180
182
|
|
181
183
|
|
182
184
|
/* Slide Right */
|
@@ -190,9 +192,11 @@ body {
|
|
190
192
|
|
191
193
|
@-webkit-keyframes slideRightOut {
|
192
194
|
0% {
|
193
|
-
-webkit-transform: translateX(0);
|
195
|
+
-webkit-transform: translateX(0);
|
196
|
+
opacity: 1; }
|
194
197
|
100% {
|
195
|
-
-webkit-transform: translateX(100%);
|
198
|
+
-webkit-transform: translateX(100%);
|
199
|
+
opacity: 0; } }
|
196
200
|
|
197
201
|
|
198
202
|
/* Slide Up */
|
data/templates/jquery/jquery.js
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
* jQuery JavaScript Library v@VERSION
|
3
3
|
* http://jquery.com/
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2011, John Resig
|
6
6
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
7
7
|
* http://jquery.org/license
|
8
8
|
*
|
9
9
|
* Includes Sizzle.js
|
10
10
|
* http://sizzlejs.com/
|
11
|
-
* Copyright
|
11
|
+
* Copyright 2011, The Dojo Foundation
|
12
12
|
* Released under the MIT, BSD, and GPL Licenses.
|
13
13
|
*
|
14
|
-
* Date:
|
14
|
+
* Date: @DATE
|
15
15
|
*/
|
16
16
|
(function( window, undefined ) {
|
17
17
|
|
@@ -24,7 +24,7 @@ var jQuery = (function() {
|
|
24
24
|
// Define a local copy of jQuery
|
25
25
|
var jQuery = function( selector, context ) {
|
26
26
|
// The jQuery object is actually just the init constructor 'enhanced'
|
27
|
-
return new jQuery.fn.init( selector, context );
|
27
|
+
return new jQuery.fn.init( selector, context, rootjQuery );
|
28
28
|
},
|
29
29
|
|
30
30
|
// Map over jQuery in case of overwrite
|
@@ -40,20 +40,13 @@ var jQuery = function( selector, context ) {
|
|
40
40
|
// (both of which we optimize for)
|
41
41
|
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
|
42
42
|
|
43
|
-
// Is it a simple selector
|
44
|
-
isSimple = /^.[^:#\[\.,]*$/,
|
45
|
-
|
46
43
|
// Check if a string has a non-whitespace character in it
|
47
44
|
rnotwhite = /\S/,
|
48
|
-
rwhite = /\s/,
|
49
45
|
|
50
46
|
// Used for trimming whitespace
|
51
47
|
trimLeft = /^\s+/,
|
52
48
|
trimRight = /\s+$/,
|
53
49
|
|
54
|
-
// Check for non-word characters
|
55
|
-
rnonword = /\W/,
|
56
|
-
|
57
50
|
// Check for digits
|
58
51
|
rdigit = /\d/,
|
59
52
|
|
@@ -77,12 +70,23 @@ var jQuery = function( selector, context ) {
|
|
77
70
|
|
78
71
|
// For matching the engine and version of the browser
|
79
72
|
browserMatch,
|
80
|
-
|
73
|
+
|
81
74
|
// Has the ready events already been bound?
|
82
75
|
readyBound = false,
|
83
|
-
|
84
|
-
// The
|
85
|
-
readyList
|
76
|
+
|
77
|
+
// The deferred used on DOM ready
|
78
|
+
readyList,
|
79
|
+
|
80
|
+
// Promise methods (with equivalent for invert)
|
81
|
+
promiseMethods = {
|
82
|
+
then: 0, // will be overwritten for invert
|
83
|
+
done: "fail",
|
84
|
+
fail: "done",
|
85
|
+
isResolved: "isRejected",
|
86
|
+
isRejected: "isResolved",
|
87
|
+
promise: "invert",
|
88
|
+
invert: "promise"
|
89
|
+
},
|
86
90
|
|
87
91
|
// The ready event handler
|
88
92
|
DOMContentLoaded,
|
@@ -94,12 +98,13 @@ var jQuery = function( selector, context ) {
|
|
94
98
|
slice = Array.prototype.slice,
|
95
99
|
trim = String.prototype.trim,
|
96
100
|
indexOf = Array.prototype.indexOf,
|
97
|
-
|
101
|
+
|
98
102
|
// [[Class]] -> type pairs
|
99
103
|
class2type = {};
|
100
104
|
|
101
105
|
jQuery.fn = jQuery.prototype = {
|
102
|
-
|
106
|
+
constructor: jQuery,
|
107
|
+
init: function( selector, context, rootjQuery ) {
|
103
108
|
var match, elem, ret, doc;
|
104
109
|
|
105
110
|
// Handle $(""), $(null), or $(undefined)
|
@@ -113,7 +118,7 @@ jQuery.fn = jQuery.prototype = {
|
|
113
118
|
this.length = 1;
|
114
119
|
return this;
|
115
120
|
}
|
116
|
-
|
121
|
+
|
117
122
|
// The body element only exists once, optimize finding it
|
118
123
|
if ( selector === "body" && !context && document.body ) {
|
119
124
|
this.context = document;
|
@@ -133,6 +138,7 @@ jQuery.fn = jQuery.prototype = {
|
|
133
138
|
|
134
139
|
// HANDLE: $(html) -> $(array)
|
135
140
|
if ( match[1] ) {
|
141
|
+
context = context instanceof jQuery ? context[0] : context;
|
136
142
|
doc = (context ? context.ownerDocument || context : document);
|
137
143
|
|
138
144
|
// If a single string is passed in and it's a single tag
|
@@ -150,11 +156,11 @@ jQuery.fn = jQuery.prototype = {
|
|
150
156
|
|
151
157
|
} else {
|
152
158
|
ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
|
153
|
-
selector = (ret.cacheable ? ret.fragment
|
159
|
+
selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
|
154
160
|
}
|
155
|
-
|
161
|
+
|
156
162
|
return jQuery.merge( this, selector );
|
157
|
-
|
163
|
+
|
158
164
|
// HANDLE: $("#id")
|
159
165
|
} else {
|
160
166
|
elem = document.getElementById( match[2] );
|
@@ -178,13 +184,6 @@ jQuery.fn = jQuery.prototype = {
|
|
178
184
|
return this;
|
179
185
|
}
|
180
186
|
|
181
|
-
// HANDLE: $("TAG")
|
182
|
-
} else if ( !context && !rnonword.test( selector ) ) {
|
183
|
-
this.selector = selector;
|
184
|
-
this.context = document;
|
185
|
-
selector = document.getElementsByTagName( selector );
|
186
|
-
return jQuery.merge( this, selector );
|
187
|
-
|
188
187
|
// HANDLE: $(expr, $(...))
|
189
188
|
} else if ( !context || context.jquery ) {
|
190
189
|
return (context || rootjQuery).find( selector );
|
@@ -192,7 +191,7 @@ jQuery.fn = jQuery.prototype = {
|
|
192
191
|
// HANDLE: $(expr, context)
|
193
192
|
// (which is just equivalent to: $(context).find(expr)
|
194
193
|
} else {
|
195
|
-
return
|
194
|
+
return this.constructor( context ).find( selector );
|
196
195
|
}
|
197
196
|
|
198
197
|
// HANDLE: $(function)
|
@@ -236,18 +235,18 @@ jQuery.fn = jQuery.prototype = {
|
|
236
235
|
this.toArray() :
|
237
236
|
|
238
237
|
// Return just the object
|
239
|
-
( num < 0 ? this.
|
238
|
+
( num < 0 ? this[ this.length + num ] : this[ num ] );
|
240
239
|
},
|
241
240
|
|
242
241
|
// Take an array of elements and push it onto the stack
|
243
242
|
// (returning the new matched element set)
|
244
243
|
pushStack: function( elems, name, selector ) {
|
245
244
|
// Build a new jQuery matched element set
|
246
|
-
var ret =
|
245
|
+
var ret = this.constructor();
|
247
246
|
|
248
247
|
if ( jQuery.isArray( elems ) ) {
|
249
248
|
push.apply( ret, elems );
|
250
|
-
|
249
|
+
|
251
250
|
} else {
|
252
251
|
jQuery.merge( ret, elems );
|
253
252
|
}
|
@@ -273,25 +272,17 @@ jQuery.fn = jQuery.prototype = {
|
|
273
272
|
each: function( callback, args ) {
|
274
273
|
return jQuery.each( this, callback, args );
|
275
274
|
},
|
276
|
-
|
275
|
+
|
277
276
|
ready: function( fn ) {
|
278
277
|
// Attach the listeners
|
279
278
|
jQuery.bindReady();
|
280
279
|
|
281
|
-
//
|
282
|
-
|
283
|
-
// Execute the function immediately
|
284
|
-
fn.call( document, jQuery );
|
285
|
-
|
286
|
-
// Otherwise, remember the function for later
|
287
|
-
} else if ( readyList ) {
|
288
|
-
// Add the function to the wait list
|
289
|
-
readyList.push( fn );
|
290
|
-
}
|
280
|
+
// Add the callback
|
281
|
+
readyList.done( fn );
|
291
282
|
|
292
283
|
return this;
|
293
284
|
},
|
294
|
-
|
285
|
+
|
295
286
|
eq: function( i ) {
|
296
287
|
return i === -1 ?
|
297
288
|
this.slice( i ) :
|
@@ -316,9 +307,9 @@ jQuery.fn = jQuery.prototype = {
|
|
316
307
|
return callback.call( elem, i, elem );
|
317
308
|
}));
|
318
309
|
},
|
319
|
-
|
310
|
+
|
320
311
|
end: function() {
|
321
|
-
return this.prevObject ||
|
312
|
+
return this.prevObject || this.constructor(null);
|
322
313
|
},
|
323
314
|
|
324
315
|
// For internal use only.
|
@@ -405,14 +396,14 @@ jQuery.extend({
|
|
405
396
|
|
406
397
|
return jQuery;
|
407
398
|
},
|
408
|
-
|
399
|
+
|
409
400
|
// Is the DOM ready to be used? Set to true once it occurs.
|
410
401
|
isReady: false,
|
411
402
|
|
412
403
|
// A counter to track how many items to wait for before
|
413
404
|
// the ready event fires. See #6781
|
414
405
|
readyWait: 1,
|
415
|
-
|
406
|
+
|
416
407
|
// Handle when the DOM is ready
|
417
408
|
ready: function( wait ) {
|
418
409
|
// A third-party is pushing the ready event forwards
|
@@ -436,27 +427,15 @@ jQuery.extend({
|
|
436
427
|
}
|
437
428
|
|
438
429
|
// If there are functions bound, to execute
|
439
|
-
|
440
|
-
// Execute all of them
|
441
|
-
var fn,
|
442
|
-
i = 0,
|
443
|
-
ready = readyList;
|
444
|
-
|
445
|
-
// Reset the list of functions
|
446
|
-
readyList = null;
|
447
|
-
|
448
|
-
while ( (fn = ready[ i++ ]) ) {
|
449
|
-
fn.call( document, jQuery );
|
450
|
-
}
|
430
|
+
readyList.resolveWith( document, [ jQuery ] );
|
451
431
|
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
}
|
432
|
+
// Trigger any bound ready events
|
433
|
+
if ( jQuery.fn.trigger ) {
|
434
|
+
jQuery( document ).trigger( "ready" ).unbind( "ready" );
|
456
435
|
}
|
457
436
|
}
|
458
437
|
},
|
459
|
-
|
438
|
+
|
460
439
|
bindReady: function() {
|
461
440
|
if ( readyBound ) {
|
462
441
|
return;
|
@@ -475,7 +454,7 @@ jQuery.extend({
|
|
475
454
|
if ( document.addEventListener ) {
|
476
455
|
// Use the handy event callback
|
477
456
|
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
|
478
|
-
|
457
|
+
|
479
458
|
// A fallback to window.onload, that will always work
|
480
459
|
window.addEventListener( "load", jQuery.ready, false );
|
481
460
|
|
@@ -484,7 +463,7 @@ jQuery.extend({
|
|
484
463
|
// ensure firing before onload,
|
485
464
|
// maybe late but safe also for iframes
|
486
465
|
document.attachEvent("onreadystatechange", DOMContentLoaded);
|
487
|
-
|
466
|
+
|
488
467
|
// A fallback to window.onload, that will always work
|
489
468
|
window.attachEvent( "onload", jQuery.ready );
|
490
469
|
|
@@ -535,20 +514,20 @@ jQuery.extend({
|
|
535
514
|
if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
|
536
515
|
return false;
|
537
516
|
}
|
538
|
-
|
517
|
+
|
539
518
|
// Not own constructor property must be Object
|
540
519
|
if ( obj.constructor &&
|
541
520
|
!hasOwn.call(obj, "constructor") &&
|
542
521
|
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
|
543
522
|
return false;
|
544
523
|
}
|
545
|
-
|
524
|
+
|
546
525
|
// Own properties are enumerated firstly, so to speed up,
|
547
526
|
// if last one is own, then all properties are own.
|
548
|
-
|
527
|
+
|
549
528
|
var key;
|
550
529
|
for ( key in obj ) {}
|
551
|
-
|
530
|
+
|
552
531
|
return key === undefined || hasOwn.call( obj, key );
|
553
532
|
},
|
554
533
|
|
@@ -558,11 +537,11 @@ jQuery.extend({
|
|
558
537
|
}
|
559
538
|
return true;
|
560
539
|
},
|
561
|
-
|
540
|
+
|
562
541
|
error: function( msg ) {
|
563
542
|
throw msg;
|
564
543
|
},
|
565
|
-
|
544
|
+
|
566
545
|
parseJSON: function( data ) {
|
567
546
|
if ( typeof data !== "string" || !data ) {
|
568
547
|
return null;
|
@@ -570,7 +549,7 @@ jQuery.extend({
|
|
570
549
|
|
571
550
|
// Make sure leading/trailing whitespace is removed (IE can't handle it)
|
572
551
|
data = jQuery.trim( data );
|
573
|
-
|
552
|
+
|
574
553
|
// Make sure the incoming data is actual JSON
|
575
554
|
// Logic borrowed from http://json.org/json2.js
|
576
555
|
if ( rvalidchars.test(data.replace(rvalidescape, "@")
|
@@ -587,6 +566,28 @@ jQuery.extend({
|
|
587
566
|
}
|
588
567
|
},
|
589
568
|
|
569
|
+
// Cross-browser xml parsing
|
570
|
+
// (xml & tmp used internally)
|
571
|
+
parseXML: function( data , xml , tmp ) {
|
572
|
+
|
573
|
+
if ( window.DOMParser ) { // Standard
|
574
|
+
tmp = new DOMParser();
|
575
|
+
xml = tmp.parseFromString( data , "text/xml" );
|
576
|
+
} else { // IE
|
577
|
+
xml = new ActiveXObject( "Microsoft.XMLDOM" );
|
578
|
+
xml.async = "false";
|
579
|
+
xml.loadXML( data );
|
580
|
+
}
|
581
|
+
|
582
|
+
tmp = xml.documentElement;
|
583
|
+
|
584
|
+
if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
|
585
|
+
jQuery.error( "Invalid XML: " + data );
|
586
|
+
}
|
587
|
+
|
588
|
+
return xml;
|
589
|
+
},
|
590
|
+
|
590
591
|
noop: function() {},
|
591
592
|
|
592
593
|
// Evalulates a script in a global context
|
@@ -594,12 +595,10 @@ jQuery.extend({
|
|
594
595
|
if ( data && rnotwhite.test(data) ) {
|
595
596
|
// Inspired by code by Andrea Giammarchi
|
596
597
|
// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
|
597
|
-
var head = document.getElementsByTagName("head")[0] || document.documentElement,
|
598
|
-
script = document.createElement("script");
|
599
|
-
|
600
|
-
script.type = "text/javascript";
|
598
|
+
var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement,
|
599
|
+
script = document.createElement( "script" );
|
601
600
|
|
602
|
-
if ( jQuery.support.scriptEval ) {
|
601
|
+
if ( jQuery.support.scriptEval() ) {
|
603
602
|
script.appendChild( document.createTextNode( data ) );
|
604
603
|
} else {
|
605
604
|
script.text = data;
|
@@ -712,7 +711,7 @@ jQuery.extend({
|
|
712
711
|
for ( var l = second.length; j < l; j++ ) {
|
713
712
|
first[ i++ ] = second[ j ];
|
714
713
|
}
|
715
|
-
|
714
|
+
|
716
715
|
} else {
|
717
716
|
while ( second[j] !== undefined ) {
|
718
717
|
first[ i++ ] = second[ j++ ];
|
@@ -754,6 +753,7 @@ jQuery.extend({
|
|
754
753
|
}
|
755
754
|
}
|
756
755
|
|
756
|
+
// Flatten any nested arrays
|
757
757
|
return ret.concat.apply( [], ret );
|
758
758
|
},
|
759
759
|
|
@@ -792,7 +792,7 @@ jQuery.extend({
|
|
792
792
|
// The value/s can be optionally by executed if its a function
|
793
793
|
access: function( elems, key, value, exec, fn, pass ) {
|
794
794
|
var length = elems.length;
|
795
|
-
|
795
|
+
|
796
796
|
// Setting many attributes
|
797
797
|
if ( typeof key === "object" ) {
|
798
798
|
for ( var k in key ) {
|
@@ -800,19 +800,19 @@ jQuery.extend({
|
|
800
800
|
}
|
801
801
|
return elems;
|
802
802
|
}
|
803
|
-
|
803
|
+
|
804
804
|
// Setting one attribute
|
805
805
|
if ( value !== undefined ) {
|
806
806
|
// Optionally, function values get executed if exec is true
|
807
807
|
exec = !pass && exec && jQuery.isFunction(value);
|
808
|
-
|
808
|
+
|
809
809
|
for ( var i = 0; i < length; i++ ) {
|
810
810
|
fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
|
811
811
|
}
|
812
|
-
|
812
|
+
|
813
813
|
return elems;
|
814
814
|
}
|
815
|
-
|
815
|
+
|
816
816
|
// Getting an attribute
|
817
817
|
return length ? fn( elems[0], key ) : undefined;
|
818
818
|
},
|
@@ -821,6 +821,173 @@ jQuery.extend({
|
|
821
821
|
return (new Date()).getTime();
|
822
822
|
},
|
823
823
|
|
824
|
+
// Create a simple deferred (one callbacks list)
|
825
|
+
_Deferred: function() {
|
826
|
+
var // callbacks list
|
827
|
+
callbacks = [],
|
828
|
+
// stored [ context , args ]
|
829
|
+
fired,
|
830
|
+
// to avoid firing when already doing so
|
831
|
+
firing,
|
832
|
+
// flag to know if the deferred has been cancelled
|
833
|
+
cancelled,
|
834
|
+
// the deferred itself
|
835
|
+
deferred = {
|
836
|
+
|
837
|
+
// done( f1, f2, ...)
|
838
|
+
done: function() {
|
839
|
+
if ( !cancelled ) {
|
840
|
+
var args = arguments,
|
841
|
+
i,
|
842
|
+
length,
|
843
|
+
elem,
|
844
|
+
type,
|
845
|
+
_fired;
|
846
|
+
if ( fired ) {
|
847
|
+
_fired = fired;
|
848
|
+
fired = 0;
|
849
|
+
}
|
850
|
+
for ( i = 0, length = args.length; i < length; i++ ) {
|
851
|
+
elem = args[ i ];
|
852
|
+
type = jQuery.type( elem );
|
853
|
+
if ( type === "array" ) {
|
854
|
+
deferred.done.apply( deferred, elem );
|
855
|
+
} else if ( type === "function" ) {
|
856
|
+
callbacks.push( elem );
|
857
|
+
}
|
858
|
+
}
|
859
|
+
if ( _fired ) {
|
860
|
+
deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
|
861
|
+
}
|
862
|
+
}
|
863
|
+
return this;
|
864
|
+
},
|
865
|
+
|
866
|
+
// resolve with given context and args
|
867
|
+
resolveWith: function( context, args ) {
|
868
|
+
if ( !cancelled && !fired && !firing ) {
|
869
|
+
firing = 1;
|
870
|
+
try {
|
871
|
+
while( callbacks[ 0 ] ) {
|
872
|
+
callbacks.shift().apply( context, args );
|
873
|
+
}
|
874
|
+
}
|
875
|
+
finally {
|
876
|
+
fired = [ context, args ];
|
877
|
+
firing = 0;
|
878
|
+
}
|
879
|
+
}
|
880
|
+
return this;
|
881
|
+
},
|
882
|
+
|
883
|
+
// resolve with this as context and given arguments
|
884
|
+
resolve: function() {
|
885
|
+
deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this, arguments );
|
886
|
+
return this;
|
887
|
+
},
|
888
|
+
|
889
|
+
// Has this deferred been resolved?
|
890
|
+
isResolved: function() {
|
891
|
+
return !!( firing || fired );
|
892
|
+
},
|
893
|
+
|
894
|
+
// Cancel
|
895
|
+
cancel: function() {
|
896
|
+
cancelled = 1;
|
897
|
+
callbacks = [];
|
898
|
+
return this;
|
899
|
+
}
|
900
|
+
};
|
901
|
+
|
902
|
+
return deferred;
|
903
|
+
},
|
904
|
+
|
905
|
+
// Full fledged deferred (two callbacks list)
|
906
|
+
Deferred: function( func ) {
|
907
|
+
var deferred = jQuery._Deferred(),
|
908
|
+
failDeferred = jQuery._Deferred(),
|
909
|
+
promise,
|
910
|
+
invert;
|
911
|
+
// Add errorDeferred methods, then, promise and invert
|
912
|
+
jQuery.extend( deferred, {
|
913
|
+
then: function( doneCallbacks, failCallbacks ) {
|
914
|
+
deferred.done( doneCallbacks ).fail( failCallbacks );
|
915
|
+
return this;
|
916
|
+
},
|
917
|
+
fail: failDeferred.done,
|
918
|
+
rejectWith: failDeferred.resolveWith,
|
919
|
+
reject: failDeferred.resolve,
|
920
|
+
isRejected: failDeferred.isResolved,
|
921
|
+
// Get a promise for this deferred
|
922
|
+
// If obj is provided, the promise aspect is added to the object
|
923
|
+
promise: function( obj ) {
|
924
|
+
if ( obj == null ) {
|
925
|
+
if ( promise ) {
|
926
|
+
return promise;
|
927
|
+
}
|
928
|
+
promise = obj = {};
|
929
|
+
}
|
930
|
+
for( var methodName in promiseMethods ) {
|
931
|
+
obj[ methodName ] = deferred[ methodName ];
|
932
|
+
}
|
933
|
+
return obj;
|
934
|
+
},
|
935
|
+
// Get the invert promise for this deferred
|
936
|
+
// If obj is provided, the invert promise aspect is added to the object
|
937
|
+
invert: function( obj ) {
|
938
|
+
if ( obj == null ) {
|
939
|
+
if ( invert ) {
|
940
|
+
return invert;
|
941
|
+
}
|
942
|
+
invert = obj = {};
|
943
|
+
}
|
944
|
+
for( var methodName in promiseMethods ) {
|
945
|
+
obj[ methodName ] = promiseMethods[ methodName ] && deferred[ promiseMethods[methodName] ];
|
946
|
+
}
|
947
|
+
obj.then = invert.then || function( doneCallbacks, failCallbacks ) {
|
948
|
+
deferred.done( failCallbacks ).fail( doneCallbacks );
|
949
|
+
return this;
|
950
|
+
};
|
951
|
+
return obj;
|
952
|
+
}
|
953
|
+
} );
|
954
|
+
// Make sure only one callback list will be used
|
955
|
+
deferred.then( failDeferred.cancel, deferred.cancel );
|
956
|
+
// Unexpose cancel
|
957
|
+
delete deferred.cancel;
|
958
|
+
// Call given func if any
|
959
|
+
if ( func ) {
|
960
|
+
func.call( deferred, deferred );
|
961
|
+
}
|
962
|
+
return deferred;
|
963
|
+
},
|
964
|
+
|
965
|
+
// Deferred helper
|
966
|
+
when: function( object ) {
|
967
|
+
var args = arguments,
|
968
|
+
length = args.length,
|
969
|
+
deferred = length <= 1 && object && jQuery.isFunction( object.promise ) ?
|
970
|
+
object :
|
971
|
+
jQuery.Deferred(),
|
972
|
+
promise = deferred.promise(),
|
973
|
+
resolveArray;
|
974
|
+
|
975
|
+
if ( length > 1 ) {
|
976
|
+
resolveArray = new Array( length );
|
977
|
+
jQuery.each( args, function( index, element ) {
|
978
|
+
jQuery.when( element ).then( function( value ) {
|
979
|
+
resolveArray[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value;
|
980
|
+
if( ! --length ) {
|
981
|
+
deferred.resolveWith( promise, resolveArray );
|
982
|
+
}
|
983
|
+
}, deferred.reject );
|
984
|
+
} );
|
985
|
+
} else if ( deferred !== object ) {
|
986
|
+
deferred.resolve( object );
|
987
|
+
}
|
988
|
+
return promise;
|
989
|
+
},
|
990
|
+
|
824
991
|
// Use of jQuery.browser is frowned upon.
|
825
992
|
// More details: http://docs.jquery.com/Utilities/jQuery.browser
|
826
993
|
uaMatch: function( ua ) {
|
@@ -835,9 +1002,33 @@ jQuery.extend({
|
|
835
1002
|
return { browser: match[1] || "", version: match[2] || "0" };
|
836
1003
|
},
|
837
1004
|
|
1005
|
+
sub: function() {
|
1006
|
+
function jQuerySubclass( selector, context ) {
|
1007
|
+
return new jQuerySubclass.fn.init( selector, context );
|
1008
|
+
}
|
1009
|
+
jQuery.extend( true, jQuerySubclass, this );
|
1010
|
+
jQuerySubclass.superclass = this;
|
1011
|
+
jQuerySubclass.fn = jQuerySubclass.prototype = this();
|
1012
|
+
jQuerySubclass.fn.constructor = jQuerySubclass;
|
1013
|
+
jQuerySubclass.subclass = this.subclass;
|
1014
|
+
jQuerySubclass.fn.init = function init( selector, context ) {
|
1015
|
+
if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) {
|
1016
|
+
context = jQuerySubclass(context);
|
1017
|
+
}
|
1018
|
+
|
1019
|
+
return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass );
|
1020
|
+
};
|
1021
|
+
jQuerySubclass.fn.init.prototype = jQuerySubclass.fn;
|
1022
|
+
var rootjQuerySubclass = jQuerySubclass(document);
|
1023
|
+
return jQuerySubclass;
|
1024
|
+
},
|
1025
|
+
|
838
1026
|
browser: {}
|
839
1027
|
});
|
840
1028
|
|
1029
|
+
// Create readyList deferred
|
1030
|
+
readyList = jQuery._Deferred();
|
1031
|
+
|
841
1032
|
// Populate the class2type map
|
842
1033
|
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
|
843
1034
|
class2type[ "[object " + name + "]" ] = name.toLowerCase();
|
@@ -860,9 +1051,8 @@ if ( indexOf ) {
|
|
860
1051
|
};
|
861
1052
|
}
|
862
1053
|
|
863
|
-
//
|
864
|
-
|
865
|
-
if ( !rwhite.test( "\xA0" ) ) {
|
1054
|
+
// IE doesn't match non-breaking spaces with \s
|
1055
|
+
if ( rnotwhite.test( "\xA0" ) ) {
|
866
1056
|
trimLeft = /^[\s\xA0]+/;
|
867
1057
|
trimRight = /[\s\xA0]+$/;
|
868
1058
|
}
|
@@ -918,10 +1108,7 @@ return (window.jQuery = window.$ = jQuery);
|
|
918
1108
|
|
919
1109
|
jQuery.support = {};
|
920
1110
|
|
921
|
-
var
|
922
|
-
script = document.createElement("script"),
|
923
|
-
div = document.createElement("div"),
|
924
|
-
id = "script" + jQuery.now();
|
1111
|
+
var div = document.createElement("div");
|
925
1112
|
|
926
1113
|
div.style.display = "none";
|
927
1114
|
div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
@@ -978,7 +1165,7 @@ return (window.jQuery = window.$ = jQuery);
|
|
978
1165
|
deleteExpando: true,
|
979
1166
|
optDisabled: false,
|
980
1167
|
checkClone: false,
|
981
|
-
|
1168
|
+
_scriptEval: null,
|
982
1169
|
noCloneEvent: true,
|
983
1170
|
boxModel: null,
|
984
1171
|
inlineBlockNeedsLayout: false,
|
@@ -991,32 +1178,46 @@ return (window.jQuery = window.$ = jQuery);
|
|
991
1178
|
select.disabled = true;
|
992
1179
|
jQuery.support.optDisabled = !opt.disabled;
|
993
1180
|
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
1181
|
+
jQuery.support.scriptEval = function() {
|
1182
|
+
if ( jQuery.support._scriptEval === null ) {
|
1183
|
+
var root = document.documentElement,
|
1184
|
+
script = document.createElement("script"),
|
1185
|
+
id = "script" + jQuery.now();
|
998
1186
|
|
999
|
-
|
1187
|
+
script.type = "text/javascript";
|
1188
|
+
try {
|
1189
|
+
script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
|
1190
|
+
} catch(e) {}
|
1000
1191
|
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1192
|
+
root.insertBefore( script, root.firstChild );
|
1193
|
+
|
1194
|
+
// Make sure that the execution of code works by injecting a script
|
1195
|
+
// tag with appendChild/createTextNode
|
1196
|
+
// (IE doesn't support this, fails, and uses .text instead)
|
1197
|
+
if ( window[ id ] ) {
|
1198
|
+
jQuery.support._scriptEval = true;
|
1199
|
+
delete window[ id ];
|
1200
|
+
} else {
|
1201
|
+
jQuery.support._scriptEval = false;
|
1202
|
+
}
|
1203
|
+
|
1204
|
+
root.removeChild( script );
|
1205
|
+
// release memory in IE
|
1206
|
+
root = script = id = null;
|
1207
|
+
}
|
1208
|
+
|
1209
|
+
return jQuery.support._scriptEval;
|
1210
|
+
};
|
1008
1211
|
|
1009
1212
|
// Test to see if it's possible to delete an expando from an element
|
1010
1213
|
// Fails in Internet Explorer
|
1011
1214
|
try {
|
1012
|
-
delete
|
1215
|
+
delete div.test;
|
1013
1216
|
|
1014
1217
|
} catch(e) {
|
1015
1218
|
jQuery.support.deleteExpando = false;
|
1016
1219
|
}
|
1017
1220
|
|
1018
|
-
root.removeChild( script );
|
1019
|
-
|
1020
1221
|
if ( div.attachEvent && div.fireEvent ) {
|
1021
1222
|
div.attachEvent("onclick", function click() {
|
1022
1223
|
// Cloning a node shouldn't copy over any
|
@@ -1039,10 +1240,16 @@ return (window.jQuery = window.$ = jQuery);
|
|
1039
1240
|
// Figure out if the W3C box model works as expected
|
1040
1241
|
// document.body must exist before we can do this
|
1041
1242
|
jQuery(function() {
|
1042
|
-
var div = document.createElement("div")
|
1043
|
-
|
1243
|
+
var div = document.createElement("div"),
|
1244
|
+
body = document.getElementsByTagName("body")[0];
|
1245
|
+
|
1246
|
+
// Frameset documents with no body should not run this code
|
1247
|
+
if ( !body ) {
|
1248
|
+
return;
|
1249
|
+
}
|
1044
1250
|
|
1045
|
-
|
1251
|
+
div.style.width = div.style.paddingLeft = "1px";
|
1252
|
+
body.appendChild( div );
|
1046
1253
|
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
|
1047
1254
|
|
1048
1255
|
if ( "zoom" in div.style ) {
|
@@ -1061,7 +1268,7 @@ return (window.jQuery = window.$ = jQuery);
|
|
1061
1268
|
jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
|
1062
1269
|
}
|
1063
1270
|
|
1064
|
-
div.innerHTML = "<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";
|
1271
|
+
div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
|
1065
1272
|
var tds = div.getElementsByTagName("td");
|
1066
1273
|
|
1067
1274
|
// Check if table cells still have offsetWidth/Height when they are set
|
@@ -1081,7 +1288,7 @@ return (window.jQuery = window.$ = jQuery);
|
|
1081
1288
|
jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0;
|
1082
1289
|
div.innerHTML = "";
|
1083
1290
|
|
1084
|
-
|
1291
|
+
body.removeChild( div ).style.display = "none";
|
1085
1292
|
div = tds = null;
|
1086
1293
|
});
|
1087
1294
|
|
@@ -1091,6 +1298,14 @@ return (window.jQuery = window.$ = jQuery);
|
|
1091
1298
|
var el = document.createElement("div");
|
1092
1299
|
eventName = "on" + eventName;
|
1093
1300
|
|
1301
|
+
// We only care about the case where non-standard event systems
|
1302
|
+
// are used, namely in IE. Short-circuiting here helps us to
|
1303
|
+
// avoid an eval call (in setAttribute) which can cause CSP
|
1304
|
+
// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
|
1305
|
+
if ( !el.attachEvent ) {
|
1306
|
+
return true;
|
1307
|
+
}
|
1308
|
+
|
1094
1309
|
var isSupported = (eventName in el);
|
1095
1310
|
if ( !isSupported ) {
|
1096
1311
|
el.setAttribute(eventName, "return;");
|
@@ -1105,15 +1320,14 @@ return (window.jQuery = window.$ = jQuery);
|
|
1105
1320
|
jQuery.support.changeBubbles = eventSupported("change");
|
1106
1321
|
|
1107
1322
|
// release memory in IE
|
1108
|
-
|
1323
|
+
div = all = a = null;
|
1109
1324
|
})();
|
1110
1325
|
})( jQuery );
|
1111
1326
|
|
1112
1327
|
|
1113
1328
|
(function( jQuery ) {
|
1114
1329
|
|
1115
|
-
var
|
1116
|
-
rbrace = /^(?:\{.*\}|\[.*\])$/;
|
1330
|
+
var rbrace = /^(?:\{.*\}|\[.*\])$/;
|
1117
1331
|
|
1118
1332
|
jQuery.extend({
|
1119
1333
|
cache: {},
|
@@ -1121,8 +1335,9 @@ jQuery.extend({
|
|
1121
1335
|
// Please use with caution
|
1122
1336
|
uuid: 0,
|
1123
1337
|
|
1124
|
-
// Unique for each copy of jQuery on the page
|
1125
|
-
|
1338
|
+
// Unique for each copy of jQuery on the page
|
1339
|
+
// Non-digits removed to match rinlinejQuery
|
1340
|
+
expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
|
1126
1341
|
|
1127
1342
|
// The following elements throw uncatchable exceptions if you
|
1128
1343
|
// attempt to add expando properties to them.
|
@@ -1133,103 +1348,171 @@ jQuery.extend({
|
|
1133
1348
|
"applet": true
|
1134
1349
|
},
|
1135
1350
|
|
1136
|
-
|
1351
|
+
hasData: function( elem ) {
|
1352
|
+
elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
|
1353
|
+
|
1354
|
+
return !!elem && !jQuery.isEmptyObject(elem);
|
1355
|
+
},
|
1356
|
+
|
1357
|
+
data: function( elem, name, data, pvt /* Internal Use Only */ ) {
|
1137
1358
|
if ( !jQuery.acceptData( elem ) ) {
|
1138
1359
|
return;
|
1139
1360
|
}
|
1140
1361
|
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1362
|
+
var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
|
1363
|
+
|
1364
|
+
// We have to handle DOM nodes and JS objects differently because IE6-7
|
1365
|
+
// can't GC object references properly across the DOM-JS boundary
|
1366
|
+
isNode = elem.nodeType,
|
1144
1367
|
|
1145
|
-
|
1146
|
-
|
1147
|
-
cache = jQuery.cache,
|
1368
|
+
// Only DOM nodes need the global jQuery cache; JS object data is
|
1369
|
+
// attached directly to the object so GC can occur automatically
|
1370
|
+
cache = isNode ? jQuery.cache : elem,
|
1148
1371
|
|
1149
|
-
|
1372
|
+
// Only defining an ID for JS objects if its cache already exists allows
|
1373
|
+
// the code to shortcut on the same path as a DOM node with no cache
|
1374
|
+
id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
|
1375
|
+
|
1376
|
+
// Avoid doing any more work than we need to when trying to get data on an
|
1377
|
+
// object that has no data at all
|
1378
|
+
if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
|
1150
1379
|
return;
|
1151
1380
|
}
|
1152
1381
|
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1382
|
+
if ( !id ) {
|
1383
|
+
// Only DOM nodes need a new unique ID for each element since their data
|
1384
|
+
// ends up in the global cache
|
1385
|
+
if ( isNode ) {
|
1386
|
+
elem[ jQuery.expando ] = id = ++jQuery.uuid;
|
1387
|
+
} else {
|
1388
|
+
id = jQuery.expando;
|
1389
|
+
}
|
1390
|
+
}
|
1156
1391
|
|
1157
|
-
|
1158
|
-
|
1159
|
-
elem[ jQuery.expando ] = id = ++jQuery.uuid;
|
1392
|
+
if ( !cache[ id ] ) {
|
1393
|
+
cache[ id ] = {};
|
1160
1394
|
}
|
1161
1395
|
|
1162
|
-
//
|
1163
|
-
//
|
1396
|
+
// An object can be passed to jQuery.data instead of a key/value pair; this gets
|
1397
|
+
// shallow copied over onto the existing cache
|
1164
1398
|
if ( typeof name === "object" ) {
|
1165
|
-
if (
|
1399
|
+
if ( pvt ) {
|
1400
|
+
cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
|
1401
|
+
} else {
|
1166
1402
|
cache[ id ] = jQuery.extend(cache[ id ], name);
|
1403
|
+
}
|
1404
|
+
}
|
1167
1405
|
|
1168
|
-
|
1169
|
-
|
1406
|
+
thisCache = cache[ id ];
|
1407
|
+
|
1408
|
+
// Internal jQuery data is stored in a separate object inside the object's data
|
1409
|
+
// cache in order to avoid key collisions between internal data and user-defined
|
1410
|
+
// data
|
1411
|
+
if ( pvt ) {
|
1412
|
+
if ( !thisCache[ internalKey ] ) {
|
1413
|
+
thisCache[ internalKey ] = {};
|
1170
1414
|
}
|
1171
1415
|
|
1172
|
-
|
1173
|
-
cache[ id ] = {};
|
1416
|
+
thisCache = thisCache[ internalKey ];
|
1174
1417
|
}
|
1175
1418
|
|
1176
|
-
thisCache = isNode ? cache[ id ] : cache;
|
1177
|
-
|
1178
|
-
// Prevent overriding the named cache with undefined values
|
1179
1419
|
if ( data !== undefined ) {
|
1180
1420
|
thisCache[ name ] = data;
|
1181
1421
|
}
|
1182
1422
|
|
1183
|
-
|
1423
|
+
// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
|
1424
|
+
// not attempt to inspect the internal events object using jQuery.data, as this
|
1425
|
+
// internal data object is undocumented and subject to change.
|
1426
|
+
if ( name === "events" && !thisCache[name] ) {
|
1427
|
+
return thisCache[ internalKey ] && thisCache[ internalKey ].events;
|
1428
|
+
}
|
1429
|
+
|
1430
|
+
return getByName ? thisCache[ name ] : thisCache;
|
1184
1431
|
},
|
1185
1432
|
|
1186
|
-
removeData: function( elem, name ) {
|
1433
|
+
removeData: function( elem, name, pvt /* Internal Use Only */ ) {
|
1187
1434
|
if ( !jQuery.acceptData( elem ) ) {
|
1188
1435
|
return;
|
1189
1436
|
}
|
1190
1437
|
|
1191
|
-
|
1192
|
-
windowData :
|
1193
|
-
elem;
|
1438
|
+
var internalKey = jQuery.expando, isNode = elem.nodeType,
|
1194
1439
|
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1440
|
+
// See jQuery.data for more information
|
1441
|
+
cache = isNode ? jQuery.cache : elem,
|
1442
|
+
|
1443
|
+
// See jQuery.data for more information
|
1444
|
+
id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
|
1445
|
+
|
1446
|
+
// If there is already no cache entry for this object, there is no
|
1447
|
+
// purpose in continuing
|
1448
|
+
if ( !cache[ id ] ) {
|
1449
|
+
return;
|
1450
|
+
}
|
1199
1451
|
|
1200
|
-
// If we want to remove a specific section of the element's data
|
1201
1452
|
if ( name ) {
|
1453
|
+
var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
|
1454
|
+
|
1202
1455
|
if ( thisCache ) {
|
1203
|
-
// Remove the section of cache data
|
1204
1456
|
delete thisCache[ name ];
|
1205
1457
|
|
1206
|
-
// If
|
1207
|
-
|
1208
|
-
|
1458
|
+
// If there is no data left in the cache, we want to continue
|
1459
|
+
// and let the cache object itself get destroyed
|
1460
|
+
if ( !jQuery.isEmptyObject(thisCache) ) {
|
1461
|
+
return;
|
1209
1462
|
}
|
1210
1463
|
}
|
1464
|
+
}
|
1465
|
+
|
1466
|
+
// See jQuery.data for more information
|
1467
|
+
if ( pvt ) {
|
1468
|
+
delete cache[ id ][ internalKey ];
|
1469
|
+
|
1470
|
+
// Don't destroy the parent cache unless the internal data object
|
1471
|
+
// had been the only thing left in it
|
1472
|
+
if ( !jQuery.isEmptyObject(cache[ id ]) ) {
|
1473
|
+
return;
|
1474
|
+
}
|
1475
|
+
}
|
1476
|
+
|
1477
|
+
var internalCache = cache[ id ][ internalKey ];
|
1211
1478
|
|
1212
|
-
//
|
1479
|
+
// Browsers that fail expando deletion also refuse to delete expandos on
|
1480
|
+
// the window, but it will allow it on all other JS objects; other browsers
|
1481
|
+
// don't care
|
1482
|
+
if ( jQuery.support.deleteExpando || cache != window ) {
|
1483
|
+
delete cache[ id ];
|
1213
1484
|
} else {
|
1214
|
-
|
1215
|
-
|
1485
|
+
cache[ id ] = null;
|
1486
|
+
}
|
1216
1487
|
|
1488
|
+
// We destroyed the entire user cache at once because it's faster than
|
1489
|
+
// iterating through each key, but we need to continue to persist internal
|
1490
|
+
// data if it existed
|
1491
|
+
if ( internalCache ) {
|
1492
|
+
cache[ id ] = {};
|
1493
|
+
cache[ id ][ internalKey ] = internalCache;
|
1494
|
+
|
1495
|
+
// Otherwise, we need to eliminate the expando on the node to avoid
|
1496
|
+
// false lookups in the cache for entries that no longer exist
|
1497
|
+
} else if ( isNode ) {
|
1498
|
+
// IE does not allow us to delete expando properties from nodes,
|
1499
|
+
// nor does it have a removeAttribute function on Document nodes;
|
1500
|
+
// we must handle all of these cases
|
1501
|
+
if ( jQuery.support.deleteExpando ) {
|
1502
|
+
delete elem[ jQuery.expando ];
|
1217
1503
|
} else if ( elem.removeAttribute ) {
|
1218
1504
|
elem.removeAttribute( jQuery.expando );
|
1219
|
-
|
1220
|
-
// Completely remove the data cache
|
1221
|
-
} else if ( isNode ) {
|
1222
|
-
delete cache[ id ];
|
1223
|
-
|
1224
|
-
// Remove all fields from the object
|
1225
1505
|
} else {
|
1226
|
-
|
1227
|
-
delete elem[ n ];
|
1228
|
-
}
|
1506
|
+
elem[ jQuery.expando ] = null;
|
1229
1507
|
}
|
1230
1508
|
}
|
1231
1509
|
},
|
1232
1510
|
|
1511
|
+
// For internal use only.
|
1512
|
+
_data: function( elem, name, data ) {
|
1513
|
+
return jQuery.data( elem, name, data, true );
|
1514
|
+
},
|
1515
|
+
|
1233
1516
|
// A method for determining if a DOM node can handle the data expando
|
1234
1517
|
acceptData: function( elem ) {
|
1235
1518
|
if ( elem.nodeName ) {
|
@@ -1250,15 +1533,17 @@ jQuery.fn.extend({
|
|
1250
1533
|
|
1251
1534
|
if ( typeof key === "undefined" ) {
|
1252
1535
|
if ( this.length ) {
|
1253
|
-
var attr = this[0].attributes, name;
|
1254
1536
|
data = jQuery.data( this[0] );
|
1255
1537
|
|
1256
|
-
|
1257
|
-
|
1538
|
+
if ( this[0].nodeType === 1 ) {
|
1539
|
+
var attr = this[0].attributes, name;
|
1540
|
+
for ( var i = 0, l = attr.length; i < l; i++ ) {
|
1541
|
+
name = attr[i].name;
|
1258
1542
|
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1543
|
+
if ( name.indexOf( "data-" ) === 0 ) {
|
1544
|
+
name = name.substr( 5 );
|
1545
|
+
dataAttr( this[0], name, data[ name ] );
|
1546
|
+
}
|
1262
1547
|
}
|
1263
1548
|
}
|
1264
1549
|
}
|
@@ -1345,7 +1630,7 @@ jQuery.extend({
|
|
1345
1630
|
}
|
1346
1631
|
|
1347
1632
|
type = (type || "fx") + "queue";
|
1348
|
-
var q = jQuery.
|
1633
|
+
var q = jQuery._data( elem, type );
|
1349
1634
|
|
1350
1635
|
// Speed up dequeue by getting out quickly if this is just a lookup
|
1351
1636
|
if ( !data ) {
|
@@ -1353,7 +1638,7 @@ jQuery.extend({
|
|
1353
1638
|
}
|
1354
1639
|
|
1355
1640
|
if ( !q || jQuery.isArray(data) ) {
|
1356
|
-
q = jQuery.
|
1641
|
+
q = jQuery._data( elem, type, jQuery.makeArray(data) );
|
1357
1642
|
|
1358
1643
|
} else {
|
1359
1644
|
q.push( data );
|
@@ -1384,6 +1669,10 @@ jQuery.extend({
|
|
1384
1669
|
jQuery.dequeue(elem, type);
|
1385
1670
|
});
|
1386
1671
|
}
|
1672
|
+
|
1673
|
+
if ( !queue.length ) {
|
1674
|
+
jQuery.removeData( elem, type + "queue", true );
|
1675
|
+
}
|
1387
1676
|
}
|
1388
1677
|
});
|
1389
1678
|
|
@@ -1435,7 +1724,7 @@ jQuery.fn.extend({
|
|
1435
1724
|
|
1436
1725
|
(function( jQuery ) {
|
1437
1726
|
|
1438
|
-
var rclass = /[\n\t]/g,
|
1727
|
+
var rclass = /[\n\t\r]/g,
|
1439
1728
|
rspaces = /\s+/,
|
1440
1729
|
rreturn = /\r/g,
|
1441
1730
|
rspecialurl = /^(?:href|src|style)$/,
|
@@ -1568,11 +1857,11 @@ jQuery.fn.extend({
|
|
1568
1857
|
} else if ( type === "undefined" || type === "boolean" ) {
|
1569
1858
|
if ( this.className ) {
|
1570
1859
|
// store className if set
|
1571
|
-
jQuery.
|
1860
|
+
jQuery._data( this, "__className__", this.className );
|
1572
1861
|
}
|
1573
1862
|
|
1574
1863
|
// toggle whole className
|
1575
|
-
this.className = this.className || value === false ? "" : jQuery.
|
1864
|
+
this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
|
1576
1865
|
}
|
1577
1866
|
});
|
1578
1867
|
},
|
@@ -1617,7 +1906,7 @@ jQuery.fn.extend({
|
|
1617
1906
|
var option = options[ i ];
|
1618
1907
|
|
1619
1908
|
// Don't return options that are disabled or in a disabled optgroup
|
1620
|
-
if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
|
1909
|
+
if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
|
1621
1910
|
(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
|
1622
1911
|
|
1623
1912
|
// Get the specific value for the option
|
@@ -1640,7 +1929,6 @@ jQuery.fn.extend({
|
|
1640
1929
|
if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
|
1641
1930
|
return elem.getAttribute("value") === null ? "on" : elem.value;
|
1642
1931
|
}
|
1643
|
-
|
1644
1932
|
|
1645
1933
|
// Everything else, we just grab the value
|
1646
1934
|
return (elem.value || "").replace(rreturn, "");
|
@@ -1706,10 +1994,10 @@ jQuery.extend({
|
|
1706
1994
|
height: true,
|
1707
1995
|
offset: true
|
1708
1996
|
},
|
1709
|
-
|
1997
|
+
|
1710
1998
|
attr: function( elem, name, value, pass ) {
|
1711
|
-
// don't set attributes on text and
|
1712
|
-
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
|
1999
|
+
// don't get/set attributes on text, comment and attribute nodes
|
2000
|
+
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) {
|
1713
2001
|
return undefined;
|
1714
2002
|
}
|
1715
2003
|
|
@@ -1724,88 +2012,96 @@ jQuery.extend({
|
|
1724
2012
|
// Try to normalize/fix the name
|
1725
2013
|
name = notxml && jQuery.props[ name ] || name;
|
1726
2014
|
|
1727
|
-
//
|
1728
|
-
|
2015
|
+
// Only do all the following if this is a node (faster for style)
|
2016
|
+
if ( elem.nodeType === 1 ) {
|
2017
|
+
// These attributes require special treatment
|
2018
|
+
var special = rspecialurl.test( name );
|
2019
|
+
|
2020
|
+
// Safari mis-reports the default selected property of an option
|
2021
|
+
// Accessing the parent's selectedIndex property fixes it
|
2022
|
+
if ( name === "selected" && !jQuery.support.optSelected ) {
|
2023
|
+
var parent = elem.parentNode;
|
2024
|
+
if ( parent ) {
|
2025
|
+
parent.selectedIndex;
|
2026
|
+
|
2027
|
+
// Make sure that it also works with optgroups, see #5701
|
2028
|
+
if ( parent.parentNode ) {
|
2029
|
+
parent.parentNode.selectedIndex;
|
2030
|
+
}
|
2031
|
+
}
|
2032
|
+
}
|
2033
|
+
|
2034
|
+
// If applicable, access the attribute via the DOM 0 way
|
2035
|
+
// 'in' checks fail in Blackberry 4.7 #6931
|
2036
|
+
if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
|
2037
|
+
if ( set ) {
|
2038
|
+
// We can't allow the type property to be changed (since it causes problems in IE)
|
2039
|
+
if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
|
2040
|
+
jQuery.error( "type property can't be changed" );
|
2041
|
+
}
|
1729
2042
|
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
1734
|
-
if ( parent ) {
|
1735
|
-
parent.selectedIndex;
|
2043
|
+
if ( value === null ) {
|
2044
|
+
if ( elem.nodeType === 1 ) {
|
2045
|
+
elem.removeAttribute( name );
|
2046
|
+
}
|
1736
2047
|
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
2048
|
+
} else {
|
2049
|
+
elem[ name ] = value;
|
2050
|
+
}
|
1740
2051
|
}
|
1741
|
-
}
|
1742
|
-
}
|
1743
2052
|
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
if ( set ) {
|
1748
|
-
// We can't allow the type property to be changed (since it causes problems in IE)
|
1749
|
-
if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
|
1750
|
-
jQuery.error( "type property can't be changed" );
|
2053
|
+
// browsers index elements by id/name on forms, give priority to attributes.
|
2054
|
+
if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
|
2055
|
+
return elem.getAttributeNode( name ).nodeValue;
|
1751
2056
|
}
|
1752
2057
|
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
2058
|
+
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
|
2059
|
+
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
2060
|
+
if ( name === "tabIndex" ) {
|
2061
|
+
var attributeNode = elem.getAttributeNode( "tabIndex" );
|
1757
2062
|
|
1758
|
-
|
1759
|
-
|
2063
|
+
return attributeNode && attributeNode.specified ?
|
2064
|
+
attributeNode.value :
|
2065
|
+
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
|
2066
|
+
0 :
|
2067
|
+
undefined;
|
1760
2068
|
}
|
1761
|
-
}
|
1762
2069
|
|
1763
|
-
|
1764
|
-
if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
|
1765
|
-
return elem.getAttributeNode( name ).nodeValue;
|
2070
|
+
return elem[ name ];
|
1766
2071
|
}
|
1767
2072
|
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
2073
|
+
if ( !jQuery.support.style && notxml && name === "style" ) {
|
2074
|
+
if ( set ) {
|
2075
|
+
elem.style.cssText = "" + value;
|
2076
|
+
}
|
1772
2077
|
|
1773
|
-
return
|
1774
|
-
attributeNode.value :
|
1775
|
-
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
|
1776
|
-
0 :
|
1777
|
-
undefined;
|
2078
|
+
return elem.style.cssText;
|
1778
2079
|
}
|
1779
2080
|
|
1780
|
-
return elem[ name ];
|
1781
|
-
}
|
1782
|
-
|
1783
|
-
if ( !jQuery.support.style && notxml && name === "style" ) {
|
1784
2081
|
if ( set ) {
|
1785
|
-
|
2082
|
+
// convert the value to a string (all browsers do this but IE) see #1070
|
2083
|
+
elem.setAttribute( name, "" + value );
|
1786
2084
|
}
|
1787
2085
|
|
1788
|
-
return
|
1789
|
-
|
2086
|
+
// Ensure that missing attributes return undefined
|
2087
|
+
// Blackberry 4.7 returns "" from getAttribute #6938
|
2088
|
+
if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
|
2089
|
+
return undefined;
|
2090
|
+
}
|
1790
2091
|
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
2092
|
+
var attr = !jQuery.support.hrefNormalized && notxml && special ?
|
2093
|
+
// Some attributes require a special call on IE
|
2094
|
+
elem.getAttribute( name, 2 ) :
|
2095
|
+
elem.getAttribute( name );
|
1795
2096
|
|
1796
|
-
|
1797
|
-
|
1798
|
-
if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
|
1799
|
-
return undefined;
|
2097
|
+
// Non-existent attributes return null, we normalize to undefined
|
2098
|
+
return attr === null ? undefined : attr;
|
1800
2099
|
}
|
1801
|
-
|
1802
|
-
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1806
|
-
|
1807
|
-
// Non-existent attributes return null, we normalize to undefined
|
1808
|
-
return attr === null ? undefined : attr;
|
2100
|
+
// Handle everything which isn't a DOM element node
|
2101
|
+
if ( set ) {
|
2102
|
+
elem[ name ] = value;
|
2103
|
+
}
|
2104
|
+
return elem[ name ];
|
1809
2105
|
}
|
1810
2106
|
});
|
1811
2107
|
|
@@ -1822,7 +2118,7 @@ var rnamespaces = /\.(.*)$/,
|
|
1822
2118
|
fcleanup = function( nm ) {
|
1823
2119
|
return nm.replace(rescape, "\\$&");
|
1824
2120
|
},
|
1825
|
-
|
2121
|
+
eventKey = "events";
|
1826
2122
|
|
1827
2123
|
/*
|
1828
2124
|
* A number of helper functions used for managing events.
|
@@ -1864,7 +2160,7 @@ jQuery.event = {
|
|
1864
2160
|
}
|
1865
2161
|
|
1866
2162
|
// Init the element's event structure
|
1867
|
-
var elemData = jQuery.
|
2163
|
+
var elemData = jQuery._data( elem );
|
1868
2164
|
|
1869
2165
|
// If no elemData is found then we must be trying to bind to one of the
|
1870
2166
|
// banned noData elements
|
@@ -1872,12 +2168,9 @@ jQuery.event = {
|
|
1872
2168
|
return;
|
1873
2169
|
}
|
1874
2170
|
|
1875
|
-
|
1876
|
-
// Fixes bug #7150.
|
1877
|
-
var eventKey = elem.nodeType ? "events" : "__events__",
|
1878
|
-
events = elemData[ eventKey ],
|
2171
|
+
var events = elemData[ eventKey ],
|
1879
2172
|
eventHandle = elemData.handle;
|
1880
|
-
|
2173
|
+
|
1881
2174
|
if ( typeof events === "function" ) {
|
1882
2175
|
// On plain objects events is a fn that holds the the data
|
1883
2176
|
// which prevents this data from being JSON serialized
|
@@ -1957,9 +2250,9 @@ jQuery.event = {
|
|
1957
2250
|
}
|
1958
2251
|
}
|
1959
2252
|
}
|
1960
|
-
|
1961
|
-
if ( special.add ) {
|
1962
|
-
special.add.call( elem, handleObj );
|
2253
|
+
|
2254
|
+
if ( special.add ) {
|
2255
|
+
special.add.call( elem, handleObj );
|
1963
2256
|
|
1964
2257
|
if ( !handleObj.handler.guid ) {
|
1965
2258
|
handleObj.handler.guid = handler.guid;
|
@@ -1991,14 +2284,13 @@ jQuery.event = {
|
|
1991
2284
|
}
|
1992
2285
|
|
1993
2286
|
var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
|
1994
|
-
|
1995
|
-
elemData = jQuery.data( elem ),
|
2287
|
+
elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
|
1996
2288
|
events = elemData && elemData[ eventKey ];
|
1997
2289
|
|
1998
2290
|
if ( !elemData || !events ) {
|
1999
2291
|
return;
|
2000
2292
|
}
|
2001
|
-
|
2293
|
+
|
2002
2294
|
if ( typeof events === "function" ) {
|
2003
2295
|
elemData = events;
|
2004
2296
|
events = events.events;
|
@@ -2036,7 +2328,7 @@ jQuery.event = {
|
|
2036
2328
|
namespaces = type.split(".");
|
2037
2329
|
type = namespaces.shift();
|
2038
2330
|
|
2039
|
-
namespace = new RegExp("(^|\\.)" +
|
2331
|
+
namespace = new RegExp("(^|\\.)" +
|
2040
2332
|
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
|
2041
2333
|
}
|
2042
2334
|
|
@@ -2104,10 +2396,10 @@ jQuery.event = {
|
|
2104
2396
|
delete elemData.handle;
|
2105
2397
|
|
2106
2398
|
if ( typeof elemData === "function" ) {
|
2107
|
-
jQuery.removeData( elem, eventKey );
|
2399
|
+
jQuery.removeData( elem, eventKey, true );
|
2108
2400
|
|
2109
2401
|
} else if ( jQuery.isEmptyObject( elemData ) ) {
|
2110
|
-
jQuery.removeData( elem );
|
2402
|
+
jQuery.removeData( elem, undefined, true );
|
2111
2403
|
}
|
2112
2404
|
}
|
2113
2405
|
},
|
@@ -2139,9 +2431,16 @@ jQuery.event = {
|
|
2139
2431
|
|
2140
2432
|
// Only trigger if we've ever bound an event for it
|
2141
2433
|
if ( jQuery.event.global[ type ] ) {
|
2434
|
+
// XXX This code smells terrible. event.js should not be directly
|
2435
|
+
// inspecting the data cache
|
2142
2436
|
jQuery.each( jQuery.cache, function() {
|
2143
|
-
|
2144
|
-
|
2437
|
+
// internalKey variable is just used to make it easier to find
|
2438
|
+
// and potentially change this stuff later; currently it just
|
2439
|
+
// points to jQuery.expando
|
2440
|
+
var internalKey = jQuery.expando,
|
2441
|
+
internalCache = this[ internalKey ];
|
2442
|
+
if ( internalCache && internalCache.events && internalCache.events[type] ) {
|
2443
|
+
jQuery.event.trigger( event, data, internalCache.handle.elem );
|
2145
2444
|
}
|
2146
2445
|
});
|
2147
2446
|
}
|
@@ -2167,8 +2466,8 @@ jQuery.event = {
|
|
2167
2466
|
|
2168
2467
|
// Trigger the event, it is assumed that "handle" is a function
|
2169
2468
|
var handle = elem.nodeType ?
|
2170
|
-
jQuery.
|
2171
|
-
(jQuery.
|
2469
|
+
jQuery._data( elem, "handle" ) :
|
2470
|
+
(jQuery._data( elem, eventKey ) || {}).handle;
|
2172
2471
|
|
2173
2472
|
if ( handle ) {
|
2174
2473
|
handle.apply( elem, data );
|
@@ -2198,7 +2497,7 @@ jQuery.event = {
|
|
2198
2497
|
isClick = jQuery.nodeName( target, "a" ) && targetType === "click",
|
2199
2498
|
special = jQuery.event.special[ targetType ] || {};
|
2200
2499
|
|
2201
|
-
if ( (!special._default || special._default.call( elem, event ) === false) &&
|
2500
|
+
if ( (!special._default || special._default.call( elem, event ) === false) &&
|
2202
2501
|
!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
|
2203
2502
|
|
2204
2503
|
try {
|
@@ -2246,7 +2545,7 @@ jQuery.event = {
|
|
2246
2545
|
|
2247
2546
|
event.namespace = event.namespace || namespace_sort.join(".");
|
2248
2547
|
|
2249
|
-
events = jQuery.
|
2548
|
+
events = jQuery._data(this, eventKey);
|
2250
2549
|
|
2251
2550
|
if ( typeof events === "function" ) {
|
2252
2551
|
events = events.events;
|
@@ -2268,7 +2567,7 @@ jQuery.event = {
|
|
2268
2567
|
event.handler = handleObj.handler;
|
2269
2568
|
event.data = handleObj.data;
|
2270
2569
|
event.handleObj = handleObj;
|
2271
|
-
|
2570
|
+
|
2272
2571
|
var ret = handleObj.handler.apply( this, args );
|
2273
2572
|
|
2274
2573
|
if ( ret !== undefined ) {
|
@@ -2367,7 +2666,7 @@ jQuery.event = {
|
|
2367
2666
|
add: function( handleObj ) {
|
2368
2667
|
jQuery.event.add( this,
|
2369
2668
|
liveConvert( handleObj.origType, handleObj.selector ),
|
2370
|
-
jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
|
2669
|
+
jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
|
2371
2670
|
},
|
2372
2671
|
|
2373
2672
|
remove: function( handleObj ) {
|
@@ -2397,7 +2696,7 @@ jQuery.removeEvent = document.removeEventListener ?
|
|
2397
2696
|
if ( elem.removeEventListener ) {
|
2398
2697
|
elem.removeEventListener( type, handle, false );
|
2399
2698
|
}
|
2400
|
-
} :
|
2699
|
+
} :
|
2401
2700
|
function( elem, type, handle ) {
|
2402
2701
|
if ( elem.detachEvent ) {
|
2403
2702
|
elem.detachEvent( "on" + type, handle );
|
@@ -2414,6 +2713,12 @@ jQuery.Event = function( src ) {
|
|
2414
2713
|
if ( src && src.type ) {
|
2415
2714
|
this.originalEvent = src;
|
2416
2715
|
this.type = src.type;
|
2716
|
+
|
2717
|
+
// Events bubbling up the document may have been marked as prevented
|
2718
|
+
// by a handler lower down the tree; reflect the correct value.
|
2719
|
+
this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
|
2720
|
+
src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
|
2721
|
+
|
2417
2722
|
// Event type
|
2418
2723
|
} else {
|
2419
2724
|
this.type = src;
|
@@ -2444,7 +2749,7 @@ jQuery.Event.prototype = {
|
|
2444
2749
|
if ( !e ) {
|
2445
2750
|
return;
|
2446
2751
|
}
|
2447
|
-
|
2752
|
+
|
2448
2753
|
// if preventDefault exists run it on the original event
|
2449
2754
|
if ( e.preventDefault ) {
|
2450
2755
|
e.preventDefault();
|
@@ -2530,7 +2835,7 @@ if ( !jQuery.support.submitBubbles ) {
|
|
2530
2835
|
|
2531
2836
|
jQuery.event.special.submit = {
|
2532
2837
|
setup: function( data, namespaces ) {
|
2533
|
-
if ( this.nodeName.toLowerCase() !== "form" ) {
|
2838
|
+
if ( this.nodeName && this.nodeName.toLowerCase() !== "form" ) {
|
2534
2839
|
jQuery.event.add(this, "click.specialSubmit", function( e ) {
|
2535
2840
|
var elem = e.target,
|
2536
2841
|
type = elem.type;
|
@@ -2540,7 +2845,7 @@ if ( !jQuery.support.submitBubbles ) {
|
|
2540
2845
|
return trigger( "submit", this, arguments );
|
2541
2846
|
}
|
2542
2847
|
});
|
2543
|
-
|
2848
|
+
|
2544
2849
|
jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
|
2545
2850
|
var elem = e.target,
|
2546
2851
|
type = elem.type;
|
@@ -2595,14 +2900,14 @@ if ( !jQuery.support.changeBubbles ) {
|
|
2595
2900
|
return;
|
2596
2901
|
}
|
2597
2902
|
|
2598
|
-
data = jQuery.
|
2903
|
+
data = jQuery._data( elem, "_change_data" );
|
2599
2904
|
val = getVal(elem);
|
2600
2905
|
|
2601
2906
|
// the current data will be also retrieved by beforeactivate
|
2602
2907
|
if ( e.type !== "focusout" || elem.type !== "radio" ) {
|
2603
|
-
jQuery.
|
2908
|
+
jQuery._data( elem, "_change_data", val );
|
2604
2909
|
}
|
2605
|
-
|
2910
|
+
|
2606
2911
|
if ( data === undefined || val === data ) {
|
2607
2912
|
return;
|
2608
2913
|
}
|
@@ -2616,7 +2921,7 @@ if ( !jQuery.support.changeBubbles ) {
|
|
2616
2921
|
|
2617
2922
|
jQuery.event.special.change = {
|
2618
2923
|
filters: {
|
2619
|
-
focusout: testChange,
|
2924
|
+
focusout: testChange,
|
2620
2925
|
|
2621
2926
|
beforedeactivate: testChange,
|
2622
2927
|
|
@@ -2645,7 +2950,7 @@ if ( !jQuery.support.changeBubbles ) {
|
|
2645
2950
|
// information
|
2646
2951
|
beforeactivate: function( e ) {
|
2647
2952
|
var elem = e.target;
|
2648
|
-
jQuery.
|
2953
|
+
jQuery._data( elem, "_change_data", getVal(elem) );
|
2649
2954
|
}
|
2650
2955
|
},
|
2651
2956
|
|
@@ -2684,21 +2989,17 @@ if ( document.addEventListener ) {
|
|
2684
2989
|
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
|
2685
2990
|
jQuery.event.special[ fix ] = {
|
2686
2991
|
setup: function() {
|
2687
|
-
|
2688
|
-
document.addEventListener( orig, handler, true );
|
2689
|
-
}
|
2992
|
+
this.addEventListener( orig, handler, true );
|
2690
2993
|
},
|
2691
2994
|
teardown: function() {
|
2692
|
-
|
2693
|
-
document.removeEventListener( orig, handler, true );
|
2694
|
-
}
|
2995
|
+
this.removeEventListener( orig, handler, true );
|
2695
2996
|
}
|
2696
2997
|
};
|
2697
2998
|
|
2698
|
-
function handler( e ) {
|
2999
|
+
function handler( e ) {
|
2699
3000
|
e = jQuery.event.fix( e );
|
2700
3001
|
e.type = fix;
|
2701
|
-
return jQuery.event.
|
3002
|
+
return jQuery.event.handle.call( this, e );
|
2702
3003
|
}
|
2703
3004
|
});
|
2704
3005
|
}
|
@@ -2712,7 +3013,7 @@ jQuery.each(["bind", "one"], function( i, name ) {
|
|
2712
3013
|
}
|
2713
3014
|
return this;
|
2714
3015
|
}
|
2715
|
-
|
3016
|
+
|
2716
3017
|
if ( jQuery.isFunction( data ) || data === false ) {
|
2717
3018
|
fn = data;
|
2718
3019
|
data = undefined;
|
@@ -2752,20 +3053,20 @@ jQuery.fn.extend({
|
|
2752
3053
|
|
2753
3054
|
return this;
|
2754
3055
|
},
|
2755
|
-
|
3056
|
+
|
2756
3057
|
delegate: function( selector, types, data, fn ) {
|
2757
3058
|
return this.live( types, data, fn, selector );
|
2758
3059
|
},
|
2759
|
-
|
3060
|
+
|
2760
3061
|
undelegate: function( selector, types, fn ) {
|
2761
3062
|
if ( arguments.length === 0 ) {
|
2762
3063
|
return this.unbind( "live" );
|
2763
|
-
|
3064
|
+
|
2764
3065
|
} else {
|
2765
3066
|
return this.die( types, null, fn, selector );
|
2766
3067
|
}
|
2767
3068
|
},
|
2768
|
-
|
3069
|
+
|
2769
3070
|
trigger: function( type, data ) {
|
2770
3071
|
return this.each(function() {
|
2771
3072
|
jQuery.event.trigger( type, data, this );
|
@@ -2794,8 +3095,8 @@ jQuery.fn.extend({
|
|
2794
3095
|
|
2795
3096
|
return this.click( jQuery.proxy( fn, function( event ) {
|
2796
3097
|
// Figure out which function to execute
|
2797
|
-
var lastToggle = ( jQuery.
|
2798
|
-
jQuery.
|
3098
|
+
var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
|
3099
|
+
jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
|
2799
3100
|
|
2800
3101
|
// Make sure that clicks stop
|
2801
3102
|
event.preventDefault();
|
@@ -2822,12 +3123,12 @@ jQuery.each(["live", "die"], function( i, name ) {
|
|
2822
3123
|
var type, i = 0, match, namespaces, preType,
|
2823
3124
|
selector = origSelector || this.selector,
|
2824
3125
|
context = origSelector ? this : jQuery( this.context );
|
2825
|
-
|
3126
|
+
|
2826
3127
|
if ( typeof types === "object" && !types.preventDefault ) {
|
2827
3128
|
for ( var key in types ) {
|
2828
3129
|
context[ name ]( key, data, types[key], selector );
|
2829
3130
|
}
|
2830
|
-
|
3131
|
+
|
2831
3132
|
return this;
|
2832
3133
|
}
|
2833
3134
|
|
@@ -2874,7 +3175,7 @@ jQuery.each(["live", "die"], function( i, name ) {
|
|
2874
3175
|
context.unbind( "live." + liveConvert( type, selector ), fn );
|
2875
3176
|
}
|
2876
3177
|
}
|
2877
|
-
|
3178
|
+
|
2878
3179
|
return this;
|
2879
3180
|
};
|
2880
3181
|
});
|
@@ -2883,17 +3184,17 @@ function liveHandler( event ) {
|
|
2883
3184
|
var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
|
2884
3185
|
elems = [],
|
2885
3186
|
selectors = [],
|
2886
|
-
events = jQuery.
|
3187
|
+
events = jQuery._data( this, eventKey );
|
2887
3188
|
|
2888
3189
|
if ( typeof events === "function" ) {
|
2889
3190
|
events = events.events;
|
2890
3191
|
}
|
2891
3192
|
|
2892
|
-
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
|
2893
|
-
if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
|
3193
|
+
// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
|
3194
|
+
if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
|
2894
3195
|
return;
|
2895
3196
|
}
|
2896
|
-
|
3197
|
+
|
2897
3198
|
if ( event.namespace ) {
|
2898
3199
|
namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
|
2899
3200
|
}
|
@@ -2991,29 +3292,12 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl
|
|
2991
3292
|
}
|
2992
3293
|
});
|
2993
3294
|
|
2994
|
-
// Prevent memory leaks in IE
|
2995
|
-
// Window isn't included so as not to unbind existing unload events
|
2996
|
-
// More info:
|
2997
|
-
// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
|
2998
|
-
if ( window.attachEvent && !window.addEventListener ) {
|
2999
|
-
jQuery(window).bind("unload", function() {
|
3000
|
-
for ( var id in jQuery.cache ) {
|
3001
|
-
if ( jQuery.cache[ id ].handle ) {
|
3002
|
-
// Try/Catch is to handle iframes being unloaded, see #4280
|
3003
|
-
try {
|
3004
|
-
jQuery.event.remove( jQuery.cache[ id ].handle.elem );
|
3005
|
-
} catch(e) {}
|
3006
|
-
}
|
3007
|
-
}
|
3008
|
-
});
|
3009
|
-
}
|
3010
|
-
|
3011
3295
|
})( jQuery );
|
3012
3296
|
|
3013
3297
|
|
3014
3298
|
/*!
|
3015
|
-
* Sizzle CSS Selector Engine
|
3016
|
-
* Copyright
|
3299
|
+
* Sizzle CSS Selector Engine
|
3300
|
+
* Copyright 2011, The Dojo Foundation
|
3017
3301
|
* Released under the MIT, BSD, and GPL Licenses.
|
3018
3302
|
* More information: http://sizzlejs.com/
|
3019
3303
|
*/
|
@@ -3234,7 +3518,9 @@ Sizzle.find = function( expr, context, isXML ) {
|
|
3234
3518
|
}
|
3235
3519
|
|
3236
3520
|
if ( !set ) {
|
3237
|
-
set = context.getElementsByTagName
|
3521
|
+
set = typeof context.getElementsByTagName !== "undefined" ?
|
3522
|
+
context.getElementsByTagName( "*" ) :
|
3523
|
+
[];
|
3238
3524
|
}
|
3239
3525
|
|
3240
3526
|
return { set: set, expr: expr };
|
@@ -3342,9 +3628,9 @@ var Expr = Sizzle.selectors = {
|
|
3342
3628
|
ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
|
3343
3629
|
CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
|
3344
3630
|
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
|
3345
|
-
ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]
|
3631
|
+
ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
|
3346
3632
|
TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
|
3347
|
-
CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[
|
3633
|
+
CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
|
3348
3634
|
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
|
3349
3635
|
PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
|
3350
3636
|
},
|
@@ -3477,7 +3763,9 @@ var Expr = Sizzle.selectors = {
|
|
3477
3763
|
},
|
3478
3764
|
|
3479
3765
|
TAG: function( match, context ) {
|
3480
|
-
|
3766
|
+
if ( typeof context.getElementsByTagName !== "undefined" ) {
|
3767
|
+
return context.getElementsByTagName( match[1] );
|
3768
|
+
}
|
3481
3769
|
}
|
3482
3770
|
},
|
3483
3771
|
preFilter: {
|
@@ -3490,7 +3778,7 @@ var Expr = Sizzle.selectors = {
|
|
3490
3778
|
|
3491
3779
|
for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
|
3492
3780
|
if ( elem ) {
|
3493
|
-
if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
|
3781
|
+
if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
|
3494
3782
|
if ( !inplace ) {
|
3495
3783
|
result.push( elem );
|
3496
3784
|
}
|
@@ -3514,8 +3802,14 @@ var Expr = Sizzle.selectors = {
|
|
3514
3802
|
|
3515
3803
|
CHILD: function( match ) {
|
3516
3804
|
if ( match[1] === "nth" ) {
|
3805
|
+
if ( !match[2] ) {
|
3806
|
+
Sizzle.error( match[0] );
|
3807
|
+
}
|
3808
|
+
|
3809
|
+
match[2] = match[2].replace(/^\+|\s*/g, '');
|
3810
|
+
|
3517
3811
|
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
|
3518
|
-
var test = /(-?)(\d*)n(
|
3812
|
+
var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
|
3519
3813
|
match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
|
3520
3814
|
!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
|
3521
3815
|
|
@@ -3523,6 +3817,9 @@ var Expr = Sizzle.selectors = {
|
|
3523
3817
|
match[2] = (test[1] + (test[2] || 1)) - 0;
|
3524
3818
|
match[3] = test[3] - 0;
|
3525
3819
|
}
|
3820
|
+
else if ( match[2] ) {
|
3821
|
+
Sizzle.error( match[0] );
|
3822
|
+
}
|
3526
3823
|
|
3527
3824
|
// TODO: Move to normal caching system
|
3528
3825
|
match[0] = done++;
|
@@ -3531,12 +3828,15 @@ var Expr = Sizzle.selectors = {
|
|
3531
3828
|
},
|
3532
3829
|
|
3533
3830
|
ATTR: function( match, curLoop, inplace, result, not, isXML ) {
|
3534
|
-
var name = match[1].replace(/\\/g, "");
|
3831
|
+
var name = match[1] = match[1].replace(/\\/g, "");
|
3535
3832
|
|
3536
3833
|
if ( !isXML && Expr.attrMap[name] ) {
|
3537
3834
|
match[1] = Expr.attrMap[name];
|
3538
3835
|
}
|
3539
3836
|
|
3837
|
+
// Handle if an un-quoted value was used
|
3838
|
+
match[4] = ( match[4] || match[5] || "" ).replace(/\\/g, "");
|
3839
|
+
|
3540
3840
|
if ( match[2] === "~=" ) {
|
3541
3841
|
match[4] = " " + match[4] + " ";
|
3542
3842
|
}
|
@@ -3705,7 +4005,7 @@ var Expr = Sizzle.selectors = {
|
|
3705
4005
|
return true;
|
3706
4006
|
|
3707
4007
|
} else {
|
3708
|
-
Sizzle.error(
|
4008
|
+
Sizzle.error( name );
|
3709
4009
|
}
|
3710
4010
|
},
|
3711
4011
|
|
@@ -4095,13 +4395,47 @@ if ( document.querySelectorAll ) {
|
|
4095
4395
|
Sizzle = function( query, context, extra, seed ) {
|
4096
4396
|
context = context || document;
|
4097
4397
|
|
4098
|
-
// Make sure that attribute selectors are quoted
|
4099
|
-
query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
|
4100
|
-
|
4101
4398
|
// Only use querySelectorAll on non-XML documents
|
4102
4399
|
// (ID selectors don't work in non-HTML documents)
|
4103
4400
|
if ( !seed && !Sizzle.isXML(context) ) {
|
4401
|
+
// See if we find a selector to speed up
|
4402
|
+
var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
|
4403
|
+
|
4404
|
+
if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
|
4405
|
+
// Speed-up: Sizzle("TAG")
|
4406
|
+
if ( match[1] ) {
|
4407
|
+
return makeArray( context.getElementsByTagName( query ), extra );
|
4408
|
+
|
4409
|
+
// Speed-up: Sizzle(".CLASS")
|
4410
|
+
} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
|
4411
|
+
return makeArray( context.getElementsByClassName( match[2] ), extra );
|
4412
|
+
}
|
4413
|
+
}
|
4414
|
+
|
4104
4415
|
if ( context.nodeType === 9 ) {
|
4416
|
+
// Speed-up: Sizzle("body")
|
4417
|
+
// The body element only exists once, optimize finding it
|
4418
|
+
if ( query === "body" && context.body ) {
|
4419
|
+
return makeArray( [ context.body ], extra );
|
4420
|
+
|
4421
|
+
// Speed-up: Sizzle("#ID")
|
4422
|
+
} else if ( match && match[3] ) {
|
4423
|
+
var elem = context.getElementById( match[3] );
|
4424
|
+
|
4425
|
+
// Check parentNode to catch when Blackberry 4.6 returns
|
4426
|
+
// nodes that are no longer in the document #6963
|
4427
|
+
if ( elem && elem.parentNode ) {
|
4428
|
+
// Handle the case where IE and Opera return items
|
4429
|
+
// by name instead of ID
|
4430
|
+
if ( elem.id === match[3] ) {
|
4431
|
+
return makeArray( [ elem ], extra );
|
4432
|
+
}
|
4433
|
+
|
4434
|
+
} else {
|
4435
|
+
return makeArray( [], extra );
|
4436
|
+
}
|
4437
|
+
}
|
4438
|
+
|
4105
4439
|
try {
|
4106
4440
|
return makeArray( context.querySelectorAll(query), extra );
|
4107
4441
|
} catch(qsaError) {}
|
@@ -4112,14 +4446,23 @@ if ( document.querySelectorAll ) {
|
|
4112
4446
|
// IE 8 doesn't work on object elements
|
4113
4447
|
} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
|
4114
4448
|
var old = context.getAttribute( "id" ),
|
4115
|
-
nid = old || id
|
4449
|
+
nid = old || id,
|
4450
|
+
hasParent = context.parentNode,
|
4451
|
+
relativeHierarchySelector = /^\s*[+~]/.test( query );
|
4116
4452
|
|
4117
4453
|
if ( !old ) {
|
4118
4454
|
context.setAttribute( "id", nid );
|
4455
|
+
} else {
|
4456
|
+
nid = nid.replace( /'/g, "\\$&" );
|
4457
|
+
}
|
4458
|
+
if ( relativeHierarchySelector && hasParent ) {
|
4459
|
+
context = context.parentNode;
|
4119
4460
|
}
|
4120
4461
|
|
4121
4462
|
try {
|
4122
|
-
|
4463
|
+
if ( !relativeHierarchySelector || hasParent ) {
|
4464
|
+
return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
|
4465
|
+
}
|
4123
4466
|
|
4124
4467
|
} catch(pseudoError) {
|
4125
4468
|
} finally {
|
@@ -4344,7 +4687,14 @@ var runtil = /Until$/,
|
|
4344
4687
|
rmultiselector = /,/,
|
4345
4688
|
isSimple = /^.[^:#\[\.,]*$/,
|
4346
4689
|
slice = Array.prototype.slice,
|
4347
|
-
POS = jQuery.expr.match.POS
|
4690
|
+
POS = jQuery.expr.match.POS,
|
4691
|
+
// methods guaranteed to produce a unique set when starting from a unique set
|
4692
|
+
guaranteedUnique = {
|
4693
|
+
children: true,
|
4694
|
+
contents: true,
|
4695
|
+
next: true,
|
4696
|
+
prev: true
|
4697
|
+
};
|
4348
4698
|
|
4349
4699
|
jQuery.fn.extend({
|
4350
4700
|
find: function( selector ) {
|
@@ -4389,7 +4739,7 @@ jQuery.fn.extend({
|
|
4389
4739
|
filter: function( selector ) {
|
4390
4740
|
return this.pushStack( winnow(this, selector, true), "filter", selector );
|
4391
4741
|
},
|
4392
|
-
|
4742
|
+
|
4393
4743
|
is: function( selector ) {
|
4394
4744
|
return !!selector && jQuery.filter( selector, this ).length > 0;
|
4395
4745
|
},
|
@@ -4407,7 +4757,7 @@ jQuery.fn.extend({
|
|
4407
4757
|
selector = selectors[i];
|
4408
4758
|
|
4409
4759
|
if ( !matches[selector] ) {
|
4410
|
-
matches[selector] = jQuery.expr.match.POS.test( selector ) ?
|
4760
|
+
matches[selector] = jQuery.expr.match.POS.test( selector ) ?
|
4411
4761
|
jQuery( selector, context || this.context ) :
|
4412
4762
|
selector;
|
4413
4763
|
}
|
@@ -4430,7 +4780,7 @@ jQuery.fn.extend({
|
|
4430
4780
|
return ret;
|
4431
4781
|
}
|
4432
4782
|
|
4433
|
-
var pos = POS.test( selectors ) ?
|
4783
|
+
var pos = POS.test( selectors ) ?
|
4434
4784
|
jQuery( selectors, context || this.context ) : null;
|
4435
4785
|
|
4436
4786
|
for ( i = 0, l = this.length; i < l; i++ ) {
|
@@ -4451,10 +4801,10 @@ jQuery.fn.extend({
|
|
4451
4801
|
}
|
4452
4802
|
|
4453
4803
|
ret = ret.length > 1 ? jQuery.unique(ret) : ret;
|
4454
|
-
|
4804
|
+
|
4455
4805
|
return this.pushStack( ret, "closest", selectors );
|
4456
4806
|
},
|
4457
|
-
|
4807
|
+
|
4458
4808
|
// Determine the position of an element within
|
4459
4809
|
// the matched set of elements
|
4460
4810
|
index: function( elem ) {
|
@@ -4472,7 +4822,7 @@ jQuery.fn.extend({
|
|
4472
4822
|
|
4473
4823
|
add: function( selector, context ) {
|
4474
4824
|
var set = typeof selector === "string" ?
|
4475
|
-
jQuery( selector, context
|
4825
|
+
jQuery( selector, context ) :
|
4476
4826
|
jQuery.makeArray( selector ),
|
4477
4827
|
all = jQuery.merge( this.get(), set );
|
4478
4828
|
|
@@ -4534,8 +4884,13 @@ jQuery.each({
|
|
4534
4884
|
}
|
4535
4885
|
}, function( name, fn ) {
|
4536
4886
|
jQuery.fn[ name ] = function( until, selector ) {
|
4537
|
-
var ret = jQuery.map( this, fn, until )
|
4538
|
-
|
4887
|
+
var ret = jQuery.map( this, fn, until ),
|
4888
|
+
// The variable 'args' was introduced in
|
4889
|
+
// https://github.com/jquery/jquery/commit/52a0238
|
4890
|
+
// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
|
4891
|
+
// http://code.google.com/p/v8/issues/detail?id=1050
|
4892
|
+
args = slice.call(arguments);
|
4893
|
+
|
4539
4894
|
if ( !runtil.test( name ) ) {
|
4540
4895
|
selector = until;
|
4541
4896
|
}
|
@@ -4544,13 +4899,13 @@ jQuery.each({
|
|
4544
4899
|
ret = jQuery.filter( selector, ret );
|
4545
4900
|
}
|
4546
4901
|
|
4547
|
-
ret = this.length > 1 ? jQuery.unique( ret ) : ret;
|
4902
|
+
ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
|
4548
4903
|
|
4549
4904
|
if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
|
4550
4905
|
ret = ret.reverse();
|
4551
4906
|
}
|
4552
4907
|
|
4553
|
-
return this.pushStack( ret, name,
|
4908
|
+
return this.pushStack( ret, name, args.join(",") );
|
4554
4909
|
};
|
4555
4910
|
});
|
4556
4911
|
|
@@ -4564,7 +4919,7 @@ jQuery.extend({
|
|
4564
4919
|
jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
|
4565
4920
|
jQuery.find.matches(expr, elems);
|
4566
4921
|
},
|
4567
|
-
|
4922
|
+
|
4568
4923
|
dir: function( elem, dir, until ) {
|
4569
4924
|
var matched = [],
|
4570
4925
|
cur = elem[ dir ];
|
@@ -4646,9 +5001,8 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
|
|
4646
5001
|
rtbody = /<tbody/i,
|
4647
5002
|
rhtml = /<|&#?\w+;/,
|
4648
5003
|
rnocache = /<(?:script|object|embed|option|style)/i,
|
4649
|
-
// checked="checked" or checked
|
5004
|
+
// checked="checked" or checked
|
4650
5005
|
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
|
4651
|
-
raction = /\=([^="'>\s]+\/)>/g,
|
4652
5006
|
wrapMap = {
|
4653
5007
|
option: [ 1, "<select multiple='multiple'>", "</select>" ],
|
4654
5008
|
legend: [ 1, "<fieldset>", "</fieldset>" ],
|
@@ -4788,7 +5142,7 @@ jQuery.fn.extend({
|
|
4788
5142
|
return set;
|
4789
5143
|
}
|
4790
5144
|
},
|
4791
|
-
|
5145
|
+
|
4792
5146
|
// keepData is for internal use only--do not document
|
4793
5147
|
remove: function( selector, keepData ) {
|
4794
5148
|
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
|
@@ -4803,7 +5157,7 @@ jQuery.fn.extend({
|
|
4803
5157
|
}
|
4804
5158
|
}
|
4805
5159
|
}
|
4806
|
-
|
5160
|
+
|
4807
5161
|
return this;
|
4808
5162
|
},
|
4809
5163
|
|
@@ -4819,48 +5173,17 @@ jQuery.fn.extend({
|
|
4819
5173
|
elem.removeChild( elem.firstChild );
|
4820
5174
|
}
|
4821
5175
|
}
|
4822
|
-
|
5176
|
+
|
4823
5177
|
return this;
|
4824
5178
|
},
|
4825
5179
|
|
4826
|
-
clone: function(
|
4827
|
-
|
4828
|
-
|
4829
|
-
if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
|
4830
|
-
// IE copies events bound via attachEvent when
|
4831
|
-
// using cloneNode. Calling detachEvent on the
|
4832
|
-
// clone will also remove the events from the orignal
|
4833
|
-
// In order to get around this, we use innerHTML.
|
4834
|
-
// Unfortunately, this means some modifications to
|
4835
|
-
// attributes in IE that are actually only stored
|
4836
|
-
// as properties will not be copied (such as the
|
4837
|
-
// the name attribute on an input).
|
4838
|
-
var html = this.outerHTML,
|
4839
|
-
ownerDocument = this.ownerDocument;
|
4840
|
-
|
4841
|
-
if ( !html ) {
|
4842
|
-
var div = ownerDocument.createElement("div");
|
4843
|
-
div.appendChild( this.cloneNode(true) );
|
4844
|
-
html = div.innerHTML;
|
4845
|
-
}
|
4846
|
-
|
4847
|
-
return jQuery.clean([html.replace(rinlinejQuery, "")
|
4848
|
-
// Handle the case in IE 8 where action=/test/> self-closes a tag
|
4849
|
-
.replace(raction, '="$1">')
|
4850
|
-
.replace(rleadingWhitespace, "")], ownerDocument)[0];
|
4851
|
-
} else {
|
4852
|
-
return this.cloneNode(true);
|
4853
|
-
}
|
4854
|
-
});
|
4855
|
-
|
4856
|
-
// Copy the events from the original to the clone
|
4857
|
-
if ( events === true ) {
|
4858
|
-
cloneCopyEvent( this, ret );
|
4859
|
-
cloneCopyEvent( this.find("*"), ret.find("*") );
|
4860
|
-
}
|
5180
|
+
clone: function( dataAndEvents, deepDataAndEvents ) {
|
5181
|
+
dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
|
5182
|
+
deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
|
4861
5183
|
|
4862
|
-
|
4863
|
-
|
5184
|
+
return this.map( function () {
|
5185
|
+
return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
|
5186
|
+
});
|
4864
5187
|
},
|
4865
5188
|
|
4866
5189
|
html: function( value ) {
|
@@ -4970,9 +5293,9 @@ jQuery.fn.extend({
|
|
4970
5293
|
} else {
|
4971
5294
|
results = jQuery.buildFragment( args, this, scripts );
|
4972
5295
|
}
|
4973
|
-
|
5296
|
+
|
4974
5297
|
fragment = results.fragment;
|
4975
|
-
|
5298
|
+
|
4976
5299
|
if ( fragment.childNodes.length === 1 ) {
|
4977
5300
|
first = fragment = fragment.firstChild;
|
4978
5301
|
} else {
|
@@ -4982,13 +5305,20 @@ jQuery.fn.extend({
|
|
4982
5305
|
if ( first ) {
|
4983
5306
|
table = table && jQuery.nodeName( first, "tr" );
|
4984
5307
|
|
4985
|
-
for ( var i = 0, l = this.length; i < l; i++ ) {
|
5308
|
+
for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
|
4986
5309
|
callback.call(
|
4987
5310
|
table ?
|
4988
5311
|
root(this[i], first) :
|
4989
5312
|
this[i],
|
4990
|
-
|
4991
|
-
|
5313
|
+
// Make sure that we do not leak memory by inadvertently discarding
|
5314
|
+
// the original fragment (which might have attached data) instead of
|
5315
|
+
// using it; in addition, use the original fragment object for the last
|
5316
|
+
// item instead of first because it can end up being emptied incorrectly
|
5317
|
+
// in certain situations (Bug #8070).
|
5318
|
+
// Fragments from the fragment cache must always be cloned and never used
|
5319
|
+
// in place.
|
5320
|
+
results.cacheable || (l > 1 && i < lastIndex) ?
|
5321
|
+
jQuery.clone( fragment, true, true ) :
|
4992
5322
|
fragment
|
4993
5323
|
);
|
4994
5324
|
}
|
@@ -5010,41 +5340,97 @@ function root( elem, cur ) {
|
|
5010
5340
|
elem;
|
5011
5341
|
}
|
5012
5342
|
|
5013
|
-
function cloneCopyEvent(
|
5014
|
-
var i = 0;
|
5343
|
+
function cloneCopyEvent( src, dest ) {
|
5015
5344
|
|
5016
|
-
|
5017
|
-
|
5018
|
-
|
5019
|
-
|
5345
|
+
if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
|
5346
|
+
return;
|
5347
|
+
}
|
5348
|
+
|
5349
|
+
var internalKey = jQuery.expando,
|
5350
|
+
oldData = jQuery.data( src ),
|
5351
|
+
curData = jQuery.data( dest, oldData );
|
5020
5352
|
|
5021
|
-
|
5022
|
-
|
5023
|
-
|
5353
|
+
// Switch to use the internal data object, if it exists, for the next
|
5354
|
+
// stage of data copying
|
5355
|
+
if ( (oldData = oldData[ internalKey ]) ) {
|
5356
|
+
var events = oldData.events;
|
5357
|
+
curData = curData[ internalKey ] = jQuery.extend({}, oldData);
|
5024
5358
|
|
5025
5359
|
if ( events ) {
|
5026
5360
|
delete curData.handle;
|
5027
5361
|
curData.events = {};
|
5028
5362
|
|
5029
5363
|
for ( var type in events ) {
|
5030
|
-
for ( var
|
5031
|
-
jQuery.event.add(
|
5364
|
+
for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
|
5365
|
+
jQuery.event.add( dest, type, events[ type ][ i ], events[ type ][ i ].data );
|
5032
5366
|
}
|
5033
5367
|
}
|
5034
5368
|
}
|
5035
|
-
}
|
5369
|
+
}
|
5370
|
+
}
|
5371
|
+
|
5372
|
+
function cloneFixAttributes(src, dest) {
|
5373
|
+
// We do not need to do anything for non-Elements
|
5374
|
+
if ( dest.nodeType !== 1 ) {
|
5375
|
+
return;
|
5376
|
+
}
|
5377
|
+
|
5378
|
+
var nodeName = dest.nodeName.toLowerCase();
|
5379
|
+
|
5380
|
+
// clearAttributes removes the attributes, which we don't want,
|
5381
|
+
// but also removes the attachEvent events, which we *do* want
|
5382
|
+
dest.clearAttributes();
|
5383
|
+
|
5384
|
+
// mergeAttributes, in contrast, only merges back on the
|
5385
|
+
// original attributes, not the events
|
5386
|
+
dest.mergeAttributes(src);
|
5387
|
+
|
5388
|
+
// IE6-8 fail to clone children inside object elements that use
|
5389
|
+
// the proprietary classid attribute value (rather than the type
|
5390
|
+
// attribute) to identify the type of content to display
|
5391
|
+
if ( nodeName === "object" ) {
|
5392
|
+
dest.outerHTML = src.outerHTML;
|
5393
|
+
|
5394
|
+
} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
|
5395
|
+
// IE6-8 fails to persist the checked state of a cloned checkbox
|
5396
|
+
// or radio button. Worse, IE6-7 fail to give the cloned element
|
5397
|
+
// a checked appearance if the defaultChecked value isn't also set
|
5398
|
+
if ( src.checked ) {
|
5399
|
+
dest.defaultChecked = dest.checked = src.checked;
|
5400
|
+
}
|
5401
|
+
|
5402
|
+
// IE6-7 get confused and end up setting the value of a cloned
|
5403
|
+
// checkbox/radio button to an empty string instead of "on"
|
5404
|
+
if ( dest.value !== src.value ) {
|
5405
|
+
dest.value = src.value;
|
5406
|
+
}
|
5407
|
+
|
5408
|
+
// IE6-8 fails to return the selected option to the default selected
|
5409
|
+
// state when cloning options
|
5410
|
+
} else if ( nodeName === "option" ) {
|
5411
|
+
dest.selected = src.defaultSelected;
|
5412
|
+
|
5413
|
+
// IE6-8 fails to set the defaultValue to the correct value when
|
5414
|
+
// cloning other types of input fields
|
5415
|
+
} else if ( nodeName === "input" || nodeName === "textarea" ) {
|
5416
|
+
dest.defaultValue = src.defaultValue;
|
5417
|
+
}
|
5418
|
+
|
5419
|
+
// Event data gets referenced instead of copied if the expando
|
5420
|
+
// gets copied too
|
5421
|
+
dest.removeAttribute( jQuery.expando );
|
5036
5422
|
}
|
5037
5423
|
|
5038
5424
|
jQuery.buildFragment = function( args, nodes, scripts ) {
|
5039
5425
|
var fragment, cacheable, cacheresults,
|
5040
5426
|
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
|
5041
5427
|
|
5042
|
-
// Only cache "small" (1/2 KB) strings that are associated with the main document
|
5428
|
+
// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
|
5043
5429
|
// Cloning options loses the selected state, so don't cache them
|
5044
5430
|
// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
|
5045
5431
|
// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
|
5046
5432
|
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
|
5047
|
-
!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
|
5433
|
+
args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
|
5048
5434
|
|
5049
5435
|
cacheable = true;
|
5050
5436
|
cacheresults = jQuery.fragments[ args[0] ];
|
@@ -5080,24 +5466,72 @@ jQuery.each({
|
|
5080
5466
|
var ret = [],
|
5081
5467
|
insert = jQuery( selector ),
|
5082
5468
|
parent = this.length === 1 && this[0].parentNode;
|
5083
|
-
|
5469
|
+
|
5084
5470
|
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
|
5085
5471
|
insert[ original ]( this[0] );
|
5086
5472
|
return this;
|
5087
|
-
|
5473
|
+
|
5088
5474
|
} else {
|
5089
5475
|
for ( var i = 0, l = insert.length; i < l; i++ ) {
|
5090
5476
|
var elems = (i > 0 ? this.clone(true) : this).get();
|
5091
5477
|
jQuery( insert[i] )[ original ]( elems );
|
5092
5478
|
ret = ret.concat( elems );
|
5093
5479
|
}
|
5094
|
-
|
5480
|
+
|
5095
5481
|
return this.pushStack( ret, name, insert.selector );
|
5096
5482
|
}
|
5097
5483
|
};
|
5098
5484
|
});
|
5099
5485
|
|
5100
5486
|
jQuery.extend({
|
5487
|
+
clone: function( elem, dataAndEvents, deepDataAndEvents ) {
|
5488
|
+
var clone = elem.cloneNode(true),
|
5489
|
+
srcElements,
|
5490
|
+
destElements,
|
5491
|
+
i;
|
5492
|
+
|
5493
|
+
if ( !jQuery.support.noCloneEvent && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
|
5494
|
+
// IE copies events bound via attachEvent when using cloneNode.
|
5495
|
+
// Calling detachEvent on the clone will also remove the events
|
5496
|
+
// from the original. In order to get around this, we use some
|
5497
|
+
// proprietary methods to clear the events. Thanks to MooTools
|
5498
|
+
// guys for this hotness.
|
5499
|
+
|
5500
|
+
cloneFixAttributes( elem, clone );
|
5501
|
+
|
5502
|
+
// Using Sizzle here is crazy slow, so we use getElementsByTagName
|
5503
|
+
// instead
|
5504
|
+
srcElements = elem.getElementsByTagName("*");
|
5505
|
+
destElements = clone.getElementsByTagName("*");
|
5506
|
+
|
5507
|
+
// Weird iteration because IE will replace the length property
|
5508
|
+
// with an element if you are cloning the body and one of the
|
5509
|
+
// elements on the page has a name or id of "length"
|
5510
|
+
for ( i = 0; srcElements[i]; ++i ) {
|
5511
|
+
cloneFixAttributes( srcElements[i], destElements[i] );
|
5512
|
+
}
|
5513
|
+
}
|
5514
|
+
|
5515
|
+
// Copy the events from the original to the clone
|
5516
|
+
if ( dataAndEvents ) {
|
5517
|
+
|
5518
|
+
cloneCopyEvent( elem, clone );
|
5519
|
+
|
5520
|
+
if ( deepDataAndEvents && "getElementsByTagName" in elem ) {
|
5521
|
+
|
5522
|
+
srcElements = elem.getElementsByTagName("*");
|
5523
|
+
destElements = clone.getElementsByTagName("*");
|
5524
|
+
|
5525
|
+
if ( srcElements.length ) {
|
5526
|
+
for ( i = 0; srcElements[i]; ++i ) {
|
5527
|
+
cloneCopyEvent( srcElements[i], destElements[i] );
|
5528
|
+
}
|
5529
|
+
}
|
5530
|
+
}
|
5531
|
+
}
|
5532
|
+
// Return the cloned set
|
5533
|
+
return clone;
|
5534
|
+
},
|
5101
5535
|
clean: function( elems, context, fragment, scripts ) {
|
5102
5536
|
context = context || document;
|
5103
5537
|
|
@@ -5179,7 +5613,7 @@ jQuery.extend({
|
|
5179
5613
|
for ( i = 0; ret[i]; i++ ) {
|
5180
5614
|
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
|
5181
5615
|
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
|
5182
|
-
|
5616
|
+
|
5183
5617
|
} else {
|
5184
5618
|
if ( ret[i].nodeType === 1 ) {
|
5185
5619
|
ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
|
@@ -5191,40 +5625,45 @@ jQuery.extend({
|
|
5191
5625
|
|
5192
5626
|
return ret;
|
5193
5627
|
},
|
5194
|
-
|
5628
|
+
|
5195
5629
|
cleanData: function( elems ) {
|
5196
|
-
var data, id, cache = jQuery.cache,
|
5197
|
-
special = jQuery.event.special,
|
5630
|
+
var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
|
5198
5631
|
deleteExpando = jQuery.support.deleteExpando;
|
5199
|
-
|
5632
|
+
|
5200
5633
|
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
5201
5634
|
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
|
5202
5635
|
continue;
|
5203
5636
|
}
|
5204
5637
|
|
5205
5638
|
id = elem[ jQuery.expando ];
|
5206
|
-
|
5639
|
+
|
5207
5640
|
if ( id ) {
|
5208
|
-
data = cache[ id ];
|
5209
|
-
|
5641
|
+
data = cache[ id ] && cache[ id ][ internalKey ];
|
5642
|
+
|
5210
5643
|
if ( data && data.events ) {
|
5211
5644
|
for ( var type in data.events ) {
|
5212
5645
|
if ( special[ type ] ) {
|
5213
5646
|
jQuery.event.remove( elem, type );
|
5214
5647
|
|
5648
|
+
// This is a shortcut to avoid jQuery.event.remove's overhead
|
5215
5649
|
} else {
|
5216
5650
|
jQuery.removeEvent( elem, type, data.handle );
|
5217
5651
|
}
|
5218
5652
|
}
|
5653
|
+
|
5654
|
+
// Null the DOM reference to avoid IE6/7/8 leak (#7054)
|
5655
|
+
if ( data.handle ) {
|
5656
|
+
data.handle.elem = null;
|
5657
|
+
}
|
5219
5658
|
}
|
5220
|
-
|
5659
|
+
|
5221
5660
|
if ( deleteExpando ) {
|
5222
5661
|
delete elem[ jQuery.expando ];
|
5223
5662
|
|
5224
5663
|
} else if ( elem.removeAttribute ) {
|
5225
5664
|
elem.removeAttribute( jQuery.expando );
|
5226
5665
|
}
|
5227
|
-
|
5666
|
+
|
5228
5667
|
delete cache[ id ];
|
5229
5668
|
}
|
5230
5669
|
}
|
@@ -5515,8 +5954,9 @@ if ( document.defaultView && document.defaultView.getComputedStyle ) {
|
|
5515
5954
|
|
5516
5955
|
if ( document.documentElement.currentStyle ) {
|
5517
5956
|
currentStyle = function( elem, name ) {
|
5518
|
-
var left,
|
5957
|
+
var left,
|
5519
5958
|
ret = elem.currentStyle && elem.currentStyle[ name ],
|
5959
|
+
rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
|
5520
5960
|
style = elem.style;
|
5521
5961
|
|
5522
5962
|
// From the awesome hack by Dean Edwards
|
@@ -5527,16 +5967,19 @@ if ( document.documentElement.currentStyle ) {
|
|
5527
5967
|
if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
|
5528
5968
|
// Remember the original values
|
5529
5969
|
left = style.left;
|
5530
|
-
rsLeft = elem.runtimeStyle.left;
|
5531
5970
|
|
5532
5971
|
// Put in the new values to get a computed value out
|
5533
|
-
|
5972
|
+
if ( rsLeft ) {
|
5973
|
+
elem.runtimeStyle.left = elem.currentStyle.left;
|
5974
|
+
}
|
5534
5975
|
style.left = name === "fontSize" ? "1em" : (ret || 0);
|
5535
5976
|
ret = style.pixelLeft + "px";
|
5536
5977
|
|
5537
5978
|
// Revert the changed values
|
5538
5979
|
style.left = left;
|
5539
|
-
|
5980
|
+
if ( rsLeft ) {
|
5981
|
+
elem.runtimeStyle.left = rsLeft;
|
5982
|
+
}
|
5540
5983
|
}
|
5541
5984
|
|
5542
5985
|
return ret === "" ? "auto" : ret;
|
@@ -5587,21 +6030,140 @@ if ( jQuery.expr && jQuery.expr.filters ) {
|
|
5587
6030
|
|
5588
6031
|
(function( jQuery ) {
|
5589
6032
|
|
5590
|
-
var
|
5591
|
-
|
5592
|
-
|
6033
|
+
var r20 = /%20/g,
|
6034
|
+
rbracket = /\[\]$/,
|
6035
|
+
rCRLF = /\r?\n/g,
|
6036
|
+
rhash = /#.*$/,
|
6037
|
+
rheaders = /^(.*?):\s*(.*?)\r?$/mg, // IE leaves an \r character at EOL
|
5593
6038
|
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
|
6039
|
+
// #7653, #8125, #8152: local protocol detection
|
6040
|
+
rlocalProtocol = /(?:^file|^widget|\-extension):$/,
|
5594
6041
|
rnoContent = /^(?:GET|HEAD)$/,
|
5595
|
-
|
5596
|
-
jsre = /\=\?(&|$)/,
|
6042
|
+
rprotocol = /^\/\//,
|
5597
6043
|
rquery = /\?/,
|
6044
|
+
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
|
6045
|
+
rselectTextarea = /^(?:select|textarea)/i,
|
6046
|
+
rspacesAjax = /\s+/,
|
5598
6047
|
rts = /([?&])_=[^&]*/,
|
5599
|
-
rurl = /^(\w+:)
|
5600
|
-
r20 = /%20/g,
|
5601
|
-
rhash = /#.*$/,
|
6048
|
+
rurl = /^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,
|
5602
6049
|
|
5603
6050
|
// Keep a copy of the old load method
|
5604
|
-
_load = jQuery.fn.load
|
6051
|
+
_load = jQuery.fn.load,
|
6052
|
+
|
6053
|
+
/* Prefilters
|
6054
|
+
* 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
|
6055
|
+
* 2) These are called:
|
6056
|
+
* - BEFORE asking for a transport
|
6057
|
+
* - AFTER param serialization (s.data is a string if s.processData is true)
|
6058
|
+
* 3) key is the dataType
|
6059
|
+
* 4) the catchall symbol "*" can be used
|
6060
|
+
* 5) execution will start with transport dataType and THEN continue down to "*" if needed
|
6061
|
+
*/
|
6062
|
+
prefilters = {},
|
6063
|
+
|
6064
|
+
/* Transports bindings
|
6065
|
+
* 1) key is the dataType
|
6066
|
+
* 2) the catchall symbol "*" can be used
|
6067
|
+
* 3) selection will start with transport dataType and THEN go to "*" if needed
|
6068
|
+
*/
|
6069
|
+
transports = {},
|
6070
|
+
|
6071
|
+
// Document location
|
6072
|
+
ajaxLocation,
|
6073
|
+
|
6074
|
+
// Document location segments
|
6075
|
+
ajaxLocParts;
|
6076
|
+
|
6077
|
+
// #8138, IE may throw an exception when accessing
|
6078
|
+
// a field from document.location if document.domain has been set
|
6079
|
+
try {
|
6080
|
+
ajaxLocation = document.location.href;
|
6081
|
+
} catch( e ) {
|
6082
|
+
// Use the href attribute of an A element
|
6083
|
+
// since IE will modify it given document.location
|
6084
|
+
ajaxLocation = document.createElement( "a" );
|
6085
|
+
ajaxLocation.href = "";
|
6086
|
+
ajaxLocation = ajaxLocation.href;
|
6087
|
+
}
|
6088
|
+
|
6089
|
+
// Segment location into parts
|
6090
|
+
ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() );
|
6091
|
+
|
6092
|
+
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
|
6093
|
+
function addToPrefiltersOrTransports( structure ) {
|
6094
|
+
|
6095
|
+
// dataTypeExpression is optional and defaults to "*"
|
6096
|
+
return function( dataTypeExpression, func ) {
|
6097
|
+
|
6098
|
+
if ( typeof dataTypeExpression !== "string" ) {
|
6099
|
+
func = dataTypeExpression;
|
6100
|
+
dataTypeExpression = "*";
|
6101
|
+
}
|
6102
|
+
|
6103
|
+
if ( jQuery.isFunction( func ) ) {
|
6104
|
+
var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
|
6105
|
+
i = 0,
|
6106
|
+
length = dataTypes.length,
|
6107
|
+
dataType,
|
6108
|
+
list,
|
6109
|
+
placeBefore;
|
6110
|
+
|
6111
|
+
// For each dataType in the dataTypeExpression
|
6112
|
+
for(; i < length; i++ ) {
|
6113
|
+
dataType = dataTypes[ i ];
|
6114
|
+
// We control if we're asked to add before
|
6115
|
+
// any existing element
|
6116
|
+
placeBefore = /^\+/.test( dataType );
|
6117
|
+
if ( placeBefore ) {
|
6118
|
+
dataType = dataType.substr( 1 ) || "*";
|
6119
|
+
}
|
6120
|
+
list = structure[ dataType ] = structure[ dataType ] || [];
|
6121
|
+
// then we add to the structure accordingly
|
6122
|
+
list[ placeBefore ? "unshift" : "push" ]( func );
|
6123
|
+
}
|
6124
|
+
}
|
6125
|
+
};
|
6126
|
+
}
|
6127
|
+
|
6128
|
+
//Base inspection function for prefilters and transports
|
6129
|
+
function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
|
6130
|
+
dataType /* internal */, inspected /* internal */ ) {
|
6131
|
+
|
6132
|
+
dataType = dataType || options.dataTypes[ 0 ];
|
6133
|
+
inspected = inspected || {};
|
6134
|
+
|
6135
|
+
inspected[ dataType ] = true;
|
6136
|
+
|
6137
|
+
var list = structure[ dataType ],
|
6138
|
+
i = 0,
|
6139
|
+
length = list ? list.length : 0,
|
6140
|
+
executeOnly = ( structure === prefilters ),
|
6141
|
+
selection;
|
6142
|
+
|
6143
|
+
for(; i < length && ( executeOnly || !selection ); i++ ) {
|
6144
|
+
selection = list[ i ]( options, originalOptions, jqXHR );
|
6145
|
+
// If we got redirected to another dataType
|
6146
|
+
// we try there if executing only and not done already
|
6147
|
+
if ( typeof selection === "string" ) {
|
6148
|
+
if ( !executeOnly || inspected[ selection ] ) {
|
6149
|
+
selection = undefined;
|
6150
|
+
} else {
|
6151
|
+
options.dataTypes.unshift( selection );
|
6152
|
+
selection = inspectPrefiltersOrTransports(
|
6153
|
+
structure, options, originalOptions, jqXHR, selection, inspected );
|
6154
|
+
}
|
6155
|
+
}
|
6156
|
+
}
|
6157
|
+
// If we're only executing or nothing was selected
|
6158
|
+
// we try the catchall dataType if not done already
|
6159
|
+
if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
|
6160
|
+
selection = inspectPrefiltersOrTransports(
|
6161
|
+
structure, options, originalOptions, jqXHR, "*", inspected );
|
6162
|
+
}
|
6163
|
+
// unnecessary when only executing (prefilters)
|
6164
|
+
// but it'll be ignored by the caller in that case
|
6165
|
+
return selection;
|
6166
|
+
}
|
5605
6167
|
|
5606
6168
|
jQuery.fn.extend({
|
5607
6169
|
load: function( url, params, callback ) {
|
@@ -5613,10 +6175,10 @@ jQuery.fn.extend({
|
|
5613
6175
|
return this;
|
5614
6176
|
}
|
5615
6177
|
|
5616
|
-
var off = url.indexOf(" ");
|
6178
|
+
var off = url.indexOf( " " );
|
5617
6179
|
if ( off >= 0 ) {
|
5618
|
-
var selector = url.slice(off, url.length);
|
5619
|
-
url = url.slice(0, off);
|
6180
|
+
var selector = url.slice( off, url.length );
|
6181
|
+
url = url.slice( 0, off );
|
5620
6182
|
}
|
5621
6183
|
|
5622
6184
|
// Default to a GET request
|
@@ -5645,26 +6207,34 @@ jQuery.fn.extend({
|
|
5645
6207
|
type: type,
|
5646
6208
|
dataType: "html",
|
5647
6209
|
data: params,
|
5648
|
-
|
6210
|
+
// Complete callback (responseText is used internally)
|
6211
|
+
complete: function( jqXHR, status, responseText ) {
|
6212
|
+
// Store the response as specified by the jqXHR object
|
6213
|
+
responseText = jqXHR.responseText;
|
5649
6214
|
// If successful, inject the HTML into all the matched elements
|
5650
|
-
if (
|
6215
|
+
if ( jqXHR.isResolved() ) {
|
6216
|
+
// #4825: Get the actual response in case
|
6217
|
+
// a dataFilter is present in ajaxSettings
|
6218
|
+
jqXHR.done(function( r ) {
|
6219
|
+
responseText = r;
|
6220
|
+
});
|
5651
6221
|
// See if a selector was specified
|
5652
6222
|
self.html( selector ?
|
5653
6223
|
// Create a dummy div to hold the results
|
5654
6224
|
jQuery("<div>")
|
5655
6225
|
// inject the contents of the document in, removing the scripts
|
5656
6226
|
// to avoid any 'Permission Denied' errors in IE
|
5657
|
-
.append(
|
6227
|
+
.append(responseText.replace(rscript, ""))
|
5658
6228
|
|
5659
6229
|
// Locate the specified elements
|
5660
6230
|
.find(selector) :
|
5661
6231
|
|
5662
6232
|
// If not, just inject the full result
|
5663
|
-
|
6233
|
+
responseText );
|
5664
6234
|
}
|
5665
6235
|
|
5666
6236
|
if ( callback ) {
|
5667
|
-
self.each( callback, [
|
6237
|
+
self.each( callback, [ responseText, status, jqXHR ] );
|
5668
6238
|
}
|
5669
6239
|
}
|
5670
6240
|
});
|
@@ -5673,42 +6243,42 @@ jQuery.fn.extend({
|
|
5673
6243
|
},
|
5674
6244
|
|
5675
6245
|
serialize: function() {
|
5676
|
-
return jQuery.param(this.serializeArray());
|
6246
|
+
return jQuery.param( this.serializeArray() );
|
5677
6247
|
},
|
5678
6248
|
|
5679
6249
|
serializeArray: function() {
|
5680
|
-
return this.map(function()
|
5681
|
-
return this.elements ? jQuery.makeArray(this.elements) : this;
|
6250
|
+
return this.map(function(){
|
6251
|
+
return this.elements ? jQuery.makeArray( this.elements ) : this;
|
5682
6252
|
})
|
5683
|
-
.filter(function()
|
6253
|
+
.filter(function(){
|
5684
6254
|
return this.name && !this.disabled &&
|
5685
|
-
(this.checked || rselectTextarea.test(this.nodeName) ||
|
5686
|
-
rinput.test(this.type));
|
6255
|
+
( this.checked || rselectTextarea.test( this.nodeName ) ||
|
6256
|
+
rinput.test( this.type ) );
|
5687
6257
|
})
|
5688
|
-
.map(function( i, elem )
|
5689
|
-
var val = jQuery(this).val();
|
6258
|
+
.map(function( i, elem ){
|
6259
|
+
var val = jQuery( this ).val();
|
5690
6260
|
|
5691
6261
|
return val == null ?
|
5692
6262
|
null :
|
5693
|
-
jQuery.isArray(val) ?
|
5694
|
-
jQuery.map( val, function( val, i )
|
5695
|
-
return { name: elem.name, value: val };
|
6263
|
+
jQuery.isArray( val ) ?
|
6264
|
+
jQuery.map( val, function( val, i ){
|
6265
|
+
return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
|
5696
6266
|
}) :
|
5697
|
-
{ name: elem.name, value: val };
|
6267
|
+
{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
|
5698
6268
|
}).get();
|
5699
6269
|
}
|
5700
6270
|
});
|
5701
6271
|
|
5702
6272
|
// Attach a bunch of functions for handling common AJAX events
|
5703
|
-
jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o )
|
5704
|
-
jQuery.fn[o] = function( f )
|
5705
|
-
return this.bind(o, f);
|
6273
|
+
jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
|
6274
|
+
jQuery.fn[ o ] = function( f ){
|
6275
|
+
return this.bind( o, f );
|
5706
6276
|
};
|
5707
|
-
});
|
6277
|
+
} );
|
5708
6278
|
|
5709
|
-
jQuery.
|
5710
|
-
|
5711
|
-
// shift arguments if data argument was
|
6279
|
+
jQuery.each( [ "get", "post" ], function( i, method ) {
|
6280
|
+
jQuery[ method ] = function( url, data, callback, type ) {
|
6281
|
+
// shift arguments if data argument was omitted
|
5712
6282
|
if ( jQuery.isFunction( data ) ) {
|
5713
6283
|
type = type || callback;
|
5714
6284
|
callback = data;
|
@@ -5716,45 +6286,35 @@ jQuery.extend({
|
|
5716
6286
|
}
|
5717
6287
|
|
5718
6288
|
return jQuery.ajax({
|
5719
|
-
type:
|
6289
|
+
type: method,
|
5720
6290
|
url: url,
|
5721
6291
|
data: data,
|
5722
6292
|
success: callback,
|
5723
6293
|
dataType: type
|
5724
6294
|
});
|
5725
|
-
}
|
6295
|
+
};
|
6296
|
+
} );
|
6297
|
+
|
6298
|
+
jQuery.extend({
|
5726
6299
|
|
5727
6300
|
getScript: function( url, callback ) {
|
5728
|
-
return jQuery.get(url, null, callback, "script");
|
6301
|
+
return jQuery.get( url, null, callback, "script" );
|
5729
6302
|
},
|
5730
6303
|
|
5731
6304
|
getJSON: function( url, data, callback ) {
|
5732
|
-
return jQuery.get(url, data, callback, "json");
|
5733
|
-
},
|
5734
|
-
|
5735
|
-
post: function( url, data, callback, type ) {
|
5736
|
-
// shift arguments if data argument was omited
|
5737
|
-
if ( jQuery.isFunction( data ) ) {
|
5738
|
-
type = type || callback;
|
5739
|
-
callback = data;
|
5740
|
-
data = {};
|
5741
|
-
}
|
5742
|
-
|
5743
|
-
return jQuery.ajax({
|
5744
|
-
type: "POST",
|
5745
|
-
url: url,
|
5746
|
-
data: data,
|
5747
|
-
success: callback,
|
5748
|
-
dataType: type
|
5749
|
-
});
|
6305
|
+
return jQuery.get( url, data, callback, "json" );
|
5750
6306
|
},
|
5751
6307
|
|
5752
6308
|
ajaxSetup: function( settings ) {
|
5753
|
-
jQuery.extend( jQuery.ajaxSettings, settings );
|
6309
|
+
jQuery.extend( true, jQuery.ajaxSettings, settings );
|
6310
|
+
if ( settings.context ) {
|
6311
|
+
jQuery.ajaxSettings.context = settings.context;
|
6312
|
+
}
|
5754
6313
|
},
|
5755
6314
|
|
5756
6315
|
ajaxSettings: {
|
5757
|
-
url:
|
6316
|
+
url: ajaxLocation,
|
6317
|
+
isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
|
5758
6318
|
global: true,
|
5759
6319
|
type: "GET",
|
5760
6320
|
contentType: "application/x-www-form-urlencoded",
|
@@ -5763,332 +6323,424 @@ jQuery.extend({
|
|
5763
6323
|
/*
|
5764
6324
|
timeout: 0,
|
5765
6325
|
data: null,
|
6326
|
+
dataType: null,
|
5766
6327
|
username: null,
|
5767
6328
|
password: null,
|
6329
|
+
cache: null,
|
5768
6330
|
traditional: false,
|
6331
|
+
headers: {},
|
6332
|
+
crossDomain: null,
|
5769
6333
|
*/
|
5770
|
-
|
5771
|
-
xhr: function() {
|
5772
|
-
return new window.XMLHttpRequest();
|
5773
|
-
},
|
6334
|
+
|
5774
6335
|
accepts: {
|
5775
6336
|
xml: "application/xml, text/xml",
|
5776
6337
|
html: "text/html",
|
5777
|
-
script: "text/javascript, application/javascript",
|
5778
|
-
json: "application/json, text/javascript",
|
5779
6338
|
text: "text/plain",
|
5780
|
-
|
5781
|
-
|
5782
|
-
|
6339
|
+
json: "application/json, text/javascript",
|
6340
|
+
"*": "*/*"
|
6341
|
+
},
|
5783
6342
|
|
5784
|
-
|
5785
|
-
|
5786
|
-
|
6343
|
+
contents: {
|
6344
|
+
xml: /xml/,
|
6345
|
+
html: /html/,
|
6346
|
+
json: /json/
|
6347
|
+
},
|
5787
6348
|
|
5788
|
-
|
6349
|
+
responseFields: {
|
6350
|
+
xml: "responseXML",
|
6351
|
+
text: "responseText"
|
6352
|
+
},
|
5789
6353
|
|
5790
|
-
//
|
5791
|
-
|
6354
|
+
// List of data converters
|
6355
|
+
// 1) key format is "source_type destination_type" (a single space in-between)
|
6356
|
+
// 2) the catchall symbol "*" can be used for source_type
|
6357
|
+
converters: {
|
6358
|
+
|
6359
|
+
// Convert anything to text
|
6360
|
+
"* text": window.String,
|
6361
|
+
|
6362
|
+
// Text to html (true = no transformation)
|
6363
|
+
"text html": true,
|
6364
|
+
|
6365
|
+
// Evaluate text as a json expression
|
6366
|
+
"text json": jQuery.parseJSON,
|
6367
|
+
|
6368
|
+
// Parse text as xml
|
6369
|
+
"text xml": jQuery.parseXML
|
6370
|
+
}
|
6371
|
+
},
|
6372
|
+
|
6373
|
+
ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
|
6374
|
+
ajaxTransport: addToPrefiltersOrTransports( transports ),
|
6375
|
+
|
6376
|
+
// Main method
|
6377
|
+
ajax: function( url, options ) {
|
6378
|
+
|
6379
|
+
// If url is an object, simulate pre-1.5 signature
|
6380
|
+
if ( typeof url === "object" ) {
|
6381
|
+
options = url;
|
6382
|
+
url = undefined;
|
6383
|
+
}
|
6384
|
+
|
6385
|
+
// Force options to be an object
|
6386
|
+
options = options || {};
|
6387
|
+
|
6388
|
+
var // Create the final options object
|
6389
|
+
s = jQuery.extend( true, {}, jQuery.ajaxSettings, options ),
|
6390
|
+
// Callbacks context
|
6391
|
+
// We force the original context if it exists
|
6392
|
+
// or take it from jQuery.ajaxSettings otherwise
|
6393
|
+
// (plain objects used as context get extended)
|
6394
|
+
callbackContext =
|
6395
|
+
( s.context = ( "context" in options ? options : jQuery.ajaxSettings ).context ) || s,
|
6396
|
+
// Context for global events
|
6397
|
+
// It's the callbackContext if one was provided in the options
|
6398
|
+
// and if it's a DOM node
|
6399
|
+
globalEventContext = callbackContext !== s && callbackContext.nodeType ?
|
6400
|
+
jQuery( callbackContext ) : jQuery.event,
|
6401
|
+
// Deferreds
|
6402
|
+
deferred = jQuery.Deferred(),
|
6403
|
+
completeDeferred = jQuery._Deferred(),
|
6404
|
+
// Status-dependent callbacks
|
6405
|
+
statusCode = s.statusCode || {},
|
6406
|
+
// ifModified key
|
6407
|
+
ifModifiedKey,
|
6408
|
+
// Headers (they are sent all at once)
|
6409
|
+
requestHeaders = {},
|
6410
|
+
// Response headers
|
6411
|
+
responseHeadersString,
|
6412
|
+
responseHeaders,
|
6413
|
+
// transport
|
6414
|
+
transport,
|
6415
|
+
// timeout handle
|
6416
|
+
timeoutTimer,
|
6417
|
+
// Cross-domain detection vars
|
6418
|
+
parts,
|
6419
|
+
// The jqXHR state
|
6420
|
+
state = 0,
|
6421
|
+
// To know if global events are to be dispatched
|
6422
|
+
fireGlobals,
|
6423
|
+
// Loop variable
|
6424
|
+
i,
|
6425
|
+
// Fake xhr
|
6426
|
+
jqXHR = {
|
6427
|
+
|
6428
|
+
readyState: 0,
|
6429
|
+
|
6430
|
+
// Caches the header
|
6431
|
+
setRequestHeader: function( name, value ) {
|
6432
|
+
if ( state === 0 ) {
|
6433
|
+
requestHeaders[ name.toLowerCase() ] = value;
|
6434
|
+
}
|
6435
|
+
return this;
|
6436
|
+
},
|
6437
|
+
|
6438
|
+
// Raw string
|
6439
|
+
getAllResponseHeaders: function() {
|
6440
|
+
return state === 2 ? responseHeadersString : null;
|
6441
|
+
},
|
6442
|
+
|
6443
|
+
// Builds headers hashtable if needed
|
6444
|
+
getResponseHeader: function( key ) {
|
6445
|
+
var match;
|
6446
|
+
if ( state === 2 ) {
|
6447
|
+
if ( !responseHeaders ) {
|
6448
|
+
responseHeaders = {};
|
6449
|
+
while( ( match = rheaders.exec( responseHeadersString ) ) ) {
|
6450
|
+
responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
|
6451
|
+
}
|
6452
|
+
}
|
6453
|
+
match = responseHeaders[ key.toLowerCase() ];
|
6454
|
+
}
|
6455
|
+
return match || null;
|
6456
|
+
},
|
6457
|
+
|
6458
|
+
// Cancel the request
|
6459
|
+
abort: function( statusText ) {
|
6460
|
+
statusText = statusText || "abort";
|
6461
|
+
if ( transport ) {
|
6462
|
+
transport.abort( statusText );
|
6463
|
+
}
|
6464
|
+
done( 0, statusText );
|
6465
|
+
return this;
|
6466
|
+
}
|
6467
|
+
};
|
5792
6468
|
|
5793
|
-
//
|
5794
|
-
|
5795
|
-
|
5796
|
-
|
6469
|
+
// Callback for when everything is done
|
6470
|
+
// It is defined here because jslint complains if it is declared
|
6471
|
+
// at the end of the function (which would be more logical and readable)
|
6472
|
+
function done( status, statusText, responses, headers) {
|
5797
6473
|
|
5798
|
-
|
5799
|
-
|
5800
|
-
|
5801
|
-
if ( !jsre.test( s.url ) ) {
|
5802
|
-
s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
|
5803
|
-
}
|
5804
|
-
} else if ( !s.data || !jsre.test(s.data) ) {
|
5805
|
-
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
|
6474
|
+
// Called once
|
6475
|
+
if ( state === 2 ) {
|
6476
|
+
return;
|
5806
6477
|
}
|
5807
|
-
s.dataType = "json";
|
5808
|
-
}
|
5809
6478
|
|
5810
|
-
|
5811
|
-
|
5812
|
-
jsonp = s.jsonpCallback || ("jsonp" + jsc++);
|
6479
|
+
// State is "done" now
|
6480
|
+
state = 2;
|
5813
6481
|
|
5814
|
-
//
|
5815
|
-
if (
|
5816
|
-
|
6482
|
+
// Clear timeout if it exists
|
6483
|
+
if ( timeoutTimer ) {
|
6484
|
+
clearTimeout( timeoutTimer );
|
5817
6485
|
}
|
5818
6486
|
|
5819
|
-
|
6487
|
+
// Dereference transport for early garbage collection
|
6488
|
+
// (no matter how long the jqXHR object will be used)
|
6489
|
+
transport = undefined;
|
5820
6490
|
|
5821
|
-
//
|
5822
|
-
|
5823
|
-
s.dataType = "script";
|
6491
|
+
// Cache response headers
|
6492
|
+
responseHeadersString = headers || "";
|
5824
6493
|
|
5825
|
-
//
|
5826
|
-
|
6494
|
+
// Set readyState
|
6495
|
+
jqXHR.readyState = status ? 4 : 0;
|
5827
6496
|
|
5828
|
-
|
5829
|
-
|
5830
|
-
|
6497
|
+
var isSuccess,
|
6498
|
+
success,
|
6499
|
+
error,
|
6500
|
+
response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
|
6501
|
+
lastModified,
|
6502
|
+
etag;
|
5831
6503
|
|
5832
|
-
|
5833
|
-
|
5834
|
-
window[ jsonp ] = undefined;
|
6504
|
+
// If successful, handle type chaining
|
6505
|
+
if ( status >= 200 && status < 300 || status === 304 ) {
|
5835
6506
|
|
5836
|
-
|
5837
|
-
|
5838
|
-
} catch( jsonpError ) {}
|
5839
|
-
}
|
6507
|
+
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
6508
|
+
if ( s.ifModified ) {
|
5840
6509
|
|
5841
|
-
|
5842
|
-
|
5843
|
-
|
5844
|
-
|
5845
|
-
|
5846
|
-
|
6510
|
+
if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
|
6511
|
+
jQuery.lastModified[ ifModifiedKey ] = lastModified;
|
6512
|
+
}
|
6513
|
+
if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
|
6514
|
+
jQuery.etag[ ifModifiedKey ] = etag;
|
6515
|
+
}
|
5847
6516
|
}
|
5848
|
-
};
|
5849
|
-
}
|
5850
|
-
|
5851
|
-
if ( s.dataType === "script" && s.cache === null ) {
|
5852
|
-
s.cache = false;
|
5853
|
-
}
|
5854
6517
|
|
5855
|
-
|
5856
|
-
|
6518
|
+
// If not modified
|
6519
|
+
if ( status === 304 ) {
|
5857
6520
|
|
5858
|
-
|
5859
|
-
|
6521
|
+
statusText = "notmodified";
|
6522
|
+
isSuccess = true;
|
5860
6523
|
|
5861
|
-
|
5862
|
-
|
5863
|
-
}
|
5864
|
-
|
5865
|
-
// If data is available, append data to url for GET/HEAD requests
|
5866
|
-
if ( s.data && noContent ) {
|
5867
|
-
s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
|
5868
|
-
}
|
5869
|
-
|
5870
|
-
// Watch for a new set of requests
|
5871
|
-
if ( s.global && jQuery.active++ === 0 ) {
|
5872
|
-
jQuery.event.trigger( "ajaxStart" );
|
5873
|
-
}
|
5874
|
-
|
5875
|
-
// Matches an absolute URL, and saves the domain
|
5876
|
-
var parts = rurl.exec( s.url ),
|
5877
|
-
remote = parts && (parts[1] && parts[1].toLowerCase() !== location.protocol || parts[2].toLowerCase() !== location.host);
|
5878
|
-
|
5879
|
-
// If we're requesting a remote document
|
5880
|
-
// and trying to load JSON or Script with a GET
|
5881
|
-
if ( s.dataType === "script" && type === "GET" && remote ) {
|
5882
|
-
var head = document.getElementsByTagName("head")[0] || document.documentElement;
|
5883
|
-
var script = document.createElement("script");
|
5884
|
-
if ( s.scriptCharset ) {
|
5885
|
-
script.charset = s.scriptCharset;
|
5886
|
-
}
|
5887
|
-
script.src = s.url;
|
5888
|
-
|
5889
|
-
// Handle Script loading
|
5890
|
-
if ( !jsonp ) {
|
5891
|
-
var done = false;
|
5892
|
-
|
5893
|
-
// Attach handlers for all browsers
|
5894
|
-
script.onload = script.onreadystatechange = function() {
|
5895
|
-
if ( !done && (!this.readyState ||
|
5896
|
-
this.readyState === "loaded" || this.readyState === "complete") ) {
|
5897
|
-
done = true;
|
5898
|
-
jQuery.handleSuccess( s, xhr, status, data );
|
5899
|
-
jQuery.handleComplete( s, xhr, status, data );
|
6524
|
+
// If we have data
|
6525
|
+
} else {
|
5900
6526
|
|
5901
|
-
|
5902
|
-
|
5903
|
-
|
5904
|
-
|
5905
|
-
|
6527
|
+
try {
|
6528
|
+
success = ajaxConvert( s, response );
|
6529
|
+
statusText = "success";
|
6530
|
+
isSuccess = true;
|
6531
|
+
} catch(e) {
|
6532
|
+
// We have a parsererror
|
6533
|
+
statusText = "parsererror";
|
6534
|
+
error = e;
|
5906
6535
|
}
|
5907
|
-
}
|
6536
|
+
}
|
6537
|
+
} else {
|
6538
|
+
// We extract error from statusText
|
6539
|
+
// then normalize statusText and status for non-aborts
|
6540
|
+
error = statusText;
|
6541
|
+
if( status ) {
|
6542
|
+
statusText = "error";
|
6543
|
+
if ( status < 0 ) {
|
6544
|
+
status = 0;
|
6545
|
+
}
|
6546
|
+
}
|
5908
6547
|
}
|
5909
6548
|
|
5910
|
-
//
|
5911
|
-
|
5912
|
-
|
5913
|
-
|
5914
|
-
// We handle everything using the script element injection
|
5915
|
-
return undefined;
|
5916
|
-
}
|
6549
|
+
// Set data for the fake xhr object
|
6550
|
+
jqXHR.status = status;
|
6551
|
+
jqXHR.statusText = statusText;
|
5917
6552
|
|
5918
|
-
|
6553
|
+
// Success/Error
|
6554
|
+
if ( isSuccess ) {
|
6555
|
+
deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
|
6556
|
+
} else {
|
6557
|
+
deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
|
6558
|
+
}
|
5919
6559
|
|
5920
|
-
|
5921
|
-
|
6560
|
+
// Status-dependent callbacks
|
6561
|
+
jqXHR.statusCode( statusCode );
|
6562
|
+
statusCode = undefined;
|
5922
6563
|
|
5923
|
-
|
5924
|
-
|
5925
|
-
|
6564
|
+
if ( fireGlobals ) {
|
6565
|
+
globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
|
6566
|
+
[ jqXHR, s, isSuccess ? success : error ] );
|
6567
|
+
}
|
5926
6568
|
|
5927
|
-
|
5928
|
-
|
5929
|
-
if ( s.username ) {
|
5930
|
-
xhr.open(type, s.url, s.async, s.username, s.password);
|
5931
|
-
} else {
|
5932
|
-
xhr.open(type, s.url, s.async);
|
5933
|
-
}
|
6569
|
+
// Complete
|
6570
|
+
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
|
5934
6571
|
|
5935
|
-
|
5936
|
-
|
5937
|
-
|
5938
|
-
|
5939
|
-
|
6572
|
+
if ( fireGlobals ) {
|
6573
|
+
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
|
6574
|
+
// Handle the global AJAX counter
|
6575
|
+
if ( !( --jQuery.active ) ) {
|
6576
|
+
jQuery.event.trigger( "ajaxStop" );
|
6577
|
+
}
|
5940
6578
|
}
|
6579
|
+
}
|
5941
6580
|
|
5942
|
-
|
5943
|
-
|
5944
|
-
|
5945
|
-
|
5946
|
-
|
6581
|
+
// Attach deferreds
|
6582
|
+
deferred.promise( jqXHR );
|
6583
|
+
jqXHR.success = jqXHR.done;
|
6584
|
+
jqXHR.error = jqXHR.fail;
|
6585
|
+
jqXHR.complete = completeDeferred.done;
|
5947
6586
|
|
5948
|
-
|
5949
|
-
|
6587
|
+
// Status-dependent callbacks
|
6588
|
+
jqXHR.statusCode = function( map ) {
|
6589
|
+
if ( map ) {
|
6590
|
+
var tmp;
|
6591
|
+
if ( state < 2 ) {
|
6592
|
+
for( tmp in map ) {
|
6593
|
+
statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
|
6594
|
+
}
|
6595
|
+
} else {
|
6596
|
+
tmp = map[ jqXHR.status ];
|
6597
|
+
jqXHR.then( tmp, tmp );
|
5950
6598
|
}
|
5951
6599
|
}
|
6600
|
+
return this;
|
6601
|
+
};
|
5952
6602
|
|
5953
|
-
|
5954
|
-
|
5955
|
-
|
5956
|
-
|
5957
|
-
|
6603
|
+
// Remove hash character (#7531: and string promotion)
|
6604
|
+
// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
|
6605
|
+
// We also use the url parameter if available
|
6606
|
+
s.url = ( "" + ( url || s.url ) ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
|
6607
|
+
|
6608
|
+
// Extract dataTypes list
|
6609
|
+
s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
|
6610
|
+
|
6611
|
+
// Determine if a cross-domain request is in order
|
6612
|
+
if ( !s.crossDomain ) {
|
6613
|
+
parts = rurl.exec( s.url.toLowerCase() );
|
6614
|
+
s.crossDomain = !!( parts &&
|
6615
|
+
( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
|
6616
|
+
( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
|
6617
|
+
( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
|
6618
|
+
);
|
6619
|
+
}
|
5958
6620
|
|
5959
|
-
|
5960
|
-
|
5961
|
-
|
5962
|
-
|
5963
|
-
} catch( headerError ) {}
|
6621
|
+
// Convert data if not already a string
|
6622
|
+
if ( s.data && s.processData && typeof s.data !== "string" ) {
|
6623
|
+
s.data = jQuery.param( s.data, s.traditional );
|
6624
|
+
}
|
5964
6625
|
|
5965
|
-
//
|
5966
|
-
|
5967
|
-
// Handle the global AJAX counter
|
5968
|
-
if ( s.global && jQuery.active-- === 1 ) {
|
5969
|
-
jQuery.event.trigger( "ajaxStop" );
|
5970
|
-
}
|
6626
|
+
// Apply prefilters
|
6627
|
+
inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
|
5971
6628
|
|
5972
|
-
|
5973
|
-
|
6629
|
+
// If request was aborted inside a prefiler, stop there
|
6630
|
+
if ( state === 2 ) {
|
5974
6631
|
return false;
|
5975
6632
|
}
|
5976
6633
|
|
5977
|
-
|
5978
|
-
|
5979
|
-
}
|
6634
|
+
// We can fire global events as of now if asked to
|
6635
|
+
fireGlobals = s.global;
|
5980
6636
|
|
5981
|
-
//
|
5982
|
-
|
5983
|
-
// The request was aborted
|
5984
|
-
if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
|
5985
|
-
// Opera doesn't call onreadystatechange before this point
|
5986
|
-
// so we simulate the call
|
5987
|
-
if ( !requestDone ) {
|
5988
|
-
jQuery.handleComplete( s, xhr, status, data );
|
5989
|
-
}
|
6637
|
+
// Uppercase the type
|
6638
|
+
s.type = s.type.toUpperCase();
|
5990
6639
|
|
5991
|
-
|
5992
|
-
|
5993
|
-
xhr.onreadystatechange = jQuery.noop;
|
5994
|
-
}
|
6640
|
+
// Determine if request has content
|
6641
|
+
s.hasContent = !rnoContent.test( s.type );
|
5995
6642
|
|
5996
|
-
|
5997
|
-
|
5998
|
-
|
5999
|
-
|
6643
|
+
// Watch for a new set of requests
|
6644
|
+
if ( fireGlobals && jQuery.active++ === 0 ) {
|
6645
|
+
jQuery.event.trigger( "ajaxStart" );
|
6646
|
+
}
|
6000
6647
|
|
6001
|
-
|
6002
|
-
|
6003
|
-
!jQuery.httpSuccess( xhr ) ?
|
6004
|
-
"error" :
|
6005
|
-
s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
|
6006
|
-
"notmodified" :
|
6007
|
-
"success";
|
6648
|
+
// More options handling for requests with no content
|
6649
|
+
if ( !s.hasContent ) {
|
6008
6650
|
|
6009
|
-
|
6651
|
+
// If data is available, append data to url
|
6652
|
+
if ( s.data ) {
|
6653
|
+
s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
|
6654
|
+
}
|
6010
6655
|
|
6011
|
-
|
6012
|
-
|
6013
|
-
try {
|
6014
|
-
// process the data (runs the xml through httpData regardless of callback)
|
6015
|
-
data = jQuery.httpData( xhr, s.dataType, s );
|
6016
|
-
} catch( parserError ) {
|
6017
|
-
status = "parsererror";
|
6018
|
-
errMsg = parserError;
|
6019
|
-
}
|
6020
|
-
}
|
6656
|
+
// Get ifModifiedKey before adding the anti-cache parameter
|
6657
|
+
ifModifiedKey = s.url;
|
6021
6658
|
|
6022
|
-
|
6023
|
-
|
6024
|
-
// JSONP handles its own success callback
|
6025
|
-
if ( !jsonp ) {
|
6026
|
-
jQuery.handleSuccess( s, xhr, status, data );
|
6027
|
-
}
|
6028
|
-
} else {
|
6029
|
-
jQuery.handleError( s, xhr, status, errMsg );
|
6030
|
-
}
|
6031
|
-
|
6032
|
-
// Fire the complete handlers
|
6033
|
-
if ( !jsonp ) {
|
6034
|
-
jQuery.handleComplete( s, xhr, status, data );
|
6035
|
-
}
|
6659
|
+
// Add anti-cache in url if needed
|
6660
|
+
if ( s.cache === false ) {
|
6036
6661
|
|
6037
|
-
|
6038
|
-
|
6039
|
-
|
6662
|
+
var ts = jQuery.now(),
|
6663
|
+
// try replacing _= if it is there
|
6664
|
+
ret = s.url.replace( rts, "$1_=" + ts );
|
6040
6665
|
|
6041
|
-
//
|
6042
|
-
|
6043
|
-
xhr = null;
|
6044
|
-
}
|
6666
|
+
// if nothing was replaced, add timestamp to the end
|
6667
|
+
s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
|
6045
6668
|
}
|
6046
|
-
}
|
6669
|
+
}
|
6047
6670
|
|
6048
|
-
//
|
6049
|
-
|
6050
|
-
|
6051
|
-
|
6052
|
-
xhr.abort = function() {
|
6053
|
-
if ( xhr ) {
|
6054
|
-
// oldAbort has no call property in IE7 so
|
6055
|
-
// just do it this way, which works in all
|
6056
|
-
// browsers
|
6057
|
-
Function.prototype.call.call( oldAbort, xhr );
|
6058
|
-
}
|
6671
|
+
// Set the correct header, if data is being sent
|
6672
|
+
if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
|
6673
|
+
requestHeaders[ "content-type" ] = s.contentType;
|
6674
|
+
}
|
6059
6675
|
|
6060
|
-
|
6061
|
-
|
6062
|
-
|
6676
|
+
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
6677
|
+
if ( s.ifModified ) {
|
6678
|
+
ifModifiedKey = ifModifiedKey || s.url;
|
6679
|
+
if ( jQuery.lastModified[ ifModifiedKey ] ) {
|
6680
|
+
requestHeaders[ "if-modified-since" ] = jQuery.lastModified[ ifModifiedKey ];
|
6681
|
+
}
|
6682
|
+
if ( jQuery.etag[ ifModifiedKey ] ) {
|
6683
|
+
requestHeaders[ "if-none-match" ] = jQuery.etag[ ifModifiedKey ];
|
6684
|
+
}
|
6685
|
+
}
|
6063
6686
|
|
6064
|
-
//
|
6065
|
-
|
6066
|
-
|
6067
|
-
|
6068
|
-
|
6069
|
-
|
6070
|
-
|
6071
|
-
|
6687
|
+
// Set the Accepts header for the server, depending on the dataType
|
6688
|
+
requestHeaders.accept = s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
|
6689
|
+
s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
|
6690
|
+
s.accepts[ "*" ];
|
6691
|
+
|
6692
|
+
// Check for headers option
|
6693
|
+
for ( i in s.headers ) {
|
6694
|
+
requestHeaders[ i.toLowerCase() ] = s.headers[ i ];
|
6072
6695
|
}
|
6073
6696
|
|
6074
|
-
//
|
6075
|
-
|
6076
|
-
|
6697
|
+
// Allow custom headers/mimetypes and early abort
|
6698
|
+
if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
|
6699
|
+
// Abort if not done already
|
6700
|
+
jqXHR.abort();
|
6701
|
+
return false;
|
6077
6702
|
|
6078
|
-
}
|
6079
|
-
jQuery.handleError( s, xhr, null, sendError );
|
6703
|
+
}
|
6080
6704
|
|
6081
|
-
|
6082
|
-
|
6705
|
+
// Install callbacks on deferreds
|
6706
|
+
for ( i in { success: 1, error: 1, complete: 1 } ) {
|
6707
|
+
jqXHR[ i ]( s[ i ] );
|
6083
6708
|
}
|
6084
6709
|
|
6085
|
-
//
|
6086
|
-
|
6087
|
-
|
6710
|
+
// Get transport
|
6711
|
+
transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
|
6712
|
+
|
6713
|
+
// If no transport, we auto-abort
|
6714
|
+
if ( !transport ) {
|
6715
|
+
done( -1, "No Transport" );
|
6716
|
+
} else {
|
6717
|
+
// Set state as sending
|
6718
|
+
state = jqXHR.readyState = 1;
|
6719
|
+
// Send global event
|
6720
|
+
if ( fireGlobals ) {
|
6721
|
+
globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
|
6722
|
+
}
|
6723
|
+
// Timeout
|
6724
|
+
if ( s.async && s.timeout > 0 ) {
|
6725
|
+
timeoutTimer = setTimeout( function(){
|
6726
|
+
jqXHR.abort( "timeout" );
|
6727
|
+
}, s.timeout );
|
6728
|
+
}
|
6729
|
+
|
6730
|
+
try {
|
6731
|
+
transport.send( requestHeaders, done );
|
6732
|
+
} catch (e) {
|
6733
|
+
// Propagate exception as error if not done
|
6734
|
+
if ( status < 2 ) {
|
6735
|
+
done( -1, e );
|
6736
|
+
// Simply rethrow otherwise
|
6737
|
+
} else {
|
6738
|
+
jQuery.error( e );
|
6739
|
+
}
|
6740
|
+
}
|
6088
6741
|
}
|
6089
6742
|
|
6090
|
-
|
6091
|
-
return xhr;
|
6743
|
+
return jqXHR;
|
6092
6744
|
},
|
6093
6745
|
|
6094
6746
|
// Serialize an array of form elements or a set of
|
@@ -6097,37 +6749,37 @@ jQuery.extend({
|
|
6097
6749
|
var s = [],
|
6098
6750
|
add = function( key, value ) {
|
6099
6751
|
// If value is a function, invoke it and return its value
|
6100
|
-
value = jQuery.isFunction(value) ? value() : value;
|
6101
|
-
s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
|
6752
|
+
value = jQuery.isFunction( value ) ? value() : value;
|
6753
|
+
s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
|
6102
6754
|
};
|
6103
|
-
|
6755
|
+
|
6104
6756
|
// Set traditional to true for jQuery <= 1.3.2 behavior.
|
6105
6757
|
if ( traditional === undefined ) {
|
6106
6758
|
traditional = jQuery.ajaxSettings.traditional;
|
6107
6759
|
}
|
6108
|
-
|
6760
|
+
|
6109
6761
|
// If an array was passed in, assume that it is an array of form elements.
|
6110
|
-
if ( jQuery.isArray(a) || a.jquery ) {
|
6762
|
+
if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
|
6111
6763
|
// Serialize the form elements
|
6112
6764
|
jQuery.each( a, function() {
|
6113
6765
|
add( this.name, this.value );
|
6114
|
-
});
|
6115
|
-
|
6766
|
+
} );
|
6767
|
+
|
6116
6768
|
} else {
|
6117
6769
|
// If traditional, encode the "old" way (the way 1.3.2 or older
|
6118
6770
|
// did it), otherwise encode params recursively.
|
6119
6771
|
for ( var prefix in a ) {
|
6120
|
-
buildParams( prefix, a[prefix], traditional, add );
|
6772
|
+
buildParams( prefix, a[ prefix ], traditional, add );
|
6121
6773
|
}
|
6122
6774
|
}
|
6123
6775
|
|
6124
6776
|
// Return the resulting serialization
|
6125
|
-
return s.join("&").replace(r20, "+");
|
6777
|
+
return s.join( "&" ).replace( r20, "+" );
|
6126
6778
|
}
|
6127
6779
|
});
|
6128
6780
|
|
6129
6781
|
function buildParams( prefix, obj, traditional, add ) {
|
6130
|
-
if ( jQuery.isArray(obj) && obj.length ) {
|
6782
|
+
if ( jQuery.isArray( obj ) && obj.length ) {
|
6131
6783
|
// Serialize array item.
|
6132
6784
|
jQuery.each( obj, function( i, v ) {
|
6133
6785
|
if ( traditional || rbracket.test( prefix ) ) {
|
@@ -6145,18 +6797,20 @@ function buildParams( prefix, obj, traditional, add ) {
|
|
6145
6797
|
buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
|
6146
6798
|
}
|
6147
6799
|
});
|
6148
|
-
|
6800
|
+
|
6149
6801
|
} else if ( !traditional && obj != null && typeof obj === "object" ) {
|
6150
|
-
|
6802
|
+
// If we see an array here, it is empty and should be treated as an empty
|
6803
|
+
// object
|
6804
|
+
if ( jQuery.isArray( obj ) || jQuery.isEmptyObject( obj ) ) {
|
6151
6805
|
add( prefix, "" );
|
6152
6806
|
|
6153
6807
|
// Serialize object item.
|
6154
6808
|
} else {
|
6155
|
-
|
6156
|
-
buildParams( prefix + "[" +
|
6157
|
-
}
|
6809
|
+
for ( var name in obj ) {
|
6810
|
+
buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
|
6811
|
+
}
|
6158
6812
|
}
|
6159
|
-
|
6813
|
+
|
6160
6814
|
} else {
|
6161
6815
|
// Serialize scalar item.
|
6162
6816
|
add( prefix, obj );
|
@@ -6172,136 +6826,582 @@ jQuery.extend({
|
|
6172
6826
|
|
6173
6827
|
// Last-Modified header cache for next request
|
6174
6828
|
lastModified: {},
|
6175
|
-
etag: {}
|
6829
|
+
etag: {}
|
6176
6830
|
|
6177
|
-
|
6178
|
-
// If a local callback was specified, fire it
|
6179
|
-
if ( s.error ) {
|
6180
|
-
s.error.call( s.context, xhr, status, e );
|
6181
|
-
}
|
6831
|
+
});
|
6182
6832
|
|
6183
|
-
|
6184
|
-
|
6185
|
-
|
6186
|
-
|
6187
|
-
|
6833
|
+
/* Handles responses to an ajax request:
|
6834
|
+
* - sets all responseXXX fields accordingly
|
6835
|
+
* - finds the right dataType (mediates between content-type and expected dataType)
|
6836
|
+
* - returns the corresponding response
|
6837
|
+
*/
|
6838
|
+
function ajaxHandleResponses( s, jqXHR, responses ) {
|
6188
6839
|
|
6189
|
-
|
6190
|
-
|
6191
|
-
|
6192
|
-
|
6193
|
-
|
6840
|
+
var contents = s.contents,
|
6841
|
+
dataTypes = s.dataTypes,
|
6842
|
+
responseFields = s.responseFields,
|
6843
|
+
ct,
|
6844
|
+
type,
|
6845
|
+
finalDataType,
|
6846
|
+
firstDataType;
|
6194
6847
|
|
6195
|
-
|
6196
|
-
|
6197
|
-
|
6848
|
+
// Fill responseXXX fields
|
6849
|
+
for( type in responseFields ) {
|
6850
|
+
if ( type in responses ) {
|
6851
|
+
jqXHR[ responseFields[type] ] = responses[ type ];
|
6198
6852
|
}
|
6199
|
-
}
|
6853
|
+
}
|
6200
6854
|
|
6201
|
-
|
6202
|
-
|
6203
|
-
|
6204
|
-
|
6855
|
+
// Remove auto dataType and get content-type in the process
|
6856
|
+
while( dataTypes[ 0 ] === "*" ) {
|
6857
|
+
dataTypes.shift();
|
6858
|
+
if ( ct === undefined ) {
|
6859
|
+
ct = jqXHR.getResponseHeader( "content-type" );
|
6205
6860
|
}
|
6861
|
+
}
|
6206
6862
|
|
6207
|
-
|
6208
|
-
|
6209
|
-
|
6863
|
+
// Check if we're dealing with a known content-type
|
6864
|
+
if ( ct ) {
|
6865
|
+
for ( type in contents ) {
|
6866
|
+
if ( contents[ type ] && contents[ type ].test( ct ) ) {
|
6867
|
+
dataTypes.unshift( type );
|
6868
|
+
break;
|
6869
|
+
}
|
6210
6870
|
}
|
6871
|
+
}
|
6211
6872
|
|
6212
|
-
|
6213
|
-
|
6214
|
-
|
6873
|
+
// Check to see if we have a response for the expected dataType
|
6874
|
+
if ( dataTypes[ 0 ] in responses ) {
|
6875
|
+
finalDataType = dataTypes[ 0 ];
|
6876
|
+
} else {
|
6877
|
+
// Try convertible dataTypes
|
6878
|
+
for ( type in responses ) {
|
6879
|
+
if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
|
6880
|
+
finalDataType = type;
|
6881
|
+
break;
|
6882
|
+
}
|
6883
|
+
if ( !firstDataType ) {
|
6884
|
+
firstDataType = type;
|
6885
|
+
}
|
6215
6886
|
}
|
6216
|
-
|
6217
|
-
|
6218
|
-
|
6219
|
-
(s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args);
|
6220
|
-
},
|
6887
|
+
// Or just use first one
|
6888
|
+
finalDataType = finalDataType || firstDataType;
|
6889
|
+
}
|
6221
6890
|
|
6222
|
-
//
|
6223
|
-
|
6224
|
-
|
6225
|
-
|
6226
|
-
|
6227
|
-
|
6228
|
-
|
6229
|
-
|
6891
|
+
// If we found a dataType
|
6892
|
+
// We add the dataType to the list if needed
|
6893
|
+
// and return the corresponding response
|
6894
|
+
if ( finalDataType ) {
|
6895
|
+
if ( finalDataType !== dataTypes[ 0 ] ) {
|
6896
|
+
dataTypes.unshift( finalDataType );
|
6897
|
+
}
|
6898
|
+
return responses[ finalDataType ];
|
6899
|
+
}
|
6900
|
+
}
|
6230
6901
|
|
6231
|
-
|
6232
|
-
|
6902
|
+
// Chain conversions given the request and the original response
|
6903
|
+
function ajaxConvert( s, response ) {
|
6233
6904
|
|
6234
|
-
//
|
6235
|
-
|
6236
|
-
|
6237
|
-
|
6905
|
+
// Apply the dataFilter if provided
|
6906
|
+
if ( s.dataFilter ) {
|
6907
|
+
response = s.dataFilter( response, s.dataType );
|
6908
|
+
}
|
6238
6909
|
|
6239
|
-
|
6240
|
-
|
6910
|
+
var dataTypes = s.dataTypes,
|
6911
|
+
converters = {},
|
6912
|
+
i,
|
6913
|
+
key,
|
6914
|
+
length = dataTypes.length,
|
6915
|
+
tmp,
|
6916
|
+
// Current and previous dataTypes
|
6917
|
+
current = dataTypes[ 0 ],
|
6918
|
+
prev,
|
6919
|
+
// Conversion expression
|
6920
|
+
conversion,
|
6921
|
+
// Conversion function
|
6922
|
+
conv,
|
6923
|
+
// Conversion functions (transitive conversion)
|
6924
|
+
conv1,
|
6925
|
+
conv2;
|
6926
|
+
|
6927
|
+
// For each dataType in the chain
|
6928
|
+
for( i = 1; i < length; i++ ) {
|
6929
|
+
|
6930
|
+
// Create converters map
|
6931
|
+
// with lowercased keys
|
6932
|
+
if ( i === 1 ) {
|
6933
|
+
for( key in s.converters ) {
|
6934
|
+
if( typeof key === "string" ) {
|
6935
|
+
converters[ key.toLowerCase() ] = s.converters[ key ];
|
6936
|
+
}
|
6937
|
+
}
|
6241
6938
|
}
|
6242
6939
|
|
6243
|
-
|
6244
|
-
|
6940
|
+
// Get the dataTypes
|
6941
|
+
prev = current;
|
6942
|
+
current = dataTypes[ i ];
|
6943
|
+
|
6944
|
+
// If current is auto dataType, update it to prev
|
6945
|
+
if( current === "*" ) {
|
6946
|
+
current = prev;
|
6947
|
+
// If no auto and dataTypes are actually different
|
6948
|
+
} else if ( prev !== "*" && prev !== current ) {
|
6949
|
+
|
6950
|
+
// Get the converter
|
6951
|
+
conversion = prev + " " + current;
|
6952
|
+
conv = converters[ conversion ] || converters[ "* " + current ];
|
6953
|
+
|
6954
|
+
// If there is no direct converter, search transitively
|
6955
|
+
if ( !conv ) {
|
6956
|
+
conv2 = undefined;
|
6957
|
+
for( conv1 in converters ) {
|
6958
|
+
tmp = conv1.split( " " );
|
6959
|
+
if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
|
6960
|
+
conv2 = converters[ tmp[1] + " " + current ];
|
6961
|
+
if ( conv2 ) {
|
6962
|
+
conv1 = converters[ conv1 ];
|
6963
|
+
if ( conv1 === true ) {
|
6964
|
+
conv = conv2;
|
6965
|
+
} else if ( conv2 === true ) {
|
6966
|
+
conv = conv1;
|
6967
|
+
}
|
6968
|
+
break;
|
6969
|
+
}
|
6970
|
+
}
|
6971
|
+
}
|
6972
|
+
}
|
6973
|
+
// If we found no converter, dispatch an error
|
6974
|
+
if ( !( conv || conv2 ) ) {
|
6975
|
+
jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
|
6976
|
+
}
|
6977
|
+
// If found converter is not an equivalence
|
6978
|
+
if ( conv !== true ) {
|
6979
|
+
// Convert with 1 or 2 converters accordingly
|
6980
|
+
response = conv ? conv( response ) : conv2( conv1(response) );
|
6981
|
+
}
|
6245
6982
|
}
|
6983
|
+
}
|
6984
|
+
return response;
|
6985
|
+
}
|
6246
6986
|
|
6247
|
-
|
6248
|
-
},
|
6987
|
+
})( jQuery );
|
6249
6988
|
|
6250
|
-
httpData: function( xhr, type, s ) {
|
6251
|
-
var ct = xhr.getResponseHeader("content-type") || "",
|
6252
|
-
xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
|
6253
|
-
data = xml ? xhr.responseXML : xhr.responseText;
|
6254
6989
|
|
6255
|
-
|
6256
|
-
jQuery.error( "parsererror" );
|
6257
|
-
}
|
6990
|
+
(function( jQuery ) {
|
6258
6991
|
|
6259
|
-
|
6260
|
-
|
6261
|
-
if ( s && s.dataFilter ) {
|
6262
|
-
data = s.dataFilter( data, type );
|
6263
|
-
}
|
6992
|
+
var jsc = jQuery.now(),
|
6993
|
+
jsre = /(\=)\?(&|$)|()\?\?()/i;
|
6264
6994
|
|
6265
|
-
|
6266
|
-
|
6267
|
-
|
6268
|
-
|
6269
|
-
|
6995
|
+
// Default jsonp settings
|
6996
|
+
jQuery.ajaxSetup({
|
6997
|
+
jsonp: "callback",
|
6998
|
+
jsonpCallback: function() {
|
6999
|
+
return jQuery.expando + "_" + ( jsc++ );
|
7000
|
+
}
|
7001
|
+
});
|
7002
|
+
|
7003
|
+
// Detect, normalize options and install callbacks for jsonp requests
|
7004
|
+
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
|
7005
|
+
|
7006
|
+
var dataIsString = ( typeof s.data === "string" );
|
7007
|
+
|
7008
|
+
if ( s.dataTypes[ 0 ] === "jsonp" ||
|
7009
|
+
originalSettings.jsonpCallback ||
|
7010
|
+
originalSettings.jsonp != null ||
|
7011
|
+
s.jsonp !== false && ( jsre.test( s.url ) ||
|
7012
|
+
dataIsString && jsre.test( s.data ) ) ) {
|
7013
|
+
|
7014
|
+
var responseContainer,
|
7015
|
+
jsonpCallback = s.jsonpCallback =
|
7016
|
+
jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
|
7017
|
+
previous = window[ jsonpCallback ],
|
7018
|
+
url = s.url,
|
7019
|
+
data = s.data,
|
7020
|
+
replace = "$1" + jsonpCallback + "$2",
|
7021
|
+
cleanUp = function() {
|
7022
|
+
// Set callback back to previous value
|
7023
|
+
window[ jsonpCallback ] = previous;
|
7024
|
+
// Call if it was a function and we have a response
|
7025
|
+
if ( responseContainer && jQuery.isFunction( previous ) ) {
|
7026
|
+
window[ jsonpCallback ]( responseContainer[ 0 ] );
|
7027
|
+
}
|
7028
|
+
};
|
6270
7029
|
|
6271
|
-
|
6272
|
-
|
6273
|
-
|
7030
|
+
if ( s.jsonp !== false ) {
|
7031
|
+
url = url.replace( jsre, replace );
|
7032
|
+
if ( s.url === url ) {
|
7033
|
+
if ( dataIsString ) {
|
7034
|
+
data = data.replace( jsre, replace );
|
7035
|
+
}
|
7036
|
+
if ( s.data === data ) {
|
7037
|
+
// Add callback manually
|
7038
|
+
url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
|
7039
|
+
}
|
6274
7040
|
}
|
6275
7041
|
}
|
6276
7042
|
|
6277
|
-
|
7043
|
+
s.url = url;
|
7044
|
+
s.data = data;
|
7045
|
+
|
7046
|
+
// Install callback
|
7047
|
+
window[ jsonpCallback ] = function( response ) {
|
7048
|
+
responseContainer = [ response ];
|
7049
|
+
};
|
7050
|
+
|
7051
|
+
// Install cleanUp function
|
7052
|
+
jqXHR.then( cleanUp, cleanUp );
|
7053
|
+
|
7054
|
+
// Use data converter to retrieve json after script execution
|
7055
|
+
s.converters["script json"] = function() {
|
7056
|
+
if ( !responseContainer ) {
|
7057
|
+
jQuery.error( jsonpCallback + " was not called" );
|
7058
|
+
}
|
7059
|
+
return responseContainer[ 0 ];
|
7060
|
+
};
|
7061
|
+
|
7062
|
+
// force json dataType
|
7063
|
+
s.dataTypes[ 0 ] = "json";
|
7064
|
+
|
7065
|
+
// Delegate to script
|
7066
|
+
return "script";
|
6278
7067
|
}
|
7068
|
+
} );
|
6279
7069
|
|
6280
|
-
});
|
7070
|
+
})( jQuery );
|
6281
7071
|
|
6282
|
-
|
6283
|
-
|
6284
|
-
|
6285
|
-
|
6286
|
-
|
6287
|
-
|
6288
|
-
|
6289
|
-
|
6290
|
-
|
6291
|
-
|
6292
|
-
|
6293
|
-
|
6294
|
-
|
7072
|
+
|
7073
|
+
(function( jQuery ) {
|
7074
|
+
|
7075
|
+
// Install script dataType
|
7076
|
+
jQuery.ajaxSetup({
|
7077
|
+
accepts: {
|
7078
|
+
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
|
7079
|
+
},
|
7080
|
+
contents: {
|
7081
|
+
script: /javascript|ecmascript/
|
7082
|
+
},
|
7083
|
+
converters: {
|
7084
|
+
"text script": function( text ) {
|
7085
|
+
jQuery.globalEval( text );
|
7086
|
+
return text;
|
6295
7087
|
}
|
7088
|
+
}
|
7089
|
+
});
|
6296
7090
|
|
6297
|
-
|
6298
|
-
|
6299
|
-
|
6300
|
-
|
7091
|
+
// Handle cache's special case and global
|
7092
|
+
jQuery.ajaxPrefilter( "script", function( s ) {
|
7093
|
+
if ( s.cache === undefined ) {
|
7094
|
+
s.cache = false;
|
7095
|
+
}
|
7096
|
+
if ( s.crossDomain ) {
|
7097
|
+
s.type = "GET";
|
7098
|
+
s.global = false;
|
7099
|
+
}
|
7100
|
+
} );
|
7101
|
+
|
7102
|
+
// Bind script tag hack transport
|
7103
|
+
jQuery.ajaxTransport( "script", function(s) {
|
7104
|
+
|
7105
|
+
// This transport only deals with cross domain requests
|
7106
|
+
if ( s.crossDomain ) {
|
7107
|
+
|
7108
|
+
var script,
|
7109
|
+
head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
|
7110
|
+
|
7111
|
+
return {
|
7112
|
+
|
7113
|
+
send: function( _, callback ) {
|
7114
|
+
|
7115
|
+
script = document.createElement( "script" );
|
7116
|
+
|
7117
|
+
script.async = "async";
|
7118
|
+
|
7119
|
+
if ( s.scriptCharset ) {
|
7120
|
+
script.charset = s.scriptCharset;
|
7121
|
+
}
|
7122
|
+
|
7123
|
+
script.src = s.url;
|
7124
|
+
|
7125
|
+
// Attach handlers for all browsers
|
7126
|
+
script.onload = script.onreadystatechange = function( _, isAbort ) {
|
7127
|
+
|
7128
|
+
if ( !script.readyState || /loaded|complete/.test( script.readyState ) ) {
|
7129
|
+
|
7130
|
+
// Handle memory leak in IE
|
7131
|
+
script.onload = script.onreadystatechange = null;
|
7132
|
+
|
7133
|
+
// Remove the script
|
7134
|
+
if ( head && script.parentNode ) {
|
7135
|
+
head.removeChild( script );
|
7136
|
+
}
|
7137
|
+
|
7138
|
+
// Dereference the script
|
7139
|
+
script = undefined;
|
7140
|
+
|
7141
|
+
// Callback if not abort
|
7142
|
+
if ( !isAbort ) {
|
7143
|
+
callback( 200, "success" );
|
7144
|
+
}
|
7145
|
+
}
|
7146
|
+
};
|
7147
|
+
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
|
7148
|
+
// This arises when a base node is used (#2709 and #4378).
|
7149
|
+
head.insertBefore( script, head.firstChild );
|
7150
|
+
},
|
7151
|
+
|
7152
|
+
abort: function() {
|
7153
|
+
if ( script ) {
|
7154
|
+
script.onload( 0, 1 );
|
7155
|
+
}
|
7156
|
+
}
|
7157
|
+
};
|
7158
|
+
}
|
7159
|
+
} );
|
7160
|
+
|
7161
|
+
})( jQuery );
|
7162
|
+
|
7163
|
+
|
7164
|
+
(function( jQuery ) {
|
7165
|
+
|
7166
|
+
// Functions to create xhrs
|
7167
|
+
function createStandardXHR() {
|
7168
|
+
try {
|
7169
|
+
return new window.XMLHttpRequest();
|
7170
|
+
} catch( e ) {}
|
6301
7171
|
}
|
6302
7172
|
|
6303
|
-
|
6304
|
-
|
7173
|
+
function createActiveXHR() {
|
7174
|
+
try {
|
7175
|
+
return new window.ActiveXObject("Microsoft.XMLHTTP");
|
7176
|
+
} catch( e ) {}
|
7177
|
+
}
|
7178
|
+
|
7179
|
+
var // Next active xhr id
|
7180
|
+
xhrId = jQuery.now(),
|
7181
|
+
|
7182
|
+
// active xhrs
|
7183
|
+
xhrs = {},
|
7184
|
+
|
7185
|
+
// #5280: see below
|
7186
|
+
xhrUnloadAbortInstalled,
|
7187
|
+
|
7188
|
+
// XHR used to determine supports properties
|
7189
|
+
testXHR;
|
7190
|
+
|
7191
|
+
// Create the request object
|
7192
|
+
// (This is still attached to ajaxSettings for backward compatibility)
|
7193
|
+
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
|
7194
|
+
/* Microsoft failed to properly
|
7195
|
+
* implement the XMLHttpRequest in IE7 (can't request local files),
|
7196
|
+
* so we use the ActiveXObject when it is available
|
7197
|
+
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so
|
7198
|
+
* we need a fallback.
|
7199
|
+
*/
|
7200
|
+
function() {
|
7201
|
+
return !this.isLocal && createStandardXHR() || createActiveXHR();
|
7202
|
+
} :
|
7203
|
+
// For all other browsers, use the standard XMLHttpRequest object
|
7204
|
+
createStandardXHR;
|
7205
|
+
|
7206
|
+
// Test if we can create an xhr object
|
7207
|
+
testXHR = jQuery.ajaxSettings.xhr();
|
7208
|
+
jQuery.support.ajax = !!testXHR;
|
7209
|
+
|
7210
|
+
// Does this browser support crossDomain XHR requests
|
7211
|
+
jQuery.support.cors = testXHR && ( "withCredentials" in testXHR );
|
7212
|
+
|
7213
|
+
// No need for the temporary xhr anymore
|
7214
|
+
testXHR = undefined;
|
7215
|
+
|
7216
|
+
// Create transport if the browser can provide an xhr
|
7217
|
+
if ( jQuery.support.ajax ) {
|
7218
|
+
|
7219
|
+
jQuery.ajaxTransport(function( s ) {
|
7220
|
+
// Cross domain only allowed if supported through XMLHttpRequest
|
7221
|
+
if ( !s.crossDomain || jQuery.support.cors ) {
|
7222
|
+
|
7223
|
+
var callback;
|
7224
|
+
|
7225
|
+
return {
|
7226
|
+
send: function( headers, complete ) {
|
7227
|
+
|
7228
|
+
// #5280: we need to abort on unload or IE will keep connections alive
|
7229
|
+
if ( !xhrUnloadAbortInstalled ) {
|
7230
|
+
|
7231
|
+
xhrUnloadAbortInstalled = 1;
|
7232
|
+
|
7233
|
+
jQuery(window).bind( "unload", function() {
|
7234
|
+
|
7235
|
+
// Abort all pending requests
|
7236
|
+
jQuery.each( xhrs, function( _, xhr ) {
|
7237
|
+
if ( xhr.onreadystatechange ) {
|
7238
|
+
xhr.onreadystatechange( 1 );
|
7239
|
+
}
|
7240
|
+
} );
|
7241
|
+
|
7242
|
+
} );
|
7243
|
+
}
|
7244
|
+
|
7245
|
+
// Get a new xhr
|
7246
|
+
var xhr = s.xhr(),
|
7247
|
+
handle,
|
7248
|
+
i;
|
7249
|
+
|
7250
|
+
// Open the socket
|
7251
|
+
// Passing null username, generates a login popup on Opera (#2865)
|
7252
|
+
if ( s.username ) {
|
7253
|
+
xhr.open( s.type, s.url, s.async, s.username, s.password );
|
7254
|
+
} else {
|
7255
|
+
xhr.open( s.type, s.url, s.async );
|
7256
|
+
}
|
7257
|
+
|
7258
|
+
// Apply custom fields if provided
|
7259
|
+
if ( s.xhrFields ) {
|
7260
|
+
for ( i in s.xhrFields ) {
|
7261
|
+
xhr[ i ] = s.xhrFields[ i ];
|
7262
|
+
}
|
7263
|
+
}
|
7264
|
+
|
7265
|
+
// Requested-With header
|
7266
|
+
// Not set for crossDomain requests with no content
|
7267
|
+
// (see why at http://trac.dojotoolkit.org/ticket/9486)
|
7268
|
+
// Won't change header if already provided
|
7269
|
+
if ( !( s.crossDomain && !s.hasContent ) && !headers["x-requested-with"] ) {
|
7270
|
+
headers[ "x-requested-with" ] = "XMLHttpRequest";
|
7271
|
+
}
|
7272
|
+
|
7273
|
+
// Need an extra try/catch for cross domain requests in Firefox 3
|
7274
|
+
try {
|
7275
|
+
jQuery.each( headers, function( key, value ) {
|
7276
|
+
xhr.setRequestHeader( key, value );
|
7277
|
+
} );
|
7278
|
+
} catch( _ ) {}
|
7279
|
+
|
7280
|
+
// Do send the request
|
7281
|
+
// This may raise an exception which is actually
|
7282
|
+
// handled in jQuery.ajax (so no try/catch here)
|
7283
|
+
xhr.send( ( s.hasContent && s.data ) || null );
|
7284
|
+
|
7285
|
+
// Listener
|
7286
|
+
callback = function( _, isAbort ) {
|
7287
|
+
|
7288
|
+
var status,
|
7289
|
+
statusText,
|
7290
|
+
responseHeaders,
|
7291
|
+
responses,
|
7292
|
+
xml;
|
7293
|
+
|
7294
|
+
// Firefox throws exceptions when accessing properties
|
7295
|
+
// of an xhr when a network error occured
|
7296
|
+
// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
|
7297
|
+
try {
|
7298
|
+
|
7299
|
+
// Was never called and is aborted or complete
|
7300
|
+
if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
|
7301
|
+
|
7302
|
+
// Only called once
|
7303
|
+
callback = undefined;
|
7304
|
+
|
7305
|
+
// Do not keep as active anymore
|
7306
|
+
if ( handle ) {
|
7307
|
+
xhr.onreadystatechange = jQuery.noop;
|
7308
|
+
delete xhrs[ handle ];
|
7309
|
+
}
|
7310
|
+
|
7311
|
+
// If it's an abort
|
7312
|
+
if ( isAbort ) {
|
7313
|
+
// Abort it manually if needed
|
7314
|
+
if ( xhr.readyState !== 4 ) {
|
7315
|
+
xhr.abort();
|
7316
|
+
}
|
7317
|
+
} else {
|
7318
|
+
// Get info
|
7319
|
+
status = xhr.status;
|
7320
|
+
responseHeaders = xhr.getAllResponseHeaders();
|
7321
|
+
responses = {};
|
7322
|
+
xml = xhr.responseXML;
|
7323
|
+
|
7324
|
+
// Construct response list
|
7325
|
+
if ( xml && xml.documentElement /* #4958 */ ) {
|
7326
|
+
responses.xml = xml;
|
7327
|
+
}
|
7328
|
+
responses.text = xhr.responseText;
|
7329
|
+
|
7330
|
+
// Firefox throws an exception when accessing
|
7331
|
+
// statusText for faulty cross-domain requests
|
7332
|
+
try {
|
7333
|
+
statusText = xhr.statusText;
|
7334
|
+
} catch( e ) {
|
7335
|
+
// We normalize with Webkit giving an empty statusText
|
7336
|
+
statusText = "";
|
7337
|
+
}
|
7338
|
+
|
7339
|
+
// Filter status for non standard behaviors
|
7340
|
+
|
7341
|
+
// IE - #1450: sometimes returns 1223 when it should be 204
|
7342
|
+
if ( status === 1223 ) {
|
7343
|
+
status = 204;
|
7344
|
+
// Various - #8177: a Not Modified response was received
|
7345
|
+
// yet no conditional request headers was provided
|
7346
|
+
} else if ( status === 304 &&
|
7347
|
+
!headers[ "if-modified-since" ] &&
|
7348
|
+
!headers[ "if-none-match" ] ) {
|
7349
|
+
status = 200;
|
7350
|
+
// Status 0 encompasses several cases
|
7351
|
+
} else if ( !status ) {
|
7352
|
+
// Cross-domain
|
7353
|
+
if ( s.crossDomain ) {
|
7354
|
+
if ( !s.statusText ) {
|
7355
|
+
// FF, Webkit (other?): There is no status text for errors
|
7356
|
+
// 302 is the most generic cross-domain status code
|
7357
|
+
// for errors, could be anything really (even a real 0)
|
7358
|
+
status = 302;
|
7359
|
+
}
|
7360
|
+
// All same-domain: for local files, 0 is a success
|
7361
|
+
} else if( s.isLocal ) {
|
7362
|
+
status = 200;
|
7363
|
+
// Opera: this notifies success for all requests
|
7364
|
+
// (verified in 11.01). Patch welcome.
|
7365
|
+
}
|
7366
|
+
// Opera - #6060: sets status as 0 for 304
|
7367
|
+
// Patch welcome.
|
7368
|
+
}
|
7369
|
+
}
|
7370
|
+
}
|
7371
|
+
} catch( firefoxAccessException ) {
|
7372
|
+
if ( !isAbort ) {
|
7373
|
+
complete( -1, firefoxAccessException );
|
7374
|
+
}
|
7375
|
+
}
|
7376
|
+
|
7377
|
+
// Call complete if needed
|
7378
|
+
if ( responses ) {
|
7379
|
+
complete( status, statusText, responses, responseHeaders );
|
7380
|
+
}
|
7381
|
+
};
|
7382
|
+
|
7383
|
+
// if we're in sync mode or it's in cache
|
7384
|
+
// and has been retrieved directly (IE6 & IE7)
|
7385
|
+
// we need to manually fire the callback
|
7386
|
+
if ( !s.async || xhr.readyState === 4 ) {
|
7387
|
+
callback();
|
7388
|
+
} else {
|
7389
|
+
// Add to list of active xhrs
|
7390
|
+
handle = xhrId++;
|
7391
|
+
xhrs[ handle ] = xhr;
|
7392
|
+
xhr.onreadystatechange = callback;
|
7393
|
+
}
|
7394
|
+
},
|
7395
|
+
|
7396
|
+
abort: function() {
|
7397
|
+
if ( callback ) {
|
7398
|
+
callback(0,1);
|
7399
|
+
}
|
7400
|
+
}
|
7401
|
+
};
|
7402
|
+
}
|
7403
|
+
});
|
7404
|
+
}
|
6305
7405
|
|
6306
7406
|
})( jQuery );
|
6307
7407
|
|
@@ -6310,7 +7410,7 @@ jQuery.support.ajax = !!jQuery.ajaxSettings.xhr();
|
|
6310
7410
|
|
6311
7411
|
var elemdisplay = {},
|
6312
7412
|
rfxtypes = /^(?:toggle|show|hide)$/,
|
6313
|
-
rfxnum = /^([+\-]=)?([\d+.\-]+)(
|
7413
|
+
rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
|
6314
7414
|
timerId,
|
6315
7415
|
fxAttrs = [
|
6316
7416
|
// height animations
|
@@ -6335,7 +7435,7 @@ jQuery.fn.extend({
|
|
6335
7435
|
|
6336
7436
|
// Reset the inline display of this element to learn if it is
|
6337
7437
|
// being hidden by cascaded rules or not
|
6338
|
-
if ( !jQuery.
|
7438
|
+
if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
|
6339
7439
|
display = elem.style.display = "";
|
6340
7440
|
}
|
6341
7441
|
|
@@ -6343,7 +7443,7 @@ jQuery.fn.extend({
|
|
6343
7443
|
// in a stylesheet to whatever the default browser style is
|
6344
7444
|
// for such an element
|
6345
7445
|
if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
|
6346
|
-
jQuery.
|
7446
|
+
jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
|
6347
7447
|
}
|
6348
7448
|
}
|
6349
7449
|
|
@@ -6354,7 +7454,7 @@ jQuery.fn.extend({
|
|
6354
7454
|
display = elem.style.display;
|
6355
7455
|
|
6356
7456
|
if ( display === "" || display === "none" ) {
|
6357
|
-
elem.style.display = jQuery.
|
7457
|
+
elem.style.display = jQuery._data(elem, "olddisplay") || "";
|
6358
7458
|
}
|
6359
7459
|
}
|
6360
7460
|
|
@@ -6370,8 +7470,8 @@ jQuery.fn.extend({
|
|
6370
7470
|
for ( var i = 0, j = this.length; i < j; i++ ) {
|
6371
7471
|
var display = jQuery.css( this[i], "display" );
|
6372
7472
|
|
6373
|
-
if ( display !== "none" ) {
|
6374
|
-
jQuery.
|
7473
|
+
if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
|
7474
|
+
jQuery._data( this[i], "olddisplay", display );
|
6375
7475
|
}
|
6376
7476
|
}
|
6377
7477
|
|
@@ -6645,7 +7745,7 @@ jQuery.fx.prototype = {
|
|
6645
7745
|
}
|
6646
7746
|
|
6647
7747
|
var r = parseFloat( jQuery.css( this.elem, this.prop ) );
|
6648
|
-
return r
|
7748
|
+
return r || 0;
|
6649
7749
|
},
|
6650
7750
|
|
6651
7751
|
// Start an animation from one number to another
|
@@ -6841,7 +7941,7 @@ if ( "getBoundingClientRect" in document.documentElement ) {
|
|
6841
7941
|
jQuery.fn.offset = function( options ) {
|
6842
7942
|
var elem = this[0], box;
|
6843
7943
|
|
6844
|
-
if ( options ) {
|
7944
|
+
if ( options ) {
|
6845
7945
|
return this.each(function( i ) {
|
6846
7946
|
jQuery.offset.setOffset( this, options, i );
|
6847
7947
|
});
|
@@ -6864,7 +7964,7 @@ if ( "getBoundingClientRect" in document.documentElement ) {
|
|
6864
7964
|
|
6865
7965
|
// Make sure we're not dealing with a disconnected DOM node
|
6866
7966
|
if ( !box || !jQuery.contains( docElem, elem ) ) {
|
6867
|
-
return box
|
7967
|
+
return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
|
6868
7968
|
}
|
6869
7969
|
|
6870
7970
|
var body = doc.body,
|
@@ -6883,7 +7983,7 @@ if ( "getBoundingClientRect" in document.documentElement ) {
|
|
6883
7983
|
jQuery.fn.offset = function( options ) {
|
6884
7984
|
var elem = this[0];
|
6885
7985
|
|
6886
|
-
if ( options ) {
|
7986
|
+
if ( options ) {
|
6887
7987
|
return this.each(function( i ) {
|
6888
7988
|
jQuery.offset.setOffset( this, options, i );
|
6889
7989
|
});
|
@@ -7002,7 +8102,7 @@ jQuery.offset = {
|
|
7002
8102
|
|
7003
8103
|
return { top: top, left: left };
|
7004
8104
|
},
|
7005
|
-
|
8105
|
+
|
7006
8106
|
setOffset: function( elem, options, i ) {
|
7007
8107
|
var position = jQuery.css( elem, "position" );
|
7008
8108
|
|
@@ -7036,7 +8136,7 @@ jQuery.offset = {
|
|
7036
8136
|
if (options.left != null) {
|
7037
8137
|
props.left = (options.left - curOffset.left) + curLeft;
|
7038
8138
|
}
|
7039
|
-
|
8139
|
+
|
7040
8140
|
if ( "using" in options ) {
|
7041
8141
|
options.using.call( elem, props );
|
7042
8142
|
} else {
|
@@ -7096,7 +8196,7 @@ jQuery.each( ["Left", "Top"], function( i, name ) {
|
|
7096
8196
|
|
7097
8197
|
jQuery.fn[ method ] = function(val) {
|
7098
8198
|
var elem = this[0], win;
|
7099
|
-
|
8199
|
+
|
7100
8200
|
if ( !elem ) {
|
7101
8201
|
return null;
|
7102
8202
|
}
|
@@ -7166,7 +8266,7 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
|
|
7166
8266
|
if ( !elem ) {
|
7167
8267
|
return size == null ? null : this;
|
7168
8268
|
}
|
7169
|
-
|
8269
|
+
|
7170
8270
|
if ( jQuery.isFunction( size ) ) {
|
7171
8271
|
return this.each(function( i ) {
|
7172
8272
|
var self = jQuery( this );
|
@@ -7176,8 +8276,10 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
|
|
7176
8276
|
|
7177
8277
|
if ( jQuery.isWindow( elem ) ) {
|
7178
8278
|
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
|
7179
|
-
|
7180
|
-
|
8279
|
+
// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
|
8280
|
+
var docElemProp = elem.document.documentElement[ "client" + name ];
|
8281
|
+
return elem.document.compatMode === "CSS1Compat" && docElemProp ||
|
8282
|
+
elem.document.body[ "client" + name ] || docElemProp;
|
7181
8283
|
|
7182
8284
|
// Get document width or height
|
7183
8285
|
} else if ( elem.nodeType === 9 ) {
|