Редакция 19 | К новейшей редакции | Весь файл | Учитывать пробелы | Содержимое файла | Авторство | Последнее изменение | Открыть журнал | RSS
Редакция 19 | Редакция 109 | ||
---|---|---|---|
Строка 1... | Строка 1... | ||
1 | /*!
|
1 | /*!
|
2 | * jQuery JavaScript Library v1.3.2
|
2 | * jQuery JavaScript Library v1.3.3pre
|
3 | * http://jquery.com/
|
3 | * http://jquery.com/
|
4 | *
|
4 | *
|
5 | * Copyright (c) 2009 John Resig
|
5 | * Copyright (c) 2009 John Resig
|
6 | * Dual licensed under the MIT and GPL licenses.
|
6 | * Dual licensed under the MIT and GPL licenses.
|
7 | * http://docs.jquery.com/License
|
7 | * http://docs.jquery.com/License
|
8 | *
|
8 | *
|
9 | * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
|
9 | * Date: 2009-03-28 00:20:57 +0600 (Сбт, 28 Мар 2009)
|
10 | * Revision: 6246
|
10 | * Revision: 6301
|
11 | */
|
11 | */
|
12 | (function(){ |
12 | (function(){ |
13 | 13 | ||
14 | var
|
14 | var
|
15 | // Will speed up references to window, and allows munging its name.
|
15 | // Will speed up references to window, and allows munging its name.
|
Строка 21... | Строка 21... | ||
21 | // Map over the $ in case of overwrite
|
21 | // Map over the $ in case of overwrite
|
22 | _$ = window.$, |
22 | _$ = window.$, |
23 | 23 | ||
24 | jQuery = window.jQuery = window.$ = function( selector, context ) { |
24 | jQuery = window.jQuery = window.$ = function( selector, context ) { |
25 | // The jQuery object is actually just the init constructor 'enhanced'
|
25 | // The jQuery object is actually just the init constructor 'enhanced'
|
- | 26 | return selector === undefined ? |
|
- | 27 | rootjQuery :
|
|
26 | return new jQuery.fn.init( selector, context ); |
28 | new jQuery.fn.init( selector, context ); |
27 | }, |
29 | }, |
28 | 30 | ||
29 | // A simple way to check for HTML strings or ID strings
|
31 | // A simple way to check for HTML strings or ID strings
|
30 | // (both of which we optimize for)
|
32 | // (both of which we optimize for)
|
31 | quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, |
33 | quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, |
32 | // Is it a simple selector
|
34 | // Is it a simple selector
|
33 | isSimple = /^.[^:#\[\.,]*$/; |
35 | isSimple = /^.[^:#\[\.,]*$/; |
34 | 36 | ||
35 | jQuery.fn = jQuery.prototype = { |
37 | jQuery.fn = jQuery.prototype = { |
36 | init: function( selector, context ) { |
38 | init: function( selector, context ) { |
37 | // Make sure that a selection was provided
|
39 | // Handle $("") or $(null)
|
38 | selector = selector || document; |
40 | if ( !selector ) { |
- | 41 | this.length = 0; |
|
- | 42 | return this; |
|
- | 43 | }
|
|
39 | 44 | ||
40 | // Handle $(DOMElement)
|
45 | // Handle $(DOMElement)
|
41 | if ( selector.nodeType ) { |
46 | if ( selector.nodeType ) { |
42 | this[0] = selector; |
47 | this[0] = selector; |
43 | this.length = 1; |
48 | this.length = 1; |
44 | this.context = selector; |
49 | this.context = selector; |
45 | return this; |
50 | return this; |
46 | }
|
51 | }
|
- | 52 | ||
47 | // Handle HTML strings
|
53 | // Handle HTML strings
|
48 | if ( typeof selector === "string" ) { |
54 | if ( typeof selector === "string" ) { |
49 | // Are we dealing with HTML string or an ID?
|
55 | // Are we dealing with HTML string or an ID?
|
50 | var match = quickExpr.exec( selector ); |
56 | var match = quickExpr.exec( selector ); |
51 | 57 | ||
52 | // Verify a match, and that no context was specified for #id
|
58 | // Verify a match, and that no context was specified for #id
|
53 | if ( match && (match[1] || !context) ) { |
59 | if ( match && (match[1] || !context) ) { |
54 | 60 | ||
55 | // HANDLE: $(html) -> $(array)
|
61 | // HANDLE: $(html) -> $(array)
|
56 | if ( match[1] ) |
62 | if ( match[1] ) { |
57 | selector = jQuery.clean( [ match[1] ], context ); |
63 | selector = jQuery.clean( [ match[1] ], context ); |
58 | 64 | ||
59 | // HANDLE: $("#id")
|
65 | // HANDLE: $("#id")
|
60 | else { |
66 | } else { |
61 | var elem = document.getElementById( match[3] ); |
67 | var elem = document.getElementById( match[3] ); |
62 | 68 | ||
63 | // Handle the case where IE and Opera return items
|
69 | // Handle the case where IE and Opera return items
|
64 | // by name instead of ID
|
70 | // by name instead of ID
|
65 | if ( elem && elem.id != match[3] ) |
71 | if ( elem && elem.id != match[3] ) { |
66 | return jQuery().find( selector ); |
72 | return rootjQuery.find( selector ); |
- | 73 | }
|
|
67 | 74 | ||
68 | // Otherwise, we inject the element directly into the jQuery object
|
75 | // Otherwise, we inject the element directly into the jQuery object
|
69 | var ret = jQuery( elem || [] ); |
76 | var ret = jQuery( elem || null ); |
70 | ret.context = document; |
77 | ret.context = document; |
71 | ret.selector = selector; |
78 | ret.selector = selector; |
72 | return ret; |
79 | return ret; |
73 | }
|
80 | }
|
74 | 81 | ||
- | 82 | // HANDLE: $(expr, $(...))
|
|
- | 83 | } else if ( !context || context.jquery ) { |
|
- | 84 | return (context || rootjQuery).find( selector ); |
|
- | 85 | ||
75 | // HANDLE: $(expr, [context])
|
86 | // HANDLE: $(expr, context)
|
76 | // (which is just equivalent to: $(content).find(expr)
|
87 | // (which is just equivalent to: $(context).find(expr)
|
77 | } else |
88 | } else { |
78 | return jQuery( context ).find( selector ); |
89 | return jQuery( context ).find( selector ); |
- | 90 | }
|
|
79 | 91 | ||
80 | // HANDLE: $(function)
|
92 | // HANDLE: $(function)
|
81 | // Shortcut for document ready
|
93 | // Shortcut for document ready
|
82 | } else if ( jQuery.isFunction( selector ) ) |
94 | } else if ( jQuery.isFunction( selector ) ) { |
83 | return jQuery( document ).ready( selector ); |
95 | return rootjQuery.ready( selector ); |
- | 96 | }
|
|
84 | 97 | ||
85 | // Make sure that old selector state is passed along
|
98 | // Make sure that old selector state is passed along
|
86 | if ( selector.selector && selector.context ) { |
99 | if ( selector.selector && selector.context ) { |
87 | this.selector = selector.selector; |
100 | this.selector = selector.selector; |
88 | this.context = selector.context; |
101 | this.context = selector.context; |
Строка 95... | Строка 108... | ||
95 | 108 | ||
96 | // Start with an empty selector
|
109 | // Start with an empty selector
|
97 | selector: "", |
110 | selector: "", |
98 | 111 | ||
99 | // The current version of jQuery being used
|
112 | // The current version of jQuery being used
|
100 | jquery: "1.3.2", |
113 | jquery: "1.3.3pre", |
101 | 114 | ||
102 | // The number of elements contained in the matched element set
|
115 | // The number of elements contained in the matched element set
|
103 | size: function() { |
116 | size: function() { |
104 | return this.length; |
117 | return this.length; |
105 | }, |
118 | }, |
Строка 118... | Строка 131... | ||
118 | 131 | ||
119 | // Take an array of elements and push it onto the stack
|
132 | // Take an array of elements and push it onto the stack
|
120 | // (returning the new matched element set)
|
133 | // (returning the new matched element set)
|
121 | pushStack: function( elems, name, selector ) { |
134 | pushStack: function( elems, name, selector ) { |
122 | // Build a new jQuery matched element set
|
135 | // Build a new jQuery matched element set
|
123 | var ret = jQuery( elems ); |
136 | var ret = jQuery( elems || null ); |
124 | 137 | ||
125 | // Add the old object onto the stack (as a reference)
|
138 | // Add the old object onto the stack (as a reference)
|
126 | ret.prevObject = this; |
139 | ret.prevObject = this; |
127 | 140 | ||
128 | ret.context = this.context; |
141 | ret.context = this.context; |
Строка 163... | Строка 176... | ||
163 | // If it receives a jQuery object, the first element is used
|
176 | // If it receives a jQuery object, the first element is used
|
164 | elem && elem.jquery ? elem[0] : elem |
177 | elem && elem.jquery ? elem[0] : elem |
165 | , this ); |
178 | , this ); |
166 | }, |
179 | }, |
167 | 180 | ||
168 | attr: function( name, value, type ) { |
181 | is: function( selector ) { |
169 | var options = name; |
182 | return !!selector && jQuery.multiFilter( selector, this ).length > 0; |
- | 183 | }, |
|
170 | 184 | ||
- | 185 | // For internal use only.
|
|
171 | // Look for the case where we're accessing a style value
|
186 | // Behaves like an Array's method, not like a jQuery method.
|
172 | if ( typeof name === "string" ) |
187 | push: [].push, |
173 | if ( value === undefined ) |
188 | sort: [].sort, |
174 | return this[0] && jQuery[ type || "attr" ]( this[0], name ); |
189 | splice: [].splice |
- | 190 | }; |
|
175 | 191 | ||
176 | else { |
- | |
177 | options = {}; |
192 | // Give the init function the jQuery prototype for later instantiation
|
178 | options[ name ] = value; |
193 | jQuery.fn.init.prototype = jQuery.fn; |
179 | }
|
- | |
180 | 194 | ||
181 | // Check to see if we're setting style values
|
- | |
182 | return this.each(function(i){ |
195 | function evalScript( i, elem ) { |
183 | // Set all the styles
|
- | |
184 | for ( name in options ) |
196 | if ( elem.src ) |
185 | jQuery.attr( |
197 | jQuery.ajax({ |
186 | type ?
|
198 | url: elem.src, |
187 | this.style : |
199 | async: false, |
188 | this, |
200 | dataType: "script" |
189 | name, jQuery.prop( this, options[ name ], type, i, name ) |
- | |
190 | ); |
- | |
191 | }); |
201 | }); |
192 | }, |
- | |
193 | 202 | ||
194 | css: function( key, value ) { |
- | |
195 | // ignore negative width and height values
|
- | |
196 | if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) |
- | |
197 | value = undefined; |
203 | else
|
198 | return this.attr( key, value, "curCSS" ); |
204 | jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); |
199 | }, |
- | |
200 | 205 | ||
201 | text: function( text ) { |
206 | if ( elem.parentNode ) |
202 | if ( typeof text !== "object" && text != null ) |
207 | elem.parentNode.removeChild( elem ); |
203 | return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); |
- | |
- | 208 | }
|
|
204 | 209 | ||
- | 210 | function now(){ |
|
205 | var ret = ""; |
211 | return +new Date; |
- | 212 | }
|
|
206 | 213 | ||
207 | jQuery.each( text || this, function(){ |
214 | jQuery.extend = jQuery.fn.extend = function() { |
208 | jQuery.each( this.childNodes, function(){ |
- | |
209 | if ( this.nodeType != 8 ) |
215 | // copy reference to target object
|
210 | ret += this.nodeType != 1 ? |
216 | var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; |
211 | this.nodeValue : |
- | |
212 | jQuery.fn.text( [ this ] ); |
- | |
213 | }); |
- | |
214 | }); |
- | |
215 | 217 | ||
- | 218 | // Handle a deep copy situation
|
|
- | 219 | if ( typeof target === "boolean" ) { |
|
216 | return ret; |
220 | deep = target; |
- | 221 | target = arguments[1] || {}; |
|
- | 222 | // skip the boolean and the target
|
|
- | 223 | i = 2; |
|
217 | }, |
224 | }
|
218 | 225 | ||
219 | wrapAll: function( html ) { |
- | |
220 | if ( this[0] ) { |
- | |
221 | // The elements to wrap the target around
|
226 | // Handle case when target is a string or something (possible in deep copy)
|
222 | var wrap = jQuery( html, this[0].ownerDocument ).clone(); |
227 | if ( typeof target !== "object" && !jQuery.isFunction(target) ) |
- | 228 | target = {}; |
|
223 | 229 | ||
- | 230 | // extend jQuery itself if only one argument is passed
|
|
224 | if ( this[0].parentNode ) |
231 | if ( length == i ) { |
225 | wrap.insertBefore( this[0] ); |
232 | target = this; |
- | 233 | --i; |
|
- | 234 | }
|
|
226 | 235 | ||
227 | wrap.map(function(){ |
236 | for ( ; i < length; i++ ) |
- | 237 | // Only deal with non-null/undefined values
|
|
- | 238 | if ( (options = arguments[ i ]) != null ) |
|
- | 239 | // Extend the base object
|
|
228 | var elem = this; |
240 | for ( var name in options ) { |
- | 241 | var src = target[ name ], copy = options[ name ]; |
|
229 | 242 | ||
- | 243 | // Prevent never-ending loop
|
|
230 | while ( elem.firstChild ) |
244 | if ( target === copy ) |
- | 245 | continue; |
|
- | 246 | ||
- | 247 | // Recurse if we're merging object values
|
|
- | 248 | if ( deep && copy && typeof copy === "object" && !copy.nodeType ) |
|
- | 249 | target[ name ] = jQuery.extend( deep, |
|
- | 250 | // Never move original objects, clone them
|
|
- | 251 | src || ( copy.length != null ? [ ] : { } ) |
|
- | 252 | , copy ); |
|
- | 253 | ||
- | 254 | // Don't bring in undefined values
|
|
- | 255 | else if ( copy !== undefined ) |
|
231 | elem = elem.firstChild; |
256 | target[ name ] = copy; |
232 | 257 | ||
233 | return elem; |
- | |
234 | }).append(this); |
- | |
235 | }
|
258 | }
|
236 | 259 | ||
- | 260 | // Return the modified object
|
|
237 | return this; |
261 | return target; |
238 | }, |
262 | }; |
239 | 263 | ||
240 | wrapInner: function( html ) { |
- | |
241 | return this.each(function(){ |
- | |
242 | jQuery( this ).contents().wrapAll( html ); |
264 | var toString = Object.prototype.toString; |
243 | }); |
- | |
244 | }, |
- | |
245 | 265 | ||
246 | wrap: function( html ) { |
266 | jQuery.extend({ |
247 | return this.each(function(){ |
267 | noConflict: function( deep ) { |
248 | jQuery( this ).wrapAll( html ); |
268 | window.$ = _$; |
249 | }); |
- | |
250 | }, |
- | |
251 | 269 | ||
252 | append: function() { |
- | |
253 | return this.domManip(arguments, true, function(elem){ |
- | |
254 | if (this.nodeType == 1) |
270 | if ( deep ) |
255 | this.appendChild( elem ); |
271 | window.jQuery = _jQuery; |
256 | }); |
- | |
257 | }, |
- | |
258 | 272 | ||
259 | prepend: function() { |
273 | return jQuery; |
260 | return this.domManip(arguments, true, function(elem){ |
- | |
261 | if (this.nodeType == 1) |
- | |
262 | this.insertBefore( elem, this.firstChild ); |
- | |
263 | }); |
- | |
264 | }, |
274 | }, |
265 | 275 | ||
266 | before: function() { |
276 | // See test/unit/core.js for details concerning isFunction.
|
267 | return this.domManip(arguments, false, function(elem){ |
277 | // Since version 1.3, DOM methods and functions like alert
|
268 | this.parentNode.insertBefore( elem, this ); |
278 | // aren't supported. They return false on IE (#2968).
|
269 | }); |
279 | isFunction: function( obj ) { |
- | 280 | return toString.call(obj) === "[object Function]"; |
|
270 | }, |
281 | }, |
271 | 282 | ||
272 | after: function() { |
283 | isArray: function( obj ) { |
273 | return this.domManip(arguments, false, function(elem){ |
284 | return toString.call(obj) === "[object Array]"; |
274 | this.parentNode.insertBefore( elem, this.nextSibling ); |
- | |
275 | }); |
- | |
276 | }, |
285 | }, |
277 | 286 | ||
- | 287 | // check if an element is in a (or is an) XML document
|
|
278 | end: function() { |
288 | isXMLDoc: function( elem ) { |
279 | return this.prevObject || jQuery( [] ); |
289 | return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || |
- | 290 | !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; |
|
280 | }, |
291 | }, |
281 | 292 | ||
282 | // For internal use only.
|
293 | // Evalulates a script in a global context
|
283 | // Behaves like an Array's method, not like a jQuery method.
|
294 | globalEval: function( data ) { |
284 | push: [].push, |
295 | if ( data && /\S/.test(data) ) { |
285 | sort: [].sort, |
296 | // Inspired by code by Andrea Giammarchi
|
- | 297 | // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
|
|
- | 298 | var head = document.getElementsByTagName("head")[0] || document.documentElement, |
|
286 | splice: [].splice, |
299 | script = document.createElement("script"); |
287 | 300 | ||
288 | find: function( selector ) { |
301 | script.type = "text/javascript"; |
289 | if ( this.length === 1 ) { |
302 | if ( jQuery.support.scriptEval ) |
290 | var ret = this.pushStack( [], "find", selector ); |
303 | script.appendChild( document.createTextNode( data ) ); |
291 | ret.length = 0; |
304 | else
|
292 | jQuery.find( selector, this[0], ret ); |
- | |
293 | return ret; |
305 | script.text = data; |
294 | } else { |
306 | |
295 | return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ |
307 | // Use insertBefore instead of appendChild to circumvent an IE6 bug.
|
- | 308 | // This arises when a base node is used (#2709).
|
|
296 | return jQuery.find( selector, elem ); |
309 | head.insertBefore( script, head.firstChild ); |
297 | })), "find", selector ); |
310 | head.removeChild( script ); |
298 | }
|
311 | }
|
299 | }, |
312 | }, |
300 | 313 | ||
301 | clone: function( events ) { |
314 | nodeName: function( elem, name ) { |
302 | // Do the clone
|
- | |
303 | var ret = this.map(function(){ |
- | |
304 | if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { |
- | |
305 | // IE copies events bound via attachEvent when
|
- | |
306 | // using cloneNode. Calling detachEvent on the
|
- | |
307 | // clone will also remove the events from the orignal
|
315 | return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); |
308 | // In order to get around this, we use innerHTML.
|
- | |
309 | // Unfortunately, this means some modifications to
|
- | |
- | 316 | }, |
|
- | 317 | ||
310 | // attributes in IE that are actually only stored
|
318 | // args is for internal usage only
|
311 | // as properties will not be copied (such as the
|
319 | each: function( object, callback, args ) { |
312 | // the name attribute on an input).
|
- | |
313 | var html = this.outerHTML; |
320 | var name, i = 0, length = object.length; |
314 | if ( !html ) { |
- | |
315 | var div = this.ownerDocument.createElement("div"); |
- | |
316 | div.appendChild( this.cloneNode(true) ); |
- | |
317 | html = div.innerHTML; |
- | |
318 | }
|
- | |
319 | 321 | ||
- | 322 | if ( args ) { |
|
- | 323 | if ( length === undefined ) { |
|
- | 324 | for ( name in object ) |
|
320 | return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; |
325 | if ( callback.apply( object[ name ], args ) === false ) |
- | 326 | break; |
|
321 | } else |
327 | } else |
322 | return this.cloneNode(true); |
328 | for ( ; i < length; ) |
- | 329 | if ( callback.apply( object[ i++ ], args ) === false ) |
|
323 | }); |
330 | break; |
324 | 331 | ||
325 | // Copy the events from the original to the clone
|
332 | // A special, fast, case for the most common use of each
|
- | 333 | } else { |
|
326 | if ( events === true ) { |
334 | if ( length === undefined ) { |
- | 335 | for ( name in object ) |
|
- | 336 | if ( callback.call( object[ name ], name, object[ name ] ) === false ) |
|
- | 337 | break; |
|
- | 338 | } else |
|
327 | var orig = this.find("*").andSelf(), i = 0; |
339 | for ( var value = object[0]; |
- | 340 | i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} |
|
- | 341 | }
|
|
328 | 342 | ||
329 | ret.find("*").andSelf().each(function(){ |
- | |
330 | if ( this.nodeName !== orig[i].nodeName ) |
- | |
331 | return; |
343 | return object; |
- | 344 | }, |
|
332 | 345 | ||
- | 346 | trim: function( text ) { |
|
333 | var events = jQuery.data( orig[i], "events" ); |
347 | return (text || "").replace( /^\s+|\s+$/g, "" ); |
- | 348 | }, |
|
334 | 349 | ||
335 | for ( var type in events ) { |
350 | makeArray: function( array ) { |
336 | for ( var handler in events[ type ] ) { |
- | |
337 | jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); |
- | |
338 | }
|
351 | var ret = []; |
339 | }
|
- | |
340 | 352 | ||
- | 353 | if( array != null ){ |
|
- | 354 | var i = array.length; |
|
- | 355 | // The window, strings (and functions) also have 'length'
|
|
- | 356 | if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) |
|
341 | i++;
|
357 | ret[0] = array; |
342 | }); |
358 | else
|
- | 359 | while( i ) |
|
- | 360 | ret[--i] = array[i]; |
|
343 | }
|
361 | }
|
344 | 362 | ||
345 | // Return the cloned set
|
- | |
346 | return ret; |
363 | return ret; |
347 | }, |
364 | }, |
348 | 365 | ||
349 | filter: function( selector ) { |
366 | inArray: function( elem, array ) { |
350 | return this.pushStack( |
- | |
351 | jQuery.isFunction( selector ) && |
367 | for ( var i = 0, length = array.length; i < length; i++ ) |
352 | jQuery.grep(this, function(elem, i){ |
368 | // Use === because on IE, window == document
|
353 | return selector.call( elem, i ); |
369 | if ( array[ i ] === elem ) |
354 | }) || |
370 | return i; |
355 | 371 | ||
356 | jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ |
- | |
357 | return elem.nodeType === 1; |
372 | return -1; |
358 | }) ), "filter", selector ); |
- | |
359 | }, |
373 | }, |
360 | 374 | ||
361 | closest: function( selector ) { |
375 | merge: function( first, second ) { |
362 | var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, |
376 | // We have to loop this way because IE & Opera overwrite the length
|
363 | closer = 0; |
- | |
364 | - | ||
365 | return this.map(function(){ |
377 | // expando of getElementsByTagName
|
366 | var cur = this; |
378 | var i = 0, elem, pos = first.length; |
367 | while ( cur && cur.ownerDocument ) { |
379 | // Also, we need to make sure that the correct elements are being returned
|
368 | if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { |
380 | // (IE returns comment nodes in a '*' query)
|
369 | jQuery.data(cur, "closest", closer); |
381 | if ( !jQuery.support.getAll ) { |
370 | return cur; |
382 | while ( (elem = second[ i++ ]) != null ) |
371 | }
|
- | |
372 | cur = cur.parentNode; |
383 | if ( elem.nodeType != 8 ) |
373 | closer++;
|
384 | first[ pos++ ] = elem; |
374 | }
|
- | |
375 | }); |
- | |
376 | }, |
- | |
377 | 385 | ||
378 | not: function( selector ) { |
- | |
379 | if ( typeof selector === "string" ) |
- | |
380 | // test special case where just one selector is passed in
|
- | |
381 | if ( isSimple.test( selector ) ) |
- | |
382 | return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); |
- | |
383 | else
|
386 | } else |
384 | selector = jQuery.multiFilter( selector, this ); |
387 | while ( (elem = second[ i++ ]) != null ) |
- | 388 | first[ pos++ ] = elem; |
|
385 | 389 | ||
386 | var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; |
- | |
387 | return this.filter(function() { |
390 | return first; |
388 | return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; |
- | |
389 | }); |
- | |
390 | }, |
391 | }, |
391 | 392 | ||
392 | add: function( selector ) { |
393 | unique: function( array ) { |
393 | return this.pushStack( jQuery.unique( jQuery.merge( |
- | |
394 | this.get(), |
- | |
395 | typeof selector === "string" ? |
- | |
396 | jQuery( selector ) : |
394 | var ret = [], done = {}; |
397 | jQuery.makeArray( selector ) |
- | |
398 | ))); |
- | |
399 | }, |
- | |
400 | 395 | ||
401 | is: function( selector ) { |
- | |
402 | return !!selector && jQuery.multiFilter( selector, this ).length > 0; |
- | |
403 | }, |
396 | try { |
404 | 397 | ||
405 | hasClass: function( selector ) { |
398 | for ( var i = 0, length = array.length; i < length; i++ ) { |
406 | return !!selector && this.is( "." + selector ); |
399 | var id = jQuery.data( array[ i ] ); |
407 | }, |
- | |
408 | 400 | ||
409 | val: function( value ) { |
401 | if ( !done[ id ] ) { |
410 | if ( value === undefined ) { |
402 | done[ id ] = true; |
411 | var elem = this[0]; |
403 | ret.push( array[ i ] ); |
- | 404 | }
|
|
- | 405 | }
|
|
412 | 406 | ||
413 | if ( elem ) { |
407 | } catch( e ) { |
414 | if( jQuery.nodeName( elem, 'option' ) ) |
408 | ret = array; |
415 | return (elem.attributes.value || {}).specified ? elem.value : elem.text; |
- | |
- | 409 | }
|
|
416 | 410 | ||
417 | // We need to handle select boxes special
|
- | |
418 | if ( jQuery.nodeName( elem, "select" ) ) { |
- | |
419 | var index = elem.selectedIndex, |
- | |
420 | values = [], |
411 | return ret; |
421 | options = elem.options, |
412 | }, |
422 | one = elem.type == "select-one"; |
- | |
423 | 413 | ||
424 | // Nothing was selected
|
414 | grep: function( elems, callback, inv ) { |
425 | if ( index < 0 ) |
- | |
426 | return null; |
415 | var ret = []; |
427 | 416 | ||
- | 417 | // Go through the array, only saving the items
|
|
428 | // Loop through all the selected options
|
418 | // that pass the validator function
|
429 | for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { |
419 | for ( var i = 0, length = elems.length; i < length; i++ ) |
- | 420 | if ( !inv != !callback( elems[ i ], i ) ) |
|
430 | var option = options[ i ]; |
421 | ret.push( elems[ i ] ); |
431 | 422 | ||
432 | if ( option.selected ) { |
423 | return ret; |
433 | // Get the specifc value for the option
|
- | |
434 | value = jQuery(option).val(); |
- | |
- | 424 | }, |
|
435 | 425 | ||
436 | // We don't need an array for one selects
|
426 | map: function( elems, callback ) { |
437 | if ( one ) |
- | |
438 | return value; |
427 | var ret = []; |
439 | 428 | ||
440 | // Multi-Selects return an array
|
429 | // Go through the array, translating each of the items to their
|
441 | values.push( value ); |
430 | // new value (or values).
|
- | 431 | for ( var i = 0, length = elems.length; i < length; i++ ) { |
|
442 | }
|
432 | var value = callback( elems[ i ], i ); |
443 | }
|
- | |
444 | 433 | ||
- | 434 | if ( value != null ) |
|
445 | return values; |
435 | ret[ ret.length ] = value; |
446 | }
|
436 | }
|
447 | 437 | ||
448 | // Everything else, we just grab the value
|
- | |
449 | return (elem.value || "").replace(/\r/g, ""); |
438 | return ret.concat.apply( [], ret ); |
450 | - | ||
451 | }
|
439 | }
|
- | 440 | }); |
|
452 | 441 | ||
- | 442 | // All jQuery objects should point back to these
|
|
453 | return undefined; |
443 | var rootjQuery = jQuery(document); |
454 | }
|
- | |
455 | 444 | ||
456 | if ( typeof value === "number" ) |
445 | // Use of jQuery.browser is deprecated.
|
- | 446 | // It's included for backwards compatibility and plugins,
|
|
457 | value += ''; |
447 | // although they should work to migrate away.
|
458 | 448 | ||
459 | return this.each(function(){ |
449 | var userAgent = navigator.userAgent.toLowerCase(); |
460 | if ( this.nodeType != 1 ) |
- | |
461 | return; |
- | |
462 | 450 | ||
- | 451 | // Figure out what browser is being used
|
|
- | 452 | jQuery.browser = { |
|
- | 453 | version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], |
|
- | 454 | safari: /webkit/.test( userAgent ), |
|
- | 455 | opera: /opera/.test( userAgent ), |
|
463 | if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) |
456 | msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), |
464 | this.checked = (jQuery.inArray(this.value, value) >= 0 || |
457 | mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) |
465 | jQuery.inArray(this.name, value) >= 0); |
458 | };var expando = "jQuery" + now(), uuid = 0, windowData = {}; |
466 | 459 | ||
467 | else if ( jQuery.nodeName( this, "select" ) ) { |
460 | jQuery.extend({ |
468 | var values = jQuery.makeArray(value); |
461 | cache: {}, |
469 | 462 | ||
470 | jQuery( "option", this ).each(function(){ |
463 | data: function( elem, name, data ) { |
471 | this.selected = (jQuery.inArray( this.value, values ) >= 0 || |
464 | elem = elem == window ? |
472 | jQuery.inArray( this.text, values ) >= 0); |
465 | windowData :
|
473 | }); |
466 | elem;
|
474 | 467 | ||
475 | if ( !values.length ) |
- | |
476 | this.selectedIndex = -1; |
468 | var id = elem[ expando ]; |
477 | 469 | ||
- | 470 | // Compute a unique ID for the element
|
|
478 | } else |
471 | if ( !id ) |
479 | this.value = value; |
472 | id = elem[ expando ] = ++uuid; |
480 | }); |
- | |
481 | }, |
- | |
482 | 473 | ||
483 | html: function( value ) { |
474 | // Only generate the data cache if we're
|
484 | return value === undefined ? |
475 | // trying to access or manipulate it
|
485 | (this[0] ? |
- | |
486 | this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : |
476 | if ( name && !jQuery.cache[ id ] ) |
487 | null) : |
- | |
488 | this.empty().append( value ); |
477 | jQuery.cache[ id ] = {}; |
489 | }, |
- | |
490 | 478 | ||
- | 479 | // Prevent overriding the named cache with undefined values
|
|
491 | replaceWith: function( value ) { |
480 | if ( data !== undefined ) |
492 | return this.after( value ).remove(); |
481 | jQuery.cache[ id ][ name ] = data; |
493 | }, |
- | |
494 | 482 | ||
- | 483 | // Return the named cache data, or the ID for the element
|
|
495 | eq: function( i ) { |
484 | return name ? |
496 | return this.slice( i, +i + 1 ); |
485 | jQuery.cache[ id ][ name ] : |
- | 486 | id;
|
|
497 | }, |
487 | }, |
498 | 488 | ||
499 | slice: function() { |
489 | removeData: function( elem, name ) { |
500 | return this.pushStack( Array.prototype.slice.apply( this, arguments ), |
490 | elem = elem == window ? |
501 | "slice", Array.prototype.slice.call(arguments).join(",") ); |
491 | windowData :
|
502 | }, |
492 | elem;
|
503 | 493 | ||
504 | map: function( callback ) { |
- | |
505 | return this.pushStack( jQuery.map(this, function(elem, i){ |
- | |
506 | return callback.call( elem, i, elem ); |
494 | var id = elem[ expando ]; |
507 | })); |
- | |
508 | }, |
- | |
509 | 495 | ||
- | 496 | // If we want to remove a specific section of the element's data
|
|
510 | andSelf: function() { |
497 | if ( name ) { |
- | 498 | if ( jQuery.cache[ id ] ) { |
|
- | 499 | // Remove the section of cache data
|
|
511 | return this.add( this.prevObject ); |
500 | delete jQuery.cache[ id ][ name ]; |
512 | }, |
- | |
513 | 501 | ||
514 | domManip: function( args, table, callback ) { |
502 | // If we've removed all the data, remove the element's cache
|
515 | if ( this[0] ) { |
503 | name = ""; |
516 | var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), |
- | |
517 | scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), |
- | |
518 | first = fragment.firstChild; |
- | |
519 | 504 | ||
520 | if ( first ) |
- | |
521 | for ( var i = 0, l = this.length; i < l; i++ ) |
505 | for ( name in jQuery.cache[ id ] ) |
522 | callback.call( root(this[i], first), this.length > 1 || i > 0 ? |
- | |
523 | fragment.cloneNode(true) : fragment ); |
506 | break; |
524 | 507 | ||
525 | if ( scripts ) |
508 | if ( !name ) |
526 | jQuery.each( scripts, evalScript ); |
509 | jQuery.removeData( elem ); |
527 | }
|
510 | }
|
528 | 511 | ||
- | 512 | // Otherwise, we want to remove all of the element's data
|
|
- | 513 | } else { |
|
- | 514 | // Clean up the element expando
|
|
529 | return this; |
515 | try { |
- | 516 | delete elem[ expando ]; |
|
- | 517 | } catch(e){ |
|
- | 518 | // IE has trouble directly removing the expando
|
|
- | 519 | // but it's ok with using removeAttribute
|
|
- | 520 | if ( elem.removeAttribute ) |
|
- | 521 | elem.removeAttribute( expando ); |
|
- | 522 | }
|
|
530 | 523 | ||
531 | function root( elem, cur ) { |
524 | // Completely remove the data cache
|
532 | return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? |
- | |
533 | (elem.getElementsByTagName("tbody")[0] || |
525 | delete jQuery.cache[ id ]; |
534 | elem.appendChild(elem.ownerDocument.createElement("tbody"))) : |
- | |
535 | elem;
|
- | |
536 | }
|
- | |
537 | }
|
526 | }
|
538 | }; |
527 | }, |
- | 528 | queue: function( elem, type, data ) { |
|
- | 529 | if ( elem ){ |
|
539 | 530 | ||
540 | // Give the init function the jQuery prototype for later instantiation
|
- | |
541 | jQuery.fn.init.prototype = jQuery.fn; |
531 | type = (type || "fx") + "queue"; |
542 | 532 | ||
543 | function evalScript( i, elem ) { |
533 | var q = jQuery.data( elem, type ); |
544 | if ( elem.src ) |
- | |
545 | jQuery.ajax({ |
- | |
546 | url: elem.src, |
- | |
547 | async: false, |
- | |
548 | dataType: "script" |
- | |
549 | }); |
- | |
550 | 534 | ||
551 | else
|
535 | if ( !q || jQuery.isArray(data) ) |
552 | jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); |
536 | q = jQuery.data( elem, type, jQuery.makeArray(data) ); |
- | 537 | else if( data ) |
|
- | 538 | q.push( data ); |
|
553 | 539 | ||
554 | if ( elem.parentNode ) |
- | |
555 | elem.parentNode.removeChild( elem ); |
- | |
556 | }
|
540 | }
|
- | 541 | return q; |
|
- | 542 | }, |
|
557 | 543 | ||
558 | function now(){ |
544 | dequeue: function( elem, type ){ |
- | 545 | var queue = jQuery.queue( elem, type ), |
|
559 | return +new Date; |
546 | fn = queue.shift(); |
560 | }
|
- | |
561 | 547 | ||
562 | jQuery.extend = jQuery.fn.extend = function() { |
548 | if( !type || type === "fx" ) |
563 | // copy reference to target object
|
549 | fn = queue[0]; |
564 | var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; |
- | |
565 | 550 | ||
566 | // Handle a deep copy situation
|
- | |
567 | if ( typeof target === "boolean" ) { |
551 | if( fn !== undefined ) |
568 | deep = target; |
552 | fn.call(elem); |
569 | target = arguments[1] || {}; |
- | |
570 | // skip the boolean and the target
|
- | |
571 | i = 2; |
- | |
572 | }
|
553 | }
|
- | 554 | }); |
|
573 | 555 | ||
- | 556 | jQuery.fn.extend({ |
|
574 | // Handle case when target is a string or something (possible in deep copy)
|
557 | data: function( key, value ){ |
575 | if ( typeof target !== "object" && !jQuery.isFunction(target) ) |
558 | var parts = key.split("."); |
576 | target = {}; |
559 | parts[1] = parts[1] ? "." + parts[1] : ""; |
577 | 560 | ||
578 | // extend jQuery itself if only one argument is passed
|
- | |
579 | if ( length == i ) { |
561 | if ( value === undefined ) { |
580 | target = this; |
562 | var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); |
581 | --i; |
- | |
582 | }
|
- | |
583 | 563 | ||
584 | for ( ; i < length; i++ ) |
- | |
585 | // Only deal with non-null/undefined values
|
- | |
586 | if ( (options = arguments[ i ]) != null ) |
564 | if ( data === undefined && this.length ) |
587 | // Extend the base object
|
- | |
588 | for ( var name in options ) { |
565 | data = jQuery.data( this[0], key ); |
589 | var src = target[ name ], copy = options[ name ]; |
- | |
590 | 566 | ||
591 | // Prevent never-ending loop
|
567 | return data === undefined && parts[1] ? |
592 | if ( target === copy ) |
568 | this.data( parts[0] ) : |
593 | continue; |
569 | data;
|
- | 570 | } else |
|
- | 571 | return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ |
|
- | 572 | jQuery.data( this, key, value ); |
|
- | 573 | }); |
|
- | 574 | }, |
|
594 | 575 | ||
595 | // Recurse if we're merging object values
|
576 | removeData: function( key ){ |
596 | if ( deep && copy && typeof copy === "object" && !copy.nodeType ) |
577 | return this.each(function(){ |
597 | target[ name ] = jQuery.extend( deep, |
578 | jQuery.removeData( this, key ); |
- | 579 | }); |
|
- | 580 | }, |
|
598 | // Never move original objects, clone them
|
581 | queue: function(type, data){ |
599 | src || ( copy.length != null ? [ ] : { } ) |
582 | if ( typeof type !== "string" ) { |
600 | , copy ); |
583 | data = type; |
- | 584 | type = "fx"; |
|
- | 585 | }
|
|
601 | 586 | ||
602 | // Don't bring in undefined values
|
- | |
603 | else if ( copy !== undefined ) |
587 | if ( data === undefined ) |
604 | target[ name ] = copy; |
588 | return jQuery.queue( this[0], type ); |
605 | 589 | ||
606 | }
|
590 | return this.each(function(){ |
- | 591 | var queue = jQuery.queue( this, type, data ); |
|
607 | 592 | ||
- | 593 | if( type == "fx" && queue.length == 1 ) |
|
- | 594 | queue[0].call(this); |
|
- | 595 | }); |
|
- | 596 | }, |
|
608 | // Return the modified object
|
597 | dequeue: function(type){ |
609 | return target; |
598 | return this.each(function(){ |
- | 599 | jQuery.dequeue( this, type ); |
|
- | 600 | }); |
|
610 | }; |
601 | }
|
- | 602 | });/*! |
|
- | 603 | * Sizzle CSS Selector Engine - v1.0
|
|
- | 604 | * Copyright 2009, The Dojo Foundation
|
|
- | 605 | * Released under the MIT, BSD, and GPL Licenses.
|
|
- | 606 | * More information: http://sizzlejs.com/
|
|
- | 607 | */
|
|
- | 608 | (function(){ |
|
611 | 609 | ||
612 | // exclude the following css properties to add px
|
- | |
613 | var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, |
610 | var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g, |
614 | // cache defaultView
|
611 | done = 0, |
615 | defaultView = document.defaultView || {}, |
- | |
616 | toString = Object.prototype.toString; |
612 | toString = Object.prototype.toString; |
617 | 613 | ||
618 | jQuery.extend({ |
614 | var Sizzle = function(selector, context, results, seed) { |
619 | noConflict: function( deep ) { |
615 | results = results || []; |
620 | window.$ = _$; |
616 | var origContext = context = context || document; |
621 | 617 | ||
622 | if ( deep ) |
618 | if ( context.nodeType !== 1 && context.nodeType !== 9 ) { |
623 | window.jQuery = _jQuery; |
619 | return []; |
- | 620 | }
|
|
624 | 621 | ||
- | 622 | if ( !selector || typeof selector !== "string" ) { |
|
625 | return jQuery; |
623 | return results; |
626 | }, |
624 | }
|
627 | 625 | ||
628 | // See test/unit/core.js for details concerning isFunction.
|
626 | var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context); |
629 | // Since version 1.3, DOM methods and functions like alert
|
- | |
630 | // aren't supported. They return false on IE (#2968).
|
- | |
631 | isFunction: function( obj ) { |
- | |
632 | return toString.call(obj) === "[object Function]"; |
- | |
633 | }, |
- | |
634 | 627 | ||
635 | isArray: function( obj ) { |
628 | // Reset the position of the chunker regexp (start from head)
|
636 | return toString.call(obj) === "[object Array]"; |
629 | chunker.lastIndex = 0; |
637 | }, |
- | |
638 | 630 | ||
639 | // check if an element is in a (or is an) XML document
|
631 | while ( (m = chunker.exec(selector)) !== null ) { |
640 | isXMLDoc: function( elem ) { |
632 | parts.push( m[1] ); |
641 | return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || |
- | |
642 | !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); |
- | |
643 | }, |
- | |
644 | 633 | ||
645 | // Evalulates a script in a global context
|
- | |
646 | globalEval: function( data ) { |
634 | if ( m[2] ) { |
647 | if ( data && /\S/.test(data) ) { |
635 | extra = RegExp.rightContext; |
648 | // Inspired by code by Andrea Giammarchi
|
636 | break; |
649 | // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
|
- | |
650 | var head = document.getElementsByTagName("head")[0] || document.documentElement, |
- | |
651 | script = document.createElement("script"); |
- | |
- | 637 | }
|
|
- | 638 | }
|
|
652 | 639 | ||
653 | script.type = "text/javascript"; |
640 | if ( parts.length > 1 && origPOS.exec( selector ) ) { |
654 | if ( jQuery.support.scriptEval ) |
641 | if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { |
655 | script.appendChild( document.createTextNode( data ) ); |
642 | set = posProcess( parts[0] + parts[1], context ); |
656 | else
|
643 | } else { |
- | 644 | set = Expr.relative[ parts[0] ] ? |
|
657 | script.text = data; |
645 | [ context ] : |
- | 646 | Sizzle( parts.shift(), context ); |
|
658 | 647 | ||
659 | // Use insertBefore instead of appendChild to circumvent an IE6 bug.
|
- | |
660 | // This arises when a base node is used (#2709).
|
- | |
661 | head.insertBefore( script, head.firstChild ); |
648 | while ( parts.length ) { |
662 | head.removeChild( script ); |
649 | selector = parts.shift(); |
663 | }
|
- | |
664 | }, |
- | |
665 | 650 | ||
666 | nodeName: function( elem, name ) { |
651 | if ( Expr.relative[ selector ] ) |
667 | return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); |
652 | selector += parts.shift(); |
668 | }, |
- | |
669 | 653 | ||
670 | // args is for internal usage only
|
654 | set = posProcess( selector, set ); |
- | 655 | }
|
|
- | 656 | }
|
|
- | 657 | } else { |
|
671 | each: function( object, callback, args ) { |
658 | // Take a shortcut and set the context if the root selector is an ID
|
- | 659 | // (but not if it'll be faster if the inner selector is an ID)
|
|
- | 660 | if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && |
|
- | 661 | Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { |
|
672 | var name, i = 0, length = object.length; |
662 | var ret = Sizzle.find( parts.shift(), context, contextXML ); |
- | 663 | context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; |
|
- | 664 | }
|
|
673 | 665 | ||
674 | if ( args ) { |
666 | if ( context ) { |
675 | if ( length === undefined ) { |
667 | var ret = seed ? |
676 | for ( name in object ) |
668 | { expr: parts.pop(), set: makeArray(seed) } : |
677 | if ( callback.apply( object[ name ], args ) === false ) |
669 | Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); |
678 | break; |
- | |
679 | } else |
- | |
680 | for ( ; i < length; ) |
- | |
681 | if ( callback.apply( object[ i++ ], args ) === false ) |
670 | set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; |
682 | break; |
- | |
683 | 671 | ||
684 | // A special, fast, case for the most common use of each
|
672 | if ( parts.length > 0 ) { |
- | 673 | checkSet = makeArray(set); |
|
685 | } else { |
674 | } else { |
686 | if ( length === undefined ) { |
- | |
687 | for ( name in object ) |
- | |
688 | if ( callback.call( object[ name ], name, object[ name ] ) === false ) |
- | |
689 | break; |
675 | prune = false; |
690 | } else |
- | |
691 | for ( var value = object[0]; |
- | |
692 | i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} |
- | |
693 | }
|
676 | }
|
694 | 677 | ||
695 | return object; |
678 | while ( parts.length ) { |
696 | }, |
679 | var cur = parts.pop(), pop = cur; |
697 | 680 | ||
698 | prop: function( elem, value, type, i, name ) { |
681 | if ( !Expr.relative[ cur ] ) { |
699 | // Handle executable functions
|
682 | cur = ""; |
700 | if ( jQuery.isFunction( value ) ) |
683 | } else { |
701 | value = value.call( elem, i ); |
684 | pop = parts.pop(); |
- | 685 | }
|
|
702 | 686 | ||
703 | // Handle passing in a number to a CSS property
|
- | |
704 | return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? |
- | |
705 | value + "px" : |
687 | if ( pop == null ) { |
706 | value;
|
688 | pop = context; |
707 | }, |
689 | }
|
708 | 690 | ||
709 | className: { |
- | |
710 | // internal only, use addClass("class")
|
691 | Expr.relative[ cur ]( checkSet, pop, contextXML ); |
- | 692 | }
|
|
711 | add: function( elem, classNames ) { |
693 | } else { |
712 | jQuery.each((classNames || "").split(/\s+/), function(i, className){ |
- | |
713 | if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) |
- | |
714 | elem.className += (elem.className ? " " : "") + className; |
694 | checkSet = parts = []; |
715 | }); |
695 | }
|
716 | }, |
696 | }
|
717 | 697 | ||
718 | // internal only, use removeClass("class")
|
- | |
719 | remove: function( elem, classNames ) { |
- | |
720 | if (elem.nodeType == 1) |
698 | if ( !checkSet ) { |
721 | elem.className = classNames !== undefined ? |
- | |
722 | jQuery.grep(elem.className.split(/\s+/), function(className){ |
- | |
723 | return !jQuery.className.has( classNames, className ); |
- | |
724 | }).join(" ") : |
699 | checkSet = set; |
725 | ""; |
- | |
726 | }, |
- | |
727 | - | ||
728 | // internal only, use hasClass("class")
|
- | |
729 | has: function( elem, className ) { |
- | |
730 | return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; |
- | |
731 | }
|
700 | }
|
732 | }, |
- | |
733 | 701 | ||
734 | // A method for quickly swapping in/out CSS properties to get correct calculations
|
- | |
735 | swap: function( elem, options, callback ) { |
- | |
736 | var old = {}; |
702 | if ( !checkSet ) { |
737 | // Remember the old values, and insert the new ones
|
703 | throw "Syntax error, unrecognized expression: " + (cur || selector); |
738 | for ( var name in options ) { |
- | |
739 | old[ name ] = elem.style[ name ]; |
- | |
740 | elem.style[ name ] = options[ name ]; |
- | |
741 | }
|
704 | }
|
742 | 705 | ||
- | 706 | if ( toString.call(checkSet) === "[object Array]" ) { |
|
- | 707 | if ( !prune ) { |
|
- | 708 | results.push.apply( results, checkSet ); |
|
- | 709 | } else if ( context && context.nodeType === 1 ) { |
|
- | 710 | for ( var i = 0; checkSet[i] != null; i++ ) { |
|
- | 711 | if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { |
|
743 | callback.call( elem ); |
712 | results.push( set[i] ); |
- | 713 | }
|
|
744 | 714 | }
|
|
- | 715 | } else { |
|
745 | // Revert the old values
|
716 | for ( var i = 0; checkSet[i] != null; i++ ) { |
- | 717 | if ( checkSet[i] && checkSet[i].nodeType === 1 ) { |
|
746 | for ( var name in options ) |
718 | results.push( set[i] ); |
- | 719 | }
|
|
- | 720 | }
|
|
- | 721 | }
|
|
- | 722 | } else { |
|
747 | elem.style[ name ] = old[ name ]; |
723 | makeArray( checkSet, results ); |
748 | }, |
724 | }
|
749 | 725 | ||
750 | css: function( elem, name, force, extra ) { |
726 | if ( extra ) { |
751 | if ( name == "width" || name == "height" ) { |
727 | Sizzle( extra, origContext, results, seed ); |
752 | var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; |
728 | Sizzle.uniqueSort( results ); |
- | 729 | }
|
|
753 | 730 | ||
754 | function getWH() { |
731 | return results; |
755 | val = name == "width" ? elem.offsetWidth : elem.offsetHeight; |
- | |
- | 732 | }; |
|
756 | 733 | ||
- | 734 | Sizzle.uniqueSort = function(results){ |
|
757 | if ( extra === "border" ) |
735 | if ( sortOrder ) { |
- | 736 | hasDuplicate = false; |
|
758 | return; |
737 | results.sort(sortOrder); |
759 | 738 | ||
760 | jQuery.each( which, function() { |
- | |
761 | if ( !extra ) |
739 | if ( hasDuplicate ) { |
762 | val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; |
740 | for ( var i = 1; i < results.length; i++ ) { |
763 | if ( extra === "margin" ) |
741 | if ( results[i] === results[i-1] ) { |
764 | val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; |
- | |
765 | else
|
742 | results.splice(i--, 1); |
766 | val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; |
- | |
767 | }); |
743 | }
|
768 | }
|
744 | }
|
- | 745 | }
|
|
- | 746 | }
|
|
- | 747 | }; |
|
769 | 748 | ||
770 | if ( elem.offsetWidth !== 0 ) |
749 | Sizzle.matches = function(expr, set){ |
771 | getWH(); |
750 | return Sizzle(expr, null, null, set); |
772 | else
|
751 | }; |
773 | jQuery.swap( elem, props, getWH ); |
- | |
774 | 752 | ||
775 | return Math.max(0, Math.round(val)); |
753 | Sizzle.find = function(expr, context, isXML){ |
776 | }
|
754 | var set, match; |
777 | 755 | ||
- | 756 | if ( !expr ) { |
|
778 | return jQuery.curCSS( elem, name, force ); |
757 | return []; |
779 | }, |
758 | }
|
780 | 759 | ||
781 | curCSS: function( elem, name, force ) { |
760 | for ( var i = 0, l = Expr.order.length; i < l; i++ ) { |
782 | var ret, style = elem.style; |
761 | var type = Expr.order[i], match; |
783 | 762 | ||
784 | // We need to handle opacity special in IE
|
- | |
785 | if ( name == "opacity" && !jQuery.support.opacity ) { |
763 | if ( (match = Expr.match[ type ].exec( expr )) ) { |
786 | ret = jQuery.attr( style, "opacity" ); |
764 | var left = RegExp.leftContext; |
787 | 765 | ||
- | 766 | if ( left.substr( left.length - 1 ) !== "\\" ) { |
|
- | 767 | match[1] = (match[1] || "").replace(/\\/g, ""); |
|
- | 768 | set = Expr.find[ type ]( match, context, isXML ); |
|
788 | return ret == "" ? |
769 | if ( set != null ) { |
- | 770 | expr = expr.replace( Expr.match[ type ], "" ); |
|
789 | "1" : |
771 | break; |
790 | ret;
|
772 | }
|
- | 773 | }
|
|
- | 774 | }
|
|
791 | }
|
775 | }
|
792 | 776 | ||
793 | // Make sure we're using the right name for getting the float value
|
- | |
794 | if ( name.match( /float/i ) ) |
777 | if ( !set ) { |
795 | name = styleFloat; |
778 | set = context.getElementsByTagName("*"); |
796 | 779 | }
|
|
797 | if ( !force && style && style[ name ] ) |
- | |
798 | ret = style[ name ]; |
- | |
799 | 780 | ||
800 | else if ( defaultView.getComputedStyle ) { |
781 | return {set: set, expr: expr}; |
- | 782 | }; |
|
801 | 783 | ||
802 | // Only "float" is needed here
|
784 | Sizzle.filter = function(expr, set, inplace, not){ |
803 | if ( name.match( /float/i ) ) |
785 | var old = expr, result = [], curLoop = set, match, anyFound, |
804 | name = "float"; |
786 | isXMLFilter = set && set[0] && isXML(set[0]); |
805 | 787 | ||
- | 788 | while ( expr && set.length ) { |
|
- | 789 | for ( var type in Expr.filter ) { |
|
- | 790 | if ( (match = Expr.match[ type ].exec( expr )) != null ) { |
|
806 | name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); |
791 | var filter = Expr.filter[ type ], found, item; |
- | 792 | anyFound = false; |
|
807 | 793 | ||
808 | var computedStyle = defaultView.getComputedStyle( elem, null ); |
794 | if ( curLoop == result ) { |
- | 795 | result = []; |
|
- | 796 | }
|
|
809 | 797 | ||
810 | if ( computedStyle ) |
798 | if ( Expr.preFilter[ type ] ) { |
811 | ret = computedStyle.getPropertyValue( name ); |
799 | match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); |
812 | 800 | ||
- | 801 | if ( !match ) { |
|
813 | // We should always get a number back from opacity
|
802 | anyFound = found = true; |
814 | if ( name == "opacity" && ret == "" ) |
803 | } else if ( match === true ) { |
815 | ret = "1"; |
804 | continue; |
- | 805 | }
|
|
- | 806 | }
|
|
816 | 807 | ||
817 | } else if ( elem.currentStyle ) { |
808 | if ( match ) { |
818 | var camelCase = name.replace(/\-(\w)/g, function(all, letter){ |
809 | for ( var i = 0; (item = curLoop[i]) != null; i++ ) { |
- | 810 | if ( item ) { |
|
819 | return letter.toUpperCase(); |
811 | found = filter( item, match, i, curLoop ); |
820 | }); |
812 | var pass = not ^ !!found; |
821 | 813 | ||
822 | ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; |
814 | if ( inplace && found != null ) { |
- | 815 | if ( pass ) { |
|
- | 816 | anyFound = true; |
|
- | 817 | } else { |
|
- | 818 | curLoop[i] = false; |
|
- | 819 | }
|
|
- | 820 | } else if ( pass ) { |
|
- | 821 | result.push( item ); |
|
- | 822 | anyFound = true; |
|
- | 823 | }
|
|
- | 824 | }
|
|
- | 825 | }
|
|
- | 826 | }
|
|
823 | 827 | ||
824 | // From the awesome hack by Dean Edwards
|
828 | if ( found !== undefined ) { |
- | 829 | if ( !inplace ) { |
|
825 | // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
|
830 | curLoop = result; |
- | 831 | }
|
|
826 | 832 | ||
827 | // If we're not dealing with a regular pixel number
|
- | |
828 | // but a number that has a weird ending, we need to convert it to pixels
|
- | |
829 | if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { |
- | |
830 | // Remember the original values
|
- | |
831 | var left = style.left, rsLeft = elem.runtimeStyle.left; |
833 | expr = expr.replace( Expr.match[ type ], "" ); |
832 | 834 | ||
833 | // Put in the new values to get a computed value out
|
835 | if ( !anyFound ) { |
834 | elem.runtimeStyle.left = elem.currentStyle.left; |
- | |
835 | style.left = ret || 0; |
836 | return []; |
836 | ret = style.pixelLeft + "px"; |
837 | }
|
837 | 838 | ||
838 | // Revert the changed values
|
839 | break; |
839 | style.left = left; |
840 | }
|
840 | elem.runtimeStyle.left = rsLeft; |
- | |
841 | }
|
841 | }
|
842 | }
|
842 | }
|
843 | 843 | ||
- | 844 | // Improper expression
|
|
- | 845 | if ( expr == old ) { |
|
- | 846 | if ( anyFound == null ) { |
|
- | 847 | throw "Syntax error, unrecognized expression: " + expr; |
|
- | 848 | } else { |
|
844 | return ret; |
849 | break; |
- | 850 | }
|
|
845 | }, |
851 | }
|
846 | 852 | ||
847 | clean: function( elems, context, fragment ) { |
- | |
848 | context = context || document; |
853 | old = expr; |
- | 854 | }
|
|
849 | 855 | ||
850 | // !context.createElement fails in IE with an error but returns typeof 'object'
|
- | |
851 | if ( typeof context.createElement === "undefined" ) |
856 | return curLoop; |
852 | context = context.ownerDocument || context[0] && context[0].ownerDocument || document; |
- | |
- | 857 | }; |
|
853 | 858 | ||
- | 859 | var Expr = Sizzle.selectors = { |
|
- | 860 | order: [ "ID", "NAME", "TAG" ], |
|
- | 861 | match: { |
|
- | 862 | ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, |
|
- | 863 | CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, |
|
854 | // If a single string is passed in and it's a single tag
|
864 | NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/, |
- | 865 | ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, |
|
855 | // just do a createElement and skip the rest
|
866 | TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/, |
856 | if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { |
867 | CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, |
857 | var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); |
868 | POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, |
- | 869 | PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ |
|
- | 870 | }, |
|
- | 871 | attrMap: { |
|
- | 872 | "class": "className", |
|
858 | if ( match ) |
873 | "for": "htmlFor" |
- | 874 | }, |
|
- | 875 | attrHandle: { |
|
- | 876 | href: function(elem){ |
|
859 | return [ context.createElement( match[1] ) ]; |
877 | return elem.getAttribute("href"); |
860 | }
|
878 | }
|
- | 879 | }, |
|
- | 880 | relative: { |
|
- | 881 | "+": function(checkSet, part, isXML){ |
|
- | 882 | var isPartStr = typeof part === "string", |
|
- | 883 | isTag = isPartStr && !/\W/.test(part), |
|
- | 884 | isPartStrNotTag = isPartStr && !isTag; |
|
861 | 885 | ||
- | 886 | if ( isTag && !isXML ) { |
|
862 | var ret = [], scripts = [], div = context.createElement("div"); |
887 | part = part.toUpperCase(); |
- | 888 | }
|
|
863 | 889 | ||
864 | jQuery.each(elems, function(i, elem){ |
- | |
865 | if ( typeof elem === "number" ) |
- | |
866 | elem += ''; |
- | |
867 | - | ||
868 | if ( !elem ) |
- | |
869 | return; |
- | |
870 | - | ||
871 | // Convert html string into DOM nodes
|
- | |
872 | if ( typeof elem === "string" ) { |
- | |
873 | // Fix "XHTML"-style tags in all browsers
|
- | |
874 | elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ |
- | |
875 | return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? |
- | |
876 | all :
|
- | |
877 | front + "></" + tag + ">"; |
- | |
878 | }); |
- | |
879 | - | ||
880 | // Trim whitespace, otherwise indexOf won't work as expected
|
- | |
881 | var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); |
- | |
882 | - | ||
883 | var wrap = |
- | |
884 | // option or optgroup
|
- | |
885 | !tags.indexOf("<opt") && |
- | |
886 | [ 1, "<select multiple='multiple'>", "</select>" ] || |
- | |
887 | - | ||
888 | !tags.indexOf("<leg") && |
- | |
889 | [ 1, "<fieldset>", "</fieldset>" ] || |
- | |
890 | - | ||
891 | tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && |
- | |
892 | [ 1, "<table>", "</table>" ] || |
- | |
893 | - | ||
894 | !tags.indexOf("<tr") && |
- | |
895 | [ 2, "<table><tbody>", "</tbody></table>" ] || |
- | |
896 | - | ||
897 | // <thead> matched above
|
- | |
898 | (!tags.indexOf("<td") || !tags.indexOf("<th")) && |
- | |
899 | [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] || |
- | |
900 | - | ||
901 | !tags.indexOf("<col") && |
- | |
902 | [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] || |
- | |
903 | - | ||
904 | // IE can't serialize <link> and <script> tags normally
|
- | |
905 | !jQuery.support.htmlSerialize && |
- | |
906 | [ 1, "div<div>", "</div>" ] || |
- | |
907 | - | ||
908 | [ 0, "", "" ]; |
- | |
909 | - | ||
910 | // Go to html and back, then peel off extra wrappers
|
890 | for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { |
911 | div.innerHTML = wrap[1] + elem + wrap[2]; |
- | |
912 | - | ||
913 | // Move to the right depth
|
- | |
914 | while ( wrap[0]-- ) |
- | |
915 | div = div.lastChild; |
- | |
916 | - | ||
917 | // Remove IE's autoinserted <tbody> from table fragments
|
- | |
918 | if ( !jQuery.support.tbody ) { |
891 | if ( (elem = checkSet[i]) ) { |
919 | - | ||
920 | // String was a <table>, *may* have spurious <tbody>
|
- | |
921 | var hasBody = /<tbody/i.test(elem), |
- | |
922 | tbody = !tags.indexOf("<table") && !hasBody ? |
- | |
923 | div.firstChild && div.firstChild.childNodes : |
- | |
924 | - | ||
925 | // String was a bare <thead> or <tfoot>
|
- | |
926 | wrap[1] == "<table>" && !hasBody ? |
- | |
927 | div.childNodes : |
- | |
928 | []; |
- | |
929 | - | ||
930 | for ( var j = tbody.length - 1; j >= 0 ; --j ) |
892 | while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} |
931 | if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) |
- | |
932 | tbody[ j ].parentNode.removeChild( tbody[ j ] ); |
- | |
933 | 893 | ||
- | 894 | checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? |
|
- | 895 | elem || false : |
|
- | 896 | elem === part; |
|
934 | }
|
897 | }
|
935 | - | ||
936 | // IE completely kills leading whitespace when innerHTML is used
|
- | |
937 | if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) ) |
- | |
938 | div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild ); |
- | |
939 | - | ||
940 | elem = jQuery.makeArray( div.childNodes ); |
- | |
941 | }
|
898 | }
|
942 | 899 | ||
943 | if ( elem.nodeType ) |
900 | if ( isPartStrNotTag ) { |
944 | ret.push( elem ); |
901 | Sizzle.filter( part, checkSet, true ); |
945 | else
|
902 | }
|
- | 903 | }, |
|
946 | ret = jQuery.merge( ret, elem ); |
904 | ">": function(checkSet, part, isXML){ |
- | 905 | var isPartStr = typeof part === "string"; |
|
947 | 906 | ||
- | 907 | if ( isPartStr && !/\W/.test(part) ) { |
|
948 | }); |
908 | part = isXML ? part : part.toUpperCase(); |
949 | 909 | ||
- | 910 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
|
- | 911 | var elem = checkSet[i]; |
|
950 | if ( fragment ) { |
912 | if ( elem ) { |
951 | for ( var i = 0; ret[i]; i++ ) { |
913 | var parent = elem.parentNode; |
952 | if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { |
- | |
953 | scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); |
914 | checkSet[i] = parent.nodeName === part ? parent : false; |
- | 915 | }
|
|
- | 916 | }
|
|
954 | } else { |
917 | } else { |
- | 918 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
|
- | 919 | var elem = checkSet[i]; |
|
955 | if ( ret[i].nodeType === 1 ) |
920 | if ( elem ) { |
956 | ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); |
921 | checkSet[i] = isPartStr ? |
- | 922 | elem.parentNode : |
|
957 | fragment.appendChild( ret[i] ); |
923 | elem.parentNode === part; |
958 | }
|
924 | }
|
959 | }
|
925 | }
|
960 | 926 | ||
961 | return scripts; |
927 | if ( isPartStr ) { |
- | 928 | Sizzle.filter( part, checkSet, true ); |
|
- | 929 | }
|
|
962 | }
|
930 | }
|
963 | - | ||
964 | return ret; |
- | |
965 | }, |
931 | }, |
- | 932 | "": function(checkSet, part, isXML){ |
|
- | 933 | var doneName = done++, checkFn = dirCheck; |
|
966 | 934 | ||
967 | attr: function( elem, name, value ) { |
- | |
968 | // don't set attributes on text and comment nodes
|
- | |
969 | if (!elem || elem.nodeType == 3 || elem.nodeType == 8) |
- | |
970 | return undefined; |
- | |
971 | - | ||
972 | var notxml = !jQuery.isXMLDoc( elem ), |
- | |
973 | // Whether we are setting (or getting)
|
- | |
974 | set = value !== undefined; |
- | |
975 | - | ||
976 | // Try to normalize/fix the name
|
- | |
977 | name = notxml && jQuery.props[ name ] || name; |
- | |
978 | - | ||
979 | // Only do all the following if this is a node (faster for style)
|
- | |
980 | // IE elem.getAttribute passes even for style
|
- | |
981 | if ( elem.tagName ) { |
935 | if ( !part.match(/\W/) ) { |
982 | - | ||
983 | // These attributes require special treatment
|
936 | var nodeCheck = part = isXML ? part : part.toUpperCase(); |
984 | var special = /href|src|style/.test( name ); |
937 | checkFn = dirNodeCheck; |
985 | 938 | }
|
|
986 | // Safari mis-reports the default selected property of a hidden option
|
- | |
987 | // Accessing the parent's selectedIndex property fixes it
|
- | |
988 | if ( name == "selected" && elem.parentNode ) |
- | |
989 | elem.parentNode.selectedIndex; |
- | |
990 | 939 | ||
991 | // If applicable, access the attribute via the DOM 0 way
|
940 | checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); |
992 | if ( name in elem && notxml && !special ) { |
- | |
993 | if ( set ){ |
941 | }, |
994 | // We can't allow the type property to be changed (since it causes problems in IE)
|
- | |
995 | if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) |
942 | "~": function(checkSet, part, isXML){ |
996 | throw "type property can't be changed"; |
943 | var doneName = done++, checkFn = dirCheck; |
997 | 944 | ||
- | 945 | if ( typeof part === "string" && !part.match(/\W/) ) { |
|
- | 946 | var nodeCheck = part = isXML ? part : part.toUpperCase(); |
|
998 | elem[ name ] = value; |
947 | checkFn = dirNodeCheck; |
999 | }
|
948 | }
|
1000 | 949 | ||
- | 950 | checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); |
|
- | 951 | }
|
|
- | 952 | }, |
|
- | 953 | find: { |
|
- | 954 | ID: function(match, context, isXML){ |
|
1001 | // browsers index elements by id/name on forms, give priority to attributes.
|
955 | if ( typeof context.getElementById !== "undefined" && !isXML ) { |
- | 956 | var m = context.getElementById(match[1]); |
|
- | 957 | return m ? [m] : []; |
|
- | 958 | }
|
|
- | 959 | }, |
|
- | 960 | NAME: function(match, context, isXML){ |
|
1002 | if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) |
961 | if ( typeof context.getElementsByName !== "undefined" ) { |
1003 | return elem.getAttributeNode( name ).nodeValue; |
962 | var ret = [], results = context.getElementsByName(match[1]); |
1004 | 963 | ||
1005 | // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
|
- | |
1006 | // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
- | |
1007 | if ( name == "tabIndex" ) { |
964 | for ( var i = 0, l = results.length; i < l; i++ ) { |
1008 | var attributeNode = elem.getAttributeNode( "tabIndex" ); |
965 | if ( results[i].getAttribute("name") === match[1] ) { |
1009 | return attributeNode && attributeNode.specified |
- | |
1010 | ? attributeNode.value |
966 | ret.push( results[i] ); |
1011 | : elem.nodeName.match(/(button|input|object|select|textarea)/i) |
- | |
1012 | ? 0 |
967 | }
|
1013 | : elem.nodeName.match(/^(a|area)$/i) && elem.href |
- | |
1014 | ? 0 |
- | |
1015 | : undefined; |
- | |
1016 | }
|
968 | }
|
1017 | 969 | ||
1018 | return elem[ name ]; |
970 | return ret.length === 0 ? null : ret; |
- | 971 | }
|
|
- | 972 | }, |
|
- | 973 | TAG: function(match, context){ |
|
- | 974 | return context.getElementsByTagName(match[1]); |
|
1019 | }
|
975 | }
|
- | 976 | }, |
|
- | 977 | preFilter: { |
|
- | 978 | CLASS: function(match, curLoop, inplace, result, not, isXML){ |
|
- | 979 | match = " " + match[1].replace(/\\/g, "") + " "; |
|
1020 | 980 | ||
1021 | if ( !jQuery.support.style && notxml && name == "style" ) |
981 | if ( isXML ) { |
1022 | return jQuery.attr( elem.style, "cssText", value ); |
982 | return match; |
- | 983 | }
|
|
1023 | 984 | ||
- | 985 | for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { |
|
1024 | if ( set ) |
986 | if ( elem ) { |
1025 | // convert the value to a string (all browsers do this but IE) see #1070
|
987 | if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { |
- | 988 | if ( !inplace ) |
|
1026 | elem.setAttribute( name, "" + value ); |
989 | result.push( elem ); |
- | 990 | } else if ( inplace ) { |
|
- | 991 | curLoop[i] = false; |
|
- | 992 | }
|
|
- | 993 | }
|
|
- | 994 | }
|
|
1027 | 995 | ||
- | 996 | return false; |
|
- | 997 | }, |
|
- | 998 | ID: function(match){ |
|
1028 | var attr = !jQuery.support.hrefNormalized && notxml && special |
999 | return match[1].replace(/\\/g, ""); |
- | 1000 | }, |
|
- | 1001 | TAG: function(match, curLoop){ |
|
1029 | // Some attributes require a special call on IE
|
1002 | for ( var i = 0; curLoop[i] === false; i++ ){} |
- | 1003 | return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); |
|
- | 1004 | }, |
|
1030 | ? elem.getAttribute( name, 2 ) |
1005 | CHILD: function(match){ |
1031 | : elem.getAttribute( name ); |
1006 | if ( match[1] == "nth" ) { |
- | 1007 | // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
|
|
- | 1008 | var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( |
|
- | 1009 | match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || |
|
- | 1010 | !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); |
|
1032 | 1011 | ||
1033 | // Non-existent attributes return null, we normalize to undefined
|
1012 | // calculate the numbers (first)n+(last) including if they are negative
|
1034 | return attr === null ? undefined : attr; |
1013 | match[2] = (test[1] + (test[2] || 1)) - 0; |
- | 1014 | match[3] = test[3] - 0; |
|
1035 | }
|
1015 | }
|
1036 | 1016 | ||
1037 | // elem is actually elem.style ... set the style
|
1017 | // TODO: Move to normal caching system
|
- | 1018 | match[0] = done++; |
|
1038 | 1019 | ||
1039 | // IE uses filters for opacity
|
1020 | return match; |
1040 | if ( !jQuery.support.opacity && name == "opacity" ) { |
- | |
1041 | if ( set ) { |
1021 | }, |
1042 | // IE has trouble with opacity if it does not have layout
|
1022 | ATTR: function(match, curLoop, inplace, result, not, isXML){ |
1043 | // Force it by setting the zoom level
|
1023 | var name = match[1].replace(/\\/g, ""); |
1044 | elem.zoom = 1; |
- | |
1045 | 1024 | ||
1046 | // Set the alpha filter to set the opacity
|
1025 | if ( !isXML && Expr.attrMap[name] ) { |
1047 | elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) + |
1026 | match[1] = Expr.attrMap[name]; |
1048 | (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); |
- | |
1049 | }
|
1027 | }
|
1050 | 1028 | ||
1051 | return elem.filter && elem.filter.indexOf("opacity=") >= 0 ? |
1029 | if ( match[2] === "~=" ) { |
1052 | (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': |
1030 | match[4] = " " + match[4] + " "; |
1053 | ""; |
- | |
1054 | }
|
1031 | }
|
1055 | 1032 | ||
1056 | name = name.replace(/-([a-z])/ig, function(all, letter){ |
- | |
1057 | return letter.toUpperCase(); |
- | |
1058 | }); |
- | |
1059 | - | ||
1060 | if ( set ) |
- | |
1061 | elem[ name ] = value; |
- | |
1062 | - | ||
1063 | return elem[ name ]; |
1033 | return match; |
1064 | }, |
1034 | }, |
- | 1035 | PSEUDO: function(match, curLoop, inplace, result, not){ |
|
- | 1036 | if ( match[1] === "not" ) { |
|
- | 1037 | // If we're dealing with a complex expression, or a simple one
|
|
- | 1038 | if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) { |
|
- | 1039 | match[3] = Sizzle(match[3], null, null, curLoop); |
|
- | 1040 | } else { |
|
- | 1041 | var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); |
|
- | 1042 | if ( !inplace ) { |
|
- | 1043 | result.push.apply( result, ret ); |
|
- | 1044 | }
|
|
- | 1045 | return false; |
|
- | 1046 | }
|
|
- | 1047 | } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { |
|
- | 1048 | return true; |
|
- | 1049 | }
|
|
1065 | 1050 | ||
1066 | trim: function( text ) { |
1051 | return match; |
1067 | return (text || "").replace( /^\s+|\s+$/g, "" ); |
- | |
1068 | }, |
1052 | }, |
1069 | - | ||
1070 | makeArray: function( array ) { |
1053 | POS: function(match){ |
1071 | var ret = []; |
- | |
1072 | - | ||
1073 | if( array != null ){ |
- | |
1074 | var i = array.length; |
1054 | match.unshift( true ); |
1075 | // The window, strings (and functions) also have 'length'
|
- | |
1076 | if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) |
- | |
1077 | ret[0] = array; |
1055 | return match; |
1078 | else
|
- | |
1079 | while( i ) |
- | |
1080 | ret[--i] = array[i]; |
- | |
1081 | }
|
1056 | }
|
1082 | - | ||
1083 | return ret; |
- | |
1084 | }, |
1057 | }, |
1085 | 1058 | filters: { |
|
1086 | inArray: function( elem, array ) { |
1059 | enabled: function(elem){ |
1087 | for ( var i = 0, length = array.length; i < length; i++ ) |
- | |
1088 | // Use === because on IE, window == document
|
1060 | return elem.disabled === false && elem.type !== "hidden"; |
1089 | if ( array[ i ] === elem ) |
- | |
1090 | return i; |
- | |
1091 | - | ||
1092 | return -1; |
- | |
1093 | }, |
1061 | }, |
1094 | - | ||
1095 | merge: function( first, second ) { |
1062 | disabled: function(elem){ |
1096 | // We have to loop this way because IE & Opera overwrite the length
|
- | |
1097 | // expando of getElementsByTagName
|
- | |
1098 | var i = 0, elem, pos = first.length; |
- | |
1099 | // Also, we need to make sure that the correct elements are being returned
|
- | |
1100 | // (IE returns comment nodes in a '*' query)
|
- | |
1101 | if ( !jQuery.support.getAll ) { |
- | |
1102 | while ( (elem = second[ i++ ]) != null ) |
- | |
1103 | if ( elem.nodeType != 8 ) |
1063 | return elem.disabled === true; |
1104 | first[ pos++ ] = elem; |
- | |
1105 | - | ||
1106 | } else |
- | |
1107 | while ( (elem = second[ i++ ]) != null ) |
- | |
1108 | first[ pos++ ] = elem; |
- | |
1109 | - | ||
1110 | return first; |
- | |
1111 | }, |
1064 | }, |
1112 | - | ||
1113 | unique: function( array ) { |
1065 | checked: function(elem){ |
1114 | var ret = [], done = {}; |
- | |
1115 | - | ||
1116 | try { |
- | |
1117 | - | ||
1118 | for ( var i = 0, length = array.length; i < length; i++ ) { |
- | |
1119 | var id = jQuery.data( array[ i ] ); |
- | |
1120 | - | ||
1121 | if ( !done[ id ] ) { |
- | |
1122 | done[ id ] = true; |
1066 | return elem.checked === true; |
1123 | ret.push( array[ i ] ); |
- | |
1124 | }
|
- | |
1125 | }
|
- | |
1126 | - | ||
1127 | } catch( e ) { |
- | |
1128 | ret = array; |
- | |
1129 | }
|
- | |
1130 | - | ||
1131 | return ret; |
- | |
1132 | }, |
1067 | }, |
1133 | - | ||
1134 | grep: function( elems, callback, inv ) { |
1068 | selected: function(elem){ |
1135 | var ret = []; |
- | |
1136 | - | ||
1137 | // Go through the array, only saving the items
|
1069 | // Accessing this property makes selected-by-default
|
1138 | // that pass the validator function
|
1070 | // options in Safari work properly
|
1139 | for ( var i = 0, length = elems.length; i < length; i++ ) |
- | |
1140 | if ( !inv != !callback( elems[ i ], i ) ) |
- | |
1141 | ret.push( elems[ i ] ); |
1071 | elem.parentNode.selectedIndex; |
1142 | - | ||
1143 | return ret; |
1072 | return elem.selected === true; |
1144 | }, |
1073 | }, |
1145 | - | ||
1146 | map: function( elems, callback ) { |
- | |
1147 | var ret = []; |
- | |
1148 | - | ||
1149 | // Go through the array, translating each of the items to their
|
- | |
1150 | // new value (or values).
|
- | |
1151 | for ( var i = 0, length = elems.length; i < length; i++ ) { |
- | |
1152 | var value = callback( elems[ i ], i ); |
- | |
1153 | - | ||
1154 | if ( value != null ) |
- | |
1155 | ret[ ret.length ] = value; |
- | |
1156 | }
|
- | |
1157 | - | ||
1158 | return ret.concat.apply( [], ret ); |
- | |
1159 | }
|
- | |
1160 | }); |
- | |
1161 | - | ||
1162 | // Use of jQuery.browser is deprecated.
|
- | |
1163 | // It's included for backwards compatibility and plugins,
|
- | |
1164 | // although they should work to migrate away.
|
- | |
1165 | - | ||
1166 | var userAgent = navigator.userAgent.toLowerCase(); |
- | |
1167 | - | ||
1168 | // Figure out what browser is being used
|
- | |
1169 | jQuery.browser = { |
- | |
1170 | version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], |
- | |
1171 | safari: /webkit/.test( userAgent ), |
- | |
1172 | opera: /opera/.test( userAgent ), |
- | |
1173 | msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), |
- | |
1174 | mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) |
- | |
1175 | }; |
- | |
1176 | - | ||
1177 | jQuery.each({ |
- | |
1178 | parent: function(elem){return elem.parentNode;}, |
- | |
1179 | parents: function(elem){return jQuery.dir(elem,"parentNode");}, |
- | |
1180 | next: function(elem){return jQuery.nth(elem,2,"nextSibling");}, |
- | |
1181 | prev: function(elem){return jQuery.nth(elem,2,"previousSibling");}, |
- | |
1182 | nextAll: function(elem){return jQuery.dir(elem,"nextSibling");}, |
- | |
1183 | prevAll: function(elem){return jQuery.dir(elem,"previousSibling");}, |
- | |
1184 | siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);}, |
- | |
1185 | children: function(elem){return jQuery.sibling(elem.firstChild);}, |
- | |
1186 | contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);} |
- | |
1187 | }, function(name, fn){ |
- | |
1188 | jQuery.fn[ name ] = function( selector ) { |
- | |
1189 | var ret = jQuery.map( this, fn ); |
- | |
1190 | - | ||
1191 | if ( selector && typeof selector == "string" ) |
- | |
1192 | ret = jQuery.multiFilter( selector, ret ); |
- | |
1193 | - | ||
1194 | return this.pushStack( jQuery.unique( ret ), name, selector ); |
- | |
1195 | }; |
- | |
1196 | }); |
- | |
1197 | - | ||
1198 | jQuery.each({ |
- | |
1199 | appendTo: "append", |
- | |
1200 | prependTo: "prepend", |
- | |
1201 | insertBefore: "before", |
- | |
1202 | insertAfter: "after", |
- | |
1203 | replaceAll: "replaceWith" |
- | |
1204 | }, function(name, original){ |
- | |
1205 | jQuery.fn[ name ] = function( selector ) { |
- | |
1206 | var ret = [], insert = jQuery( selector ); |
- | |
1207 | - | ||
1208 | for ( var i = 0, l = insert.length; i < l; i++ ) { |
- | |
1209 | var elems = (i > 0 ? this.clone(true) : this).get(); |
- | |
1210 | jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); |
- | |
1211 | ret = ret.concat( elems ); |
- | |
1212 | }
|
- | |
1213 | - | ||
1214 | return this.pushStack( ret, name, selector ); |
- | |
1215 | }; |
- | |
1216 | }); |
- | |
1217 | - | ||
1218 | jQuery.each({ |
- | |
1219 | removeAttr: function( name ) { |
1074 | parent: function(elem){ |
1220 | jQuery.attr( this, name, "" ); |
- | |
1221 | if (this.nodeType == 1) |
- | |
1222 | this.removeAttribute( name ); |
1075 | return !!elem.firstChild; |
1223 | }, |
1076 | }, |
1224 | - | ||
1225 | addClass: function( classNames ) { |
1077 | empty: function(elem){ |
1226 | jQuery.className.add( this, classNames ); |
1078 | return !elem.firstChild; |
1227 | }, |
1079 | }, |
1228 | - | ||
1229 | removeClass: function( classNames ) { |
1080 | has: function(elem, i, match){ |
1230 | jQuery.className.remove( this, classNames ); |
1081 | return !!Sizzle( match[3], elem ).length; |
1231 | }, |
1082 | }, |
1232 | - | ||
1233 | toggleClass: function( classNames, state ) { |
1083 | header: function(elem){ |
1234 | if( typeof state !== "boolean" ) |
- | |
1235 | state = !jQuery.className.has( this, classNames ); |
1084 | return /h\d/i.test( elem.nodeName ); |
1236 | jQuery.className[ state ? "add" : "remove" ]( this, classNames ); |
- | |
1237 | }, |
1085 | }, |
1238 | - | ||
1239 | remove: function( selector ) { |
1086 | text: function(elem){ |
1240 | if ( !selector || jQuery.filter( selector, [ this ] ).length ) { |
- | |
1241 | // Prevent memory leaks
|
- | |
1242 | jQuery( "*", this ).add([this]).each(function(){ |
- | |
1243 | jQuery.event.remove(this); |
1087 | return "text" === elem.type; |
1244 | jQuery.removeData(this); |
- | |
1245 | }); |
- | |
1246 | if (this.parentNode) |
- | |
1247 | this.parentNode.removeChild( this ); |
- | |
1248 | }
|
- | |
1249 | }, |
1088 | }, |
1250 | - | ||
1251 | empty: function() { |
1089 | radio: function(elem){ |
1252 | // Remove element nodes and prevent memory leaks
|
- | |
1253 | jQuery(this).children().remove(); |
- | |
1254 | - | ||
1255 | // Remove any remaining nodes
|
- | |
1256 | while ( this.firstChild ) |
- | |
1257 | this.removeChild( this.firstChild ); |
- | |
1258 | }
|
- | |
1259 | }, function(name, fn){ |
- | |
1260 | jQuery.fn[ name ] = function(){ |
- | |
1261 | return this.each( fn, arguments ); |
1090 | return "radio" === elem.type; |
1262 | }; |
- | |
1263 | }); |
- | |
1264 | - | ||
1265 | // Helper function used by the dimensions and offset modules
|
- | |
1266 | function num(elem, prop) { |
- | |
1267 | return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0; |
- | |
1268 | }
|
- | |
1269 | var expando = "jQuery" + now(), uuid = 0, windowData = {}; |
- | |
1270 | - | ||
1271 | jQuery.extend({ |
- | |
1272 | cache: {}, |
- | |
1273 | - | ||
1274 | data: function( elem, name, data ) { |
- | |
1275 | elem = elem == window ? |
- | |
1276 | windowData :
|
- | |
1277 | elem;
|
- | |
1278 | - | ||
1279 | var id = elem[ expando ]; |
- | |
1280 | - | ||
1281 | // Compute a unique ID for the element
|
- | |
1282 | if ( !id ) |
- | |
1283 | id = elem[ expando ] = ++uuid; |
- | |
1284 | - | ||
1285 | // Only generate the data cache if we're
|
- | |
1286 | // trying to access or manipulate it
|
- | |
1287 | if ( name && !jQuery.cache[ id ] ) |
- | |
1288 | jQuery.cache[ id ] = {}; |
- | |
1289 | - | ||
1290 | // Prevent overriding the named cache with undefined values
|
- | |
1291 | if ( data !== undefined ) |
- | |
1292 | jQuery.cache[ id ][ name ] = data; |
- | |
1293 | - | ||
1294 | // Return the named cache data, or the ID for the element
|
- | |
1295 | return name ? |
- | |
1296 | jQuery.cache[ id ][ name ] : |
- | |
1297 | id;
|
- | |
1298 | }, |
1091 | }, |
1299 | - | ||
1300 | removeData: function( elem, name ) { |
1092 | checkbox: function(elem){ |
1301 | elem = elem == window ? |
- | |
1302 | windowData :
|
- | |
1303 | elem;
|
- | |
1304 | - | ||
1305 | var id = elem[ expando ]; |
- | |
1306 | - | ||
1307 | // If we want to remove a specific section of the element's data
|
- | |
1308 | if ( name ) { |
- | |
1309 | if ( jQuery.cache[ id ] ) { |
- | |
1310 | // Remove the section of cache data
|
- | |
1311 | delete jQuery.cache[ id ][ name ]; |
- | |
1312 | - | ||
1313 | // If we've removed all the data, remove the element's cache
|
- | |
1314 | name = ""; |
- | |
1315 | - | ||
1316 | for ( name in jQuery.cache[ id ] ) |
- | |
1317 | break; |
- | |
1318 | - | ||
1319 | if ( !name ) |
- | |
1320 | jQuery.removeData( elem ); |
1093 | return "checkbox" === elem.type; |
1321 | }
|
- | |
1322 | - | ||
1323 | // Otherwise, we want to remove all of the element's data
|
- | |
1324 | } else { |
- | |
1325 | // Clean up the element expando
|
- | |
1326 | try { |
- | |
1327 | delete elem[ expando ]; |
- | |
1328 | } catch(e){ |
- | |
1329 | // IE has trouble directly removing the expando
|
- | |
1330 | // but it's ok with using removeAttribute
|
- | |
1331 | if ( elem.removeAttribute ) |
- | |
1332 | elem.removeAttribute( expando ); |
- | |
1333 | }
|
- | |
1334 | - | ||
1335 | // Completely remove the data cache
|
- | |
1336 | delete jQuery.cache[ id ]; |
- | |
1337 | }
|
- | |
1338 | }, |
1094 | }, |
1339 | queue: function( elem, type, data ) { |
1095 | file: function(elem){ |
1340 | if ( elem ){ |
- | |
1341 | - | ||
1342 | type = (type || "fx") + "queue"; |
- | |
1343 | - | ||
1344 | var q = jQuery.data( elem, type ); |
1096 | return "file" === elem.type; |
1345 | - | ||
1346 | if ( !q || jQuery.isArray(data) ) |
- | |
1347 | q = jQuery.data( elem, type, jQuery.makeArray(data) ); |
- | |
1348 | else if( data ) |
- | |
1349 | q.push( data ); |
- | |
1350 | - | ||
1351 | }
|
- | |
1352 | return q; |
- | |
1353 | }, |
1097 | }, |
- | 1098 | password: function(elem){ |
|
- | 1099 | return "password" === elem.type; |
|
1354 | 1100 | }, |
|
1355 | dequeue: function( elem, type ){ |
1101 | submit: function(elem){ |
1356 | var queue = jQuery.queue( elem, type ), |
1102 | return "submit" === elem.type; |
- | 1103 | }, |
|
1357 | fn = queue.shift(); |
1104 | image: function(elem){ |
- | 1105 | return "image" === elem.type; |
|
1358 | 1106 | }, |
|
1359 | if( !type || type === "fx" ) |
1107 | reset: function(elem){ |
1360 | fn = queue[0]; |
1108 | return "reset" === elem.type; |
1361 | 1109 | }, |
|
1362 | if( fn !== undefined ) |
1110 | button: function(elem){ |
- | 1111 | return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; |
|
- | 1112 | }, |
|
1363 | fn.call(elem); |
1113 | input: function(elem){ |
- | 1114 | return /input|select|textarea|button/i.test(elem.nodeName); |
|
1364 | }
|
1115 | }
|
1365 | }); |
- | |
1366 | - | ||
1367 | jQuery.fn.extend({ |
- | |
1368 | data: function( key, value ){ |
- | |
1369 | var parts = key.split("."); |
- | |
1370 | parts[1] = parts[1] ? "." + parts[1] : ""; |
- | |
1371 | - | ||
1372 | if ( value === undefined ) { |
- | |
1373 | var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); |
- | |
1374 | - | ||
1375 | if ( data === undefined && this.length ) |
- | |
1376 | data = jQuery.data( this[0], key ); |
- | |
1377 | - | ||
1378 | return data === undefined && parts[1] ? |
- | |
1379 | this.data( parts[0] ) : |
- | |
1380 | data;
|
- | |
1381 | } else |
- | |
1382 | return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ |
- | |
1383 | jQuery.data( this, key, value ); |
- | |
1384 | }); |
- | |
1385 | }, |
1116 | }, |
1386 | - | ||
1387 | removeData: function( key ){ |
1117 | setFilters: { |
1388 | return this.each(function(){ |
1118 | first: function(elem, i){ |
1389 | jQuery.removeData( this, key ); |
1119 | return i === 0; |
1390 | }); |
- | |
1391 | }, |
1120 | }, |
1392 | queue: function(type, data){ |
1121 | last: function(elem, i, match, array){ |
1393 | if ( typeof type !== "string" ) { |
1122 | return i === array.length - 1; |
- | 1123 | }, |
|
- | 1124 | even: function(elem, i){ |
|
1394 | data = type; |
1125 | return i % 2 === 0; |
- | 1126 | }, |
|
- | 1127 | odd: function(elem, i){ |
|
1395 | type = "fx"; |
1128 | return i % 2 === 1; |
- | 1129 | }, |
|
- | 1130 | lt: function(elem, i, match){ |
|
- | 1131 | return i < match[3] - 0; |
|
- | 1132 | }, |
|
- | 1133 | gt: function(elem, i, match){ |
|
- | 1134 | return i > match[3] - 0; |
|
- | 1135 | }, |
|
- | 1136 | nth: function(elem, i, match){ |
|
- | 1137 | return match[3] - 0 == i; |
|
- | 1138 | }, |
|
- | 1139 | eq: function(elem, i, match){ |
|
- | 1140 | return match[3] - 0 == i; |
|
1396 | }
|
1141 | }
|
- | 1142 | }, |
|
- | 1143 | filter: { |
|
- | 1144 | PSEUDO: function(elem, match, i, array){ |
|
- | 1145 | var name = match[1], filter = Expr.filters[ name ]; |
|
1397 | 1146 | ||
1398 | if ( data === undefined ) |
1147 | if ( filter ) { |
1399 | return jQuery.queue( this[0], type ); |
1148 | return filter( elem, i, match, array ); |
- | 1149 | } else if ( name === "contains" ) { |
|
- | 1150 | return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; |
|
- | 1151 | } else if ( name === "not" ) { |
|
- | 1152 | var not = match[3]; |
|
1400 | 1153 | ||
1401 | return this.each(function(){ |
1154 | for ( var i = 0, l = not.length; i < l; i++ ) { |
1402 | var queue = jQuery.queue( this, type, data ); |
1155 | if ( not[i] === elem ) { |
- | 1156 | return false; |
|
- | 1157 | }
|
|
- | 1158 | }
|
|
1403 | 1159 | ||
1404 | if( type == "fx" && queue.length == 1 ) |
- | |
1405 | queue[0].call(this); |
1160 | return true; |
1406 | }); |
1161 | }
|
1407 | }, |
1162 | }, |
1408 | dequeue: function(type){ |
1163 | CHILD: function(elem, match){ |
1409 | return this.each(function(){ |
1164 | var type = match[1], node = elem; |
1410 | jQuery.dequeue( this, type ); |
1165 | switch (type) { |
1411 | }); |
1166 | case 'only': |
- | 1167 | case 'first': |
|
- | 1168 | while (node = node.previousSibling) { |
|
- | 1169 | if ( node.nodeType === 1 ) return false; |
|
1412 | }
|
1170 | }
|
1413 | });/*! |
- | |
1414 | * Sizzle CSS Selector Engine - v0.9.3
|
1171 | if ( type == 'first') return true; |
1415 | * Copyright 2009, The Dojo Foundation
|
1172 | node = elem; |
- | 1173 | case 'last': |
|
1416 | * Released under the MIT, BSD, and GPL Licenses.
|
1174 | while (node = node.nextSibling) { |
1417 | * More information: http://sizzlejs.com/
|
1175 | if ( node.nodeType === 1 ) return false; |
1418 | */
|
1176 | }
|
1419 | (function(){ |
1177 | return true; |
1420 | - | ||
1421 | var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g, |
- | |
1422 | done = 0, |
1178 | case 'nth': |
1423 | toString = Object.prototype.toString; |
1179 | var first = match[2], last = match[3]; |
1424 | 1180 | ||
1425 | var Sizzle = function(selector, context, results, seed) { |
1181 | if ( first == 1 && last == 0 ) { |
1426 | results = results || []; |
1182 | return true; |
1427 | context = context || document; |
1183 | }
|
1428 | 1184 | ||
1429 | if ( context.nodeType !== 1 && context.nodeType !== 9 ) |
1185 | var doneName = match[0], |
1430 | return []; |
1186 | parent = elem.parentNode; |
1431 | 1187 | ||
1432 | if ( !selector || typeof selector !== "string" ) { |
1188 | if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { |
1433 | return results; |
1189 | var count = 0; |
- | 1190 | for ( node = parent.firstChild; node; node = node.nextSibling ) { |
|
- | 1191 | if ( node.nodeType === 1 ) { |
|
- | 1192 | node.nodeIndex = ++count; |
|
- | 1193 | }
|
|
- | 1194 | }
|
|
- | 1195 | parent.sizcache = doneName; |
|
1434 | }
|
1196 | }
|
1435 | 1197 | ||
- | 1198 | var diff = elem.nodeIndex - last; |
|
- | 1199 | if ( first == 0 ) { |
|
- | 1200 | return diff == 0; |
|
- | 1201 | } else { |
|
- | 1202 | return ( diff % first == 0 && diff / first >= 0 ); |
|
- | 1203 | }
|
|
- | 1204 | }
|
|
- | 1205 | }, |
|
- | 1206 | ID: function(elem, match){ |
|
- | 1207 | return elem.nodeType === 1 && elem.getAttribute("id") === match; |
|
- | 1208 | }, |
|
- | 1209 | TAG: function(elem, match){ |
|
1436 | var parts = [], m, set, checkSet, check, mode, extra, prune = true; |
1210 | return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; |
1437 | 1211 | }, |
|
- | 1212 | CLASS: function(elem, match){ |
|
1438 | // Reset the position of the chunker regexp (start from head)
|
1213 | return (" " + (elem.className || elem.getAttribute("class")) + " ") |
- | 1214 | .indexOf( match ) > -1; |
|
- | 1215 | }, |
|
- | 1216 | ATTR: function(elem, match){ |
|
- | 1217 | var name = match[1], |
|
- | 1218 | result = Expr.attrHandle[ name ] ? |
|
- | 1219 | Expr.attrHandle[ name ]( elem ) : |
|
- | 1220 | elem[ name ] != null ? |
|
1439 | chunker.lastIndex = 0; |
1221 | elem[ name ] : |
- | 1222 | elem.getAttribute( name ), |
|
- | 1223 | value = result + "", |
|
- | 1224 | type = match[2], |
|
- | 1225 | check = match[4]; |
|
1440 | 1226 | ||
- | 1227 | return result == null ? |
|
- | 1228 | type === "!=" : |
|
- | 1229 | type === "=" ? |
|
- | 1230 | value === check : |
|
- | 1231 | type === "*=" ? |
|
- | 1232 | value.indexOf(check) >= 0 : |
|
- | 1233 | type === "~=" ? |
|
1441 | while ( (m = chunker.exec(selector)) !== null ) { |
1234 | (" " + value + " ").indexOf(check) >= 0 : |
- | 1235 | !check ? |
|
- | 1236 | value && result !== false : |
|
- | 1237 | type === "!=" ? |
|
- | 1238 | value != check : |
|
- | 1239 | type === "^=" ? |
|
- | 1240 | value.indexOf(check) === 0 : |
|
- | 1241 | type === "$=" ? |
|
- | 1242 | value.substr(value.length - check.length) === check : |
|
1442 | parts.push( m[1] ); |
1243 | type === "|=" ? |
- | 1244 | value === check || value.substr(0, check.length + 1) === check + "-" : |
|
- | 1245 | false; |
|
- | 1246 | }, |
|
- | 1247 | POS: function(elem, match, i, array){ |
|
- | 1248 | var name = match[2], filter = Expr.setFilters[ name ]; |
|
1443 | 1249 | ||
1444 | if ( m[2] ) { |
1250 | if ( filter ) { |
1445 | extra = RegExp.rightContext; |
1251 | return filter( elem, i, match, array ); |
1446 | break; |
1252 | }
|
1447 | }
|
1253 | }
|
1448 | }
|
1254 | }
|
- | 1255 | }; |
|
1449 | 1256 | ||
1450 | if ( parts.length > 1 && origPOS.exec( selector ) ) { |
- | |
1451 | if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { |
- | |
1452 | set = posProcess( parts[0] + parts[1], context ); |
- | |
1453 | } else { |
- | |
1454 | set = Expr.relative[ parts[0] ] ? |
1257 | var origPOS = Expr.match.POS; |
1455 | [ context ] : |
- | |
1456 | Sizzle( parts.shift(), context ); |
- | |
1457 | 1258 | ||
1458 | while ( parts.length ) { |
1259 | for ( var type in Expr.match ) { |
1459 | selector = parts.shift(); |
1260 | Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); |
- | 1261 | }
|
|
1460 | 1262 | ||
1461 | if ( Expr.relative[ selector ] ) |
1263 | var makeArray = function(array, results) { |
1462 | selector += parts.shift(); |
1264 | array = Array.prototype.slice.call( array ); |
1463 | 1265 | ||
- | 1266 | if ( results ) { |
|
1464 | set = posProcess( selector, set ); |
1267 | results.push.apply( results, array ); |
1465 | }
|
1268 | return results; |
1466 | }
|
1269 | }
|
1467 | } else { |
- | |
1468 | var ret = seed ? |
- | |
1469 | { expr: parts.pop(), set: makeArray(seed) } : |
- | |
1470 | Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) ); |
- | |
1471 | set = Sizzle.filter( ret.expr, ret.set ); |
- | |
1472 | 1270 | ||
1473 | if ( parts.length > 0 ) { |
- | |
1474 | checkSet = makeArray(set); |
- | |
1475 | } else { |
- | |
1476 | prune = false; |
1271 | return array; |
1477 | }
|
1272 | }; |
1478 | 1273 | ||
- | 1274 | // Perform a simple check to determine if the browser is capable of
|
|
1479 | while ( parts.length ) { |
1275 | // converting a NodeList to an array using builtin methods.
|
- | 1276 | try { |
|
1480 | var cur = parts.pop(), pop = cur; |
1277 | Array.prototype.slice.call( document.documentElement.childNodes ); |
1481 | 1278 | ||
- | 1279 | // Provide a fallback method if it does not work
|
|
- | 1280 | } catch(e){ |
|
1482 | if ( !Expr.relative[ cur ] ) { |
1281 | makeArray = function(array, results) { |
1483 | cur = ""; |
1282 | var ret = results || []; |
- | 1283 | ||
- | 1284 | if ( toString.call(array) === "[object Array]" ) { |
|
- | 1285 | Array.prototype.push.apply( ret, array ); |
|
1484 | } else { |
1286 | } else { |
- | 1287 | if ( typeof array.length === "number" ) { |
|
- | 1288 | for ( var i = 0, l = array.length; i < l; i++ ) { |
|
1485 | pop = parts.pop(); |
1289 | ret.push( array[i] ); |
1486 | }
|
1290 | }
|
1487 | 1291 | } else { |
|
1488 | if ( pop == null ) { |
1292 | for ( var i = 0; array[i]; i++ ) { |
1489 | pop = context; |
1293 | ret.push( array[i] ); |
1490 | }
|
1294 | }
|
1491 | - | ||
1492 | Expr.relative[ cur ]( checkSet, pop, isXML(context) ); |
- | |
1493 | }
|
1295 | }
|
1494 | }
|
1296 | }
|
1495 | 1297 | ||
1496 | if ( !checkSet ) { |
1298 | return ret; |
1497 | checkSet = set; |
1299 | }; |
1498 | }
|
1300 | }
|
1499 | 1301 | ||
1500 | if ( !checkSet ) { |
1302 | var sortOrder; |
1501 | throw "Syntax error, unrecognized expression: " + (cur || selector); |
- | |
1502 | }
|
- | |
1503 | 1303 | ||
1504 | if ( toString.call(checkSet) === "[object Array]" ) { |
1304 | if ( document.documentElement.compareDocumentPosition ) { |
1505 | if ( !prune ) { |
- | |
1506 | results.push.apply( results, checkSet ); |
- | |
1507 | } else if ( context.nodeType === 1 ) { |
1305 | sortOrder = function( a, b ) { |
1508 | for ( var i = 0; checkSet[i] != null; i++ ) { |
1306 | var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; |
1509 | if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { |
- | |
1510 | results.push( set[i] ); |
- | |
1511 | }
|
- | |
1512 | }
|
- | |
1513 | } else { |
1307 | if ( ret === 0 ) { |
1514 | for ( var i = 0; checkSet[i] != null; i++ ) { |
- | |
1515 | if ( checkSet[i] && checkSet[i].nodeType === 1 ) { |
- | |
1516 | results.push( set[i] ); |
1308 | hasDuplicate = true; |
1517 | }
|
1309 | }
|
- | 1310 | return ret; |
|
- | 1311 | }; |
|
- | 1312 | } else if ( "sourceIndex" in document.documentElement ) { |
|
- | 1313 | sortOrder = function( a, b ) { |
|
- | 1314 | var ret = a.sourceIndex - b.sourceIndex; |
|
- | 1315 | if ( ret === 0 ) { |
|
- | 1316 | hasDuplicate = true; |
|
1518 | }
|
1317 | }
|
- | 1318 | return ret; |
|
- | 1319 | }; |
|
- | 1320 | } else if ( document.createRange ) { |
|
- | 1321 | sortOrder = function( a, b ) { |
|
- | 1322 | var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); |
|
- | 1323 | aRange.selectNode(a); |
|
- | 1324 | aRange.collapse(true); |
|
- | 1325 | bRange.selectNode(b); |
|
- | 1326 | bRange.collapse(true); |
|
- | 1327 | var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); |
|
- | 1328 | if ( ret === 0 ) { |
|
- | 1329 | hasDuplicate = true; |
|
1519 | }
|
1330 | }
|
1520 | } else { |
1331 | return ret; |
1521 | makeArray( checkSet, results ); |
1332 | }; |
1522 | }
|
1333 | }
|
1523 | 1334 | ||
- | 1335 | // Check to see if the browser returns elements by name when
|
|
- | 1336 | // querying by getElementById (and provide a workaround)
|
|
1524 | if ( extra ) { |
1337 | (function(){ |
- | 1338 | // We're going to inject a fake input element with a specified name
|
|
- | 1339 | var form = document.createElement("div"), |
|
1525 | Sizzle( extra, context, results, seed ); |
1340 | id = "script" + (new Date).getTime(); |
- | 1341 | form.innerHTML = "<a name='" + id + "'/>"; |
|
1526 | 1342 | ||
1527 | if ( sortOrder ) { |
1343 | // Inject it into the root element, check its status, and remove it quickly
|
1528 | hasDuplicate = false; |
1344 | var root = document.documentElement; |
1529 | results.sort(sortOrder); |
1345 | root.insertBefore( form, root.firstChild ); |
1530 | 1346 | ||
- | 1347 | // The workaround has to do additional checks after a getElementById
|
|
- | 1348 | // Which slows things down for other browsers (hence the branching)
|
|
1531 | if ( hasDuplicate ) { |
1349 | if ( !!document.getElementById( id ) ) { |
1532 | for ( var i = 1; i < results.length; i++ ) { |
1350 | Expr.find.ID = function(match, context, isXML){ |
1533 | if ( results[i] === results[i-1] ) { |
1351 | if ( typeof context.getElementById !== "undefined" && !isXML ) { |
1534 | results.splice(i--, 1); |
1352 | var m = context.getElementById(match[1]); |
- | 1353 | return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; |
|
1535 | }
|
1354 | }
|
- | 1355 | }; |
|
- | 1356 | ||
- | 1357 | Expr.filter.ID = function(elem, match){ |
|
- | 1358 | var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); |
|
- | 1359 | return elem.nodeType === 1 && node && node.nodeValue === match; |
|
- | 1360 | }; |
|
1536 | }
|
1361 | }
|
- | 1362 | ||
- | 1363 | root.removeChild( form ); |
|
- | 1364 | })(); |
|
- | 1365 | ||
- | 1366 | (function(){ |
|
- | 1367 | // Check to see if the browser returns only elements
|
|
- | 1368 | // when doing getElementsByTagName("*")
|
|
- | 1369 | ||
- | 1370 | // Create a fake element
|
|
- | 1371 | var div = document.createElement("div"); |
|
- | 1372 | div.appendChild( document.createComment("") ); |
|
- | 1373 | ||
- | 1374 | // Make sure no comments are found
|
|
- | 1375 | if ( div.getElementsByTagName("*").length > 0 ) { |
|
- | 1376 | Expr.find.TAG = function(match, context){ |
|
- | 1377 | var results = context.getElementsByTagName(match[1]); |
|
- | 1378 | ||
- | 1379 | // Filter out possible comments
|
|
- | 1380 | if ( match[1] === "*" ) { |
|
- | 1381 | var tmp = []; |
|
- | 1382 | ||
- | 1383 | for ( var i = 0; results[i]; i++ ) { |
|
- | 1384 | if ( results[i].nodeType === 1 ) { |
|
- | 1385 | tmp.push( results[i] ); |
|
1537 | }
|
1386 | }
|
1538 | }
|
1387 | }
|
- | 1388 | ||
- | 1389 | results = tmp; |
|
1539 | }
|
1390 | }
|
1540 | 1391 | ||
1541 | return results; |
1392 | return results; |
1542 | }; |
1393 | }; |
- | 1394 | }
|
|
1543 | 1395 | ||
- | 1396 | // Check to see if an attribute returns normalized href attributes
|
|
- | 1397 | div.innerHTML = "<a href='#'></a>"; |
|
- | 1398 | if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && |
|
- | 1399 | div.firstChild.getAttribute("href") !== "#" ) { |
|
1544 | Sizzle.matches = function(expr, set){ |
1400 | Expr.attrHandle.href = function(elem){ |
1545 | return Sizzle(expr, null, null, set); |
1401 | return elem.getAttribute("href", 2); |
1546 | }; |
1402 | }; |
- | 1403 | }
|
|
- | 1404 | })(); |
|
1547 | 1405 | ||
- | 1406 | if ( document.querySelectorAll ) (function(){ |
|
1548 | Sizzle.find = function(expr, context, isXML){ |
1407 | var oldSizzle = Sizzle, div = document.createElement("div"); |
1549 | var set, match; |
1408 | div.innerHTML = "<p class='TEST'></p>"; |
1550 | 1409 | ||
- | 1410 | // Safari can't handle uppercase or unicode characters when
|
|
1551 | if ( !expr ) { |
1411 | // in quirks mode.
|
- | 1412 | if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { |
|
1552 | return []; |
1413 | return; |
1553 | }
|
1414 | }
|
1554 | 1415 | ||
1555 | for ( var i = 0, l = Expr.order.length; i < l; i++ ) { |
- | |
1556 | var type = Expr.order[i], match; |
- | |
1557 | - | ||
1558 | if ( (match = Expr.match[ type ].exec( expr )) ) { |
1416 | Sizzle = function(query, context, extra, seed){ |
1559 | var left = RegExp.leftContext; |
1417 | context = context || document; |
1560 | 1418 | ||
1561 | if ( left.substr( left.length - 1 ) !== "\\" ) { |
1419 | // Only use querySelectorAll on non-XML documents
|
1562 | match[1] = (match[1] || "").replace(/\\/g, ""); |
1420 | // (ID selectors don't work in non-HTML documents)
|
1563 | set = Expr.find[ type ]( match, context, isXML ); |
1421 | if ( !seed && context.nodeType === 9 && !isXML(context) ) { |
1564 | if ( set != null ) { |
1422 | try { |
1565 | expr = expr.replace( Expr.match[ type ], "" ); |
1423 | return makeArray( context.querySelectorAll(query), extra ); |
1566 | break; |
1424 | } catch(e){} |
1567 | }
|
- | |
1568 | }
|
- | |
1569 | }
|
- | |
1570 | }
|
1425 | }
|
1571 | 1426 | ||
- | 1427 | return oldSizzle(query, context, extra, seed); |
|
- | 1428 | }; |
|
- | 1429 | ||
1572 | if ( !set ) { |
1430 | for ( var prop in oldSizzle ) { |
1573 | set = context.getElementsByTagName("*"); |
1431 | Sizzle[ prop ] = oldSizzle[ prop ]; |
1574 | }
|
1432 | }
|
- | 1433 | })(); |
|
1575 | 1434 | ||
- | 1435 | if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ |
|
1576 | return {set: set, expr: expr}; |
1436 | var div = document.createElement("div"); |
1577 | }; |
- | |
- | 1437 | div.innerHTML = "<div class='test e'></div><div class='test'></div>"; |
|
1578 | 1438 | ||
1579 | Sizzle.filter = function(expr, set, inplace, not){ |
1439 | // Opera can't find a second classname (in 9.6)
|
1580 | var old = expr, result = [], curLoop = set, match, anyFound, |
1440 | if ( div.getElementsByClassName("e").length === 0 ) |
1581 | isXMLFilter = set && set[0] && isXML(set[0]); |
1441 | return; |
1582 | 1442 | ||
1583 | while ( expr && set.length ) { |
- | |
1584 | for ( var type in Expr.filter ) { |
- | |
1585 | if ( (match = Expr.match[ type ].exec( expr )) != null ) { |
1443 | // Safari caches class attributes, doesn't catch changes (in 3.2)
|
1586 | var filter = Expr.filter[ type ], found, item; |
- | |
1587 | anyFound = false; |
1444 | div.lastChild.className = "e"; |
1588 | 1445 | ||
1589 | if ( curLoop == result ) { |
1446 | if ( div.getElementsByClassName("e").length === 1 ) |
1590 | result = []; |
1447 | return; |
1591 | }
|
- | |
1592 | 1448 | ||
1593 | if ( Expr.preFilter[ type ] ) { |
1449 | Expr.order.splice(1, 0, "CLASS"); |
- | 1450 | Expr.find.CLASS = function(match, context, isXML) { |
|
1594 | match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); |
1451 | if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { |
- | 1452 | return context.getElementsByClassName(match[1]); |
|
- | 1453 | }
|
|
- | 1454 | }; |
|
- | 1455 | })(); |
|
1595 | 1456 | ||
- | 1457 | function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { |
|
- | 1458 | var sibDir = dir == "previousSibling" && !isXML; |
|
- | 1459 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
|
- | 1460 | var elem = checkSet[i]; |
|
1596 | if ( !match ) { |
1461 | if ( elem ) { |
1597 | anyFound = found = true; |
1462 | if ( sibDir && elem.nodeType === 1 ){ |
1598 | } else if ( match === true ) { |
1463 | elem.sizcache = doneName; |
1599 | continue; |
1464 | elem.sizset = i; |
1600 | }
|
1465 | }
|
- | 1466 | elem = elem[dir]; |
|
- | 1467 | var match = false; |
|
- | 1468 | ||
- | 1469 | while ( elem ) { |
|
- | 1470 | if ( elem.sizcache === doneName ) { |
|
- | 1471 | match = checkSet[elem.sizset]; |
|
- | 1472 | break; |
|
1601 | }
|
1473 | }
|
1602 | 1474 | ||
1603 | if ( match ) { |
1475 | if ( elem.nodeType === 1 && !isXML ){ |
1604 | for ( var i = 0; (item = curLoop[i]) != null; i++ ) { |
1476 | elem.sizcache = doneName; |
1605 | if ( item ) { |
1477 | elem.sizset = i; |
1606 | found = filter( item, match, i, curLoop ); |
- | |
1607 | var pass = not ^ !!found; |
1478 | }
|
1608 | 1479 | ||
1609 | if ( inplace && found != null ) { |
1480 | if ( elem.nodeName === cur ) { |
1610 | if ( pass ) { |
- | |
1611 | anyFound = true; |
1481 | match = elem; |
1612 | } else { |
1482 | break; |
1613 | curLoop[i] = false; |
- | |
1614 | }
|
1483 | }
|
- | 1484 | ||
1615 | } else if ( pass ) { |
1485 | elem = elem[dir]; |
1616 | result.push( item ); |
- | |
1617 | anyFound = true; |
- | |
1618 | }
|
1486 | }
|
- | 1487 | ||
- | 1488 | checkSet[i] = match; |
|
1619 | }
|
1489 | }
|
1620 | }
|
1490 | }
|
1621 | }
|
1491 | }
|
1622 | 1492 | ||
- | 1493 | function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { |
|
- | 1494 | var sibDir = dir == "previousSibling" && !isXML; |
|
- | 1495 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
|
1623 | if ( found !== undefined ) { |
1496 | var elem = checkSet[i]; |
1624 | if ( !inplace ) { |
1497 | if ( elem ) { |
- | 1498 | if ( sibDir && elem.nodeType === 1 ) { |
|
1625 | curLoop = result; |
1499 | elem.sizcache = doneName; |
- | 1500 | elem.sizset = i; |
|
1626 | }
|
1501 | }
|
- | 1502 | elem = elem[dir]; |
|
- | 1503 | var match = false; |
|
1627 | 1504 | ||
- | 1505 | while ( elem ) { |
|
1628 | expr = expr.replace( Expr.match[ type ], "" ); |
1506 | if ( elem.sizcache === doneName ) { |
- | 1507 | match = checkSet[elem.sizset]; |
|
- | 1508 | break; |
|
- | 1509 | }
|
|
1629 | 1510 | ||
- | 1511 | if ( elem.nodeType === 1 ) { |
|
1630 | if ( !anyFound ) { |
1512 | if ( !isXML ) { |
- | 1513 | elem.sizcache = doneName; |
|
- | 1514 | elem.sizset = i; |
|
- | 1515 | }
|
|
- | 1516 | if ( typeof cur !== "string" ) { |
|
- | 1517 | if ( elem === cur ) { |
|
- | 1518 | match = true; |
|
1631 | return []; |
1519 | break; |
1632 | }
|
1520 | }
|
1633 | 1521 | ||
- | 1522 | } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { |
|
- | 1523 | match = elem; |
|
1634 | break; |
1524 | break; |
1635 | }
|
1525 | }
|
1636 | }
|
1526 | }
|
- | 1527 | ||
- | 1528 | elem = elem[dir]; |
|
1637 | }
|
1529 | }
|
1638 | 1530 | ||
1639 | // Improper expression
|
- | |
1640 | if ( expr == old ) { |
1531 | checkSet[i] = match; |
1641 | if ( anyFound == null ) { |
- | |
1642 | throw "Syntax error, unrecognized expression: " + expr; |
- | |
1643 | } else { |
- | |
1644 | break; |
- | |
1645 | }
|
1532 | }
|
1646 | }
|
1533 | }
|
1647 | - | ||
1648 | old = expr; |
- | |
1649 | }
|
1534 | }
|
1650 | 1535 | ||
- | 1536 | var contains = document.compareDocumentPosition ? function(a, b){ |
|
- | 1537 | return a.compareDocumentPosition(b) & 16; |
|
1651 | return curLoop; |
1538 | } : function(a, b){ |
- | 1539 | return a !== b && (a.contains ? a.contains(b) : true); |
|
1652 | }; |
1540 | }; |
1653 | 1541 | ||
1654 | var Expr = Sizzle.selectors = { |
1542 | var isXML = function(elem){ |
1655 | order: [ "ID", "NAME", "TAG" ], |
- | |
1656 | match: { |
- | |
1657 | ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, |
- | |
1658 | CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, |
- | |
1659 | NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/, |
- | |
1660 | ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, |
- | |
1661 | TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/, |
- | |
1662 | CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, |
1543 | return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || |
1663 | POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, |
1544 | !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; |
1664 | PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ |
- | |
1665 | }, |
- | |
1666 | attrMap: { |
- | |
1667 | "class": "className", |
- | |
1668 | "for": "htmlFor" |
- | |
1669 | }, |
- | |
1670 | attrHandle: { |
- | |
1671 | href: function(elem){ |
- | |
1672 | return elem.getAttribute("href"); |
- | |
1673 | }
|
- | |
1674 | }, |
1545 | }; |
1675 | relative: { |
- | |
1676 | "+": function(checkSet, part, isXML){ |
- | |
1677 | var isPartStr = typeof part === "string", |
- | |
1678 | isTag = isPartStr && !/\W/.test(part), |
- | |
1679 | isPartStrNotTag = isPartStr && !isTag; |
- | |
1680 | 1546 | ||
- | 1547 | var posProcess = function(selector, context){ |
|
1681 | if ( isTag && !isXML ) { |
1548 | var tmpSet = [], later = "", match, |
- | 1549 | root = context.nodeType ? [context] : context; |
|
- | 1550 | ||
- | 1551 | // Position selectors must be done after the filter
|
|
- | 1552 | // And so must :not(positional) so we move all PSEUDOs to the end
|
|
- | 1553 | while ( (match = Expr.match.PSEUDO.exec( selector )) ) { |
|
1682 | part = part.toUpperCase(); |
1554 | later += match[0]; |
- | 1555 | selector = selector.replace( Expr.match.PSEUDO, "" ); |
|
1683 | }
|
1556 | }
|
1684 | 1557 | ||
1685 | for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { |
1558 | selector = Expr.relative[selector] ? selector + "*" : selector; |
1686 | if ( (elem = checkSet[i]) ) { |
- | |
1687 | while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} |
- | |
1688 | 1559 | ||
1689 | checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? |
1560 | for ( var i = 0, l = root.length; i < l; i++ ) { |
1690 | elem || false : |
- | |
1691 | elem === part; |
1561 | Sizzle( selector, root[i], tmpSet ); |
1692 | }
|
- | |
1693 | }
|
1562 | }
|
1694 | 1563 | ||
1695 | if ( isPartStrNotTag ) { |
- | |
1696 | Sizzle.filter( part, checkSet, true ); |
1564 | return Sizzle.filter( later, tmpSet ); |
1697 | }
|
- | |
1698 | }, |
1565 | }; |
1699 | ">": function(checkSet, part, isXML){ |
- | |
1700 | var isPartStr = typeof part === "string"; |
- | |
1701 | 1566 | ||
- | 1567 | // EXPOSE
|
|
- | 1568 | jQuery.find = Sizzle; |
|
1702 | if ( isPartStr && !/\W/.test(part) ) { |
1569 | jQuery.expr = Sizzle.selectors; |
1703 | part = isXML ? part : part.toUpperCase(); |
1570 | jQuery.expr[":"] = jQuery.expr.filters; |
1704 | 1571 | ||
1705 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
1572 | Sizzle.selectors.filters.hidden = function(elem){ |
1706 | var elem = checkSet[i]; |
- | |
1707 | if ( elem ) { |
- | |
1708 | var parent = elem.parentNode; |
- | |
1709 | checkSet[i] = parent.nodeName === part ? parent : false; |
- | |
1710 | }
|
- | |
1711 | }
|
- | |
1712 | } else { |
- | |
1713 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
1573 | return elem.offsetWidth === 0 && elem.offsetHeight === 0; |
1714 | var elem = checkSet[i]; |
- | |
1715 | if ( elem ) { |
- | |
1716 | checkSet[i] = isPartStr ? |
- | |
1717 | elem.parentNode : |
- | |
1718 | elem.parentNode === part; |
- | |
1719 | }
|
- | |
1720 | }
|
1574 | }; |
1721 | 1575 | ||
1722 | if ( isPartStr ) { |
1576 | Sizzle.selectors.filters.visible = function(elem){ |
1723 | Sizzle.filter( part, checkSet, true ); |
1577 | return elem.offsetWidth > 0 || elem.offsetHeight > 0; |
1724 | }
|
- | |
1725 | }
|
1578 | }; |
1726 | }, |
1579 | |
- | 1580 | Sizzle.selectors.filters.animated = function(elem){ |
|
1727 | "": function(checkSet, part, isXML){ |
1581 | return jQuery.grep(jQuery.timers, function(fn){ |
1728 | var doneName = done++, checkFn = dirCheck; |
1582 | return elem === fn.elem; |
- | 1583 | }).length; |
|
- | 1584 | }; |
|
1729 | 1585 | ||
- | 1586 | jQuery.filter = jQuery.multiFilter = function( expr, elems, not ) { |
|
1730 | if ( !part.match(/\W/) ) { |
1587 | if ( not ) { |
1731 | var nodeCheck = part = isXML ? part : part.toUpperCase(); |
- | |
1732 | checkFn = dirNodeCheck; |
1588 | expr = ":not(" + expr + ")"; |
1733 | }
|
1589 | }
|
1734 | 1590 | ||
1735 | checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); |
1591 | return Sizzle.matches(expr, elems); |
1736 | }, |
1592 | }; |
1737 | "~": function(checkSet, part, isXML){ |
- | |
1738 | var doneName = done++, checkFn = dirCheck; |
- | |
1739 | 1593 | ||
1740 | if ( typeof part === "string" && !part.match(/\W/) ) { |
1594 | jQuery.dir = function( elem, dir ){ |
1741 | var nodeCheck = part = isXML ? part : part.toUpperCase(); |
1595 | var matched = [], cur = elem[dir]; |
- | 1596 | while ( cur && cur != document ) { |
|
- | 1597 | if ( cur.nodeType == 1 ) |
|
- | 1598 | matched.push( cur ); |
|
1742 | checkFn = dirNodeCheck; |
1599 | cur = cur[dir]; |
1743 | }
|
1600 | }
|
- | 1601 | return matched; |
|
- | 1602 | }; |
|
1744 | 1603 | ||
1745 | checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); |
- | |
1746 | }
|
- | |
1747 | }, |
- | |
1748 | find: { |
- | |
1749 | ID: function(match, context, isXML){ |
1604 | jQuery.nth = function(cur, result, dir, elem){ |
1750 | if ( typeof context.getElementById !== "undefined" && !isXML ) { |
- | |
1751 | var m = context.getElementById(match[1]); |
- | |
1752 | return m ? [m] : []; |
1605 | result = result || 1; |
1753 | }
|
- | |
1754 | }, |
1606 | var num = 0; |
1755 | NAME: function(match, context, isXML){ |
- | |
1756 | if ( typeof context.getElementsByName !== "undefined" ) { |
- | |
1757 | var ret = [], results = context.getElementsByName(match[1]); |
- | |
1758 | 1607 | ||
1759 | for ( var i = 0, l = results.length; i < l; i++ ) { |
1608 | for ( ; cur; cur = cur[dir] ) |
1760 | if ( results[i].getAttribute("name") === match[1] ) { |
1609 | if ( cur.nodeType == 1 && ++num == result ) |
1761 | ret.push( results[i] ); |
- | |
1762 | }
|
1610 | break; |
1763 | }
|
- | |
1764 | 1611 | ||
1765 | return ret.length === 0 ? null : ret; |
1612 | return cur; |
1766 | }
|
- | |
1767 | }, |
- | |
1768 | TAG: function(match, context){ |
- | |
1769 | return context.getElementsByTagName(match[1]); |
- | |
1770 | }
|
- | |
1771 | }, |
1613 | }; |
1772 | preFilter: { |
- | |
1773 | CLASS: function(match, curLoop, inplace, result, not, isXML){ |
- | |
1774 | match = " " + match[1].replace(/\\/g, "") + " "; |
- | |
1775 | 1614 | ||
1776 | if ( isXML ) { |
1615 | jQuery.sibling = function(n, elem){ |
1777 | return match; |
1616 | var r = []; |
1778 | }
|
- | |
1779 | 1617 | ||
1780 | for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { |
1618 | for ( ; n; n = n.nextSibling ) { |
1781 | if ( elem ) { |
- | |
1782 | if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { |
- | |
1783 | if ( !inplace ) |
1619 | if ( n.nodeType == 1 && n != elem ) |
1784 | result.push( elem ); |
1620 | r.push( n ); |
1785 | } else if ( inplace ) { |
- | |
1786 | curLoop[i] = false; |
- | |
1787 | }
|
- | |
1788 | }
|
- | |
1789 | }
|
1621 | }
|
1790 | 1622 | ||
1791 | return false; |
1623 | return r; |
1792 | }, |
- | |
1793 | ID: function(match){ |
- | |
1794 | return match[1].replace(/\\/g, ""); |
- | |
1795 | }, |
- | |
1796 | TAG: function(match, curLoop){ |
- | |
1797 | for ( var i = 0; curLoop[i] === false; i++ ){} |
- | |
1798 | return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); |
- | |
1799 | }, |
1624 | }; |
1800 | CHILD: function(match){ |
- | |
1801 | if ( match[1] == "nth" ) { |
- | |
1802 | // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
|
- | |
1803 | var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( |
- | |
1804 | match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || |
- | |
1805 | !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); |
- | |
1806 | 1625 | ||
1807 | // calculate the numbers (first)n+(last) including if they are negative
|
- | |
1808 | match[2] = (test[1] + (test[2] || 1)) - 0; |
- | |
1809 | match[3] = test[3] - 0; |
- | |
1810 | }
|
1626 | return; |
1811 | 1627 | ||
1812 | // TODO: Move to normal caching system
|
- | |
1813 | match[0] = done++; |
1628 | window.Sizzle = Sizzle; |
1814 | 1629 | ||
1815 | return match; |
- | |
1816 | }, |
1630 | })(); |
- | 1631 | jQuery.fn.extend({ |
|
1817 | ATTR: function(match, curLoop, inplace, result, not, isXML){ |
1632 | find: function( selector ) { |
1818 | var name = match[1].replace(/\\/g, ""); |
1633 | var ret = this.pushStack( "", "find", selector ), length = 0; |
1819 | 1634 | ||
1820 | if ( !isXML && Expr.attrMap[name] ) { |
1635 | for ( var i = 0, l = this.length; i < l; i++ ) { |
1821 | match[1] = Expr.attrMap[name]; |
1636 | length = ret.length; |
1822 | }
|
1637 | jQuery.find( selector, this[i], ret ); |
1823 | 1638 | ||
1824 | if ( match[2] === "~=" ) { |
1639 | if ( i > 0 ) { |
- | 1640 | // Make sure that the results are unique
|
|
- | 1641 | for ( var n = length; n < ret.length; n++ ) { |
|
1825 | match[4] = " " + match[4] + " "; |
1642 | for ( var r = 0; r < length; r++ ) { |
- | 1643 | if ( ret[r] === ret[n] ) { |
|
- | 1644 | ret.splice(n--, 1); |
|
- | 1645 | break; |
|
1826 | }
|
1646 | }
|
1827 | - | ||
1828 | return match; |
- | |
1829 | }, |
- | |
1830 | PSEUDO: function(match, curLoop, inplace, result, not){ |
- | |
1831 | if ( match[1] === "not" ) { |
- | |
1832 | // If we're dealing with a complex expression, or a simple one
|
- | |
1833 | if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) { |
- | |
1834 | match[3] = Sizzle(match[3], null, null, curLoop); |
- | |
1835 | } else { |
- | |
1836 | var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); |
- | |
1837 | if ( !inplace ) { |
- | |
1838 | result.push.apply( result, ret ); |
- | |
1839 | }
|
1647 | }
|
1840 | return false; |
- | |
1841 | }
|
1648 | }
|
1842 | } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { |
- | |
1843 | return true; |
- | |
1844 | }
|
1649 | }
|
1845 | - | ||
1846 | return match; |
- | |
1847 | }, |
- | |
1848 | POS: function(match){ |
- | |
1849 | match.unshift( true ); |
- | |
1850 | return match; |
- | |
1851 | }
|
1650 | }
|
- | 1651 | ||
- | 1652 | return ret; |
|
1852 | }, |
1653 | }, |
1853 | filters: { |
- | |
1854 | enabled: function(elem){ |
- | |
1855 | return elem.disabled === false && elem.type !== "hidden"; |
- | |
1856 | }, |
- | |
1857 | disabled: function(elem){ |
- | |
1858 | return elem.disabled === true; |
- | |
1859 | }, |
1654 | |
1860 | checked: function(elem){ |
- | |
1861 | return elem.checked === true; |
- | |
1862 | }, |
- | |
1863 | selected: function(elem){ |
1655 | filter: function( selector ) { |
1864 | // Accessing this property makes selected-by-default
|
- | |
1865 | // options in Safari work properly
|
- | |
1866 | elem.parentNode.selectedIndex; |
- | |
1867 | return elem.selected === true; |
- | |
1868 | }, |
- | |
1869 | parent: function(elem){ |
- | |
1870 | return !!elem.firstChild; |
- | |
1871 | }, |
- | |
1872 | empty: function(elem){ |
- | |
1873 | return !elem.firstChild; |
1656 | return this.pushStack( |
1874 | }, |
- | |
1875 | has: function(elem, i, match){ |
- | |
1876 | return !!Sizzle( match[3], elem ).length; |
- | |
1877 | }, |
- | |
1878 | header: function(elem){ |
1657 | jQuery.isFunction( selector ) && |
1879 | return /h\d/i.test( elem.nodeName ); |
- | |
1880 | }, |
- | |
1881 | text: function(elem){ |
1658 | jQuery.grep(this, function(elem, i){ |
1882 | return "text" === elem.type; |
1659 | return selector.call( elem, i ); |
1883 | }, |
1660 | }) || |
1884 | radio: function(elem){ |
- | |
1885 | return "radio" === elem.type; |
- | |
1886 | }, |
1661 | |
1887 | checkbox: function(elem){ |
1662 | jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ |
1888 | return "checkbox" === elem.type; |
1663 | return elem.nodeType === 1; |
1889 | }, |
- | |
1890 | file: function(elem){ |
- | |
1891 | return "file" === elem.type; |
1664 | }) ), "filter", selector ); |
1892 | }, |
- | |
1893 | password: function(elem){ |
- | |
1894 | return "password" === elem.type; |
- | |
1895 | }, |
- | |
1896 | submit: function(elem){ |
- | |
1897 | return "submit" === elem.type; |
- | |
1898 | }, |
- | |
1899 | image: function(elem){ |
- | |
1900 | return "image" === elem.type; |
- | |
1901 | }, |
- | |
1902 | reset: function(elem){ |
- | |
1903 | return "reset" === elem.type; |
- | |
1904 | }, |
- | |
1905 | button: function(elem){ |
- | |
1906 | return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; |
- | |
1907 | }, |
1665 | }, |
- | 1666 | ||
1908 | input: function(elem){ |
1667 | closest: function( selector ) { |
- | 1668 | var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, |
|
- | 1669 | closer = 0; |
|
- | 1670 | ||
- | 1671 | return this.map(function(){ |
|
- | 1672 | var cur = this; |
|
- | 1673 | while ( cur && cur.ownerDocument ) { |
|
1909 | return /input|select|textarea|button/i.test(elem.nodeName); |
1674 | if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { |
- | 1675 | jQuery.data(cur, "closest", closer); |
|
- | 1676 | return cur; |
|
1910 | }
|
1677 | }
|
- | 1678 | cur = cur.parentNode; |
|
- | 1679 | closer++;
|
|
- | 1680 | }
|
|
- | 1681 | }); |
|
1911 | }, |
1682 | }, |
- | 1683 | ||
1912 | setFilters: { |
1684 | not: function( selector ) { |
1913 | first: function(elem, i){ |
1685 | if ( typeof selector === "string" ) |
- | 1686 | // test special case where just one selector is passed in
|
|
1914 | return i === 0; |
1687 | if ( isSimple.test( selector ) ) |
- | 1688 | return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); |
|
1915 | }, |
1689 | else
|
1916 | last: function(elem, i, match, array){ |
1690 | selector = jQuery.multiFilter( selector, this ); |
- | 1691 | ||
- | 1692 | var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; |
|
1917 | return i === array.length - 1; |
1693 | return this.filter(function() { |
- | 1694 | return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; |
|
- | 1695 | }); |
|
1918 | }, |
1696 | }, |
- | 1697 | ||
1919 | even: function(elem, i){ |
1698 | add: function( selector ) { |
- | 1699 | return this.pushStack( jQuery.unique( jQuery.merge( |
|
- | 1700 | this.get(), |
|
- | 1701 | typeof selector === "string" ? |
|
1920 | return i % 2 === 0; |
1702 | jQuery( selector ) : |
- | 1703 | jQuery.makeArray( selector ) |
|
- | 1704 | ))); |
|
1921 | }, |
1705 | }, |
- | 1706 | ||
1922 | odd: function(elem, i){ |
1707 | eq: function( i ) { |
1923 | return i % 2 === 1; |
1708 | return this.slice( i, +i + 1 ); |
1924 | }, |
1709 | }, |
- | 1710 | ||
1925 | lt: function(elem, i, match){ |
1711 | slice: function() { |
1926 | return i < match[3] - 0; |
1712 | return this.pushStack( Array.prototype.slice.apply( this, arguments ), |
- | 1713 | "slice", Array.prototype.slice.call(arguments).join(",") ); |
|
1927 | }, |
1714 | }, |
- | 1715 | ||
1928 | gt: function(elem, i, match){ |
1716 | map: function( callback ) { |
- | 1717 | return this.pushStack( jQuery.map(this, function(elem, i){ |
|
1929 | return i > match[3] - 0; |
1718 | return callback.call( elem, i, elem ); |
- | 1719 | })); |
|
1930 | }, |
1720 | }, |
- | 1721 | ||
1931 | nth: function(elem, i, match){ |
1722 | andSelf: function() { |
1932 | return match[3] - 0 == i; |
1723 | return this.add( this.prevObject ); |
1933 | }, |
1724 | }, |
- | 1725 | ||
1934 | eq: function(elem, i, match){ |
1726 | end: function() { |
1935 | return match[3] - 0 == i; |
1727 | return this.prevObject || jQuery(null); |
1936 | }
|
1728 | }
|
1937 | }, |
1729 | }); |
1938 | filter: { |
- | |
1939 | PSEUDO: function(elem, match, i, array){ |
- | |
1940 | var name = match[1], filter = Expr.filters[ name ]; |
- | |
1941 | 1730 | ||
1942 | if ( filter ) { |
1731 | jQuery.each({ |
1943 | return filter( elem, i, match, array ); |
1732 | parent: function(elem){return elem.parentNode;}, |
- | 1733 | parents: function(elem){return jQuery.dir(elem,"parentNode");}, |
|
1944 | } else if ( name === "contains" ) { |
1734 | next: function(elem){return jQuery.nth(elem,2,"nextSibling");}, |
- | 1735 | prev: function(elem){return jQuery.nth(elem,2,"previousSibling");}, |
|
- | 1736 | nextAll: function(elem){return jQuery.dir(elem,"nextSibling");}, |
|
- | 1737 | prevAll: function(elem){return jQuery.dir(elem,"previousSibling");}, |
|
- | 1738 | siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);}, |
|
1945 | return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; |
1739 | children: function(elem){return jQuery.sibling(elem.firstChild);}, |
- | 1740 | contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);} |
|
- | 1741 | }, function(name, fn){ |
|
1946 | } else if ( name === "not" ) { |
1742 | jQuery.fn[ name ] = function( selector ) { |
1947 | var not = match[3]; |
1743 | var ret = jQuery.map( this, fn ); |
1948 | 1744 | ||
1949 | for ( var i = 0, l = not.length; i < l; i++ ) { |
1745 | if ( selector && typeof selector == "string" ) |
- | 1746 | ret = jQuery.multiFilter( selector, ret ); |
|
- | 1747 | ||
- | 1748 | return this.pushStack( jQuery.unique( ret ), name, selector ); |
|
- | 1749 | }; |
|
- | 1750 | });jQuery.fn.extend({ |
|
- | 1751 | attr: function( name, value ) { |
|
- | 1752 | var options = name, isFunction = jQuery.isFunction( value ); |
|
- | 1753 | ||
- | 1754 | if ( typeof name === "string" ) { |
|
- | 1755 | // Are we setting the attribute?
|
|
1950 | if ( not[i] === elem ) { |
1756 | if ( value === undefined ) { |
1951 | return false; |
1757 | return this.length ? |
- | 1758 | jQuery.attr( this[0], name ) : |
|
- | 1759 | null; |
|
- | 1760 | ||
- | 1761 | // Convert name, value params to options hash format
|
|
- | 1762 | } else { |
|
- | 1763 | options = {}; |
|
- | 1764 | options[ name ] = value; |
|
1952 | }
|
1765 | }
|
1953 | }
|
1766 | }
|
1954 | 1767 | ||
- | 1768 | // For each element...
|
|
- | 1769 | for ( var i = 0, l = this.length; i < l; i++ ) { |
|
1955 | return true; |
1770 | var elem = this[i]; |
- | 1771 | ||
- | 1772 | // Set all the attributes
|
|
- | 1773 | for ( var prop in options ) { |
|
- | 1774 | value = options[prop]; |
|
- | 1775 | ||
- | 1776 | if ( isFunction ) { |
|
- | 1777 | value = value.call( elem, i ); |
|
1956 | }
|
1778 | }
|
1957 | }, |
1779 | |
1958 | CHILD: function(elem, match){ |
1780 | jQuery.attr( elem, prop, value ); |
1959 | var type = match[1], node = elem; |
- | |
1960 | switch (type) { |
- | |
1961 | case 'only': |
- | |
1962 | case 'first': |
- | |
1963 | while (node = node.previousSibling) { |
- | |
1964 | if ( node.nodeType === 1 ) return false; |
- | |
1965 | }
|
1781 | }
|
1966 | if ( type == 'first') return true; |
- | |
1967 | node = elem; |
- | |
1968 | case 'last': |
- | |
1969 | while (node = node.nextSibling) { |
- | |
1970 | if ( node.nodeType === 1 ) return false; |
- | |
1971 | }
|
1782 | }
|
1972 | return true; |
- | |
1973 | case 'nth': |
- | |
1974 | var first = match[2], last = match[3]; |
- | |
1975 | 1783 | ||
1976 | if ( first == 1 && last == 0 ) { |
- | |
1977 | return true; |
1784 | return this; |
1978 | }
|
1785 | }, |
1979 | 1786 | ||
1980 | var doneName = match[0], |
1787 | hasClass: function( selector ) { |
1981 | parent = elem.parentNode; |
1788 | return !!selector && this.is( "." + selector ); |
- | 1789 | }, |
|
1982 | 1790 | ||
- | 1791 | val: function( value ) { |
|
- | 1792 | if ( value === undefined ) { |
|
- | 1793 | var elem = this[0]; |
|
- | 1794 | ||
- | 1795 | if ( elem ) { |
|
- | 1796 | if( jQuery.nodeName( elem, 'option' ) ) |
|
- | 1797 | return (elem.attributes.value || {}).specified ? elem.value : elem.text; |
|
- | 1798 | ||
- | 1799 | // We need to handle select boxes special
|
|
1983 | if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { |
1800 | if ( jQuery.nodeName( elem, "select" ) ) { |
- | 1801 | var index = elem.selectedIndex, |
|
1984 | var count = 0; |
1802 | values = [], |
- | 1803 | options = elem.options, |
|
- | 1804 | one = elem.type == "select-one"; |
|
- | 1805 | ||
- | 1806 | // Nothing was selected
|
|
- | 1807 | if ( index < 0 ) |
|
- | 1808 | return null; |
|
- | 1809 | ||
- | 1810 | // Loop through all the selected options
|
|
1985 | for ( node = parent.firstChild; node; node = node.nextSibling ) { |
1811 | for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { |
- | 1812 | var option = options[ i ]; |
|
- | 1813 | ||
1986 | if ( node.nodeType === 1 ) { |
1814 | if ( option.selected ) { |
- | 1815 | // Get the specifc value for the option
|
|
- | 1816 | value = jQuery(option).val(); |
|
- | 1817 | ||
- | 1818 | // We don't need an array for one selects
|
|
- | 1819 | if ( one ) |
|
1987 | node.nodeIndex = ++count; |
1820 | return value; |
- | 1821 | ||
- | 1822 | // Multi-Selects return an array
|
|
- | 1823 | values.push( value ); |
|
1988 | }
|
1824 | }
|
1989 | }
|
1825 | }
|
- | 1826 | ||
1990 | parent.sizcache = doneName; |
1827 | return values; |
1991 | }
|
1828 | }
|
1992 | 1829 | ||
1993 | var diff = elem.nodeIndex - last; |
1830 | // Everything else, we just grab the value
|
1994 | if ( first == 0 ) { |
- | |
1995 | return diff == 0; |
1831 | return (elem.value || "").replace(/\r/g, ""); |
- | 1832 | ||
1996 | } else { |
1833 | }
|
- | 1834 | ||
1997 | return ( diff % first == 0 && diff / first >= 0 ); |
1835 | return undefined; |
1998 | }
|
1836 | }
|
- | 1837 | ||
- | 1838 | if ( typeof value === "number" ) |
|
- | 1839 | value += ''; |
|
- | 1840 | ||
- | 1841 | return this.each(function(){ |
|
- | 1842 | if ( this.nodeType != 1 ) |
|
- | 1843 | return; |
|
- | 1844 | ||
- | 1845 | if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) |
|
- | 1846 | this.checked = (jQuery.inArray(this.value, value) >= 0 || |
|
- | 1847 | jQuery.inArray(this.name, value) >= 0); |
|
- | 1848 | ||
- | 1849 | else if ( jQuery.nodeName( this, "select" ) ) { |
|
- | 1850 | var values = jQuery.makeArray(value); |
|
- | 1851 | ||
- | 1852 | jQuery( "option", this ).each(function(){ |
|
- | 1853 | this.selected = (jQuery.inArray( this.value, values ) >= 0 || |
|
- | 1854 | jQuery.inArray( this.text, values ) >= 0); |
|
- | 1855 | }); |
|
- | 1856 | ||
- | 1857 | if ( !values.length ) |
|
- | 1858 | this.selectedIndex = -1; |
|
- | 1859 | ||
- | 1860 | } else |
|
- | 1861 | this.value = value; |
|
- | 1862 | }); |
|
1999 | }
|
1863 | }
|
- | 1864 | }); |
|
- | 1865 | ||
- | 1866 | jQuery.each({ |
|
- | 1867 | removeAttr: function( name ) { |
|
- | 1868 | jQuery.attr( this, name, "" ); |
|
- | 1869 | if (this.nodeType == 1) |
|
- | 1870 | this.removeAttribute( name ); |
|
2000 | }, |
1871 | }, |
- | 1872 | ||
2001 | ID: function(elem, match){ |
1873 | addClass: function( classNames ) { |
2002 | return elem.nodeType === 1 && elem.getAttribute("id") === match; |
1874 | jQuery.className.add( this, classNames ); |
2003 | }, |
1875 | }, |
- | 1876 | ||
2004 | TAG: function(elem, match){ |
1877 | removeClass: function( classNames ) { |
2005 | return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; |
1878 | jQuery.className.remove( this, classNames ); |
2006 | }, |
1879 | }, |
- | 1880 | ||
2007 | CLASS: function(elem, match){ |
1881 | toggleClass: function( classNames, state ) { |
- | 1882 | if( typeof state !== "boolean" ) |
|
2008 | return (" " + (elem.className || elem.getAttribute("class")) + " ") |
1883 | state = !jQuery.className.has( this, classNames ); |
- | 1884 | jQuery.className[ state ? "add" : "remove" ]( this, classNames ); |
|
- | 1885 | }
|
|
- | 1886 | }, function(name, fn){ |
|
- | 1887 | jQuery.fn[ name ] = function(){ |
|
2009 | .indexOf( match ) > -1; |
1888 | return this.each( fn, arguments ); |
- | 1889 | }; |
|
- | 1890 | }); |
|
- | 1891 | ||
- | 1892 | jQuery.extend({ |
|
- | 1893 | className: { |
|
- | 1894 | // internal only, use addClass("class")
|
|
- | 1895 | add: function( elem, classNames ) { |
|
- | 1896 | jQuery.each((classNames || "").split(/\s+/), function(i, className){ |
|
- | 1897 | if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) |
|
- | 1898 | elem.className += (elem.className ? " " : "") + className; |
|
- | 1899 | }); |
|
2010 | }, |
1900 | }, |
2011 | ATTR: function(elem, match){ |
- | |
2012 | var name = match[1], |
- | |
2013 | result = Expr.attrHandle[ name ] ? |
- | |
2014 | Expr.attrHandle[ name ]( elem ) : |
- | |
2015 | elem[ name ] != null ? |
- | |
2016 | elem[ name ] : |
- | |
2017 | elem.getAttribute( name ), |
- | |
2018 | value = result + "", |
- | |
2019 | type = match[2], |
- | |
2020 | check = match[4]; |
- | |
2021 | 1901 | ||
2022 | return result == null ? |
1902 | // internal only, use removeClass("class")
|
2023 | type === "!=" : |
- | |
2024 | type === "=" ? |
- | |
2025 | value === check : |
- | |
2026 | type === "*=" ? |
- | |
2027 | value.indexOf(check) >= 0 : |
1903 | remove: function( elem, classNames ) { |
2028 | type === "~=" ? |
1904 | if (elem.nodeType == 1) |
2029 | (" " + value + " ").indexOf(check) >= 0 : |
1905 | elem.className = classNames !== undefined ? |
2030 | !check ? |
- | |
2031 | value && result !== false : |
1906 | jQuery.grep(elem.className.split(/\s+/), function(className){ |
2032 | type === "!=" ? |
- | |
2033 | value != check : |
- | |
2034 | type === "^=" ? |
- | |
2035 | value.indexOf(check) === 0 : |
- | |
2036 | type === "$=" ? |
- | |
2037 | value.substr(value.length - check.length) === check : |
1907 | return !jQuery.className.has( classNames, className ); |
2038 | type === "|=" ? |
1908 | }).join(" ") : |
2039 | value === check || value.substr(0, check.length + 1) === check + "-" : |
- | |
2040 | false; |
1909 | ""; |
2041 | }, |
1910 | }, |
2042 | POS: function(elem, match, i, array){ |
- | |
2043 | var name = match[2], filter = Expr.setFilters[ name ]; |
- | |
2044 | 1911 | ||
2045 | if ( filter ) { |
1912 | // internal only, use hasClass("class")
|
2046 | return filter( elem, i, match, array ); |
1913 | has: function( elem, className ) { |
2047 | }
|
- | |
2048 | }
|
- | |
- | 1914 | return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; |
|
2049 | }
|
1915 | }
|
2050 | }; |
1916 | }, |
2051 | 1917 | ||
2052 | var origPOS = Expr.match.POS; |
1918 | attr: function( elem, name, value ) { |
- | 1919 | // don't set attributes on text and comment nodes
|
|
- | 1920 | if (!elem || elem.nodeType == 3 || elem.nodeType == 8) |
|
- | 1921 | return undefined; |
|
2053 | 1922 | ||
2054 | for ( var type in Expr.match ) { |
1923 | var notxml = !elem.tagName || !jQuery.isXMLDoc( elem ), |
2055 | Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); |
1924 | // Whether we are setting (or getting)
|
2056 | }
|
- | |
- | 1925 | set = value !== undefined; |
|
2057 | 1926 | ||
2058 | var makeArray = function(array, results) { |
1927 | // Try to normalize/fix the name
|
2059 | array = Array.prototype.slice.call( array ); |
1928 | name = notxml && jQuery.props[ name ] || name; |
2060 | 1929 | ||
2061 | if ( results ) { |
- | |
2062 | results.push.apply( results, array ); |
1930 | // Only do all the following if this is a node (faster for style)
|
2063 | return results; |
1931 | if ( elem.tagName ) { |
2064 | }
|
- | |
2065 | 1932 | ||
2066 | return array; |
1933 | // These attributes require special treatment
|
2067 | }; |
- | |
- | 1934 | var special = /href|src|style/.test( name ); |
|
2068 | 1935 | ||
2069 | // Perform a simple check to determine if the browser is capable of
|
1936 | // Safari mis-reports the default selected property of a hidden option
|
2070 | // converting a NodeList to an array using builtin methods.
|
1937 | // Accessing the parent's selectedIndex property fixes it
|
2071 | try { |
- | |
2072 | Array.prototype.slice.call( document.documentElement.childNodes ); |
1938 | if ( name == "selected" && elem.parentNode ) |
- | 1939 | elem.parentNode.selectedIndex; |
|
2073 | 1940 | ||
2074 | // Provide a fallback method if it does not work
|
1941 | // If applicable, access the attribute via the DOM 0 way
|
- | 1942 | if ( name in elem && notxml && !special ) { |
|
2075 | } catch(e){ |
1943 | if ( set ){ |
2076 | makeArray = function(array, results) { |
1944 | // We can't allow the type property to be changed (since it causes problems in IE)
|
- | 1945 | if ( name == "type" && elem.nodeName.match(/(button|input)/i) && elem.parentNode ) |
|
2077 | var ret = results || []; |
1946 | throw "type property can't be changed"; |
2078 | 1947 | ||
2079 | if ( toString.call(array) === "[object Array]" ) { |
- | |
2080 | Array.prototype.push.apply( ret, array ); |
- | |
2081 | } else { |
- | |
2082 | if ( typeof array.length === "number" ) { |
- | |
2083 | for ( var i = 0, l = array.length; i < l; i++ ) { |
- | |
2084 | ret.push( array[i] ); |
1948 | elem[ name ] = value; |
2085 | }
|
- | |
2086 | } else { |
- | |
2087 | for ( var i = 0; array[i]; i++ ) { |
- | |
2088 | ret.push( array[i] ); |
- | |
2089 | }
|
- | |
2090 | }
|
1949 | }
|
- | 1950 | ||
- | 1951 | // browsers index elements by id/name on forms, give priority to attributes.
|
|
- | 1952 | if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) |
|
- | 1953 | return elem.getAttributeNode( name ).nodeValue; |
|
- | 1954 | ||
- | 1955 | // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
|
|
- | 1956 | // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
|
- | 1957 | if ( name == "tabIndex" ) { |
|
- | 1958 | var attributeNode = elem.getAttributeNode( "tabIndex" ); |
|
- | 1959 | return attributeNode && attributeNode.specified |
|
- | 1960 | ? attributeNode.value |
|
- | 1961 | : elem.nodeName.match(/(button|input|object|select|textarea)/i) |
|
- | 1962 | ? 0 |
|
- | 1963 | : elem.nodeName.match(/^(a|area)$/i) && elem.href |
|
- | 1964 | ? 0 |
|
- | 1965 | : undefined; |
|
2091 | }
|
1966 | }
|
2092 | 1967 | ||
2093 | return ret; |
1968 | return elem[ name ]; |
2094 | }; |
- | |
2095 | }
|
1969 | }
|
2096 | 1970 | ||
- | 1971 | if ( !jQuery.support.style && notxml && name == "style" ) { |
|
2097 | var sortOrder; |
1972 | if ( set ) |
- | 1973 | elem.style.cssText = "" + value; |
|
2098 | 1974 | ||
2099 | if ( document.documentElement.compareDocumentPosition ) { |
- | |
2100 | sortOrder = function( a, b ) { |
- | |
2101 | var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; |
- | |
2102 | if ( ret === 0 ) { |
- | |
2103 | hasDuplicate = true; |
- | |
2104 | }
|
- | |
2105 | return ret; |
- | |
2106 | }; |
- | |
2107 | } else if ( "sourceIndex" in document.documentElement ) { |
- | |
2108 | sortOrder = function( a, b ) { |
- | |
2109 | var ret = a.sourceIndex - b.sourceIndex; |
- | |
2110 | if ( ret === 0 ) { |
- | |
2111 | hasDuplicate = true; |
- | |
2112 | }
|
- | |
2113 | return ret; |
- | |
2114 | }; |
- | |
2115 | } else if ( document.createRange ) { |
- | |
2116 | sortOrder = function( a, b ) { |
- | |
2117 | var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); |
- | |
2118 | aRange.selectNode(a); |
1975 | return elem.style.cssText; |
2119 | aRange.collapse(true); |
- | |
2120 | bRange.selectNode(b); |
- | |
2121 | bRange.collapse(true); |
- | |
2122 | var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); |
- | |
2123 | if ( ret === 0 ) { |
- | |
2124 | hasDuplicate = true; |
- | |
2125 | }
|
- | |
2126 | return ret; |
- | |
2127 | }; |
- | |
2128 | }
|
1976 | }
|
2129 | 1977 | ||
2130 | // Check to see if the browser returns elements by name when
|
- | |
2131 | // querying by getElementById (and provide a workaround)
|
- | |
2132 | (function(){ |
1978 | if ( set ) |
2133 | // We're going to inject a fake input element with a specified name
|
1979 | // convert the value to a string (all browsers do this but IE) see #1070
|
2134 | var form = document.createElement("form"), |
- | |
2135 | id = "script" + (new Date).getTime(); |
- | |
2136 | form.innerHTML = "<input name='" + id + "'/>"; |
1980 | elem.setAttribute( name, "" + value ); |
2137 | 1981 | ||
2138 | // Inject it into the root element, check its status, and remove it quickly
|
1982 | var attr = !jQuery.support.hrefNormalized && notxml && special |
- | 1983 | // Some attributes require a special call on IE
|
|
2139 | var root = document.documentElement; |
1984 | ? elem.getAttribute( name, 2 ) |
2140 | root.insertBefore( form, root.firstChild ); |
1985 | : elem.getAttribute( name ); |
2141 | 1986 | ||
2142 | // The workaround has to do additional checks after a getElementById
|
- | |
2143 | // Which slows things down for other browsers (hence the branching)
|
1987 | // Non-existent attributes return null, we normalize to undefined
|
2144 | if ( !!document.getElementById( id ) ) { |
- | |
2145 | Expr.find.ID = function(match, context, isXML){ |
- | |
2146 | if ( typeof context.getElementById !== "undefined" && !isXML ) { |
- | |
2147 | var m = context.getElementById(match[1]); |
1988 | return attr === null ? undefined : attr; |
2148 | return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; |
- | |
2149 | }
|
1989 | }
|
2150 | }; |
- | |
2151 | 1990 | ||
2152 | Expr.filter.ID = function(elem, match){ |
1991 | // elem is actually elem.style ... set the style
|
2153 | var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); |
1992 | // Using attr for specific style information is now deprecated. Use style insead.
|
2154 | return elem.nodeType === 1 && node && node.nodeValue === match; |
1993 | return jQuery.style(elem, name, value); |
2155 | }; |
- | |
2156 | }
|
1994 | }
|
- | 1995 | });jQuery.fn.extend({ |
|
- | 1996 | text: function( text ) { |
|
- | 1997 | if ( typeof text !== "object" && text != null ) |
|
- | 1998 | return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); |
|
2157 | 1999 | ||
2158 | root.removeChild( form ); |
2000 | var ret = ""; |
2159 | })(); |
- | |
2160 | 2001 | ||
2161 | (function(){ |
2002 | jQuery.each( text || this, function(){ |
2162 | // Check to see if the browser returns only elements
|
2003 | jQuery.each( this.childNodes, function(){ |
- | 2004 | if ( this.nodeType != 8 ) |
|
2163 | // when doing getElementsByTagName("*")
|
2005 | ret += this.nodeType != 1 ? |
- | 2006 | this.nodeValue : |
|
- | 2007 | jQuery.fn.text( [ this ] ); |
|
- | 2008 | }); |
|
- | 2009 | }); |
|
2164 | 2010 | ||
2165 | // Create a fake element
|
2011 | return ret; |
2166 | var div = document.createElement("div"); |
- | |
2167 | div.appendChild( document.createComment("") ); |
- | |
- | 2012 | }, |
|
2168 | 2013 | ||
2169 | // Make sure no comments are found
|
2014 | wrapAll: function( html ) { |
2170 | if ( div.getElementsByTagName("*").length > 0 ) { |
2015 | if ( this[0] ) { |
2171 | Expr.find.TAG = function(match, context){ |
2016 | // The elements to wrap the target around
|
2172 | var results = context.getElementsByTagName(match[1]); |
2017 | var wrap = jQuery( html, this[0].ownerDocument ).clone(); |
2173 | 2018 | ||
2174 | // Filter out possible comments
|
- | |
2175 | if ( match[1] === "*" ) { |
2019 | if ( this[0].parentNode ) |
2176 | var tmp = []; |
2020 | wrap.insertBefore( this[0] ); |
2177 | 2021 | ||
2178 | for ( var i = 0; results[i]; i++ ) { |
2022 | wrap.map(function(){ |
2179 | if ( results[i].nodeType === 1 ) { |
- | |
2180 | tmp.push( results[i] ); |
2023 | var elem = this; |
2181 | }
|
- | |
2182 | }
|
- | |
2183 | 2024 | ||
2184 | results = tmp; |
2025 | while ( elem.firstChild ) |
2185 | }
|
2026 | elem = elem.firstChild; |
2186 | 2027 | ||
2187 | return results; |
2028 | return elem; |
2188 | }; |
2029 | }).append(this); |
2189 | }
|
2030 | }
|
2190 | 2031 | ||
2191 | // Check to see if an attribute returns normalized href attributes
|
- | |
2192 | div.innerHTML = "<a href='#'></a>"; |
- | |
2193 | if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && |
- | |
2194 | div.firstChild.getAttribute("href") !== "#" ) { |
- | |
2195 | Expr.attrHandle.href = function(elem){ |
- | |
2196 | return elem.getAttribute("href", 2); |
2032 | return this; |
2197 | }; |
- | |
2198 | }
|
2033 | }, |
2199 | })(); |
- | |
2200 | 2034 | ||
2201 | if ( document.querySelectorAll ) (function(){ |
2035 | wrapInner: function( html ) { |
2202 | var oldSizzle = Sizzle, div = document.createElement("div"); |
2036 | return this.each(function(){ |
2203 | div.innerHTML = "<p class='TEST'></p>"; |
2037 | jQuery( this ).contents().wrapAll( html ); |
- | 2038 | }); |
|
- | 2039 | }, |
|
2204 | 2040 | ||
2205 | // Safari can't handle uppercase or unicode characters when
|
2041 | wrap: function( html ) { |
2206 | // in quirks mode.
|
2042 | return this.each(function(){ |
2207 | if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { |
2043 | jQuery( this ).wrapAll( html ); |
2208 | return; |
2044 | }); |
2209 | }
|
2045 | }, |
2210 | 2046 | ||
- | 2047 | append: function() { |
|
2211 | Sizzle = function(query, context, extra, seed){ |
2048 | return this.domManip(arguments, true, function(elem){ |
- | 2049 | if (this.nodeType == 1) |
|
2212 | context = context || document; |
2050 | this.appendChild( elem ); |
- | 2051 | }); |
|
- | 2052 | }, |
|
2213 | 2053 | ||
- | 2054 | prepend: function() { |
|
- | 2055 | return this.domManip(arguments, true, function(elem){ |
|
- | 2056 | if (this.nodeType == 1) |
|
2214 | // Only use querySelectorAll on non-XML documents
|
2057 | this.insertBefore( elem, this.firstChild ); |
- | 2058 | }); |
|
- | 2059 | }, |
|
- | 2060 | ||
- | 2061 | before: function() { |
|
- | 2062 | return this.domManip(arguments, false, function(elem){ |
|
- | 2063 | this.parentNode.insertBefore( elem, this ); |
|
- | 2064 | }); |
|
- | 2065 | }, |
|
- | 2066 | ||
- | 2067 | after: function() { |
|
2215 | // (ID selectors don't work in non-HTML documents)
|
2068 | return this.domManip(arguments, false, function(elem){ |
2216 | if ( !seed && context.nodeType === 9 && !isXML(context) ) { |
2069 | this.parentNode.insertBefore( elem, this.nextSibling ); |
2217 | try { |
2070 | }); |
- | 2071 | }, |
|
- | 2072 | ||
- | 2073 | clone: function( events ) { |
|
- | 2074 | // Do the clone
|
|
- | 2075 | var ret = this.map(function(){ |
|
- | 2076 | if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { |
|
- | 2077 | // IE copies events bound via attachEvent when
|
|
- | 2078 | // using cloneNode. Calling detachEvent on the
|
|
- | 2079 | // clone will also remove the events from the orignal
|
|
- | 2080 | // In order to get around this, we use innerHTML.
|
|
- | 2081 | // Unfortunately, this means some modifications to
|
|
2218 | return makeArray( context.querySelectorAll(query), extra ); |
2082 | // attributes in IE that are actually only stored
|
- | 2083 | // as properties will not be copied (such as the
|
|
- | 2084 | // the name attribute on an input).
|
|
- | 2085 | var html = this.outerHTML, ownerDocument = this.ownerDocument; |
|
2219 | } catch(e){} |
2086 | if ( !html ) { |
- | 2087 | var div = ownerDocument.createElement("div"); |
|
- | 2088 | div.appendChild( this.cloneNode(true) ); |
|
- | 2089 | html = div.innerHTML; |
|
2220 | }
|
2090 | }
|
2221 | 2091 | ||
2222 | return oldSizzle(query, context, extra, seed); |
2092 | return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")], ownerDocument)[0]; |
2223 | }; |
2093 | } else |
2224 | - | ||
2225 | Sizzle.find = oldSizzle.find; |
- | |
2226 | Sizzle.filter = oldSizzle.filter; |
- | |
2227 | Sizzle.selectors = oldSizzle.selectors; |
- | |
2228 | Sizzle.matches = oldSizzle.matches; |
2094 | return this.cloneNode(true); |
2229 | })(); |
2095 | }); |
2230 | 2096 | ||
2231 | if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ |
2097 | // Copy the events from the original to the clone
|
2232 | var div = document.createElement("div"); |
2098 | if ( events === true ) { |
2233 | div.innerHTML = "<div class='test e'></div><div class='test'></div>"; |
2099 | var orig = this.find("*").andSelf(), i = 0; |
2234 | 2100 | ||
2235 | // Opera can't find a second classname (in 9.6)
|
2101 | ret.find("*").andSelf().each(function(){ |
2236 | if ( div.getElementsByClassName("e").length === 0 ) |
2102 | if ( this.nodeName !== orig[i].nodeName ) |
2237 | return; |
2103 | return; |
2238 | 2104 | ||
2239 | // Safari caches class attributes, doesn't catch changes (in 3.2)
|
- | |
2240 | div.lastChild.className = "e"; |
- | |
2241 | - | ||
2242 | if ( div.getElementsByClassName("e").length === 1 ) |
2105 | var events = jQuery.data( orig[i], "events" ); |
2243 | return; |
- | |
2244 | 2106 | ||
2245 | Expr.order.splice(1, 0, "CLASS"); |
2107 | for ( var type in events ) { |
2246 | Expr.find.CLASS = function(match, context, isXML) { |
2108 | for ( var handler in events[ type ] ) { |
2247 | if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { |
2109 | jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); |
2248 | return context.getElementsByClassName(match[1]); |
- | |
2249 | }
|
2110 | }
|
2250 | }; |
- | |
2251 | })(); |
- | |
2252 | - | ||
2253 | function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { |
- | |
2254 | var sibDir = dir == "previousSibling" && !isXML; |
- | |
2255 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
- | |
2256 | var elem = checkSet[i]; |
- | |
2257 | if ( elem ) { |
- | |
2258 | if ( sibDir && elem.nodeType === 1 ){ |
- | |
2259 | elem.sizcache = doneName; |
- | |
2260 | elem.sizset = i; |
- | |
2261 | }
|
2111 | }
|
2262 | elem = elem[dir]; |
- | |
2263 | var match = false; |
- | |
2264 | 2112 | ||
2265 | while ( elem ) { |
2113 | i++;
|
2266 | if ( elem.sizcache === doneName ) { |
- | |
2267 | match = checkSet[elem.sizset]; |
- | |
2268 | break; |
2114 | }); |
2269 | }
|
2115 | }
|
2270 | 2116 | ||
2271 | if ( elem.nodeType === 1 && !isXML ){ |
- | |
2272 | elem.sizcache = doneName; |
2117 | // Return the cloned set
|
2273 | elem.sizset = i; |
2118 | return ret; |
2274 | }
|
2119 | }, |
2275 | 2120 | ||
2276 | if ( elem.nodeName === cur ) { |
2121 | html: function( value ) { |
- | 2122 | return value === undefined ? |
|
2277 | match = elem; |
2123 | (this[0] ? |
- | 2124 | this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : |
|
2278 | break; |
2125 | null) : |
- | 2126 | this.empty().append( value ); |
|
2279 | }
|
2127 | }, |
2280 | 2128 | ||
- | 2129 | replaceWith: function( value ) { |
|
2281 | elem = elem[dir]; |
2130 | return this.after( value ).remove(); |
2282 | }
|
2131 | }, |
2283 | 2132 | ||
- | 2133 | domManip: function( args, table, callback ) { |
|
2284 | checkSet[i] = match; |
2134 | if ( this[0] ) { |
- | 2135 | var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), |
|
- | 2136 | scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), |
|
- | 2137 | first = fragment.firstChild; |
|
- | 2138 | ||
- | 2139 | if ( first ) |
|
- | 2140 | for ( var i = 0, l = this.length; i < l; i++ ) |
|
- | 2141 | callback.call( root(this[i], first), this.length > 1 || i > 0 ? |
|
- | 2142 | fragment.cloneNode(true) : fragment ); |
|
- | 2143 | ||
- | 2144 | if ( scripts ) |
|
- | 2145 | jQuery.each( scripts, evalScript ); |
|
2285 | }
|
2146 | }
|
- | 2147 | ||
- | 2148 | return this; |
|
- | 2149 | ||
- | 2150 | function root( elem, cur ) { |
|
- | 2151 | return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? |
|
- | 2152 | (elem.getElementsByTagName("tbody")[0] || |
|
- | 2153 | elem.appendChild(elem.ownerDocument.createElement("tbody"))) : |
|
- | 2154 | elem;
|
|
2286 | }
|
2155 | }
|
2287 | }
|
2156 | }
|
- | 2157 | }); |
|
2288 | 2158 | ||
2289 | function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { |
2159 | jQuery.each({ |
2290 | var sibDir = dir == "previousSibling" && !isXML; |
2160 | appendTo: "append", |
2291 | for ( var i = 0, l = checkSet.length; i < l; i++ ) { |
- | |
2292 | var elem = checkSet[i]; |
2161 | prependTo: "prepend", |
2293 | if ( elem ) { |
2162 | insertBefore: "before", |
2294 | if ( sibDir && elem.nodeType === 1 ) { |
2163 | insertAfter: "after", |
2295 | elem.sizcache = doneName; |
2164 | replaceAll: "replaceWith" |
2296 | elem.sizset = i; |
2165 | }, function(name, original){ |
2297 | }
|
- | |
2298 | elem = elem[dir]; |
2166 | jQuery.fn[ name ] = function( selector ) { |
2299 | var match = false; |
2167 | var ret = [], insert = jQuery( selector ); |
2300 | 2168 | ||
2301 | while ( elem ) { |
2169 | for ( var i = 0, l = insert.length; i < l; i++ ) { |
2302 | if ( elem.sizcache === doneName ) { |
2170 | var elems = (i > 0 ? this.clone(true) : this).get(); |
2303 | match = checkSet[elem.sizset]; |
2171 | jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); |
2304 | break; |
2172 | ret = ret.concat( elems ); |
2305 | }
|
2173 | }
|
2306 | 2174 | ||
2307 | if ( elem.nodeType === 1 ) { |
2175 | return this.pushStack( ret, name, selector ); |
- | 2176 | }; |
|
2308 | if ( !isXML ) { |
2177 | }); |
- | 2178 | ||
2309 | elem.sizcache = doneName; |
2179 | jQuery.each({ |
2310 | elem.sizset = i; |
2180 | remove: function( selector ) { |
2311 | }
|
- | |
2312 | if ( typeof cur !== "string" ) { |
2181 | if ( !selector || jQuery.multiFilter( selector, [ this ] ).length ) { |
2313 | if ( elem === cur ) { |
2182 | if ( this.nodeType === 1 ) { |
2314 | match = true; |
2183 | cleanData( this.getElementsByTagName("*") ); |
2315 | break; |
2184 | cleanData( [this] ); |
2316 | }
|
2185 | }
|
2317 | 2186 | ||
2318 | } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { |
2187 | if ( this.parentNode ) { |
2319 | match = elem; |
2188 | this.parentNode.removeChild( this ); |
2320 | break; |
- | |
2321 | }
|
2189 | }
|
2322 | }
|
2190 | }
|
- | 2191 | }, |
|
2323 | 2192 | ||
2324 | elem = elem[dir]; |
2193 | empty: function() { |
- | 2194 | // Remove element nodes and prevent memory leaks
|
|
- | 2195 | if ( this.nodeType === 1 ) { |
|
- | 2196 | cleanData( this.getElementsByTagName("*") ); |
|
2325 | }
|
2197 | }
|
2326 | 2198 | ||
2327 | checkSet[i] = match; |
2199 | // Remove any remaining nodes
|
2328 | }
|
2200 | while ( this.firstChild ) { |
- | 2201 | this.removeChild( this.firstChild ); |
|
2329 | }
|
2202 | }
|
2330 | }
|
2203 | }
|
2331 | - | ||
2332 | var contains = document.compareDocumentPosition ? function(a, b){ |
- | |
2333 | return a.compareDocumentPosition(b) & 16; |
2204 | }, function(name, fn){ |
2334 | } : function(a, b){ |
2205 | jQuery.fn[ name ] = function(){ |
2335 | return a !== b && (a.contains ? a.contains(b) : true); |
2206 | return this.each( fn, arguments ); |
2336 | }; |
2207 | }; |
- | 2208 | }); |
|
2337 | 2209 | ||
2338 | var isXML = function(elem){ |
2210 | jQuery.extend({ |
2339 | return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || |
2211 | clean: function( elems, context, fragment ) { |
2340 | !!elem.ownerDocument && isXML( elem.ownerDocument ); |
2212 | context = context || document; |
2341 | }; |
- | |
2342 | 2213 | ||
2343 | var posProcess = function(selector, context){ |
2214 | // !context.createElement fails in IE with an error but returns typeof 'object'
|
2344 | var tmpSet = [], later = "", match, |
2215 | if ( typeof context.createElement === "undefined" ) |
2345 | root = context.nodeType ? [context] : context; |
2216 | context = context.ownerDocument || context[0] && context[0].ownerDocument || document; |
2346 | 2217 | ||
- | 2218 | // If a single string is passed in and it's a single tag
|
|
2347 | // Position selectors must be done after the filter
|
2219 | // just do a createElement and skip the rest
|
2348 | // And so must :not(positional) so we move all PSEUDOs to the end
|
2220 | if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { |
2349 | while ( (match = Expr.match.PSEUDO.exec( selector )) ) { |
2221 | var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); |
2350 | later += match[0]; |
2222 | if ( match ) |
2351 | selector = selector.replace( Expr.match.PSEUDO, "" ); |
2223 | return [ context.createElement( match[1] ) ]; |
2352 | }
|
2224 | }
|
2353 | 2225 | ||
2354 | selector = Expr.relative[selector] ? selector + "*" : selector; |
2226 | var ret = [], scripts = [], div = context.createElement("div"); |
2355 | 2227 | ||
2356 | for ( var i = 0, l = root.length; i < l; i++ ) { |
2228 | jQuery.each(elems, function(i, elem){ |
2357 | Sizzle( selector, root[i], tmpSet ); |
2229 | if ( typeof elem === "number" ) |
2358 | }
|
2230 | elem += ''; |
2359 | 2231 | ||
2360 | return Sizzle.filter( later, tmpSet ); |
2232 | if ( !elem ) |
2361 | }; |
2233 | return; |
2362 | 2234 | ||
2363 | // EXPOSE
|
- | |
2364 | jQuery.find = Sizzle; |
2235 | // Convert html string into DOM nodes
|
2365 | jQuery.filter = Sizzle.filter; |
2236 | if ( typeof elem === "string" ) { |
2366 | jQuery.expr = Sizzle.selectors; |
2237 | // Fix "XHTML"-style tags in all browsers
|
- | 2238 | elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ |
|
- | 2239 | return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? |
|
- | 2240 | all :
|
|
2367 | jQuery.expr[":"] = jQuery.expr.filters; |
2241 | front + "></" + tag + ">"; |
- | 2242 | }); |
|
2368 | 2243 | ||
2369 | Sizzle.selectors.filters.hidden = function(elem){ |
2244 | // Trim whitespace, otherwise indexOf won't work as expected
|
2370 | return elem.offsetWidth === 0 || elem.offsetHeight === 0; |
2245 | var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); |
2371 | }; |
- | |
2372 | 2246 | ||
- | 2247 | var wrap = |
|
- | 2248 | // option or optgroup
|
|
2373 | Sizzle.selectors.filters.visible = function(elem){ |
2249 | !tags.indexOf("<opt") && |
2374 | return elem.offsetWidth > 0 || elem.offsetHeight > 0; |
2250 | [ 1, "<select multiple='multiple'>", "</select>" ] || |
2375 | }; |
- | |
2376 | 2251 | ||
- | 2252 | !tags.indexOf("<leg") && |
|
- | 2253 | [ 1, "<fieldset>", "</fieldset>" ] || |
|
- | 2254 | ||
- | 2255 | tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && |
|
- | 2256 | [ 1, "<table>", "</table>" ] || |
|
- | 2257 | ||
- | 2258 | !tags.indexOf("<tr") && |
|
- | 2259 | [ 2, "<table><tbody>", "</tbody></table>" ] || |
|
- | 2260 | ||
- | 2261 | // <thead> matched above
|
|
- | 2262 | (!tags.indexOf("<td") || !tags.indexOf("<th")) && |
|
- | 2263 | [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] || |
|
- | 2264 | ||
- | 2265 | !tags.indexOf("<col") && |
|
- | 2266 | [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] || |
|
- | 2267 | ||
2377 | Sizzle.selectors.filters.animated = function(elem){ |
2268 | // IE can't serialize <link> and <script> tags normally
|
2378 | return jQuery.grep(jQuery.timers, function(fn){ |
2269 | !jQuery.support.htmlSerialize && |
- | 2270 | [ 1, "div<div>", "</div>" ] || |
|
- | 2271 | ||
- | 2272 | [ 0, "", "" ]; |
|
- | 2273 | ||
- | 2274 | // Go to html and back, then peel off extra wrappers
|
|
- | 2275 | div.innerHTML = wrap[1] + elem + wrap[2]; |
|
- | 2276 | ||
2379 | return elem === fn.elem; |
2277 | // Move to the right depth
|
- | 2278 | while ( wrap[0]-- ) |
|
2380 | }).length; |
2279 | div = div.lastChild; |
2381 | }; |
2280 | |
- | 2281 | // Remove IE's autoinserted <tbody> from table fragments
|
|
- | 2282 | if ( !jQuery.support.tbody ) { |
|
2382 | 2283 | ||
2383 | jQuery.multiFilter = function( expr, elems, not ) { |
2284 | // String was a <table>, *may* have spurious <tbody>
|
2384 | if ( not ) { |
2285 | var hasBody = /<tbody/i.test(elem), |
2385 | expr = ":not(" + expr + ")"; |
2286 | tbody = !tags.indexOf("<table") && !hasBody ? |
2386 | }
|
- | |
- | 2287 | div.firstChild && div.firstChild.childNodes : |
|
2387 | 2288 | ||
2388 | return Sizzle.matches(expr, elems); |
2289 | // String was a bare <thead> or <tfoot>
|
- | 2290 | wrap[1] == "<table>" && !hasBody ? |
|
- | 2291 | div.childNodes : |
|
- | 2292 | []; |
|
2389 | }; |
2293 | |
- | 2294 | for ( var j = tbody.length - 1; j >= 0 ; --j ) |
|
- | 2295 | if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) |
|
- | 2296 | tbody[ j ].parentNode.removeChild( tbody[ j ] ); |
|
2390 | 2297 | ||
2391 | jQuery.dir = function( elem, dir ){ |
- | |
2392 | var matched = [], cur = elem[dir]; |
- | |
2393 | while ( cur && cur != document ) { |
- | |
2394 | if ( cur.nodeType == 1 ) |
- | |
2395 | matched.push( cur ); |
- | |
2396 | cur = cur[dir]; |
- | |
2397 | }
|
2298 | }
|
2398 | return matched; |
- | |
2399 | }; |
- | |
2400 | 2299 | ||
2401 | jQuery.nth = function(cur, result, dir, elem){ |
2300 | // IE completely kills leading whitespace when innerHTML is used
|
2402 | result = result || 1; |
2301 | if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) ) |
2403 | var num = 0; |
2302 | div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild ); |
2404 | 2303 | ||
2405 | for ( ; cur; cur = cur[dir] ) |
- | |
2406 | if ( cur.nodeType == 1 && ++num == result ) |
2304 | elem = jQuery.makeArray( div.childNodes ); |
2407 | break; |
2305 | }
|
2408 | 2306 | ||
- | 2307 | if ( elem.nodeType ) |
|
2409 | return cur; |
2308 | ret.push( elem ); |
2410 | }; |
2309 | else
|
- | 2310 | ret = jQuery.merge( ret, elem ); |
|
2411 | 2311 | ||
2412 | jQuery.sibling = function(n, elem){ |
- | |
2413 | var r = []; |
2312 | }); |
2414 | 2313 | ||
- | 2314 | if ( fragment ) { |
|
2415 | for ( ; n; n = n.nextSibling ) { |
2315 | for ( var i = 0; ret[i]; i++ ) { |
- | 2316 | if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { |
|
- | 2317 | scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); |
|
- | 2318 | } else { |
|
2416 | if ( n.nodeType == 1 && n != elem ) |
2319 | if ( ret[i].nodeType === 1 ) |
- | 2320 | ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); |
|
2417 | r.push( n ); |
2321 | fragment.appendChild( ret[i] ); |
- | 2322 | }
|
|
2418 | }
|
2323 | }
|
2419 | 2324 | ||
2420 | return r; |
2325 | return scripts; |
2421 | }; |
2326 | }
|
2422 | - | ||
2423 | return; |
- | |
2424 | 2327 | ||
2425 | window.Sizzle = Sizzle; |
2328 | return ret; |
- | 2329 | }
|
|
- | 2330 | }); |
|
2426 | 2331 | ||
- | 2332 | function cleanData( elems ) { |
|
- | 2333 | for ( var i = 0, l = elems.length; i < l; i++ ) { |
|
- | 2334 | var id = elems[i][expando]; |
|
- | 2335 | if ( id ) { |
|
- | 2336 | delete jQuery.cache[ id ]; |
|
- | 2337 | }
|
|
- | 2338 | }
|
|
2427 | })(); |
2339 | }
|
2428 | /*
|
2340 | /*
|
2429 | * A number of helper functions used for managing events.
|
2341 | * A number of helper functions used for managing events.
|
2430 | * Many of the ideas behind this code originated from
|
2342 | * Many of the ideas behind this code originated from
|
2431 | * Dean Edwards' addEvent library.
|
2343 | * Dean Edwards' addEvent library.
|
2432 | */
|
2344 | */
|
Строка 2541... | Строка 2453... | ||
2541 | // jQuery(...).unbind("mouseover mouseout", fn);
|
2453 | // jQuery(...).unbind("mouseover mouseout", fn);
|
2542 | jQuery.each(types.split(/\s+/), function(index, type){ |
2454 | jQuery.each(types.split(/\s+/), function(index, type){ |
2543 | // Namespaced event handlers
|
2455 | // Namespaced event handlers
|
2544 | var namespaces = type.split("."); |
2456 | var namespaces = type.split("."); |
2545 | type = namespaces.shift(); |
2457 | type = namespaces.shift(); |
2546 | var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); |
2458 | var namespace = new RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); |
2547 | 2459 | ||
2548 | if ( events[type] ) { |
2460 | if ( events[type] ) { |
2549 | // remove the given handler for the given type
|
2461 | // remove the given handler for the given type
|
2550 | if ( handler ) |
2462 | if ( handler ) |
2551 | delete events[type][handler.guid]; |
2463 | delete events[type][handler.guid]; |
Строка 2674... | Строка 2586... | ||
2674 | event.type = namespaces.shift(); |
2586 | event.type = namespaces.shift(); |
2675 | 2587 | ||
2676 | // Cache this now, all = true means, any handler
|
2588 | // Cache this now, all = true means, any handler
|
2677 | all = !namespaces.length && !event.exclusive; |
2589 | all = !namespaces.length && !event.exclusive; |
2678 | 2590 | ||
2679 | var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); |
2591 | var namespace = new RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); |
2680 | 2592 | ||
2681 | handlers = ( jQuery.data(this, "events") || {} )[event.type]; |
2593 | handlers = ( jQuery.data(this, "events") || {} )[event.type]; |
2682 | 2594 | ||
2683 | for ( var j in handlers ) { |
2595 | for ( var j in handlers ) { |
2684 | var handler = handlers[j]; |
2596 | var handler = handlers[j]; |
Строка 2779... | Строка 2691... | ||
2779 | setup: function( selector, namespaces ){ |
2691 | setup: function( selector, namespaces ){ |
2780 | jQuery.event.add( this, namespaces[0], liveHandler ); |
2692 | jQuery.event.add( this, namespaces[0], liveHandler ); |
2781 | }, |
2693 | }, |
2782 | teardown: function( namespaces ){ |
2694 | teardown: function( namespaces ){ |
2783 | if ( namespaces.length ) { |
2695 | if ( namespaces.length ) { |
2784 | var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); |
2696 | var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); |
2785 | 2697 | ||
2786 | jQuery.each( (jQuery.data(this, "events").live || {}), function(){ |
2698 | jQuery.each( (jQuery.data(this, "events").live || {}), function(){ |
2787 | if ( name.test(this.type) ) |
2699 | if ( name.test(this.type) ) |
2788 | remove++;
|
2700 | remove++;
|
2789 | }); |
2701 | }); |
Строка 2973... | Строка 2885... | ||
2973 | 2885 | ||
2974 | live: function( type, fn ){ |
2886 | live: function( type, fn ){ |
2975 | var proxy = jQuery.event.proxy( fn ); |
2887 | var proxy = jQuery.event.proxy( fn ); |
2976 | proxy.guid += this.selector + type; |
2888 | proxy.guid += this.selector + type; |
2977 | 2889 | ||
2978 | jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy ); |
2890 | jQuery( this.context ).bind( liveConvert(type, this.selector), this.selector, proxy ); |
2979 | 2891 | ||
2980 | return this; |
2892 | return this; |
2981 | }, |
2893 | }, |
2982 | 2894 | ||
2983 | die: function( type, fn ){ |
2895 | die: function( type, fn ){ |
2984 | jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null ); |
2896 | jQuery( this.context ).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null ); |
2985 | return this; |
2897 | return this; |
2986 | }
|
2898 | }
|
2987 | }); |
2899 | }); |
2988 | 2900 | ||
2989 | function liveHandler( event ){ |
2901 | function liveHandler( event ){ |
2990 | var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"), |
2902 | var check = new RegExp("(^|\\.)" + event.type + "(\\.|$)"), |
2991 | stop = true, |
2903 | stop = true, |
2992 | elems = []; |
2904 | elems = []; |
2993 | 2905 | ||
2994 | jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){ |
2906 | jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){ |
2995 | if ( check.test(fn.type) ) { |
2907 | if ( check.test(fn.type) ) { |
Строка 3002... | Строка 2914... | ||
3002 | elems.sort(function(a,b) { |
2914 | elems.sort(function(a,b) { |
3003 | return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest"); |
2915 | return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest"); |
3004 | }); |
2916 | }); |
3005 | 2917 | ||
3006 | jQuery.each(elems, function(){ |
2918 | jQuery.each(elems, function(){ |
- | 2919 | event.currentTarget = this.elem; |
|
3007 | if ( this.fn.call(this.elem, event, this.fn.data) === false ) |
2920 | if ( this.fn.call(this.elem, event, this.fn.data) === false ) |
3008 | return (stop = false); |
2921 | return (stop = false); |
3009 | }); |
2922 | }); |
3010 | 2923 | ||
3011 | return stop; |
2924 | return stop; |
Строка 3101... | Строка 3014... | ||
3101 | }); |
3014 | }); |
3102 | 3015 | ||
3103 | // Prevent memory leaks in IE
|
3016 | // Prevent memory leaks in IE
|
3104 | // And prevent errors on refresh with events like mouseover in other browsers
|
3017 | // And prevent errors on refresh with events like mouseover in other browsers
|
3105 | // Window isn't included so as not to unbind existing unload events
|
3018 | // Window isn't included so as not to unbind existing unload events
|
- | 3019 | // More info:
|
|
- | 3020 | // - http://isaacschlueter.com/2006/10/msie-memory-leaks/
|
|
- | 3021 | // - https://bugzilla.mozilla.org/show_bug.cgi?id=252542
|
|
3106 | jQuery( window ).bind( 'unload', function(){ |
3022 | jQuery( window ).bind( 'unload', function(){ |
3107 | for ( var id in jQuery.cache ) |
3023 | for ( var id in jQuery.cache ) |
3108 | // Skip the window
|
3024 | // Skip the window
|
3109 | if ( id != 1 && jQuery.cache[ id ].handle ) |
3025 | if ( id != 1 && jQuery.cache[ id ].handle ) |
3110 | jQuery.event.remove( jQuery.cache[ id ].handle.elem ); |
3026 | jQuery.event.remove( jQuery.cache[ id ].handle.elem ); |
Строка 3117... | Строка 3033... | ||
3117 | script = document.createElement("script"), |
3033 | script = document.createElement("script"), |
3118 | div = document.createElement("div"), |
3034 | div = document.createElement("div"), |
3119 | id = "script" + (new Date).getTime(); |
3035 | id = "script" + (new Date).getTime(); |
3120 | 3036 | ||
3121 | div.style.display = "none"; |
3037 | div.style.display = "none"; |
3122 | div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>'; |
3038 | div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select>'; |
3123 | 3039 | ||
3124 | var all = div.getElementsByTagName("*"), |
3040 | var all = div.getElementsByTagName("*"), |
3125 | a = div.getElementsByTagName("a")[0]; |
3041 | a = div.getElementsByTagName("a")[0]; |
3126 | 3042 | ||
3127 | // Can't get basic test support
|
3043 | // Can't get basic test support
|
Строка 3135... | Строка 3051... | ||
3135 | 3051 | ||
3136 | // Make sure that tbody elements aren't automatically inserted
|
3052 | // Make sure that tbody elements aren't automatically inserted
|
3137 | // IE will insert them into empty tables
|
3053 | // IE will insert them into empty tables
|
3138 | tbody: !div.getElementsByTagName("tbody").length, |
3054 | tbody: !div.getElementsByTagName("tbody").length, |
3139 | 3055 | ||
3140 | // Make sure that you can get all elements in an <object> element
|
- | |
3141 | // IE 7 always returns no results
|
- | |
3142 | objectAll: !!div.getElementsByTagName("object")[0] |
- | |
3143 | .getElementsByTagName("*").length, |
- | |
3144 | - | ||
3145 | // Make sure that link elements get serialized correctly by innerHTML
|
3056 | // Make sure that link elements get serialized correctly by innerHTML
|
3146 | // This requires a wrapper element in IE
|
3057 | // This requires a wrapper element in IE
|
3147 | htmlSerialize: !!div.getElementsByTagName("link").length, |
3058 | htmlSerialize: !!div.getElementsByTagName("link").length, |
3148 | 3059 | ||
3149 | // Get the style information from getAttribute
|
3060 | // Get the style information from getAttribute
|
Строка 3184... | Строка 3095... | ||
3184 | }
|
3095 | }
|
3185 | 3096 | ||
3186 | root.removeChild( script ); |
3097 | root.removeChild( script ); |
3187 | 3098 | ||
3188 | if ( div.attachEvent && div.fireEvent ) { |
3099 | if ( div.attachEvent && div.fireEvent ) { |
3189 | div.attachEvent("onclick", function(){ |
3100 | div.attachEvent("onclick", function click(){ |
3190 | // Cloning a node shouldn't copy over any
|
3101 | // Cloning a node shouldn't copy over any
|
3191 | // bound event handlers (IE does this)
|
3102 | // bound event handlers (IE does this)
|
3192 | jQuery.support.noCloneEvent = false; |
3103 | jQuery.support.noCloneEvent = false; |
3193 | div.detachEvent("onclick", arguments.callee); |
3104 | div.detachEvent("onclick", click); |
3194 | }); |
3105 | }); |
3195 | div.cloneNode(true).fireEvent("onclick"); |
3106 | div.cloneNode(true).fireEvent("onclick"); |
3196 | }
|
3107 | }
|
3197 | 3108 | ||
3198 | // Figure out if the W3C box model works as expected
|
3109 | // Figure out if the W3C box model works as expected
|
Строка 3205... | Строка 3116... | ||
3205 | jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; |
3116 | jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; |
3206 | document.body.removeChild( div ).style.display = 'none'; |
3117 | document.body.removeChild( div ).style.display = 'none'; |
3207 | }); |
3118 | }); |
3208 | })(); |
3119 | })(); |
3209 | 3120 | ||
3210 | var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat"; |
- | |
3211 | - | ||
3212 | jQuery.props = { |
3121 | jQuery.props = { |
3213 | "for": "htmlFor", |
3122 | "for": "htmlFor", |
3214 | "class": "className", |
3123 | "class": "className", |
3215 | "float": styleFloat, |
- | |
3216 | cssFloat: styleFloat, |
- | |
3217 | styleFloat: styleFloat, |
- | |
3218 | readonly: "readOnly", |
3124 | readonly: "readOnly", |
3219 | maxlength: "maxLength", |
3125 | maxlength: "maxLength", |
3220 | cellspacing: "cellSpacing", |
3126 | cellspacing: "cellSpacing", |
3221 | rowspan: "rowSpan", |
3127 | rowspan: "rowSpan", |
3222 | tabindex: "tabIndex" |
3128 | tabindex: "tabIndex" |
3223 | }; |
3129 | }; |
- | 3130 | // exclude the following css properties to add px
|
|
- | 3131 | var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, |
|
- | 3132 | // cache defaultView
|
|
- | 3133 | defaultView = document.defaultView || {}, |
|
- | 3134 | // normalize float css property
|
|
- | 3135 | styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat"; |
|
- | 3136 | ||
- | 3137 | jQuery.fn.css = function( name, value ) { |
|
- | 3138 | var options = name, isFunction = jQuery.isFunction( value ); |
|
- | 3139 | ||
- | 3140 | // ignore negative width and height values
|
|
- | 3141 | if ( (name == 'width' || name == 'height') && parseFloat(value) < 0 ) |
|
- | 3142 | value = undefined; |
|
- | 3143 | ||
- | 3144 | if ( typeof name === "string" ) { |
|
- | 3145 | // Are we setting the style?
|
|
- | 3146 | if ( value === undefined ) { |
|
- | 3147 | return this.length ? |
|
- | 3148 | jQuery.css( this[0], name ) : |
|
- | 3149 | null; |
|
- | 3150 | ||
- | 3151 | // Convert name, value params to options hash format
|
|
- | 3152 | } else { |
|
- | 3153 | options = {}; |
|
- | 3154 | options[ name ] = value; |
|
- | 3155 | }
|
|
- | 3156 | }
|
|
- | 3157 | ||
- | 3158 | // For each element...
|
|
- | 3159 | for ( var i = 0, l = this.length; i < l; i++ ) { |
|
- | 3160 | var elem = this[i]; |
|
- | 3161 | ||
- | 3162 | // Set all the styles
|
|
- | 3163 | for ( var prop in options ) { |
|
- | 3164 | value = options[prop]; |
|
- | 3165 | ||
- | 3166 | if ( isFunction ) { |
|
- | 3167 | value = value.call( elem, i ); |
|
- | 3168 | }
|
|
- | 3169 | ||
- | 3170 | if ( typeof value === "number" && !exclude.test(prop) ) { |
|
- | 3171 | value = value + "px"; |
|
- | 3172 | }
|
|
- | 3173 | ||
- | 3174 | jQuery.style( elem, prop, value ); |
|
- | 3175 | }
|
|
- | 3176 | }
|
|
- | 3177 | ||
- | 3178 | return this; |
|
- | 3179 | }; |
|
- | 3180 | ||
- | 3181 | jQuery.extend({ |
|
- | 3182 | style: function( elem, name, value ) { |
|
- | 3183 | // don't set styles on text and comment nodes
|
|
- | 3184 | if (!elem || elem.nodeType == 3 || elem.nodeType == 8) |
|
- | 3185 | return undefined; |
|
- | 3186 | ||
- | 3187 | var style = elem.style || elem, set = value !== undefined; |
|
- | 3188 | ||
- | 3189 | // IE uses filters for opacity
|
|
- | 3190 | if ( !jQuery.support.opacity && name == "opacity" ) { |
|
- | 3191 | if ( set ) { |
|
- | 3192 | // IE has trouble with opacity if it does not have layout
|
|
- | 3193 | // Force it by setting the zoom level
|
|
- | 3194 | style.zoom = 1; |
|
- | 3195 | ||
- | 3196 | // Set the alpha filter to set the opacity
|
|
- | 3197 | style.filter = (style.filter || "").replace( /alpha\([^)]*\)/, "" ) + |
|
- | 3198 | (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); |
|
- | 3199 | }
|
|
- | 3200 | ||
- | 3201 | return style.filter && style.filter.indexOf("opacity=") >= 0 ? |
|
- | 3202 | (parseFloat( style.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': |
|
- | 3203 | ""; |
|
- | 3204 | }
|
|
- | 3205 | ||
- | 3206 | // Make sure we're using the right name for getting the float value
|
|
- | 3207 | if ( /float/i.test( name ) ) |
|
- | 3208 | name = styleFloat; |
|
- | 3209 | ||
- | 3210 | name = name.replace(/-([a-z])/ig, function(all, letter){ |
|
- | 3211 | return letter.toUpperCase(); |
|
- | 3212 | }); |
|
- | 3213 | ||
- | 3214 | if ( set ) |
|
- | 3215 | style[ name ] = value; |
|
- | 3216 | ||
- | 3217 | return style[ name ]; |
|
- | 3218 | }, |
|
- | 3219 | ||
- | 3220 | css: function( elem, name, force, extra ) { |
|
- | 3221 | if ( name == "width" || name == "height" ) { |
|
- | 3222 | var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; |
|
- | 3223 | ||
- | 3224 | function getWH() { |
|
- | 3225 | val = name == "width" ? elem.offsetWidth : elem.offsetHeight; |
|
- | 3226 | ||
- | 3227 | if ( extra === "border" ) |
|
- | 3228 | return; |
|
- | 3229 | ||
- | 3230 | jQuery.each( which, function() { |
|
- | 3231 | if ( !extra ) |
|
- | 3232 | val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; |
|
- | 3233 | if ( extra === "margin" ) |
|
- | 3234 | val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; |
|
- | 3235 | else
|
|
- | 3236 | val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; |
|
- | 3237 | }); |
|
- | 3238 | }
|
|
- | 3239 | ||
- | 3240 | if ( elem.offsetWidth !== 0 ) |
|
- | 3241 | getWH(); |
|
- | 3242 | else
|
|
- | 3243 | jQuery.swap( elem, props, getWH ); |
|
- | 3244 | ||
- | 3245 | return Math.max(0, Math.round(val)); |
|
- | 3246 | }
|
|
- | 3247 | ||
- | 3248 | return jQuery.curCSS( elem, name, force ); |
|
- | 3249 | }, |
|
- | 3250 | ||
- | 3251 | curCSS: function( elem, name, force ) { |
|
- | 3252 | var ret, style = elem.style; |
|
- | 3253 | ||
- | 3254 | // IE uses filters for opacity
|
|
- | 3255 | if ( !jQuery.support.opacity && name == "opacity" ) { |
|
- | 3256 | ret = style.filter && style.filter.indexOf("opacity=") >= 0 ? |
|
- | 3257 | (parseFloat( style.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': |
|
- | 3258 | ""; |
|
- | 3259 | ||
- | 3260 | return ret === "" ? |
|
- | 3261 | "1" : |
|
- | 3262 | ret;
|
|
- | 3263 | }
|
|
- | 3264 | ||
- | 3265 | // Make sure we're using the right name for getting the float value
|
|
- | 3266 | if ( /float/i.test( name ) ) |
|
- | 3267 | name = styleFloat; |
|
- | 3268 | ||
- | 3269 | if ( !force && style && style[ name ] ) { |
|
- | 3270 | ret = style[ name ]; |
|
- | 3271 | ||
- | 3272 | } else if ( defaultView.getComputedStyle ) { |
|
- | 3273 | ||
- | 3274 | // Only "float" is needed here
|
|
- | 3275 | if ( /float/i.test( name ) ) |
|
- | 3276 | name = "float"; |
|
- | 3277 | ||
- | 3278 | name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); |
|
- | 3279 | ||
- | 3280 | var computedStyle = defaultView.getComputedStyle( elem, null ); |
|
- | 3281 | ||
- | 3282 | if ( computedStyle ) |
|
- | 3283 | ret = computedStyle.getPropertyValue( name ); |
|
- | 3284 | ||
- | 3285 | // We should always get a number back from opacity
|
|
- | 3286 | if ( name == "opacity" && ret == "" ) |
|
- | 3287 | ret = "1"; |
|
- | 3288 | ||
- | 3289 | } else if ( elem.currentStyle ) { |
|
- | 3290 | var camelCase = name.replace(/\-(\w)/g, function(all, letter){ |
|
- | 3291 | return letter.toUpperCase(); |
|
- | 3292 | }); |
|
- | 3293 | ||
- | 3294 | ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; |
|
- | 3295 | ||
- | 3296 | // From the awesome hack by Dean Edwards
|
|
- | 3297 | // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
|
|
- | 3298 | ||
- | 3299 | // If we're not dealing with a regular pixel number
|
|
- | 3300 | // but a number that has a weird ending, we need to convert it to pixels
|
|
- | 3301 | if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { |
|
- | 3302 | // Remember the original values
|
|
- | 3303 | var left = style.left, rsLeft = elem.runtimeStyle.left; |
|
- | 3304 | ||
- | 3305 | // Put in the new values to get a computed value out
|
|
- | 3306 | elem.runtimeStyle.left = elem.currentStyle.left; |
|
- | 3307 | style.left = ret || 0; |
|
- | 3308 | ret = style.pixelLeft + "px"; |
|
- | 3309 | ||
- | 3310 | // Revert the changed values
|
|
- | 3311 | style.left = left; |
|
- | 3312 | elem.runtimeStyle.left = rsLeft; |
|
- | 3313 | }
|
|
- | 3314 | }
|
|
- | 3315 | ||
- | 3316 | return ret; |
|
- | 3317 | }, |
|
- | 3318 | ||
- | 3319 | // A method for quickly swapping in/out CSS properties to get correct calculations
|
|
- | 3320 | swap: function( elem, options, callback ) { |
|
- | 3321 | var old = {}; |
|
- | 3322 | // Remember the old values, and insert the new ones
|
|
- | 3323 | for ( var name in options ) { |
|
- | 3324 | old[ name ] = elem.style[ name ]; |
|
- | 3325 | elem.style[ name ] = options[ name ]; |
|
- | 3326 | }
|
|
- | 3327 | ||
- | 3328 | callback.call( elem ); |
|
- | 3329 | ||
- | 3330 | // Revert the old values
|
|
- | 3331 | for ( var name in options ) |
|
- | 3332 | elem.style[ name ] = old[ name ]; |
|
- | 3333 | }
|
|
3224 | jQuery.fn.extend({ |
3334 | });jQuery.fn.extend({ |
3225 | // Keep a copy of the old load
|
3335 | // Keep a copy of the old load
|
3226 | _load: jQuery.fn.load, |
3336 | _load: jQuery.fn.load, |
3227 | 3337 | ||
3228 | load: function( url, params, callback ) { |
3338 | load: function( url, params, callback ) { |
3229 | if ( typeof url !== "string" ) |
3339 | if ( typeof url !== "string" ) |
Строка 3496... | Строка 3606... | ||
3496 | head.removeChild( script ); |
3606 | head.removeChild( script ); |
3497 | }
|
3607 | }
|
3498 | }; |
3608 | }; |
3499 | }
|
3609 | }
|
3500 | 3610 | ||
- | 3611 | // Use insertBefore instead of appendChild to circumvent an IE6 bug.
|
|
- | 3612 | // This arises when a base node is used (#2709 and #4378).
|
|
3501 | head.appendChild(script); |
3613 | head.insertBefore( script, head.firstChild ); |
3502 | 3614 | ||
3503 | // We handle everything using the script element injection
|
3615 | // We handle everything using the script element injection
|
3504 | return undefined; |
3616 | return undefined; |
3505 | }
|
3617 | }
|
3506 | 3618 | ||
Строка 3857... | Строка 3969... | ||
3857 | }) : |
3969 | }) : |
3858 | this.animate(genFx("toggle", 3), fn, fn2); |
3970 | this.animate(genFx("toggle", 3), fn, fn2); |
3859 | }, |
3971 | }, |
3860 | 3972 | ||
3861 | fadeTo: function(speed,to,callback){ |
3973 | fadeTo: function(speed,to,callback){ |
- | 3974 | return this.filter(":hidden").css('opacity', 0).show().end() |
|
3862 | return this.animate({opacity: to}, speed, callback); |
3975 | .animate({opacity: to}, speed, callback); |
3863 | }, |
3976 | }, |
3864 | 3977 | ||
3865 | animate: function( prop, speed, easing, callback ) { |
3978 | animate: function( prop, speed, easing, callback ) { |
3866 | var optall = jQuery.speed(speed, easing, callback); |
3979 | var optall = jQuery.speed(speed, easing, callback); |
3867 | 3980 | ||
Строка 4066... | Строка 4179... | ||
4066 | }, |
4179 | }, |
4067 | 4180 | ||
4068 | // Simple 'show' function
|
4181 | // Simple 'show' function
|
4069 | show: function(){ |
4182 | show: function(){ |
4070 | // Remember where we started, so that we can go back to it later
|
4183 | // Remember where we started, so that we can go back to it later
|
4071 | this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); |
4184 | this.options.orig[this.prop] = jQuery.style( this.elem, this.prop ); |
4072 | this.options.show = true; |
4185 | this.options.show = true; |
4073 | 4186 | ||
4074 | // Begin the animation
|
4187 | // Begin the animation
|
4075 | // Make sure that we start at a small width/height to avoid any
|
4188 | // Make sure that we start at a small width/height to avoid any
|
4076 | // flash of content
|
4189 | // flash of content
|
Строка 4081... | Строка 4194... | ||
4081 | }, |
4194 | }, |
4082 | 4195 | ||
4083 | // Simple 'hide' function
|
4196 | // Simple 'hide' function
|
4084 | hide: function(){ |
4197 | hide: function(){ |
4085 | // Remember where we started, so that we can go back to it later
|
4198 | // Remember where we started, so that we can go back to it later
|
4086 | this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); |
4199 | this.options.orig[this.prop] = jQuery.style( this.elem, this.prop ); |
4087 | this.options.hide = true; |
4200 | this.options.hide = true; |
4088 | 4201 | ||
4089 | // Begin the animation
|
4202 | // Begin the animation
|
4090 | this.custom(this.cur(), 0); |
4203 | this.custom(this.cur(), 0); |
4091 | }, |
4204 | }, |
Строка 4122... | Строка 4235... | ||
4122 | jQuery(this.elem).hide(); |
4235 | jQuery(this.elem).hide(); |
4123 | 4236 | ||
4124 | // Reset the properties, if the item has been hidden or shown
|
4237 | // Reset the properties, if the item has been hidden or shown
|
4125 | if ( this.options.hide || this.options.show ) |
4238 | if ( this.options.hide || this.options.show ) |
4126 | for ( var p in this.options.curAnim ) |
4239 | for ( var p in this.options.curAnim ) |
4127 | jQuery.attr(this.elem.style, p, this.options.orig[p]); |
4240 | jQuery.style(this.elem, p, this.options.orig[p]); |
4128 | 4241 | ||
4129 | // Execute the complete function
|
4242 | // Execute the complete function
|
4130 | this.options.complete.call( this.elem ); |
4243 | this.options.complete.call( this.elem ); |
4131 | }
|
4244 | }
|
4132 | 4245 | ||
Строка 4156... | Строка 4269... | ||
4156 | _default: 400 |
4269 | _default: 400 |
4157 | }, |
4270 | }, |
4158 | step: { |
4271 | step: { |
4159 | 4272 | ||
4160 | opacity: function(fx){ |
4273 | opacity: function(fx){ |
4161 | jQuery.attr(fx.elem.style, "opacity", fx.now); |
4274 | jQuery.style(fx.elem, "opacity", fx.now); |
4162 | }, |
4275 | }, |
4163 | 4276 | ||
4164 | _default: function(fx){ |
4277 | _default: function(fx){ |
4165 | if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) |
4278 | if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) |
4166 | fx.elem.style[ fx.prop ] = fx.now + fx.unit; |
4279 | fx.elem.style[ fx.prop ] = fx.now + fx.unit; |
4167 | else
|
4280 | else
|
4168 | fx.elem[ fx.prop ] = fx.now; |
4281 | fx.elem[ fx.prop ] = fx.now; |
4169 | }
|
4282 | }
|
4170 | }
|
4283 | }
|
4171 | }); |
4284 | }); |
4172 | if ( document.documentElement["getBoundingClientRect"] ) |
4285 | if ( "getBoundingClientRect" in document.documentElement ) |
4173 | jQuery.fn.offset = function() { |
4286 | jQuery.fn.offset = function() { |
- | 4287 | var elem = this[0]; |
|
4174 | if ( !this[0] ) return { top: 0, left: 0 }; |
4288 | if ( !elem ) return null; |
4175 | if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] ); |
4289 | if ( elem === elem.ownerDocument.body ) return jQuery.offset.bodyOffset( elem ); |
4176 | var box = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement, |
4290 | var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement, |
4177 | clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, |
4291 | clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, |
4178 | top = box.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop, |
4292 | top = box.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop, |
4179 | left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft; |
4293 | left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft; |
4180 | return { top: top, left: left }; |
4294 | return { top: top, left: left }; |
4181 | }; |
4295 | }; |
4182 | else
|
4296 | else
|
4183 | jQuery.fn.offset = function() { |
4297 | jQuery.fn.offset = function() { |
- | 4298 | var elem = this[0]; |
|
4184 | if ( !this[0] ) return { top: 0, left: 0 }; |
4299 | if ( !elem ) return null; |
4185 | if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] ); |
4300 | if ( elem === elem.ownerDocument.body ) return jQuery.offset.bodyOffset( elem ); |
4186 | jQuery.offset.initialized || jQuery.offset.initialize(); |
4301 | jQuery.offset.initialize(); |
4187 | 4302 | ||
4188 | var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem, |
4303 | var offsetParent = elem.offsetParent, prevOffsetParent = elem, |
4189 | doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement, |
4304 | doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement, |
4190 | body = doc.body, defaultView = doc.defaultView, |
4305 | body = doc.body, defaultView = doc.defaultView, |
4191 | prevComputedStyle = defaultView.getComputedStyle(elem, null), |
4306 | prevComputedStyle = defaultView.getComputedStyle(elem, null), |
4192 | top = elem.offsetTop, left = elem.offsetLeft; |
4307 | top = elem.offsetTop, left = elem.offsetLeft; |
4193 | 4308 | ||
4194 | while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) { |
4309 | while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) { |
- | 4310 | if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) break; |
|
4195 | computedStyle = defaultView.getComputedStyle(elem, null); |
4311 | computedStyle = defaultView.getComputedStyle(elem, null); |
4196 | top -= elem.scrollTop, left -= elem.scrollLeft; |
4312 | top -= elem.scrollTop, left -= elem.scrollLeft; |
4197 | if ( elem === offsetParent ) { |
4313 | if ( elem === offsetParent ) { |
4198 | top += elem.offsetTop, left += elem.offsetLeft; |
4314 | top += elem.offsetTop, left += elem.offsetLeft; |
4199 | if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) ) |
4315 | if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) ) |
4200 | top += parseInt( computedStyle.borderTopWidth, 10) || 0, |
4316 | top += parseFloat( computedStyle.borderTopWidth, 10) || 0, |
4201 | left += parseInt( computedStyle.borderLeftWidth, 10) || 0; |
4317 | left += parseFloat( computedStyle.borderLeftWidth, 10) || 0; |
4202 | prevOffsetParent = offsetParent, offsetParent = elem.offsetParent; |
4318 | prevOffsetParent = offsetParent, offsetParent = elem.offsetParent; |
4203 | }
|
4319 | }
|
4204 | if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) |
4320 | if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) |
4205 | top += parseInt( computedStyle.borderTopWidth, 10) || 0, |
4321 | top += parseFloat( computedStyle.borderTopWidth, 10) || 0, |
4206 | left += parseInt( computedStyle.borderLeftWidth, 10) || 0; |
4322 | left += parseFloat( computedStyle.borderLeftWidth, 10) || 0; |
4207 | prevComputedStyle = computedStyle; |
4323 | prevComputedStyle = computedStyle; |
4208 | }
|
4324 | }
|
4209 | 4325 | ||
4210 | if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) |
4326 | if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) |
4211 | top += body.offsetTop, |
4327 | top += body.offsetTop, |
4212 | left += body.offsetLeft; |
4328 | left += body.offsetLeft; |
4213 | 4329 | ||
4214 | if ( prevComputedStyle.position === "fixed" ) |
4330 | if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) |
4215 | top += Math.max(docElem.scrollTop, body.scrollTop), |
4331 | top += Math.max(docElem.scrollTop, body.scrollTop), |
4216 | left += Math.max(docElem.scrollLeft, body.scrollLeft); |
4332 | left += Math.max(docElem.scrollLeft, body.scrollLeft); |
4217 | 4333 | ||
4218 | return { top: top, left: left }; |
4334 | return { top: top, left: left }; |
4219 | }; |
4335 | }; |
4220 | 4336 | ||
4221 | jQuery.offset = { |
4337 | jQuery.offset = { |
4222 | initialize: function() { |
4338 | initialize: function() { |
4223 | if ( this.initialized ) return; |
- | |
4224 | var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop, |
4339 | var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, prop, bodyMarginTop = body.style.marginTop, |
4225 | html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>'; |
4340 | html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>'; |
4226 | 4341 | ||
4227 | rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' }; |
4342 | jQuery.extend( container.style, { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' } ); |
4228 | for ( prop in rules ) container.style[prop] = rules[prop]; |
- | |
4229 | 4343 | ||
4230 | container.innerHTML = html; |
4344 | container.innerHTML = html; |
4231 | body.insertBefore(container, body.firstChild); |
4345 | body.insertBefore(container, body.firstChild); |
4232 | innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild; |
4346 | innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild; |
4233 | 4347 | ||
4234 | this.doesNotAddBorder = (checkDiv.offsetTop !== 5); |
4348 | this.doesNotAddBorder = (checkDiv.offsetTop !== 5); |
4235 | this.doesAddBorderForTableAndCells = (td.offsetTop === 5); |
4349 | this.doesAddBorderForTableAndCells = (td.offsetTop === 5); |
4236 | 4350 | ||
- | 4351 | checkDiv.style.position = 'fixed', checkDiv.style.top = '20px'; |
|
- | 4352 | this.supportsFixedPosition = (checkDiv.offsetTop >= 15); // safari subtracts parent border width here which is 5px |
|
- | 4353 | checkDiv.style.position = '', checkDiv.style.top = ''; |
|
- | 4354 | ||
4237 | innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative'; |
4355 | innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative'; |
4238 | this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5); |
4356 | this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5); |
4239 | 4357 | ||
4240 | body.style.marginTop = '1px'; |
4358 | body.style.marginTop = '1px'; |
4241 | this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0); |
4359 | this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0); |
4242 | body.style.marginTop = bodyMarginTop; |
4360 | body.style.marginTop = bodyMarginTop; |
4243 | 4361 | ||
4244 | body.removeChild(container); |
4362 | body.removeChild(container); |
4245 | this.initialized = true; |
4363 | jQuery.offset.initialize = function(){}; |
4246 | }, |
4364 | }, |
4247 | 4365 | ||
4248 | bodyOffset: function(body) { |
4366 | bodyOffset: function(body) { |
4249 | jQuery.offset.initialized || jQuery.offset.initialize(); |
4367 | jQuery.offset.initialize(); |
4250 | var top = body.offsetTop, left = body.offsetLeft; |
4368 | var top = body.offsetTop, left = body.offsetLeft; |
4251 | if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) |
4369 | if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) |
4252 | top += parseInt( jQuery.curCSS(body, 'marginTop', true), 10 ) || 0, |
4370 | top += parseFloat( jQuery.curCSS(body, 'marginTop', true), 10 ) || 0, |
4253 | left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0; |
4371 | left += parseFloat( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0; |
4254 | return { top: top, left: left }; |
4372 | return { top: top, left: left }; |
4255 | }
|
4373 | }
|
4256 | }; |
4374 | }; |
4257 | 4375 | ||
4258 | 4376 | ||
4259 | jQuery.fn.extend({ |
4377 | jQuery.fn.extend({ |
4260 | position: function() { |
4378 | position: function() { |
- | 4379 | if ( !this[0] ) return null; |
|
- | 4380 | ||
4261 | var left = 0, top = 0, results; |
4381 | var elem = this[0], left = 0, top = 0, results, |
4262 | 4382 | ||
4263 | if ( this[0] ) { |
- | |
4264 | // Get *real* offsetParent
|
4383 | // Get *real* offsetParent
|
4265 | var offsetParent = this.offsetParent(), |
4384 | offsetParent = this.offsetParent(), |
4266 | 4385 | ||
4267 | // Get correct offsets
|
4386 | // Get correct offsets
|
4268 | offset = this.offset(), |
4387 | offset = this.offset(), |
4269 | parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset(); |
4388 | parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset(); |
4270 | 4389 | ||
4271 | // Subtract element margins
|
4390 | // Subtract element margins
|
4272 | // note: when an element has margin: auto the offsetLeft and marginLeft
|
4391 | // note: when an element has margin: auto the offsetLeft and marginLeft
|
4273 | // are the same in Safari causing offset.left to incorrectly be 0
|
4392 | // are the same in Safari causing offset.left to incorrectly be 0
|
4274 | offset.top -= num( this, 'marginTop' ); |
4393 | offset.top -= parseFloat( jQuery.curCSS(elem, 'marginTop', true), 10 ) || 0; |
4275 | offset.left -= num( this, 'marginLeft' ); |
4394 | offset.left -= parseFloat( jQuery.curCSS(elem, 'marginLeft', true), 10 ) || 0; |
4276 | 4395 | ||
4277 | // Add offsetParent borders
|
4396 | // Add offsetParent borders
|
4278 | parentOffset.top += num( offsetParent, 'borderTopWidth' ); |
4397 | parentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], 'borderTopWidth', true), 10 ) || 0; |
4279 | parentOffset.left += num( offsetParent, 'borderLeftWidth' ); |
4398 | parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], 'borderLeftWidth', true), 10 ) || 0; |
4280 | 4399 | ||
4281 | // Subtract the two offsets
|
4400 | // Subtract the two offsets
|
4282 | results = { |
4401 | results = { |
4283 | top: offset.top - parentOffset.top, |
4402 | top: offset.top - parentOffset.top, |
4284 | left: offset.left - parentOffset.left |
4403 | left: offset.left - parentOffset.left |
4285 | }; |
4404 | }; |
4286 | }
|
- | |
4287 | 4405 | ||
4288 | return results; |
4406 | return results; |
4289 | }, |
4407 | }, |
4290 | 4408 | ||
4291 | offsetParent: function() { |
4409 | offsetParent: function() { |
Строка 4325... | Строка 4443... | ||
4325 | }; |
4443 | }; |
4326 | }); |
4444 | }); |
4327 | // Create innerHeight, innerWidth, outerHeight and outerWidth methods
|
4445 | // Create innerHeight, innerWidth, outerHeight and outerWidth methods
|
4328 | jQuery.each([ "Height", "Width" ], function(i, name){ |
4446 | jQuery.each([ "Height", "Width" ], function(i, name){ |
4329 | 4447 | ||
4330 | var tl = i ? "Left" : "Top", // top or left |
- | |
4331 | br = i ? "Right" : "Bottom", // bottom or right |
- | |
4332 | lower = name.toLowerCase(); |
4448 | var type = name.toLowerCase(); |
4333 | 4449 | ||
4334 | // innerHeight and innerWidth
|
4450 | // innerHeight and innerWidth
|
4335 | jQuery.fn["inner" + name] = function(){ |
4451 | jQuery.fn["inner" + name] = function(){ |
4336 | return this[0] ? |
4452 | return this[0] ? |
4337 | jQuery.css( this[0], lower, false, "padding" ) : |
4453 | jQuery.css( this[0], type, false, "padding" ) : |
4338 | null; |
4454 | null; |
4339 | }; |
4455 | }; |
4340 | 4456 | ||
4341 | // outerHeight and outerWidth
|
4457 | // outerHeight and outerWidth
|
4342 | jQuery.fn["outer" + name] = function(margin) { |
4458 | jQuery.fn["outer" + name] = function(margin) { |
4343 | return this[0] ? |
4459 | return this[0] ? |
4344 | jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) : |
4460 | jQuery.css( this[0], type, false, margin ? "margin" : "border" ) : |
4345 | null; |
4461 | null; |
4346 | }; |
4462 | }; |
4347 | 4463 | ||
4348 | var type = name.toLowerCase(); |
- | |
4349 | - | ||
4350 | jQuery.fn[ type ] = function( size ) { |
4464 | jQuery.fn[ type ] = function( size ) { |
4351 | // Get window width or height
|
4465 | // Get window width or height
|
4352 | return this[0] == window ? |
4466 | return this[0] == window ? |
4353 | // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
|
4467 | // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
|
4354 | document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || |
4468 | document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || |