admin_data 1.0.10 → 1.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/app/controllers/admin_data/search_controller.rb +1 -2
- data/app/views/admin_data/main/misc/_modify_record.html.erb +1 -1
- data/app/views/admin_data/search/_search_base.html.erb +1 -1
- data/app/views/admin_data/search/advance_search.html.erb +1 -1
- data/app/views/admin_data/search/search/_listing.html.erb +3 -2
- data/app/views/admin_data/search/search/_title.html.erb +1 -1
- data/app/views/admin_data/shared/_powered_by.html.erb +1 -1
- data/lib/admin_data.rb +2 -10
- data/lib/admin_data/util.rb +2 -2
- data/lib/admin_data/version.rb +1 -1
- data/lib/js/advance_search/event_bindings.js +4 -4
- data/lib/js/vendor/{jquery-1.4.1.js → code.jquery.com jquery-1.4.2.js } +605 -443
- metadata +20 -13
- data/lib/css/app.css +0 -224
- data/lib/css/header.css +0 -65
- data/lib/css/rounded.css +0 -18
- data/lib/css/themes/drastic-dark/style.css +0 -374
- data/lib/css/umbrella.css +0 -34
- data/lib/js/advance_search/adv_search.js +0 -46
- data/lib/js/validate_model/ajaxify_form.js +0 -66
- data/lib/js/validate_model/select_all.js +0 -15
data/History.txt
CHANGED
@@ -61,8 +61,7 @@ class AdminData::SearchController < AdminData::BaseController
|
|
61
61
|
if @success_message
|
62
62
|
render :json => {:success => @success_message }
|
63
63
|
else
|
64
|
-
render
|
65
|
-
:locals => {:klass => @klass, :records => @records}
|
64
|
+
render :partial => "/admin_data/search/search/listing.html.erb", :locals => {:klass => @klass}, :layout => false
|
66
65
|
end
|
67
66
|
}
|
68
67
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% if controller.send(:admin_data_is_allowed_to_update?) %>
|
2
|
-
<% @help = link_to('[?]','http://neerajdotname.github.com/admin_data/#
|
2
|
+
<% @help = link_to('[?]','http://neerajdotname.github.com/admin_data/#deletevs-destroy') %>
|
3
3
|
|
4
4
|
<div class="block rounded">
|
5
5
|
<h3>Modify Record</h3>
|
@@ -23,7 +23,7 @@
|
|
23
23
|
<div class="content">
|
24
24
|
<div class='inner'>
|
25
25
|
<div id='results'>
|
26
|
-
<% if params[:action] == 'quick_search'
|
26
|
+
<% if params[:action] == 'quick_search' %>
|
27
27
|
<%= render 'admin_data/search/search/listing', :klass => klass, :records => records %>
|
28
28
|
<% end %>
|
29
29
|
</div>
|
@@ -1,3 +1,3 @@
|
|
1
1
|
<div id="main">
|
2
|
-
<%= render '/admin_data/search/search_base'
|
2
|
+
<%= render '/admin_data/search/search_base', :klass => @klass, :model => @model, :records => @records, :advance_search => true %>
|
3
3
|
</div>
|
@@ -1,5 +1,6 @@
|
|
1
|
+
<%@records = @relation.order(@order).paginate(:page => params[:page]) if @records.nil?%>
|
1
2
|
<%= render :partial => 'admin_data/search/search/title', :locals => {
|
2
|
-
:records => records,
|
3
|
+
:records => @records,
|
3
4
|
:total_num_of_children => @total_num_of_children } %>
|
4
5
|
|
5
6
|
<div class="pagination">
|
@@ -33,7 +34,7 @@
|
|
33
34
|
</table>
|
34
35
|
|
35
36
|
<div class="pagination">
|
36
|
-
<%= will_paginate records, :container => false, :params => {:klass => klass.name.underscore} %>
|
37
|
+
<%= will_paginate @records, :container => false, :params => {:klass => klass.name.underscore} %>
|
37
38
|
</div>
|
38
39
|
|
39
40
|
<div class='clear'></div>
|
data/lib/admin_data.rb
CHANGED
@@ -1,12 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'will_paginate'
|
3
|
-
rescue LoadError => e
|
4
|
-
$stderr.puts %(
|
5
|
-
*************************************************************************************************
|
6
|
-
* gem will_paginate is missing *
|
7
|
-
*************************************************************************************************
|
8
|
-
)
|
9
|
-
end
|
1
|
+
require 'will_paginate'
|
10
2
|
|
11
3
|
module AdminData
|
12
4
|
end
|
@@ -14,7 +6,7 @@ end
|
|
14
6
|
if Rails.version >= '3.0'
|
15
7
|
require 'admin_data/railtie'
|
16
8
|
else
|
17
|
-
raise "Please see documentation at http://github.com/neerajdotname/admin_data to find out how to use this gem with rails 2.3"
|
9
|
+
raise "Please see documentation at http://github.com/neerajdotname/admin_data/wiki to find out how to use this gem with rails 2.3.x"
|
18
10
|
end
|
19
11
|
|
20
12
|
# move date_validation to inside admin_data
|
data/lib/admin_data/util.rb
CHANGED
@@ -12,14 +12,14 @@ class AdminData::Util
|
|
12
12
|
|
13
13
|
def self.google_hosted_jquery(context)
|
14
14
|
if AdminData::Config.setting[:use_google_hosting_for_jquery]
|
15
|
-
jquery_min = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.
|
15
|
+
jquery_min = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'
|
16
16
|
jquery_ui_min = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js'
|
17
17
|
context.send(:javascript_include_tag, jquery_min, jquery_ui_min)
|
18
18
|
elsif Rails.env.test?
|
19
19
|
# It is breaking the html markup and test is full of messages like
|
20
20
|
# ignoring attempt to close string with script Hence not including jquery.form in test
|
21
21
|
else
|
22
|
-
javascript_include_tag('vendor/jquery-1.4.
|
22
|
+
javascript_include_tag('vendor/jquery-1.4.2', 'vendor/jquery-ui-1.7.2.custom.min')
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
data/lib/admin_data/version.rb
CHANGED
@@ -41,10 +41,10 @@ AdminData.bindings = {
|
|
41
41
|
pagination_click: function(e) {
|
42
42
|
var href = $(e.target).closest('a').attr('href');
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
$.ajax({ url: href, dataType: "text", success: function(responseText){
|
45
|
+
$('#results').html(responseText);
|
46
|
+
}});
|
47
|
+
|
48
48
|
|
49
49
|
AdminData.jsUtil.colorizeRows();
|
50
50
|
},
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* jQuery JavaScript Library v1.4.
|
2
|
+
* jQuery JavaScript Library v1.4.2
|
3
3
|
* http://jquery.com/
|
4
4
|
*
|
5
5
|
* Copyright 2010, John Resig
|
@@ -11,7 +11,7 @@
|
|
11
11
|
* Copyright 2010, The Dojo Foundation
|
12
12
|
* Released under the MIT, BSD, and GPL Licenses.
|
13
13
|
*
|
14
|
-
* Date:
|
14
|
+
* Date: Sat Feb 13 22:33:48 2010 -0500
|
15
15
|
*/
|
16
16
|
(function( window, undefined ) {
|
17
17
|
|
@@ -86,6 +86,15 @@ jQuery.fn = jQuery.prototype = {
|
|
86
86
|
this.length = 1;
|
87
87
|
return this;
|
88
88
|
}
|
89
|
+
|
90
|
+
// The body element only exists once, optimize finding it
|
91
|
+
if ( selector === "body" && !context ) {
|
92
|
+
this.context = document;
|
93
|
+
this[0] = document.body;
|
94
|
+
this.selector = "body";
|
95
|
+
this.length = 1;
|
96
|
+
return this;
|
97
|
+
}
|
89
98
|
|
90
99
|
// Handle HTML strings
|
91
100
|
if ( typeof selector === "string" ) {
|
@@ -116,7 +125,9 @@ jQuery.fn = jQuery.prototype = {
|
|
116
125
|
ret = buildFragment( [ match[1] ], [ doc ] );
|
117
126
|
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
|
118
127
|
}
|
119
|
-
|
128
|
+
|
129
|
+
return jQuery.merge( this, selector );
|
130
|
+
|
120
131
|
// HANDLE: $("#id")
|
121
132
|
} else {
|
122
133
|
elem = document.getElementById( match[2] );
|
@@ -143,6 +154,7 @@ jQuery.fn = jQuery.prototype = {
|
|
143
154
|
this.selector = selector;
|
144
155
|
this.context = document;
|
145
156
|
selector = document.getElementsByTagName( selector );
|
157
|
+
return jQuery.merge( this, selector );
|
146
158
|
|
147
159
|
// HANDLE: $(expr, $(...))
|
148
160
|
} else if ( !context || context.jquery ) {
|
@@ -165,16 +177,14 @@ jQuery.fn = jQuery.prototype = {
|
|
165
177
|
this.context = selector.context;
|
166
178
|
}
|
167
179
|
|
168
|
-
return jQuery.
|
169
|
-
this.setArray( selector ) :
|
170
|
-
jQuery.makeArray( selector, this );
|
180
|
+
return jQuery.makeArray( selector, this );
|
171
181
|
},
|
172
182
|
|
173
183
|
// Start with an empty selector
|
174
184
|
selector: "",
|
175
185
|
|
176
186
|
// The current version of jQuery being used
|
177
|
-
jquery: "1.4.
|
187
|
+
jquery: "1.4.2",
|
178
188
|
|
179
189
|
// The default length of a jQuery object is 0
|
180
190
|
length: 0,
|
@@ -204,7 +214,14 @@ jQuery.fn = jQuery.prototype = {
|
|
204
214
|
// (returning the new matched element set)
|
205
215
|
pushStack: function( elems, name, selector ) {
|
206
216
|
// Build a new jQuery matched element set
|
207
|
-
var ret = jQuery(
|
217
|
+
var ret = jQuery();
|
218
|
+
|
219
|
+
if ( jQuery.isArray( elems ) ) {
|
220
|
+
push.apply( ret, elems );
|
221
|
+
|
222
|
+
} else {
|
223
|
+
jQuery.merge( ret, elems );
|
224
|
+
}
|
208
225
|
|
209
226
|
// Add the old object onto the stack (as a reference)
|
210
227
|
ret.prevObject = this;
|
@@ -221,18 +238,6 @@ jQuery.fn = jQuery.prototype = {
|
|
221
238
|
return ret;
|
222
239
|
},
|
223
240
|
|
224
|
-
// Force the current matched set of elements to become
|
225
|
-
// the specified array of elements (destroying the stack in the process)
|
226
|
-
// You should use pushStack() in order to do this, but maintain the stack
|
227
|
-
setArray: function( elems ) {
|
228
|
-
// Resetting the length to 0, then using the native Array push
|
229
|
-
// is a super-fast way to populate an object with array-like properties
|
230
|
-
this.length = 0;
|
231
|
-
push.apply( this, elems );
|
232
|
-
|
233
|
-
return this;
|
234
|
-
},
|
235
|
-
|
236
241
|
// Execute a callback for every element in the matched set.
|
237
242
|
// (You can seed the arguments with an array of args, but this is
|
238
243
|
// only used internally.)
|
@@ -492,6 +497,9 @@ jQuery.extend({
|
|
492
497
|
if ( typeof data !== "string" || !data ) {
|
493
498
|
return null;
|
494
499
|
}
|
500
|
+
|
501
|
+
// Make sure leading/trailing whitespace is removed (IE can't handle it)
|
502
|
+
data = jQuery.trim( data );
|
495
503
|
|
496
504
|
// Make sure the incoming data is actual JSON
|
497
505
|
// Logic borrowed from http://json.org/json2.js
|
@@ -619,6 +627,7 @@ jQuery.extend({
|
|
619
627
|
for ( var l = second.length; j < l; j++ ) {
|
620
628
|
first[ i++ ] = second[ j ];
|
621
629
|
}
|
630
|
+
|
622
631
|
} else {
|
623
632
|
while ( second[j] !== undefined ) {
|
624
633
|
first[ i++ ] = second[ j++ ];
|
@@ -807,7 +816,7 @@ function access( elems, key, value, exec, fn, pass ) {
|
|
807
816
|
}
|
808
817
|
|
809
818
|
// Getting an attribute
|
810
|
-
return length ? fn( elems[0], key ) :
|
819
|
+
return length ? fn( elems[0], key ) : undefined;
|
811
820
|
}
|
812
821
|
|
813
822
|
function now() {
|
@@ -871,7 +880,10 @@ function now() {
|
|
871
880
|
// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
|
872
881
|
optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
|
873
882
|
|
883
|
+
parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
|
884
|
+
|
874
885
|
// Will be defined later
|
886
|
+
deleteExpando: true,
|
875
887
|
checkClone: false,
|
876
888
|
scriptEval: false,
|
877
889
|
noCloneEvent: true,
|
@@ -893,6 +905,15 @@ function now() {
|
|
893
905
|
delete window[ id ];
|
894
906
|
}
|
895
907
|
|
908
|
+
// Test to see if it's possible to delete an expando from an element
|
909
|
+
// Fails in Internet Explorer
|
910
|
+
try {
|
911
|
+
delete script.test;
|
912
|
+
|
913
|
+
} catch(e) {
|
914
|
+
jQuery.support.deleteExpando = false;
|
915
|
+
}
|
916
|
+
|
896
917
|
root.removeChild( script );
|
897
918
|
|
898
919
|
if ( div.attachEvent && div.fireEvent ) {
|
@@ -923,6 +944,7 @@ function now() {
|
|
923
944
|
document.body.appendChild( div );
|
924
945
|
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
|
925
946
|
document.body.removeChild( div ).style.display = 'none';
|
947
|
+
|
926
948
|
div = null;
|
927
949
|
});
|
928
950
|
|
@@ -962,7 +984,6 @@ jQuery.props = {
|
|
962
984
|
frameborder: "frameBorder"
|
963
985
|
};
|
964
986
|
var expando = "jQuery" + now(), uuid = 0, windowData = {};
|
965
|
-
var emptyObject = {};
|
966
987
|
|
967
988
|
jQuery.extend({
|
968
989
|
cache: {},
|
@@ -988,8 +1009,7 @@ jQuery.extend({
|
|
988
1009
|
|
989
1010
|
var id = elem[ expando ], cache = jQuery.cache, thisCache;
|
990
1011
|
|
991
|
-
|
992
|
-
if ( !name && !id ) {
|
1012
|
+
if ( !id && typeof name === "string" && data === undefined ) {
|
993
1013
|
return null;
|
994
1014
|
}
|
995
1015
|
|
@@ -1003,17 +1023,16 @@ jQuery.extend({
|
|
1003
1023
|
if ( typeof name === "object" ) {
|
1004
1024
|
elem[ expando ] = id;
|
1005
1025
|
thisCache = cache[ id ] = jQuery.extend(true, {}, name);
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
} else {
|
1011
|
-
thisCache = cache[ id ] = {};
|
1026
|
+
|
1027
|
+
} else if ( !cache[ id ] ) {
|
1028
|
+
elem[ expando ] = id;
|
1029
|
+
cache[ id ] = {};
|
1012
1030
|
}
|
1013
1031
|
|
1032
|
+
thisCache = cache[ id ];
|
1033
|
+
|
1014
1034
|
// Prevent overriding the named cache with undefined values
|
1015
1035
|
if ( data !== undefined ) {
|
1016
|
-
elem[ expando ] = id;
|
1017
1036
|
thisCache[ name ] = data;
|
1018
1037
|
}
|
1019
1038
|
|
@@ -1045,15 +1064,11 @@ jQuery.extend({
|
|
1045
1064
|
|
1046
1065
|
// Otherwise, we want to remove all of the element's data
|
1047
1066
|
} else {
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
}
|
1052
|
-
|
1053
|
-
// but it's ok with using removeAttribute
|
1054
|
-
if ( elem.removeAttribute ) {
|
1055
|
-
elem.removeAttribute( expando );
|
1056
|
-
}
|
1067
|
+
if ( jQuery.support.deleteExpando ) {
|
1068
|
+
delete elem[ jQuery.expando ];
|
1069
|
+
|
1070
|
+
} else if ( elem.removeAttribute ) {
|
1071
|
+
elem.removeAttribute( jQuery.expando );
|
1057
1072
|
}
|
1058
1073
|
|
1059
1074
|
// Completely remove the data cache
|
@@ -1230,12 +1245,13 @@ jQuery.fn.extend({
|
|
1230
1245
|
elem.className = value;
|
1231
1246
|
|
1232
1247
|
} else {
|
1233
|
-
var className = " " + elem.className + " ";
|
1248
|
+
var className = " " + elem.className + " ", setClass = elem.className;
|
1234
1249
|
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
|
1235
1250
|
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
|
1236
|
-
|
1251
|
+
setClass += " " + classNames[c];
|
1237
1252
|
}
|
1238
1253
|
}
|
1254
|
+
elem.className = jQuery.trim( setClass );
|
1239
1255
|
}
|
1240
1256
|
}
|
1241
1257
|
}
|
@@ -1264,7 +1280,7 @@ jQuery.fn.extend({
|
|
1264
1280
|
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
|
1265
1281
|
className = className.replace(" " + classNames[c] + " ", " ");
|
1266
1282
|
}
|
1267
|
-
elem.className =
|
1283
|
+
elem.className = jQuery.trim( className );
|
1268
1284
|
|
1269
1285
|
} else {
|
1270
1286
|
elem.className = "";
|
@@ -1520,15 +1536,16 @@ jQuery.extend({
|
|
1520
1536
|
}
|
1521
1537
|
|
1522
1538
|
// elem is actually elem.style ... set the style
|
1523
|
-
// Using attr for specific style information is now deprecated. Use style
|
1539
|
+
// Using attr for specific style information is now deprecated. Use style instead.
|
1524
1540
|
return jQuery.style( elem, name, value );
|
1525
1541
|
}
|
1526
1542
|
});
|
1527
|
-
var
|
1528
|
-
|
1529
|
-
return
|
1530
|
-
|
1531
|
-
};
|
1543
|
+
var rnamespaces = /\.(.*)$/,
|
1544
|
+
fcleanup = function( nm ) {
|
1545
|
+
return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
|
1546
|
+
return "\\" + ch;
|
1547
|
+
});
|
1548
|
+
};
|
1532
1549
|
|
1533
1550
|
/*
|
1534
1551
|
* A number of helper functions used for managing events.
|
@@ -1550,107 +1567,104 @@ jQuery.event = {
|
|
1550
1567
|
elem = window;
|
1551
1568
|
}
|
1552
1569
|
|
1570
|
+
var handleObjIn, handleObj;
|
1571
|
+
|
1572
|
+
if ( handler.handler ) {
|
1573
|
+
handleObjIn = handler;
|
1574
|
+
handler = handleObjIn.handler;
|
1575
|
+
}
|
1576
|
+
|
1553
1577
|
// Make sure that the function being executed has a unique ID
|
1554
1578
|
if ( !handler.guid ) {
|
1555
1579
|
handler.guid = jQuery.guid++;
|
1556
1580
|
}
|
1557
1581
|
|
1558
|
-
//
|
1559
|
-
|
1560
|
-
// Create temporary function pointer to original handler
|
1561
|
-
var fn = handler;
|
1562
|
-
|
1563
|
-
// Create unique handler function, wrapped around original handler
|
1564
|
-
handler = jQuery.proxy( fn );
|
1582
|
+
// Init the element's event structure
|
1583
|
+
var elemData = jQuery.data( elem );
|
1565
1584
|
|
1566
|
-
|
1567
|
-
|
1585
|
+
// If no elemData is found then we must be trying to bind to one of the
|
1586
|
+
// banned noData elements
|
1587
|
+
if ( !elemData ) {
|
1588
|
+
return;
|
1568
1589
|
}
|
1569
1590
|
|
1570
|
-
|
1571
|
-
|
1572
|
-
handle = jQuery.data( elem, "handle" ), eventHandle;
|
1591
|
+
var events = elemData.events = elemData.events || {},
|
1592
|
+
eventHandle = elemData.handle, eventHandle;
|
1573
1593
|
|
1574
|
-
if ( !
|
1575
|
-
eventHandle = function() {
|
1594
|
+
if ( !eventHandle ) {
|
1595
|
+
elemData.handle = eventHandle = function() {
|
1576
1596
|
// Handle the second event of a trigger and when
|
1577
1597
|
// an event is called after a page has unloaded
|
1578
1598
|
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
|
1579
1599
|
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
|
1580
1600
|
undefined;
|
1581
1601
|
};
|
1582
|
-
|
1583
|
-
handle = jQuery.data( elem, "handle", eventHandle );
|
1584
|
-
}
|
1585
|
-
|
1586
|
-
// If no handle is found then we must be trying to bind to one of the
|
1587
|
-
// banned noData elements
|
1588
|
-
if ( !handle ) {
|
1589
|
-
return;
|
1590
1602
|
}
|
1591
1603
|
|
1592
1604
|
// Add elem as a property of the handle function
|
1593
|
-
// This is to prevent a memory leak with non-native
|
1594
|
-
|
1595
|
-
handle.elem = elem;
|
1605
|
+
// This is to prevent a memory leak with non-native events in IE.
|
1606
|
+
eventHandle.elem = elem;
|
1596
1607
|
|
1597
1608
|
// Handle multiple events separated by a space
|
1598
1609
|
// jQuery(...).bind("mouseover mouseout", fn);
|
1599
|
-
types = types.split(
|
1610
|
+
types = types.split(" ");
|
1600
1611
|
|
1601
|
-
var type, i = 0;
|
1612
|
+
var type, i = 0, namespaces;
|
1602
1613
|
|
1603
1614
|
while ( (type = types[ i++ ]) ) {
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1615
|
+
handleObj = handleObjIn ?
|
1616
|
+
jQuery.extend({}, handleObjIn) :
|
1617
|
+
{ handler: handler, data: data };
|
1607
1618
|
|
1608
|
-
|
1609
|
-
|
1619
|
+
// Namespaced event handlers
|
1620
|
+
if ( type.indexOf(".") > -1 ) {
|
1621
|
+
namespaces = type.split(".");
|
1622
|
+
type = namespaces.shift();
|
1623
|
+
handleObj.namespace = namespaces.slice(0).sort().join(".");
|
1610
1624
|
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1625
|
+
} else {
|
1626
|
+
namespaces = [];
|
1627
|
+
handleObj.namespace = "";
|
1614
1628
|
}
|
1615
1629
|
|
1616
|
-
|
1630
|
+
handleObj.type = type;
|
1631
|
+
handleObj.guid = handler.guid;
|
1617
1632
|
|
1618
1633
|
// Get the current list of functions bound to this event
|
1619
1634
|
var handlers = events[ type ],
|
1620
|
-
special =
|
1635
|
+
special = jQuery.event.special[ type ] || {};
|
1621
1636
|
|
1622
1637
|
// Init the event handler queue
|
1623
1638
|
if ( !handlers ) {
|
1624
|
-
handlers = events[ type ] =
|
1639
|
+
handlers = events[ type ] = [];
|
1625
1640
|
|
1626
1641
|
// Check for a special event handler
|
1627
1642
|
// Only use addEventListener/attachEvent if the special
|
1628
1643
|
// events handler returns false
|
1629
|
-
if ( !special.setup || special.setup.call( elem, data, namespaces,
|
1644
|
+
if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
|
1630
1645
|
// Bind the global event handler to the element
|
1631
1646
|
if ( elem.addEventListener ) {
|
1632
|
-
elem.addEventListener( type,
|
1647
|
+
elem.addEventListener( type, eventHandle, false );
|
1648
|
+
|
1633
1649
|
} else if ( elem.attachEvent ) {
|
1634
|
-
elem.attachEvent( "on" + type,
|
1650
|
+
elem.attachEvent( "on" + type, eventHandle );
|
1635
1651
|
}
|
1636
1652
|
}
|
1637
1653
|
}
|
1638
1654
|
|
1639
1655
|
if ( special.add ) {
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
}
|
1648
|
-
|
1656
|
+
special.add.call( elem, handleObj );
|
1657
|
+
|
1658
|
+
if ( !handleObj.handler.guid ) {
|
1659
|
+
handleObj.handler.guid = handler.guid;
|
1660
|
+
}
|
1661
|
+
}
|
1662
|
+
|
1649
1663
|
// Add the function to the element's handler list
|
1650
|
-
handlers
|
1664
|
+
handlers.push( handleObj );
|
1651
1665
|
|
1652
1666
|
// Keep track of which events have been used, for global triggering
|
1653
|
-
|
1667
|
+
jQuery.event.global[ type ] = true;
|
1654
1668
|
}
|
1655
1669
|
|
1656
1670
|
// Nullify elem to prevent memory leaks in IE
|
@@ -1660,90 +1674,121 @@ jQuery.event = {
|
|
1660
1674
|
global: {},
|
1661
1675
|
|
1662
1676
|
// Detach an event or set of events from an element
|
1663
|
-
remove: function( elem, types, handler ) {
|
1677
|
+
remove: function( elem, types, handler, pos ) {
|
1664
1678
|
// don't do events on text and comment nodes
|
1665
1679
|
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
|
1666
1680
|
return;
|
1667
1681
|
}
|
1668
1682
|
|
1669
|
-
var
|
1683
|
+
var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
|
1684
|
+
elemData = jQuery.data( elem ),
|
1685
|
+
events = elemData && elemData.events;
|
1670
1686
|
|
1671
|
-
if ( events ) {
|
1672
|
-
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1680
|
-
|
1681
|
-
|
1687
|
+
if ( !elemData || !events ) {
|
1688
|
+
return;
|
1689
|
+
}
|
1690
|
+
|
1691
|
+
// types is actually an event object here
|
1692
|
+
if ( types && types.type ) {
|
1693
|
+
handler = types.handler;
|
1694
|
+
types = types.type;
|
1695
|
+
}
|
1696
|
+
|
1697
|
+
// Unbind all events for the element
|
1698
|
+
if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
|
1699
|
+
types = types || "";
|
1700
|
+
|
1701
|
+
for ( type in events ) {
|
1702
|
+
jQuery.event.remove( elem, type + types );
|
1703
|
+
}
|
1704
|
+
|
1705
|
+
return;
|
1706
|
+
}
|
1707
|
+
|
1708
|
+
// Handle multiple events separated by a space
|
1709
|
+
// jQuery(...).unbind("mouseover mouseout", fn);
|
1710
|
+
types = types.split(" ");
|
1711
|
+
|
1712
|
+
while ( (type = types[ i++ ]) ) {
|
1713
|
+
origType = type;
|
1714
|
+
handleObj = null;
|
1715
|
+
all = type.indexOf(".") < 0;
|
1716
|
+
namespaces = [];
|
1717
|
+
|
1718
|
+
if ( !all ) {
|
1719
|
+
// Namespaced event handlers
|
1720
|
+
namespaces = type.split(".");
|
1721
|
+
type = namespaces.shift();
|
1722
|
+
|
1723
|
+
namespace = new RegExp("(^|\\.)" +
|
1724
|
+
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
|
1725
|
+
}
|
1726
|
+
|
1727
|
+
eventType = events[ type ];
|
1728
|
+
|
1729
|
+
if ( !eventType ) {
|
1730
|
+
continue;
|
1731
|
+
}
|
1732
|
+
|
1733
|
+
if ( !handler ) {
|
1734
|
+
for ( var j = 0; j < eventType.length; j++ ) {
|
1735
|
+
handleObj = eventType[ j ];
|
1736
|
+
|
1737
|
+
if ( all || namespace.test( handleObj.namespace ) ) {
|
1738
|
+
jQuery.event.remove( elem, origType, handleObj.handler, j );
|
1739
|
+
eventType.splice( j--, 1 );
|
1740
|
+
}
|
1682
1741
|
}
|
1683
1742
|
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
if ( events[ type ] ) {
|
1698
|
-
// remove the given handler for the given type
|
1699
|
-
if ( handler ) {
|
1700
|
-
fn = events[ type ][ handler.guid ];
|
1701
|
-
delete events[ type ][ handler.guid ];
|
1702
|
-
|
1703
|
-
// remove all handlers for the given type
|
1704
|
-
} else {
|
1705
|
-
for ( var handle in events[ type ] ) {
|
1706
|
-
// Handle the removal of namespaced events
|
1707
|
-
if ( all || namespace.test( events[ type ][ handle ].type ) ) {
|
1708
|
-
delete events[ type ][ handle ];
|
1709
|
-
}
|
1710
|
-
}
|
1743
|
+
continue;
|
1744
|
+
}
|
1745
|
+
|
1746
|
+
special = jQuery.event.special[ type ] || {};
|
1747
|
+
|
1748
|
+
for ( var j = pos || 0; j < eventType.length; j++ ) {
|
1749
|
+
handleObj = eventType[ j ];
|
1750
|
+
|
1751
|
+
if ( handler.guid === handleObj.guid ) {
|
1752
|
+
// remove the given handler for the given type
|
1753
|
+
if ( all || namespace.test( handleObj.namespace ) ) {
|
1754
|
+
if ( pos == null ) {
|
1755
|
+
eventType.splice( j--, 1 );
|
1711
1756
|
}
|
1712
1757
|
|
1713
1758
|
if ( special.remove ) {
|
1714
|
-
special.remove.call( elem,
|
1759
|
+
special.remove.call( elem, handleObj );
|
1715
1760
|
}
|
1761
|
+
}
|
1716
1762
|
|
1717
|
-
|
1718
|
-
|
1719
|
-
break;
|
1720
|
-
}
|
1721
|
-
if ( !ret ) {
|
1722
|
-
if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
|
1723
|
-
if ( elem.removeEventListener ) {
|
1724
|
-
elem.removeEventListener( type, jQuery.data( elem, "handle" ), false );
|
1725
|
-
} else if ( elem.detachEvent ) {
|
1726
|
-
elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) );
|
1727
|
-
}
|
1728
|
-
}
|
1729
|
-
ret = null;
|
1730
|
-
delete events[ type ];
|
1731
|
-
}
|
1763
|
+
if ( pos != null ) {
|
1764
|
+
break;
|
1732
1765
|
}
|
1733
1766
|
}
|
1734
1767
|
}
|
1735
1768
|
|
1736
|
-
//
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
if ( !ret ) {
|
1741
|
-
var handle = jQuery.data( elem, "handle" );
|
1742
|
-
if ( handle ) {
|
1743
|
-
handle.elem = null;
|
1769
|
+
// remove generic event handler if no more handlers exist
|
1770
|
+
if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
|
1771
|
+
if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
|
1772
|
+
removeEvent( elem, type, elemData.handle );
|
1744
1773
|
}
|
1745
|
-
|
1746
|
-
|
1774
|
+
|
1775
|
+
ret = null;
|
1776
|
+
delete events[ type ];
|
1777
|
+
}
|
1778
|
+
}
|
1779
|
+
|
1780
|
+
// Remove the expando if it's no longer used
|
1781
|
+
if ( jQuery.isEmptyObject( events ) ) {
|
1782
|
+
var handle = elemData.handle;
|
1783
|
+
if ( handle ) {
|
1784
|
+
handle.elem = null;
|
1785
|
+
}
|
1786
|
+
|
1787
|
+
delete elemData.events;
|
1788
|
+
delete elemData.handle;
|
1789
|
+
|
1790
|
+
if ( jQuery.isEmptyObject( elemData ) ) {
|
1791
|
+
jQuery.removeData( elem );
|
1747
1792
|
}
|
1748
1793
|
}
|
1749
1794
|
},
|
@@ -1774,7 +1819,7 @@ jQuery.event = {
|
|
1774
1819
|
event.stopPropagation();
|
1775
1820
|
|
1776
1821
|
// Only trigger if we've ever bound an event for it
|
1777
|
-
if (
|
1822
|
+
if ( jQuery.event.global[ type ] ) {
|
1778
1823
|
jQuery.each( jQuery.cache, function() {
|
1779
1824
|
if ( this.events && this.events[type] ) {
|
1780
1825
|
jQuery.event.trigger( event, data, this.handle.elem );
|
@@ -1825,9 +1870,12 @@ jQuery.event = {
|
|
1825
1870
|
|
1826
1871
|
} else if ( !event.isDefaultPrevented() ) {
|
1827
1872
|
var target = event.target, old,
|
1828
|
-
isClick = jQuery.nodeName(target, "a") && type === "click"
|
1873
|
+
isClick = jQuery.nodeName(target, "a") && type === "click",
|
1874
|
+
special = jQuery.event.special[ type ] || {};
|
1875
|
+
|
1876
|
+
if ( (!special._default || special._default.call( elem, event ) === false) &&
|
1877
|
+
!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
|
1829
1878
|
|
1830
|
-
if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
|
1831
1879
|
try {
|
1832
1880
|
if ( target[ type ] ) {
|
1833
1881
|
// Make sure that we don't accidentally re-trigger the onFOO events
|
@@ -1837,7 +1885,7 @@ jQuery.event = {
|
|
1837
1885
|
target[ "on" + type ] = null;
|
1838
1886
|
}
|
1839
1887
|
|
1840
|
-
|
1888
|
+
jQuery.event.triggered = true;
|
1841
1889
|
target[ type ]();
|
1842
1890
|
}
|
1843
1891
|
|
@@ -1848,53 +1896,57 @@ jQuery.event = {
|
|
1848
1896
|
target[ "on" + type ] = old;
|
1849
1897
|
}
|
1850
1898
|
|
1851
|
-
|
1899
|
+
jQuery.event.triggered = false;
|
1852
1900
|
}
|
1853
1901
|
}
|
1854
1902
|
},
|
1855
1903
|
|
1856
1904
|
handle: function( event ) {
|
1857
|
-
|
1858
|
-
var all, handlers;
|
1905
|
+
var all, handlers, namespaces, namespace, events;
|
1859
1906
|
|
1860
1907
|
event = arguments[0] = jQuery.event.fix( event || window.event );
|
1861
1908
|
event.currentTarget = this;
|
1862
1909
|
|
1863
1910
|
// Namespaced event handlers
|
1864
|
-
|
1865
|
-
event.type = namespaces.shift();
|
1911
|
+
all = event.type.indexOf(".") < 0 && !event.exclusive;
|
1866
1912
|
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
1870
|
-
|
1913
|
+
if ( !all ) {
|
1914
|
+
namespaces = event.type.split(".");
|
1915
|
+
event.type = namespaces.shift();
|
1916
|
+
namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
|
1917
|
+
}
|
1871
1918
|
|
1872
|
-
|
1919
|
+
var events = jQuery.data(this, "events"), handlers = events[ event.type ];
|
1873
1920
|
|
1874
|
-
|
1875
|
-
|
1921
|
+
if ( events && handlers ) {
|
1922
|
+
// Clone the handlers to prevent manipulation
|
1923
|
+
handlers = handlers.slice(0);
|
1876
1924
|
|
1877
|
-
|
1878
|
-
|
1879
|
-
// Pass in a reference to the handler function itself
|
1880
|
-
// So that we can later remove it
|
1881
|
-
event.handler = handler;
|
1882
|
-
event.data = handler.data;
|
1925
|
+
for ( var j = 0, l = handlers.length; j < l; j++ ) {
|
1926
|
+
var handleObj = handlers[ j ];
|
1883
1927
|
|
1884
|
-
|
1928
|
+
// Filter the functions by class
|
1929
|
+
if ( all || namespace.test( handleObj.namespace ) ) {
|
1930
|
+
// Pass in a reference to the handler function itself
|
1931
|
+
// So that we can later remove it
|
1932
|
+
event.handler = handleObj.handler;
|
1933
|
+
event.data = handleObj.data;
|
1934
|
+
event.handleObj = handleObj;
|
1935
|
+
|
1936
|
+
var ret = handleObj.handler.apply( this, arguments );
|
1885
1937
|
|
1886
|
-
|
1887
|
-
|
1888
|
-
|
1889
|
-
|
1890
|
-
|
1938
|
+
if ( ret !== undefined ) {
|
1939
|
+
event.result = ret;
|
1940
|
+
if ( ret === false ) {
|
1941
|
+
event.preventDefault();
|
1942
|
+
event.stopPropagation();
|
1943
|
+
}
|
1891
1944
|
}
|
1892
|
-
}
|
1893
1945
|
|
1894
|
-
|
1895
|
-
|
1946
|
+
if ( event.isImmediatePropagationStopped() ) {
|
1947
|
+
break;
|
1948
|
+
}
|
1896
1949
|
}
|
1897
|
-
|
1898
1950
|
}
|
1899
1951
|
}
|
1900
1952
|
|
@@ -1973,44 +2025,39 @@ jQuery.event = {
|
|
1973
2025
|
},
|
1974
2026
|
|
1975
2027
|
live: {
|
1976
|
-
add: function(
|
1977
|
-
jQuery.
|
1978
|
-
|
1979
|
-
proxy.guid += data.selector + data.live;
|
1980
|
-
data.liveProxy = proxy;
|
1981
|
-
|
1982
|
-
jQuery.event.add( this, data.live, liveHandler, data );
|
1983
|
-
|
2028
|
+
add: function( handleObj ) {
|
2029
|
+
jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) );
|
1984
2030
|
},
|
1985
2031
|
|
1986
|
-
remove: function(
|
1987
|
-
|
1988
|
-
|
1989
|
-
|
1990
|
-
|
1991
|
-
|
1992
|
-
|
1993
|
-
|
1994
|
-
});
|
1995
|
-
|
1996
|
-
if ( remove < 1 ) {
|
1997
|
-
jQuery.event.remove( this, namespaces[0], liveHandler );
|
2032
|
+
remove: function( handleObj ) {
|
2033
|
+
var remove = true,
|
2034
|
+
type = handleObj.origType.replace(rnamespaces, "");
|
2035
|
+
|
2036
|
+
jQuery.each( jQuery.data(this, "events").live || [], function() {
|
2037
|
+
if ( type === this.origType.replace(rnamespaces, "") ) {
|
2038
|
+
remove = false;
|
2039
|
+
return false;
|
1998
2040
|
}
|
2041
|
+
});
|
2042
|
+
|
2043
|
+
if ( remove ) {
|
2044
|
+
jQuery.event.remove( this, handleObj.origType, liveHandler );
|
1999
2045
|
}
|
2000
|
-
}
|
2001
|
-
|
2046
|
+
}
|
2047
|
+
|
2002
2048
|
},
|
2049
|
+
|
2003
2050
|
beforeunload: {
|
2004
|
-
setup: function( data, namespaces,
|
2051
|
+
setup: function( data, namespaces, eventHandle ) {
|
2005
2052
|
// We only want to do this special case on windows
|
2006
2053
|
if ( this.setInterval ) {
|
2007
|
-
this.onbeforeunload =
|
2054
|
+
this.onbeforeunload = eventHandle;
|
2008
2055
|
}
|
2009
2056
|
|
2010
2057
|
return false;
|
2011
2058
|
},
|
2012
|
-
teardown: function( namespaces,
|
2013
|
-
if ( this.onbeforeunload ===
|
2059
|
+
teardown: function( namespaces, eventHandle ) {
|
2060
|
+
if ( this.onbeforeunload === eventHandle ) {
|
2014
2061
|
this.onbeforeunload = null;
|
2015
2062
|
}
|
2016
2063
|
}
|
@@ -2018,6 +2065,14 @@ jQuery.event = {
|
|
2018
2065
|
}
|
2019
2066
|
};
|
2020
2067
|
|
2068
|
+
var removeEvent = document.removeEventListener ?
|
2069
|
+
function( elem, type, handle ) {
|
2070
|
+
elem.removeEventListener( type, handle, false );
|
2071
|
+
} :
|
2072
|
+
function( elem, type, handle ) {
|
2073
|
+
elem.detachEvent( "on" + type, handle );
|
2074
|
+
};
|
2075
|
+
|
2021
2076
|
jQuery.Event = function( src ) {
|
2022
2077
|
// Allow instantiation without the 'new' keyword
|
2023
2078
|
if ( !this.preventDefault ) {
|
@@ -2095,27 +2150,24 @@ var withinElement = function( event ) {
|
|
2095
2150
|
// Check if mouse(over|out) are still within the same parent element
|
2096
2151
|
var parent = event.relatedTarget;
|
2097
2152
|
|
2098
|
-
//
|
2099
|
-
|
2100
|
-
|
2101
|
-
//
|
2102
|
-
|
2153
|
+
// Firefox sometimes assigns relatedTarget a XUL element
|
2154
|
+
// which we cannot access the parentNode property of
|
2155
|
+
try {
|
2156
|
+
// Traverse up the tree
|
2157
|
+
while ( parent && parent !== this ) {
|
2103
2158
|
parent = parent.parentNode;
|
2104
|
-
|
2105
|
-
// assuming we've left the element since we most likely mousedover a xul element
|
2106
|
-
} catch(e) {
|
2107
|
-
break;
|
2108
2159
|
}
|
2109
|
-
}
|
2110
2160
|
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
2161
|
+
if ( parent !== this ) {
|
2162
|
+
// set the correct event type
|
2163
|
+
event.type = event.data;
|
2114
2164
|
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2165
|
+
// handle event if we actually just moused on to a non sub-element
|
2166
|
+
jQuery.event.handle.apply( this, arguments );
|
2167
|
+
}
|
2118
2168
|
|
2169
|
+
// assuming we've left the element since we most likely mousedover a xul element
|
2170
|
+
} catch(e) { }
|
2119
2171
|
},
|
2120
2172
|
|
2121
2173
|
// In case of event delegation, we only need to rename the event.type,
|
@@ -2143,64 +2195,65 @@ jQuery.each({
|
|
2143
2195
|
// submit delegation
|
2144
2196
|
if ( !jQuery.support.submitBubbles ) {
|
2145
2197
|
|
2146
|
-
jQuery.event.special.submit = {
|
2147
|
-
|
2148
|
-
|
2149
|
-
|
2150
|
-
|
2198
|
+
jQuery.event.special.submit = {
|
2199
|
+
setup: function( data, namespaces ) {
|
2200
|
+
if ( this.nodeName.toLowerCase() !== "form" ) {
|
2201
|
+
jQuery.event.add(this, "click.specialSubmit", function( e ) {
|
2202
|
+
var elem = e.target, type = elem.type;
|
2151
2203
|
|
2152
|
-
|
2153
|
-
|
2154
|
-
|
2155
|
-
|
2204
|
+
if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
|
2205
|
+
return trigger( "submit", this, arguments );
|
2206
|
+
}
|
2207
|
+
});
|
2156
2208
|
|
2157
|
-
|
2158
|
-
|
2209
|
+
jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
|
2210
|
+
var elem = e.target, type = elem.type;
|
2159
2211
|
|
2160
|
-
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2212
|
+
if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
|
2213
|
+
return trigger( "submit", this, arguments );
|
2214
|
+
}
|
2215
|
+
});
|
2164
2216
|
|
2165
|
-
|
2166
|
-
|
2167
|
-
|
2168
|
-
|
2217
|
+
} else {
|
2218
|
+
return false;
|
2219
|
+
}
|
2220
|
+
},
|
2169
2221
|
|
2170
|
-
|
2171
|
-
|
2172
|
-
|
2173
|
-
}
|
2174
|
-
};
|
2222
|
+
teardown: function( namespaces ) {
|
2223
|
+
jQuery.event.remove( this, ".specialSubmit" );
|
2224
|
+
}
|
2225
|
+
};
|
2175
2226
|
|
2176
2227
|
}
|
2177
2228
|
|
2178
2229
|
// change delegation, happens here so we have bind.
|
2179
2230
|
if ( !jQuery.support.changeBubbles ) {
|
2180
2231
|
|
2181
|
-
var formElems = /textarea|input|select/i
|
2232
|
+
var formElems = /textarea|input|select/i,
|
2182
2233
|
|
2183
|
-
|
2184
|
-
var type = elem.type, val = elem.value;
|
2234
|
+
changeFilters,
|
2185
2235
|
|
2186
|
-
|
2187
|
-
val = elem.
|
2236
|
+
getVal = function( elem ) {
|
2237
|
+
var type = elem.type, val = elem.value;
|
2188
2238
|
|
2189
|
-
|
2190
|
-
|
2191
|
-
jQuery.map( elem.options, function( elem ) {
|
2192
|
-
return elem.selected;
|
2193
|
-
}).join("-") :
|
2194
|
-
"";
|
2239
|
+
if ( type === "radio" || type === "checkbox" ) {
|
2240
|
+
val = elem.checked;
|
2195
2241
|
|
2196
|
-
|
2197
|
-
|
2198
|
-
|
2242
|
+
} else if ( type === "select-multiple" ) {
|
2243
|
+
val = elem.selectedIndex > -1 ?
|
2244
|
+
jQuery.map( elem.options, function( elem ) {
|
2245
|
+
return elem.selected;
|
2246
|
+
}).join("-") :
|
2247
|
+
"";
|
2199
2248
|
|
2200
|
-
|
2201
|
-
|
2249
|
+
} else if ( elem.nodeName.toLowerCase() === "select" ) {
|
2250
|
+
val = elem.selectedIndex;
|
2251
|
+
}
|
2252
|
+
|
2253
|
+
return val;
|
2254
|
+
},
|
2202
2255
|
|
2203
|
-
function testChange( e ) {
|
2256
|
+
testChange = function testChange( e ) {
|
2204
2257
|
var elem = e.target, data, val;
|
2205
2258
|
|
2206
2259
|
if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
|
@@ -2223,61 +2276,61 @@ function testChange( e ) {
|
|
2223
2276
|
e.type = "change";
|
2224
2277
|
return jQuery.event.trigger( e, arguments[1], elem );
|
2225
2278
|
}
|
2226
|
-
}
|
2279
|
+
};
|
2227
2280
|
|
2228
|
-
jQuery.event.special.change = {
|
2229
|
-
|
2230
|
-
|
2281
|
+
jQuery.event.special.change = {
|
2282
|
+
filters: {
|
2283
|
+
focusout: testChange,
|
2231
2284
|
|
2232
|
-
|
2233
|
-
|
2285
|
+
click: function( e ) {
|
2286
|
+
var elem = e.target, type = elem.type;
|
2234
2287
|
|
2235
|
-
|
2236
|
-
|
2237
|
-
|
2238
|
-
|
2288
|
+
if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
|
2289
|
+
return testChange.call( this, e );
|
2290
|
+
}
|
2291
|
+
},
|
2292
|
+
|
2293
|
+
// Change has to be called before submit
|
2294
|
+
// Keydown will be called before keypress, which is used in submit-event delegation
|
2295
|
+
keydown: function( e ) {
|
2296
|
+
var elem = e.target, type = elem.type;
|
2239
2297
|
|
2240
|
-
|
2241
|
-
|
2242
|
-
|
2243
|
-
|
2298
|
+
if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
|
2299
|
+
(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
|
2300
|
+
type === "select-multiple" ) {
|
2301
|
+
return testChange.call( this, e );
|
2302
|
+
}
|
2303
|
+
},
|
2244
2304
|
|
2245
|
-
|
2246
|
-
|
2247
|
-
|
2248
|
-
|
2305
|
+
// Beforeactivate happens also before the previous element is blurred
|
2306
|
+
// with this event you can't trigger a change event, but you can store
|
2307
|
+
// information/focus[in] is not needed anymore
|
2308
|
+
beforeactivate: function( e ) {
|
2309
|
+
var elem = e.target;
|
2310
|
+
jQuery.data( elem, "_change_data", getVal(elem) );
|
2249
2311
|
}
|
2250
2312
|
},
|
2251
2313
|
|
2252
|
-
|
2253
|
-
|
2254
|
-
|
2255
|
-
|
2256
|
-
var elem = e.target;
|
2314
|
+
setup: function( data, namespaces ) {
|
2315
|
+
if ( this.type === "file" ) {
|
2316
|
+
return false;
|
2317
|
+
}
|
2257
2318
|
|
2258
|
-
|
2259
|
-
jQuery.
|
2319
|
+
for ( var type in changeFilters ) {
|
2320
|
+
jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
|
2260
2321
|
}
|
2261
|
-
}
|
2262
|
-
},
|
2263
|
-
setup: function( data, namespaces, fn ) {
|
2264
|
-
for ( var type in changeFilters ) {
|
2265
|
-
jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );
|
2266
|
-
}
|
2267
2322
|
|
2268
|
-
|
2269
|
-
|
2270
|
-
remove: function( namespaces, fn ) {
|
2271
|
-
for ( var type in changeFilters ) {
|
2272
|
-
jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );
|
2273
|
-
}
|
2323
|
+
return formElems.test( this.nodeName );
|
2324
|
+
},
|
2274
2325
|
|
2275
|
-
|
2276
|
-
|
2277
|
-
};
|
2326
|
+
teardown: function( namespaces ) {
|
2327
|
+
jQuery.event.remove( this, ".specialChange" );
|
2278
2328
|
|
2279
|
-
|
2329
|
+
return formElems.test( this.nodeName );
|
2330
|
+
}
|
2331
|
+
};
|
2280
2332
|
|
2333
|
+
changeFilters = jQuery.event.special.change.filters;
|
2281
2334
|
}
|
2282
2335
|
|
2283
2336
|
function trigger( type, elem, args ) {
|
@@ -2325,11 +2378,16 @@ jQuery.each(["bind", "one"], function( i, name ) {
|
|
2325
2378
|
return fn.apply( this, arguments );
|
2326
2379
|
}) : fn;
|
2327
2380
|
|
2328
|
-
|
2329
|
-
this.one( type, data, fn )
|
2330
|
-
|
2331
|
-
|
2332
|
-
|
2381
|
+
if ( type === "unload" && name !== "one" ) {
|
2382
|
+
this.one( type, data, fn );
|
2383
|
+
|
2384
|
+
} else {
|
2385
|
+
for ( var i = 0, l = this.length; i < l; i++ ) {
|
2386
|
+
jQuery.event.add( this[i], type, handler, data );
|
2387
|
+
}
|
2388
|
+
}
|
2389
|
+
|
2390
|
+
return this;
|
2333
2391
|
};
|
2334
2392
|
});
|
2335
2393
|
|
@@ -2340,13 +2398,29 @@ jQuery.fn.extend({
|
|
2340
2398
|
for ( var key in type ) {
|
2341
2399
|
this.unbind(key, type[key]);
|
2342
2400
|
}
|
2343
|
-
|
2401
|
+
|
2402
|
+
} else {
|
2403
|
+
for ( var i = 0, l = this.length; i < l; i++ ) {
|
2404
|
+
jQuery.event.remove( this[i], type, fn );
|
2405
|
+
}
|
2344
2406
|
}
|
2345
2407
|
|
2346
|
-
return this
|
2347
|
-
|
2348
|
-
|
2408
|
+
return this;
|
2409
|
+
},
|
2410
|
+
|
2411
|
+
delegate: function( selector, types, data, fn ) {
|
2412
|
+
return this.live( types, data, fn, selector );
|
2413
|
+
},
|
2414
|
+
|
2415
|
+
undelegate: function( selector, types, fn ) {
|
2416
|
+
if ( arguments.length === 0 ) {
|
2417
|
+
return this.unbind( "live" );
|
2418
|
+
|
2419
|
+
} else {
|
2420
|
+
return this.die( types, null, fn, selector );
|
2421
|
+
}
|
2349
2422
|
},
|
2423
|
+
|
2350
2424
|
trigger: function( type, data ) {
|
2351
2425
|
return this.each(function() {
|
2352
2426
|
jQuery.event.trigger( type, data, this );
|
@@ -2390,32 +2464,60 @@ jQuery.fn.extend({
|
|
2390
2464
|
}
|
2391
2465
|
});
|
2392
2466
|
|
2467
|
+
var liveMap = {
|
2468
|
+
focus: "focusin",
|
2469
|
+
blur: "focusout",
|
2470
|
+
mouseenter: "mouseover",
|
2471
|
+
mouseleave: "mouseout"
|
2472
|
+
};
|
2473
|
+
|
2393
2474
|
jQuery.each(["live", "die"], function( i, name ) {
|
2394
|
-
jQuery.fn[ name ] = function( types, data, fn ) {
|
2395
|
-
var type, i = 0
|
2475
|
+
jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
|
2476
|
+
var type, i = 0, match, namespaces, preType,
|
2477
|
+
selector = origSelector || this.selector,
|
2478
|
+
context = origSelector ? this : jQuery( this.context );
|
2396
2479
|
|
2397
2480
|
if ( jQuery.isFunction( data ) ) {
|
2398
2481
|
fn = data;
|
2399
2482
|
data = undefined;
|
2400
2483
|
}
|
2401
2484
|
|
2402
|
-
types = (types || "").split(
|
2485
|
+
types = (types || "").split(" ");
|
2403
2486
|
|
2404
2487
|
while ( (type = types[ i++ ]) != null ) {
|
2405
|
-
|
2406
|
-
|
2407
|
-
|
2408
|
-
|
2409
|
-
|
2488
|
+
match = rnamespaces.exec( type );
|
2489
|
+
namespaces = "";
|
2490
|
+
|
2491
|
+
if ( match ) {
|
2492
|
+
namespaces = match[0];
|
2493
|
+
type = type.replace( rnamespaces, "" );
|
2494
|
+
}
|
2495
|
+
|
2496
|
+
if ( type === "hover" ) {
|
2497
|
+
types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
|
2498
|
+
continue;
|
2499
|
+
}
|
2500
|
+
|
2501
|
+
preType = type;
|
2502
|
+
|
2503
|
+
if ( type === "focus" || type === "blur" ) {
|
2504
|
+
types.push( liveMap[ type ] + namespaces );
|
2505
|
+
type = type + namespaces;
|
2506
|
+
|
2507
|
+
} else {
|
2508
|
+
type = (liveMap[ type ] || type) + namespaces;
|
2509
|
+
}
|
2510
|
+
|
2410
2511
|
if ( name === "live" ) {
|
2411
2512
|
// bind live handler
|
2412
|
-
|
2413
|
-
|
2414
|
-
|
2513
|
+
context.each(function(){
|
2514
|
+
jQuery.event.add( this, liveConvert( type, selector ),
|
2515
|
+
{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
|
2516
|
+
});
|
2415
2517
|
|
2416
2518
|
} else {
|
2417
2519
|
// unbind live handler
|
2418
|
-
|
2520
|
+
context.unbind( liveConvert( type, selector ), fn );
|
2419
2521
|
}
|
2420
2522
|
}
|
2421
2523
|
|
@@ -2425,45 +2527,46 @@ jQuery.each(["live", "die"], function( i, name ) {
|
|
2425
2527
|
|
2426
2528
|
function liveHandler( event ) {
|
2427
2529
|
var stop, elems = [], selectors = [], args = arguments,
|
2428
|
-
related, match,
|
2429
|
-
|
2530
|
+
related, match, handleObj, elem, j, i, l, data,
|
2531
|
+
events = jQuery.data( this, "events" );
|
2430
2532
|
|
2431
2533
|
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
|
2432
|
-
if ( event.button && event.type === "click" ) {
|
2534
|
+
if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
|
2433
2535
|
return;
|
2434
2536
|
}
|
2435
2537
|
|
2436
|
-
|
2437
|
-
|
2438
|
-
|
2439
|
-
|
2538
|
+
event.liveFired = this;
|
2539
|
+
|
2540
|
+
var live = events.live.slice(0);
|
2541
|
+
|
2542
|
+
for ( j = 0; j < live.length; j++ ) {
|
2543
|
+
handleObj = live[j];
|
2544
|
+
|
2545
|
+
if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
|
2546
|
+
selectors.push( handleObj.selector );
|
2440
2547
|
|
2441
|
-
data = fn.data;
|
2442
|
-
if ( !(data.beforeFilter && data.beforeFilter[event.type] &&
|
2443
|
-
!data.beforeFilter[event.type](event)) ) {
|
2444
|
-
selectors.push( fn.selector );
|
2445
|
-
}
|
2446
2548
|
} else {
|
2447
|
-
|
2549
|
+
live.splice( j--, 1 );
|
2448
2550
|
}
|
2449
2551
|
}
|
2450
2552
|
|
2451
2553
|
match = jQuery( event.target ).closest( selectors, event.currentTarget );
|
2452
2554
|
|
2453
2555
|
for ( i = 0, l = match.length; i < l; i++ ) {
|
2454
|
-
for ( j
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2556
|
+
for ( j = 0; j < live.length; j++ ) {
|
2557
|
+
handleObj = live[j];
|
2558
|
+
|
2559
|
+
if ( match[i].selector === handleObj.selector ) {
|
2560
|
+
elem = match[i].elem;
|
2561
|
+
related = null;
|
2458
2562
|
|
2459
|
-
if ( match[i].selector === fn.selector ) {
|
2460
2563
|
// Those two events require additional checking
|
2461
|
-
if (
|
2462
|
-
related = jQuery( event.relatedTarget ).closest(
|
2564
|
+
if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
|
2565
|
+
related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
|
2463
2566
|
}
|
2464
2567
|
|
2465
2568
|
if ( !related || related !== elem ) {
|
2466
|
-
elems.push({ elem: elem,
|
2569
|
+
elems.push({ elem: elem, handleObj: handleObj });
|
2467
2570
|
}
|
2468
2571
|
}
|
2469
2572
|
}
|
@@ -2472,8 +2575,10 @@ function liveHandler( event ) {
|
|
2472
2575
|
for ( i = 0, l = elems.length; i < l; i++ ) {
|
2473
2576
|
match = elems[i];
|
2474
2577
|
event.currentTarget = match.elem;
|
2475
|
-
event.data = match.
|
2476
|
-
|
2578
|
+
event.data = match.handleObj.data;
|
2579
|
+
event.handleObj = match.handleObj;
|
2580
|
+
|
2581
|
+
if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
|
2477
2582
|
stop = false;
|
2478
2583
|
break;
|
2479
2584
|
}
|
@@ -2483,7 +2588,7 @@ function liveHandler( event ) {
|
|
2483
2588
|
}
|
2484
2589
|
|
2485
2590
|
function liveConvert( type, selector ) {
|
2486
|
-
return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
|
2591
|
+
return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
|
2487
2592
|
}
|
2488
2593
|
|
2489
2594
|
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
|
@@ -3228,8 +3333,10 @@ var makeArray = function(array, results) {
|
|
3228
3333
|
|
3229
3334
|
// Perform a simple check to determine if the browser is capable of
|
3230
3335
|
// converting a NodeList to an array using builtin methods.
|
3336
|
+
// Also verifies that the returned array holds DOM nodes
|
3337
|
+
// (which is not the case in the Blackberry browser)
|
3231
3338
|
try {
|
3232
|
-
Array.prototype.slice.call( document.documentElement.childNodes, 0 );
|
3339
|
+
Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
|
3233
3340
|
|
3234
3341
|
// Provide a fallback method if it does not work
|
3235
3342
|
} catch(e){
|
@@ -3533,7 +3640,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
|
|
3533
3640
|
}
|
3534
3641
|
|
3535
3642
|
var contains = document.compareDocumentPosition ? function(a, b){
|
3536
|
-
return a.compareDocumentPosition(b) & 16;
|
3643
|
+
return !!(a.compareDocumentPosition(b) & 16);
|
3537
3644
|
} : function(a, b){
|
3538
3645
|
return a !== b && (a.contains ? a.contains(b) : true);
|
3539
3646
|
};
|
@@ -3570,7 +3677,7 @@ jQuery.find = Sizzle;
|
|
3570
3677
|
jQuery.expr = Sizzle.selectors;
|
3571
3678
|
jQuery.expr[":"] = jQuery.expr.filters;
|
3572
3679
|
jQuery.unique = Sizzle.uniqueSort;
|
3573
|
-
jQuery.
|
3680
|
+
jQuery.text = getText;
|
3574
3681
|
jQuery.isXMLDoc = isXML;
|
3575
3682
|
jQuery.contains = contains;
|
3576
3683
|
|
@@ -3856,7 +3963,8 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
|
|
3856
3963
|
rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
|
3857
3964
|
rtagName = /<([\w:]+)/,
|
3858
3965
|
rtbody = /<tbody/i,
|
3859
|
-
rhtml =
|
3966
|
+
rhtml = /<|&#?\w+;/,
|
3967
|
+
rnocache = /<script|<object|<embed|<option|<style/i,
|
3860
3968
|
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, // checked="checked" or checked (html5)
|
3861
3969
|
fcloseTag = function( all, front, tag ) {
|
3862
3970
|
return rselfClosing.test( tag ) ?
|
@@ -3896,7 +4004,7 @@ jQuery.fn.extend({
|
|
3896
4004
|
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
|
3897
4005
|
}
|
3898
4006
|
|
3899
|
-
return jQuery.
|
4007
|
+
return jQuery.text( this );
|
3900
4008
|
},
|
3901
4009
|
|
3902
4010
|
wrapAll: function( html ) {
|
@@ -4000,6 +4108,40 @@ jQuery.fn.extend({
|
|
4000
4108
|
return set;
|
4001
4109
|
}
|
4002
4110
|
},
|
4111
|
+
|
4112
|
+
// keepData is for internal use only--do not document
|
4113
|
+
remove: function( selector, keepData ) {
|
4114
|
+
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
|
4115
|
+
if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
|
4116
|
+
if ( !keepData && elem.nodeType === 1 ) {
|
4117
|
+
jQuery.cleanData( elem.getElementsByTagName("*") );
|
4118
|
+
jQuery.cleanData( [ elem ] );
|
4119
|
+
}
|
4120
|
+
|
4121
|
+
if ( elem.parentNode ) {
|
4122
|
+
elem.parentNode.removeChild( elem );
|
4123
|
+
}
|
4124
|
+
}
|
4125
|
+
}
|
4126
|
+
|
4127
|
+
return this;
|
4128
|
+
},
|
4129
|
+
|
4130
|
+
empty: function() {
|
4131
|
+
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
|
4132
|
+
// Remove element nodes and prevent memory leaks
|
4133
|
+
if ( elem.nodeType === 1 ) {
|
4134
|
+
jQuery.cleanData( elem.getElementsByTagName("*") );
|
4135
|
+
}
|
4136
|
+
|
4137
|
+
// Remove any remaining nodes
|
4138
|
+
while ( elem.firstChild ) {
|
4139
|
+
elem.removeChild( elem.firstChild );
|
4140
|
+
}
|
4141
|
+
}
|
4142
|
+
|
4143
|
+
return this;
|
4144
|
+
},
|
4003
4145
|
|
4004
4146
|
clone: function( events ) {
|
4005
4147
|
// Do the clone
|
@@ -4021,6 +4163,8 @@ jQuery.fn.extend({
|
|
4021
4163
|
}
|
4022
4164
|
|
4023
4165
|
return jQuery.clean([html.replace(rinlinejQuery, "")
|
4166
|
+
// Handle the case in IE 8 where action=/test/> self-closes a tag
|
4167
|
+
.replace(/=([^="'>\s]+\/)>/g, '="$1">')
|
4024
4168
|
.replace(rleadingWhitespace, "")], ownerDocument)[0];
|
4025
4169
|
} else {
|
4026
4170
|
return this.cloneNode(true);
|
@@ -4044,7 +4188,7 @@ jQuery.fn.extend({
|
|
4044
4188
|
null;
|
4045
4189
|
|
4046
4190
|
// See if we can take a shortcut and just use innerHTML
|
4047
|
-
} else if ( typeof value === "string" &&
|
4191
|
+
} else if ( typeof value === "string" && !rnocache.test( value ) &&
|
4048
4192
|
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
|
4049
4193
|
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
|
4050
4194
|
|
@@ -4083,16 +4227,17 @@ jQuery.fn.extend({
|
|
4083
4227
|
if ( this[0] && this[0].parentNode ) {
|
4084
4228
|
// Make sure that the elements are removed from the DOM before they are inserted
|
4085
4229
|
// this can help fix replacing a parent with child elements
|
4086
|
-
if (
|
4087
|
-
value = jQuery( value ).detach();
|
4088
|
-
|
4089
|
-
} else {
|
4230
|
+
if ( jQuery.isFunction( value ) ) {
|
4090
4231
|
return this.each(function(i) {
|
4091
4232
|
var self = jQuery(this), old = self.html();
|
4092
4233
|
self.replaceWith( value.call( this, i, old ) );
|
4093
4234
|
});
|
4094
4235
|
}
|
4095
4236
|
|
4237
|
+
if ( typeof value !== "string" ) {
|
4238
|
+
value = jQuery(value).detach();
|
4239
|
+
}
|
4240
|
+
|
4096
4241
|
return this.each(function() {
|
4097
4242
|
var next = this.nextSibling, parent = this.parentNode;
|
4098
4243
|
|
@@ -4114,7 +4259,7 @@ jQuery.fn.extend({
|
|
4114
4259
|
},
|
4115
4260
|
|
4116
4261
|
domManip: function( args, table, callback ) {
|
4117
|
-
var results, first, value = args[0], scripts = [];
|
4262
|
+
var results, first, value = args[0], scripts = [], fragment, parent;
|
4118
4263
|
|
4119
4264
|
// We can't cloneNode fragments that contain checked, in WebKit
|
4120
4265
|
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
|
@@ -4132,14 +4277,23 @@ jQuery.fn.extend({
|
|
4132
4277
|
}
|
4133
4278
|
|
4134
4279
|
if ( this[0] ) {
|
4280
|
+
parent = value && value.parentNode;
|
4281
|
+
|
4135
4282
|
// If we're in a fragment, just use that instead of building a new one
|
4136
|
-
if (
|
4137
|
-
results = { fragment:
|
4283
|
+
if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
|
4284
|
+
results = { fragment: parent };
|
4285
|
+
|
4138
4286
|
} else {
|
4139
4287
|
results = buildFragment( args, this, scripts );
|
4140
4288
|
}
|
4141
|
-
|
4142
|
-
|
4289
|
+
|
4290
|
+
fragment = results.fragment;
|
4291
|
+
|
4292
|
+
if ( fragment.childNodes.length === 1 ) {
|
4293
|
+
first = fragment = fragment.firstChild;
|
4294
|
+
} else {
|
4295
|
+
first = fragment.firstChild;
|
4296
|
+
}
|
4143
4297
|
|
4144
4298
|
if ( first ) {
|
4145
4299
|
table = table && jQuery.nodeName( first, "tr" );
|
@@ -4149,14 +4303,14 @@ jQuery.fn.extend({
|
|
4149
4303
|
table ?
|
4150
4304
|
root(this[i], first) :
|
4151
4305
|
this[i],
|
4152
|
-
results.cacheable || this.length > 1
|
4153
|
-
|
4154
|
-
|
4306
|
+
i > 0 || results.cacheable || this.length > 1 ?
|
4307
|
+
fragment.cloneNode(true) :
|
4308
|
+
fragment
|
4155
4309
|
);
|
4156
4310
|
}
|
4157
4311
|
}
|
4158
4312
|
|
4159
|
-
if ( scripts ) {
|
4313
|
+
if ( scripts.length ) {
|
4160
4314
|
jQuery.each( scripts, evalScript );
|
4161
4315
|
}
|
4162
4316
|
}
|
@@ -4196,10 +4350,16 @@ function cloneCopyEvent(orig, ret) {
|
|
4196
4350
|
}
|
4197
4351
|
|
4198
4352
|
function buildFragment( args, nodes, scripts ) {
|
4199
|
-
var fragment, cacheable, cacheresults,
|
4353
|
+
var fragment, cacheable, cacheresults,
|
4354
|
+
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
|
4355
|
+
|
4356
|
+
// Only cache "small" (1/2 KB) strings that are associated with the main document
|
4357
|
+
// Cloning options loses the selected state, so don't cache them
|
4358
|
+
// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
|
4359
|
+
// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
|
4360
|
+
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
|
4361
|
+
!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
|
4200
4362
|
|
4201
|
-
// webkit does not clone 'checked' attribute of radio inputs on cloneNode, so don't cache if string has a checked
|
4202
|
-
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
|
4203
4363
|
cacheable = true;
|
4204
4364
|
cacheresults = jQuery.fragments[ args[0] ];
|
4205
4365
|
if ( cacheresults ) {
|
@@ -4210,7 +4370,6 @@ function buildFragment( args, nodes, scripts ) {
|
|
4210
4370
|
}
|
4211
4371
|
|
4212
4372
|
if ( !fragment ) {
|
4213
|
-
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
|
4214
4373
|
fragment = doc.createDocumentFragment();
|
4215
4374
|
jQuery.clean( args, doc, fragment, scripts );
|
4216
4375
|
}
|
@@ -4232,46 +4391,22 @@ jQuery.each({
|
|
4232
4391
|
replaceAll: "replaceWith"
|
4233
4392
|
}, function( name, original ) {
|
4234
4393
|
jQuery.fn[ name ] = function( selector ) {
|
4235
|
-
var ret = [], insert = jQuery( selector )
|
4236
|
-
|
4237
|
-
|
4238
|
-
|
4239
|
-
|
4240
|
-
|
4241
|
-
|
4242
|
-
|
4243
|
-
|
4244
|
-
|
4245
|
-
|
4246
|
-
|
4247
|
-
// keepData is for internal use only--do not document
|
4248
|
-
remove: function( selector, keepData ) {
|
4249
|
-
if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
|
4250
|
-
if ( !keepData && this.nodeType === 1 ) {
|
4251
|
-
jQuery.cleanData( this.getElementsByTagName("*") );
|
4252
|
-
jQuery.cleanData( [ this ] );
|
4253
|
-
}
|
4254
|
-
|
4255
|
-
if ( this.parentNode ) {
|
4256
|
-
this.parentNode.removeChild( this );
|
4394
|
+
var ret = [], insert = jQuery( selector ),
|
4395
|
+
parent = this.length === 1 && this[0].parentNode;
|
4396
|
+
|
4397
|
+
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
|
4398
|
+
insert[ original ]( this[0] );
|
4399
|
+
return this;
|
4400
|
+
|
4401
|
+
} else {
|
4402
|
+
for ( var i = 0, l = insert.length; i < l; i++ ) {
|
4403
|
+
var elems = (i > 0 ? this.clone(true) : this).get();
|
4404
|
+
jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
|
4405
|
+
ret = ret.concat( elems );
|
4257
4406
|
}
|
4407
|
+
|
4408
|
+
return this.pushStack( ret, name, insert.selector );
|
4258
4409
|
}
|
4259
|
-
},
|
4260
|
-
|
4261
|
-
empty: function() {
|
4262
|
-
// Remove element nodes and prevent memory leaks
|
4263
|
-
if ( this.nodeType === 1 ) {
|
4264
|
-
jQuery.cleanData( this.getElementsByTagName("*") );
|
4265
|
-
}
|
4266
|
-
|
4267
|
-
// Remove any remaining nodes
|
4268
|
-
while ( this.firstChild ) {
|
4269
|
-
this.removeChild( this.firstChild );
|
4270
|
-
}
|
4271
|
-
}
|
4272
|
-
}, function( name, fn ) {
|
4273
|
-
jQuery.fn[ name ] = function() {
|
4274
|
-
return this.each( fn, arguments );
|
4275
4410
|
};
|
4276
4411
|
});
|
4277
4412
|
|
@@ -4286,13 +4421,13 @@ jQuery.extend({
|
|
4286
4421
|
|
4287
4422
|
var ret = [];
|
4288
4423
|
|
4289
|
-
|
4424
|
+
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
4290
4425
|
if ( typeof elem === "number" ) {
|
4291
4426
|
elem += "";
|
4292
4427
|
}
|
4293
4428
|
|
4294
4429
|
if ( !elem ) {
|
4295
|
-
|
4430
|
+
continue;
|
4296
4431
|
}
|
4297
4432
|
|
4298
4433
|
// Convert html string into DOM nodes
|
@@ -4343,7 +4478,7 @@ jQuery.extend({
|
|
4343
4478
|
div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
|
4344
4479
|
}
|
4345
4480
|
|
4346
|
-
elem =
|
4481
|
+
elem = div.childNodes;
|
4347
4482
|
}
|
4348
4483
|
|
4349
4484
|
if ( elem.nodeType ) {
|
@@ -4351,13 +4486,13 @@ jQuery.extend({
|
|
4351
4486
|
} else {
|
4352
4487
|
ret = jQuery.merge( ret, elem );
|
4353
4488
|
}
|
4354
|
-
|
4355
|
-
});
|
4489
|
+
}
|
4356
4490
|
|
4357
4491
|
if ( fragment ) {
|
4358
4492
|
for ( var i = 0; ret[i]; i++ ) {
|
4359
4493
|
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
|
4360
4494
|
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
|
4495
|
+
|
4361
4496
|
} else {
|
4362
4497
|
if ( ret[i].nodeType === 1 ) {
|
4363
4498
|
ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
|
@@ -4371,9 +4506,36 @@ jQuery.extend({
|
|
4371
4506
|
},
|
4372
4507
|
|
4373
4508
|
cleanData: function( elems ) {
|
4374
|
-
|
4375
|
-
jQuery.event.
|
4376
|
-
jQuery.
|
4509
|
+
var data, id, cache = jQuery.cache,
|
4510
|
+
special = jQuery.event.special,
|
4511
|
+
deleteExpando = jQuery.support.deleteExpando;
|
4512
|
+
|
4513
|
+
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
4514
|
+
id = elem[ jQuery.expando ];
|
4515
|
+
|
4516
|
+
if ( id ) {
|
4517
|
+
data = cache[ id ];
|
4518
|
+
|
4519
|
+
if ( data.events ) {
|
4520
|
+
for ( var type in data.events ) {
|
4521
|
+
if ( special[ type ] ) {
|
4522
|
+
jQuery.event.remove( elem, type );
|
4523
|
+
|
4524
|
+
} else {
|
4525
|
+
removeEvent( elem, type, data.handle );
|
4526
|
+
}
|
4527
|
+
}
|
4528
|
+
}
|
4529
|
+
|
4530
|
+
if ( deleteExpando ) {
|
4531
|
+
delete elem[ jQuery.expando ];
|
4532
|
+
|
4533
|
+
} else if ( elem.removeAttribute ) {
|
4534
|
+
elem.removeAttribute( jQuery.expando );
|
4535
|
+
}
|
4536
|
+
|
4537
|
+
delete cache[ id ];
|
4538
|
+
}
|
4377
4539
|
}
|
4378
4540
|
}
|
4379
4541
|
});
|
@@ -4614,15 +4776,15 @@ var jsc = now(),
|
|
4614
4776
|
rquery = /\?/,
|
4615
4777
|
rts = /(\?|&)_=.*?(&|$)/,
|
4616
4778
|
rurl = /^(\w+:)?\/\/([^\/?#]+)/,
|
4617
|
-
r20 = /%20/g
|
4779
|
+
r20 = /%20/g,
|
4618
4780
|
|
4619
|
-
|
4620
|
-
|
4621
|
-
_load: jQuery.fn.load,
|
4781
|
+
// Keep a copy of the old load method
|
4782
|
+
_load = jQuery.fn.load;
|
4622
4783
|
|
4784
|
+
jQuery.fn.extend({
|
4623
4785
|
load: function( url, params, callback ) {
|
4624
4786
|
if ( typeof url !== "string" ) {
|
4625
|
-
return
|
4787
|
+
return _load.call( this, url );
|
4626
4788
|
|
4627
4789
|
// Don't do a request if no elements are being requested
|
4628
4790
|
} else if ( !this.length ) {
|
@@ -5243,7 +5405,7 @@ jQuery.extend({
|
|
5243
5405
|
if ( jQuery.isArray(obj) ) {
|
5244
5406
|
// Serialize array item.
|
5245
5407
|
jQuery.each( obj, function( i, v ) {
|
5246
|
-
if ( traditional ) {
|
5408
|
+
if ( traditional || /\[\]$/.test( prefix ) ) {
|
5247
5409
|
// Treat each array item as a scalar.
|
5248
5410
|
add( prefix, v );
|
5249
5411
|
} else {
|