annotate DataTables-1.9.4/docs/media/js/jquery.js @ 1:bda1cc8041bf draft

Markdown support added
author saskia-hiltemann
date Tue, 07 Oct 2014 08:47:45 -0400
parents c73753f1606f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1 /*!
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2 * jQuery JavaScript Library v1.5.1
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3 * http://jquery.com/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4 *
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5 * Copyright 2011, John Resig
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6 * Dual licensed under the MIT or GPL Version 2 licenses.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7 * http://jquery.org/license
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8 *
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
9 * Includes Sizzle.js
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
10 * http://sizzlejs.com/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
11 * Copyright 2011, The Dojo Foundation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
12 * Released under the MIT, BSD, and GPL Licenses.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
13 *
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
14 * Date: Wed Feb 23 13:55:29 2011 -0500
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
15 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
16 (function( window, undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
17
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
18 // Use the correct document accordingly with window argument (sandbox)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
19 var document = window.document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
20 var jQuery = (function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
21
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
22 // Define a local copy of jQuery
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
23 var jQuery = function( selector, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
24 // The jQuery object is actually just the init constructor 'enhanced'
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
25 return new jQuery.fn.init( selector, context, rootjQuery );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
26 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
27
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
28 // Map over jQuery in case of overwrite
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
29 _jQuery = window.jQuery,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
30
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
31 // Map over the $ in case of overwrite
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
32 _$ = window.$,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
33
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
34 // A central reference to the root jQuery(document)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
35 rootjQuery,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
36
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
37 // A simple way to check for HTML strings or ID strings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
38 // (both of which we optimize for)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
39 quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
40
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
41 // Check if a string has a non-whitespace character in it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
42 rnotwhite = /\S/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
43
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
44 // Used for trimming whitespace
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
45 trimLeft = /^\s+/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
46 trimRight = /\s+$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
47
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
48 // Check for digits
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
49 rdigit = /\d/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
50
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
51 // Match a standalone tag
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
52 rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
53
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
54 // JSON RegExp
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
55 rvalidchars = /^[\],:{}\s]*$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
56 rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
57 rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
58 rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
59
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
60 // Useragent RegExp
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
61 rwebkit = /(webkit)[ \/]([\w.]+)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
62 ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
63 rmsie = /(msie) ([\w.]+)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
64 rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
65
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
66 // Keep a UserAgent string for use with jQuery.browser
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
67 userAgent = navigator.userAgent,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
68
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
69 // For matching the engine and version of the browser
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
70 browserMatch,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
71
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
72 // Has the ready events already been bound?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
73 readyBound = false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
74
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
75 // The deferred used on DOM ready
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
76 readyList,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
77
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
78 // Promise methods
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
79 promiseMethods = "then done fail isResolved isRejected promise".split( " " ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
80
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
81 // The ready event handler
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
82 DOMContentLoaded,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
83
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
84 // Save a reference to some core methods
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
85 toString = Object.prototype.toString,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
86 hasOwn = Object.prototype.hasOwnProperty,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
87 push = Array.prototype.push,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
88 slice = Array.prototype.slice,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
89 trim = String.prototype.trim,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
90 indexOf = Array.prototype.indexOf,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
91
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
92 // [[Class]] -> type pairs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
93 class2type = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
94
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
95 jQuery.fn = jQuery.prototype = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
96 constructor: jQuery,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
97 init: function( selector, context, rootjQuery ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
98 var match, elem, ret, doc;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
99
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
100 // Handle $(""), $(null), or $(undefined)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
101 if ( !selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
102 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
103 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
104
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
105 // Handle $(DOMElement)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
106 if ( selector.nodeType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
107 this.context = this[0] = selector;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
108 this.length = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
109 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
110 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
111
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
112 // The body element only exists once, optimize finding it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
113 if ( selector === "body" && !context && document.body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
114 this.context = document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
115 this[0] = document.body;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
116 this.selector = "body";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
117 this.length = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
118 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
119 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
120
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
121 // Handle HTML strings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
122 if ( typeof selector === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
123 // Are we dealing with HTML string or an ID?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
124 match = quickExpr.exec( selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
125
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
126 // Verify a match, and that no context was specified for #id
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
127 if ( match && (match[1] || !context) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
128
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
129 // HANDLE: $(html) -> $(array)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
130 if ( match[1] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
131 context = context instanceof jQuery ? context[0] : context;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
132 doc = (context ? context.ownerDocument || context : document);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
134 // If a single string is passed in and it's a single tag
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
135 // just do a createElement and skip the rest
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
136 ret = rsingleTag.exec( selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
137
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
138 if ( ret ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
139 if ( jQuery.isPlainObject( context ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
140 selector = [ document.createElement( ret[1] ) ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
141 jQuery.fn.attr.call( selector, context, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
142
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
143 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
144 selector = [ doc.createElement( ret[1] ) ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
145 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
146
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
147 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
148 ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
149 selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
150 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
151
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
152 return jQuery.merge( this, selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
153
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
154 // HANDLE: $("#id")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
155 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
156 elem = document.getElementById( match[2] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
157
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
158 // Check parentNode to catch when Blackberry 4.6 returns
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
159 // nodes that are no longer in the document #6963
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
160 if ( elem && elem.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
161 // Handle the case where IE and Opera return items
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
162 // by name instead of ID
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
163 if ( elem.id !== match[2] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
164 return rootjQuery.find( selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
165 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
166
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
167 // Otherwise, we inject the element directly into the jQuery object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
168 this.length = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
169 this[0] = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
170 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
171
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
172 this.context = document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
173 this.selector = selector;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
174 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
175 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
176
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
177 // HANDLE: $(expr, $(...))
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
178 } else if ( !context || context.jquery ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
179 return (context || rootjQuery).find( selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
180
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
181 // HANDLE: $(expr, context)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
182 // (which is just equivalent to: $(context).find(expr)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
183 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
184 return this.constructor( context ).find( selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
185 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
186
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
187 // HANDLE: $(function)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
188 // Shortcut for document ready
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
189 } else if ( jQuery.isFunction( selector ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
190 return rootjQuery.ready( selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
191 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
192
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
193 if (selector.selector !== undefined) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
194 this.selector = selector.selector;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
195 this.context = selector.context;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
196 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
197
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
198 return jQuery.makeArray( selector, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
199 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
200
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
201 // Start with an empty selector
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
202 selector: "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
203
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
204 // The current version of jQuery being used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
205 jquery: "1.5.1",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
206
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
207 // The default length of a jQuery object is 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
208 length: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
209
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
210 // The number of elements contained in the matched element set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
211 size: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
212 return this.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
213 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
214
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
215 toArray: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
216 return slice.call( this, 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
217 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
218
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
219 // Get the Nth element in the matched element set OR
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
220 // Get the whole matched element set as a clean array
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
221 get: function( num ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
222 return num == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
223
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
224 // Return a 'clean' array
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
225 this.toArray() :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
226
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
227 // Return just the object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
228 ( num < 0 ? this[ this.length + num ] : this[ num ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
229 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
230
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
231 // Take an array of elements and push it onto the stack
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
232 // (returning the new matched element set)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
233 pushStack: function( elems, name, selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
234 // Build a new jQuery matched element set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
235 var ret = this.constructor();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
236
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
237 if ( jQuery.isArray( elems ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
238 push.apply( ret, elems );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
239
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
240 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
241 jQuery.merge( ret, elems );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
242 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
243
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
244 // Add the old object onto the stack (as a reference)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
245 ret.prevObject = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
246
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
247 ret.context = this.context;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
248
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
249 if ( name === "find" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
250 ret.selector = this.selector + (this.selector ? " " : "") + selector;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
251 } else if ( name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
252 ret.selector = this.selector + "." + name + "(" + selector + ")";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
253 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
254
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
255 // Return the newly-formed element set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
256 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
257 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
258
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
259 // Execute a callback for every element in the matched set.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
260 // (You can seed the arguments with an array of args, but this is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
261 // only used internally.)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
262 each: function( callback, args ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
263 return jQuery.each( this, callback, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
264 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
265
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
266 ready: function( fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
267 // Attach the listeners
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
268 jQuery.bindReady();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
269
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
270 // Add the callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
271 readyList.done( fn );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
272
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
273 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
274 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
276 eq: function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
277 return i === -1 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
278 this.slice( i ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
279 this.slice( i, +i + 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
280 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
281
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
282 first: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
283 return this.eq( 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
284 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
285
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
286 last: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
287 return this.eq( -1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
288 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
289
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
290 slice: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
291 return this.pushStack( slice.apply( this, arguments ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
292 "slice", slice.call(arguments).join(",") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
293 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
294
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
295 map: function( callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
296 return this.pushStack( jQuery.map(this, function( elem, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
297 return callback.call( elem, i, elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
298 }));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
299 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
300
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
301 end: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
302 return this.prevObject || this.constructor(null);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
303 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
304
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
305 // For internal use only.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
306 // Behaves like an Array's method, not like a jQuery method.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
307 push: push,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
308 sort: [].sort,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
309 splice: [].splice
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
310 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
311
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
312 // Give the init function the jQuery prototype for later instantiation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
313 jQuery.fn.init.prototype = jQuery.fn;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
314
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
315 jQuery.extend = jQuery.fn.extend = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
316 var options, name, src, copy, copyIsArray, clone,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
317 target = arguments[0] || {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
318 i = 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
319 length = arguments.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
320 deep = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
321
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
322 // Handle a deep copy situation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
323 if ( typeof target === "boolean" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
324 deep = target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
325 target = arguments[1] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
326 // skip the boolean and the target
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
327 i = 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
328 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
329
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
330 // Handle case when target is a string or something (possible in deep copy)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
331 if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
332 target = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
333 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
334
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
335 // extend jQuery itself if only one argument is passed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
336 if ( length === i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
337 target = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
338 --i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
339 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
341 for ( ; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
342 // Only deal with non-null/undefined values
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
343 if ( (options = arguments[ i ]) != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
344 // Extend the base object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
345 for ( name in options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
346 src = target[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
347 copy = options[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
348
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
349 // Prevent never-ending loop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
350 if ( target === copy ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
351 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
352 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
353
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
354 // Recurse if we're merging plain objects or arrays
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
355 if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
356 if ( copyIsArray ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
357 copyIsArray = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
358 clone = src && jQuery.isArray(src) ? src : [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
359
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
360 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
361 clone = src && jQuery.isPlainObject(src) ? src : {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
362 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
364 // Never move original objects, clone them
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
365 target[ name ] = jQuery.extend( deep, clone, copy );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
366
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
367 // Don't bring in undefined values
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
368 } else if ( copy !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
369 target[ name ] = copy;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
370 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
371 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
372 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
373 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
374
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
375 // Return the modified object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
376 return target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
377 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
378
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
379 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
380 noConflict: function( deep ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
381 window.$ = _$;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
382
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
383 if ( deep ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
384 window.jQuery = _jQuery;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
385 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
386
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
387 return jQuery;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
388 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
389
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
390 // Is the DOM ready to be used? Set to true once it occurs.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
391 isReady: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
392
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
393 // A counter to track how many items to wait for before
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
394 // the ready event fires. See #6781
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
395 readyWait: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
396
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
397 // Handle when the DOM is ready
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
398 ready: function( wait ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
399 // A third-party is pushing the ready event forwards
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
400 if ( wait === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
401 jQuery.readyWait--;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
402 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
403
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
404 // Make sure that the DOM is not already loaded
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
405 if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
406 // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
407 if ( !document.body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
408 return setTimeout( jQuery.ready, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
409 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
410
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
411 // Remember that the DOM is ready
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
412 jQuery.isReady = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
413
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
414 // If a normal DOM Ready event fired, decrement, and wait if need be
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
415 if ( wait !== true && --jQuery.readyWait > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
416 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
417 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
418
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
419 // If there are functions bound, to execute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
420 readyList.resolveWith( document, [ jQuery ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
421
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
422 // Trigger any bound ready events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
423 if ( jQuery.fn.trigger ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
424 jQuery( document ).trigger( "ready" ).unbind( "ready" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
425 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
426 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
427 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
428
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
429 bindReady: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
430 if ( readyBound ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
431 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
432 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
433
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
434 readyBound = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
435
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
436 // Catch cases where $(document).ready() is called after the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
437 // browser event has already occurred.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
438 if ( document.readyState === "complete" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
439 // Handle it asynchronously to allow scripts the opportunity to delay ready
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
440 return setTimeout( jQuery.ready, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
441 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
442
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
443 // Mozilla, Opera and webkit nightlies currently support this event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
444 if ( document.addEventListener ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
445 // Use the handy event callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
446 document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
447
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
448 // A fallback to window.onload, that will always work
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
449 window.addEventListener( "load", jQuery.ready, false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
450
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
451 // If IE event model is used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
452 } else if ( document.attachEvent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
453 // ensure firing before onload,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
454 // maybe late but safe also for iframes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
455 document.attachEvent("onreadystatechange", DOMContentLoaded);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
456
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
457 // A fallback to window.onload, that will always work
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
458 window.attachEvent( "onload", jQuery.ready );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
459
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
460 // If IE and not a frame
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
461 // continually check to see if the document is ready
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
462 var toplevel = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
463
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
464 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
465 toplevel = window.frameElement == null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
466 } catch(e) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
467
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
468 if ( document.documentElement.doScroll && toplevel ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
469 doScrollCheck();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
470 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
471 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
472 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
473
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
474 // See test/unit/core.js for details concerning isFunction.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
475 // Since version 1.3, DOM methods and functions like alert
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
476 // aren't supported. They return false on IE (#2968).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
477 isFunction: function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
478 return jQuery.type(obj) === "function";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
479 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
480
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
481 isArray: Array.isArray || function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
482 return jQuery.type(obj) === "array";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
483 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
484
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
485 // A crude way of determining if an object is a window
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
486 isWindow: function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
487 return obj && typeof obj === "object" && "setInterval" in obj;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
488 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
489
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
490 isNaN: function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
491 return obj == null || !rdigit.test( obj ) || isNaN( obj );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
492 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
493
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
494 type: function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
495 return obj == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
496 String( obj ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
497 class2type[ toString.call(obj) ] || "object";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
498 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
499
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
500 isPlainObject: function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
501 // Must be an Object.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
502 // Because of IE, we also have to check the presence of the constructor property.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
503 // Make sure that DOM nodes and window objects don't pass through, as well
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
504 if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
505 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
506 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
507
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
508 // Not own constructor property must be Object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
509 if ( obj.constructor &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
510 !hasOwn.call(obj, "constructor") &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
511 !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
512 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
513 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
514
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
515 // Own properties are enumerated firstly, so to speed up,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
516 // if last one is own, then all properties are own.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
517
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
518 var key;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
519 for ( key in obj ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
520
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
521 return key === undefined || hasOwn.call( obj, key );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
522 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
523
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
524 isEmptyObject: function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
525 for ( var name in obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
526 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
527 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
528 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
529 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
530
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
531 error: function( msg ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
532 throw msg;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
533 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
534
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
535 parseJSON: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
536 if ( typeof data !== "string" || !data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
537 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
538 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
539
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
540 // Make sure leading/trailing whitespace is removed (IE can't handle it)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
541 data = jQuery.trim( data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
542
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
543 // Make sure the incoming data is actual JSON
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
544 // Logic borrowed from http://json.org/json2.js
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
545 if ( rvalidchars.test(data.replace(rvalidescape, "@")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
546 .replace(rvalidtokens, "]")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
547 .replace(rvalidbraces, "")) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
548
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
549 // Try to use the native JSON parser first
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
550 return window.JSON && window.JSON.parse ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
551 window.JSON.parse( data ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
552 (new Function("return " + data))();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
553
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
554 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
555 jQuery.error( "Invalid JSON: " + data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
556 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
557 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
558
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
559 // Cross-browser xml parsing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
560 // (xml & tmp used internally)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
561 parseXML: function( data , xml , tmp ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
562
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
563 if ( window.DOMParser ) { // Standard
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
564 tmp = new DOMParser();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
565 xml = tmp.parseFromString( data , "text/xml" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
566 } else { // IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
567 xml = new ActiveXObject( "Microsoft.XMLDOM" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
568 xml.async = "false";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
569 xml.loadXML( data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
570 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
571
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
572 tmp = xml.documentElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
573
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
574 if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
575 jQuery.error( "Invalid XML: " + data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
576 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
577
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
578 return xml;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
579 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
580
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
581 noop: function() {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
582
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
583 // Evalulates a script in a global context
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
584 globalEval: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
585 if ( data && rnotwhite.test(data) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
586 // Inspired by code by Andrea Giammarchi
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
587 // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
588 var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
589 script = document.createElement( "script" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
590
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
591 if ( jQuery.support.scriptEval() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
592 script.appendChild( document.createTextNode( data ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
593 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
594 script.text = data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
595 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
596
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
597 // Use insertBefore instead of appendChild to circumvent an IE6 bug.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
598 // This arises when a base node is used (#2709).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
599 head.insertBefore( script, head.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
600 head.removeChild( script );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
601 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
602 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
603
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
604 nodeName: function( elem, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
605 return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
606 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
607
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
608 // args is for internal usage only
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
609 each: function( object, callback, args ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
610 var name, i = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
611 length = object.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
612 isObj = length === undefined || jQuery.isFunction(object);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
613
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
614 if ( args ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
615 if ( isObj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
616 for ( name in object ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
617 if ( callback.apply( object[ name ], args ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
618 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
619 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
620 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
621 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
622 for ( ; i < length; ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
623 if ( callback.apply( object[ i++ ], args ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
624 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
625 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
626 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
627 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
628
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
629 // A special, fast, case for the most common use of each
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
630 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
631 if ( isObj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
632 for ( name in object ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
633 if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
634 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
635 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
636 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
637 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
638 for ( var value = object[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
639 i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
640 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
641 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
642
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
643 return object;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
644 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
645
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
646 // Use native String.trim function wherever possible
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
647 trim: trim ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
648 function( text ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
649 return text == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
650 "" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
651 trim.call( text );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
652 } :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
653
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
654 // Otherwise use our own trimming functionality
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
655 function( text ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
656 return text == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
657 "" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
658 text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
659 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
660
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
661 // results is for internal usage only
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
662 makeArray: function( array, results ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
663 var ret = results || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
664
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
665 if ( array != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
666 // The window, strings (and functions) also have 'length'
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
667 // The extra typeof function check is to prevent crashes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
668 // in Safari 2 (See: #3039)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
669 // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
670 var type = jQuery.type(array);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
671
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
672 if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
673 push.call( ret, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
674 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
675 jQuery.merge( ret, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
676 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
677 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
678
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
679 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
680 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
681
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
682 inArray: function( elem, array ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
683 if ( array.indexOf ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
684 return array.indexOf( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
685 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
686
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
687 for ( var i = 0, length = array.length; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
688 if ( array[ i ] === elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
689 return i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
690 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
691 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
692
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
693 return -1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
694 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
695
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
696 merge: function( first, second ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
697 var i = first.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
698 j = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
699
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
700 if ( typeof second.length === "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
701 for ( var l = second.length; j < l; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
702 first[ i++ ] = second[ j ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
703 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
705 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
706 while ( second[j] !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
707 first[ i++ ] = second[ j++ ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
708 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
709 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
710
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
711 first.length = i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
712
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
713 return first;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
714 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
715
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
716 grep: function( elems, callback, inv ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
717 var ret = [], retVal;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
718 inv = !!inv;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
719
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
720 // Go through the array, only saving the items
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
721 // that pass the validator function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
722 for ( var i = 0, length = elems.length; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
723 retVal = !!callback( elems[ i ], i );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
724 if ( inv !== retVal ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
725 ret.push( elems[ i ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
726 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
727 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
728
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
729 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
730 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
731
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
732 // arg is for internal usage only
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
733 map: function( elems, callback, arg ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
734 var ret = [], value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
735
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
736 // Go through the array, translating each of the items to their
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
737 // new value (or values).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
738 for ( var i = 0, length = elems.length; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
739 value = callback( elems[ i ], i, arg );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
740
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
741 if ( value != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
742 ret[ ret.length ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
743 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
744 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
745
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
746 // Flatten any nested arrays
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
747 return ret.concat.apply( [], ret );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
748 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
749
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
750 // A global GUID counter for objects
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
751 guid: 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
752
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
753 proxy: function( fn, proxy, thisObject ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
754 if ( arguments.length === 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
755 if ( typeof proxy === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
756 thisObject = fn;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
757 fn = thisObject[ proxy ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
758 proxy = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
759
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
760 } else if ( proxy && !jQuery.isFunction( proxy ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
761 thisObject = proxy;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
762 proxy = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
763 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
764 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
765
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
766 if ( !proxy && fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
767 proxy = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
768 return fn.apply( thisObject || this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
769 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
770 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
771
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
772 // Set the guid of unique handler to the same of original handler, so it can be removed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
773 if ( fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
774 proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
775 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
776
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
777 // So proxy can be declared as an argument
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
778 return proxy;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
779 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
780
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
781 // Mutifunctional method to get and set values to a collection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
782 // The value/s can be optionally by executed if its a function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
783 access: function( elems, key, value, exec, fn, pass ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
784 var length = elems.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
785
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
786 // Setting many attributes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
787 if ( typeof key === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
788 for ( var k in key ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
789 jQuery.access( elems, k, key[k], exec, fn, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
790 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
791 return elems;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
792 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
793
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
794 // Setting one attribute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
795 if ( value !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
796 // Optionally, function values get executed if exec is true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
797 exec = !pass && exec && jQuery.isFunction(value);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
798
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
799 for ( var i = 0; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
800 fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
801 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
802
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
803 return elems;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
804 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
805
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
806 // Getting an attribute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
807 return length ? fn( elems[0], key ) : undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
808 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
809
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
810 now: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
811 return (new Date()).getTime();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
812 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
813
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
814 // Create a simple deferred (one callbacks list)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
815 _Deferred: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
816 var // callbacks list
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
817 callbacks = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
818 // stored [ context , args ]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
819 fired,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
820 // to avoid firing when already doing so
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
821 firing,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
822 // flag to know if the deferred has been cancelled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
823 cancelled,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
824 // the deferred itself
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
825 deferred = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
826
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
827 // done( f1, f2, ...)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
828 done: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
829 if ( !cancelled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
830 var args = arguments,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
831 i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
832 length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
833 elem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
834 type,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
835 _fired;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
836 if ( fired ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
837 _fired = fired;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
838 fired = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
839 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
840 for ( i = 0, length = args.length; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
841 elem = args[ i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
842 type = jQuery.type( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
843 if ( type === "array" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
844 deferred.done.apply( deferred, elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
845 } else if ( type === "function" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
846 callbacks.push( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
847 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
848 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
849 if ( _fired ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
850 deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
851 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
852 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
853 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
854 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
855
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
856 // resolve with given context and args
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
857 resolveWith: function( context, args ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
858 if ( !cancelled && !fired && !firing ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
859 firing = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
860 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
861 while( callbacks[ 0 ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
862 callbacks.shift().apply( context, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
863 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
864 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
865 // We have to add a catch block for
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
866 // IE prior to 8 or else the finally
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
867 // block will never get executed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
868 catch (e) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
869 throw e;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
870 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
871 finally {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
872 fired = [ context, args ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
873 firing = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
874 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
875 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
876 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
877 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
878
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
879 // resolve with this as context and given arguments
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
880 resolve: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
881 deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
882 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
883 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
884
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
885 // Has this deferred been resolved?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
886 isResolved: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
887 return !!( firing || fired );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
888 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
889
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
890 // Cancel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
891 cancel: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
892 cancelled = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
893 callbacks = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
894 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
895 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
896 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
897
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
898 return deferred;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
899 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
900
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
901 // Full fledged deferred (two callbacks list)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
902 Deferred: function( func ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
903 var deferred = jQuery._Deferred(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
904 failDeferred = jQuery._Deferred(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
905 promise;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
906 // Add errorDeferred methods, then and promise
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
907 jQuery.extend( deferred, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
908 then: function( doneCallbacks, failCallbacks ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
909 deferred.done( doneCallbacks ).fail( failCallbacks );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
910 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
911 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
912 fail: failDeferred.done,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
913 rejectWith: failDeferred.resolveWith,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
914 reject: failDeferred.resolve,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
915 isRejected: failDeferred.isResolved,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
916 // Get a promise for this deferred
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
917 // If obj is provided, the promise aspect is added to the object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
918 promise: function( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
919 if ( obj == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
920 if ( promise ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
921 return promise;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
922 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
923 promise = obj = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
924 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
925 var i = promiseMethods.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
926 while( i-- ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
927 obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
928 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
929 return obj;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
930 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
931 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
932 // Make sure only one callback list will be used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
933 deferred.done( failDeferred.cancel ).fail( deferred.cancel );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
934 // Unexpose cancel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
935 delete deferred.cancel;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
936 // Call given func if any
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
937 if ( func ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
938 func.call( deferred, deferred );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
939 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
940 return deferred;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
941 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
942
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
943 // Deferred helper
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
944 when: function( object ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
945 var lastIndex = arguments.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
946 deferred = lastIndex <= 1 && object && jQuery.isFunction( object.promise ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
947 object :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
948 jQuery.Deferred(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
949 promise = deferred.promise();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
950
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
951 if ( lastIndex > 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
952 var array = slice.call( arguments, 0 ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
953 count = lastIndex,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
954 iCallback = function( index ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
955 return function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
956 array[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
957 if ( !( --count ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
958 deferred.resolveWith( promise, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
959 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
960 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
961 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
962 while( ( lastIndex-- ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
963 object = array[ lastIndex ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
964 if ( object && jQuery.isFunction( object.promise ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
965 object.promise().then( iCallback(lastIndex), deferred.reject );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
966 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
967 --count;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
968 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
969 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
970 if ( !count ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
971 deferred.resolveWith( promise, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
972 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
973 } else if ( deferred !== object ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
974 deferred.resolve( object );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
975 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
976 return promise;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
977 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
978
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
979 // Use of jQuery.browser is frowned upon.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
980 // More details: http://docs.jquery.com/Utilities/jQuery.browser
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
981 uaMatch: function( ua ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
982 ua = ua.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
983
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
984 var match = rwebkit.exec( ua ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
985 ropera.exec( ua ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
986 rmsie.exec( ua ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
987 ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
988 [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
989
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
990 return { browser: match[1] || "", version: match[2] || "0" };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
991 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
992
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
993 sub: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
994 function jQuerySubclass( selector, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
995 return new jQuerySubclass.fn.init( selector, context );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
996 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
997 jQuery.extend( true, jQuerySubclass, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
998 jQuerySubclass.superclass = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
999 jQuerySubclass.fn = jQuerySubclass.prototype = this();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1000 jQuerySubclass.fn.constructor = jQuerySubclass;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1001 jQuerySubclass.subclass = this.subclass;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1002 jQuerySubclass.fn.init = function init( selector, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1003 if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1004 context = jQuerySubclass(context);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1005 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1006
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1007 return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1008 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1009 jQuerySubclass.fn.init.prototype = jQuerySubclass.fn;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1010 var rootjQuerySubclass = jQuerySubclass(document);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1011 return jQuerySubclass;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1012 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1013
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1014 browser: {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1015 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1016
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1017 // Create readyList deferred
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1018 readyList = jQuery._Deferred();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1019
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1020 // Populate the class2type map
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1021 jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1022 class2type[ "[object " + name + "]" ] = name.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1023 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1024
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1025 browserMatch = jQuery.uaMatch( userAgent );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1026 if ( browserMatch.browser ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1027 jQuery.browser[ browserMatch.browser ] = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1028 jQuery.browser.version = browserMatch.version;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1029 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1030
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1031 // Deprecated, use jQuery.browser.webkit instead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1032 if ( jQuery.browser.webkit ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1033 jQuery.browser.safari = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1034 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1035
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1036 if ( indexOf ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1037 jQuery.inArray = function( elem, array ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1038 return indexOf.call( array, elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1039 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1040 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1041
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1042 // IE doesn't match non-breaking spaces with \s
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1043 if ( rnotwhite.test( "\xA0" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1044 trimLeft = /^[\s\xA0]+/;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1045 trimRight = /[\s\xA0]+$/;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1046 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1048 // All jQuery objects should point back to these
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1049 rootjQuery = jQuery(document);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1050
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1051 // Cleanup functions for the document ready method
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1052 if ( document.addEventListener ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1053 DOMContentLoaded = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1054 document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1055 jQuery.ready();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1056 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1057
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1058 } else if ( document.attachEvent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1059 DOMContentLoaded = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1060 // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1061 if ( document.readyState === "complete" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1062 document.detachEvent( "onreadystatechange", DOMContentLoaded );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1063 jQuery.ready();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1064 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1065 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1066 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1067
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1068 // The DOM ready check for Internet Explorer
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1069 function doScrollCheck() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1070 if ( jQuery.isReady ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1071 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1072 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1073
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1074 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1075 // If IE is used, use the trick by Diego Perini
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1076 // http://javascript.nwbox.com/IEContentLoaded/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1077 document.documentElement.doScroll("left");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1078 } catch(e) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1079 setTimeout( doScrollCheck, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1080 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1081 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1082
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1083 // and execute any waiting functions
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1084 jQuery.ready();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1085 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1086
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1087 // Expose jQuery to the global object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1088 return jQuery;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1089
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1090 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1091
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1092
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1093 (function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1094
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1095 jQuery.support = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1096
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1097 var div = document.createElement("div");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1098
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1099 div.style.display = "none";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1100 div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1101
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1102 var all = div.getElementsByTagName("*"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1103 a = div.getElementsByTagName("a")[0],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1104 select = document.createElement("select"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1105 opt = select.appendChild( document.createElement("option") ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1106 input = div.getElementsByTagName("input")[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1107
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1108 // Can't get basic test support
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1109 if ( !all || !all.length || !a ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1110 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1111 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1112
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1113 jQuery.support = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1114 // IE strips leading whitespace when .innerHTML is used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1115 leadingWhitespace: div.firstChild.nodeType === 3,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1116
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1117 // Make sure that tbody elements aren't automatically inserted
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1118 // IE will insert them into empty tables
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1119 tbody: !div.getElementsByTagName("tbody").length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1120
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1121 // Make sure that link elements get serialized correctly by innerHTML
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1122 // This requires a wrapper element in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1123 htmlSerialize: !!div.getElementsByTagName("link").length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1124
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1125 // Get the style information from getAttribute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1126 // (IE uses .cssText insted)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1127 style: /red/.test( a.getAttribute("style") ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1128
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1129 // Make sure that URLs aren't manipulated
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1130 // (IE normalizes it by default)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1131 hrefNormalized: a.getAttribute("href") === "/a",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1132
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1133 // Make sure that element opacity exists
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1134 // (IE uses filter instead)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1135 // Use a regex to work around a WebKit issue. See #5145
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1136 opacity: /^0.55$/.test( a.style.opacity ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1137
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1138 // Verify style float existence
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1139 // (IE uses styleFloat instead of cssFloat)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1140 cssFloat: !!a.style.cssFloat,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1141
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1142 // Make sure that if no value is specified for a checkbox
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1143 // that it defaults to "on".
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1144 // (WebKit defaults to "" instead)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1145 checkOn: input.value === "on",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1146
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1147 // Make sure that a selected-by-default option has a working selected property.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1148 // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1149 optSelected: opt.selected,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1151 // Will be defined later
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1152 deleteExpando: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1153 optDisabled: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1154 checkClone: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1155 noCloneEvent: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1156 noCloneChecked: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1157 boxModel: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1158 inlineBlockNeedsLayout: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1159 shrinkWrapBlocks: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1160 reliableHiddenOffsets: true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1161 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1162
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1163 input.checked = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1164 jQuery.support.noCloneChecked = input.cloneNode( true ).checked;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1165
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1166 // Make sure that the options inside disabled selects aren't marked as disabled
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1167 // (WebKit marks them as diabled)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1168 select.disabled = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1169 jQuery.support.optDisabled = !opt.disabled;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1170
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1171 var _scriptEval = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1172 jQuery.support.scriptEval = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1173 if ( _scriptEval === null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1174 var root = document.documentElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1175 script = document.createElement("script"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1176 id = "script" + jQuery.now();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1177
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1178 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1179 script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1180 } catch(e) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1181
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1182 root.insertBefore( script, root.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1183
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1184 // Make sure that the execution of code works by injecting a script
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1185 // tag with appendChild/createTextNode
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1186 // (IE doesn't support this, fails, and uses .text instead)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1187 if ( window[ id ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1188 _scriptEval = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1189 delete window[ id ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1190 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1191 _scriptEval = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1192 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1193
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1194 root.removeChild( script );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1195 // release memory in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1196 root = script = id = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1197 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1199 return _scriptEval;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1200 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1201
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1202 // Test to see if it's possible to delete an expando from an element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1203 // Fails in Internet Explorer
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1204 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1205 delete div.test;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1206
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1207 } catch(e) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1208 jQuery.support.deleteExpando = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1209 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1210
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1211 if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1212 div.attachEvent("onclick", function click() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1213 // Cloning a node shouldn't copy over any
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1214 // bound event handlers (IE does this)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1215 jQuery.support.noCloneEvent = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1216 div.detachEvent("onclick", click);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1217 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1218 div.cloneNode(true).fireEvent("onclick");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1219 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1220
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1221 div = document.createElement("div");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1222 div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1223
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1224 var fragment = document.createDocumentFragment();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1225 fragment.appendChild( div.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1226
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1227 // WebKit doesn't clone checked state correctly in fragments
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1228 jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1229
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1230 // Figure out if the W3C box model works as expected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1231 // document.body must exist before we can do this
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1232 jQuery(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1233 var div = document.createElement("div"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1234 body = document.getElementsByTagName("body")[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1235
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1236 // Frameset documents with no body should not run this code
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1237 if ( !body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1238 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1239 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1240
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1241 div.style.width = div.style.paddingLeft = "1px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1242 body.appendChild( div );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1243 jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1244
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1245 if ( "zoom" in div.style ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1246 // Check if natively block-level elements act like inline-block
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1247 // elements when setting their display to 'inline' and giving
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1248 // them layout
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1249 // (IE < 8 does this)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1250 div.style.display = "inline";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1251 div.style.zoom = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1252 jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1253
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1254 // Check if elements with layout shrink-wrap their children
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1255 // (IE 6 does this)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1256 div.style.display = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1257 div.innerHTML = "<div style='width:4px;'></div>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1258 jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1259 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1260
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1261 div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1262 var tds = div.getElementsByTagName("td");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1263
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1264 // Check if table cells still have offsetWidth/Height when they are set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1265 // to display:none and there are still other visible table cells in a
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1266 // table row; if so, offsetWidth/Height are not reliable for use when
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1267 // determining if an element has been hidden directly using
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1268 // display:none (it is still safe to use offsets if a parent element is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1269 // hidden; don safety goggles and see bug #4512 for more information).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1270 // (only IE 8 fails this test)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1271 jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1272
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1273 tds[0].style.display = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1274 tds[1].style.display = "none";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1276 // Check if empty table cells still have offsetWidth/Height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1277 // (IE < 8 fail this test)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1278 jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1279 div.innerHTML = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1280
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1281 body.removeChild( div ).style.display = "none";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1282 div = tds = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1283 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1284
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1285 // Technique from Juriy Zaytsev
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1286 // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1287 var eventSupported = function( eventName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1288 var el = document.createElement("div");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1289 eventName = "on" + eventName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1290
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1291 // We only care about the case where non-standard event systems
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1292 // are used, namely in IE. Short-circuiting here helps us to
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1293 // avoid an eval call (in setAttribute) which can cause CSP
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1294 // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1295 if ( !el.attachEvent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1296 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1297 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1298
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1299 var isSupported = (eventName in el);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1300 if ( !isSupported ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1301 el.setAttribute(eventName, "return;");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1302 isSupported = typeof el[eventName] === "function";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1303 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1304 el = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1305
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1306 return isSupported;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1307 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1308
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1309 jQuery.support.submitBubbles = eventSupported("submit");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1310 jQuery.support.changeBubbles = eventSupported("change");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1311
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1312 // release memory in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1313 div = all = a = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1314 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1315
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1316
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1317
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1318 var rbrace = /^(?:\{.*\}|\[.*\])$/;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1319
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1320 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1321 cache: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1322
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1323 // Please use with caution
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1324 uuid: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1325
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1326 // Unique for each copy of jQuery on the page
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1327 // Non-digits removed to match rinlinejQuery
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1328 expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1329
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1330 // The following elements throw uncatchable exceptions if you
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1331 // attempt to add expando properties to them.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1332 noData: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1333 "embed": true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1334 // Ban all objects except for Flash (which handle expandos)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1335 "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1336 "applet": true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1337 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1338
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1339 hasData: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1340 elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1341
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1342 return !!elem && !isEmptyDataObject( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1343 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1344
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1345 data: function( elem, name, data, pvt /* Internal Use Only */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1346 if ( !jQuery.acceptData( elem ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1347 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1348 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1349
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1350 var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1351
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1352 // We have to handle DOM nodes and JS objects differently because IE6-7
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1353 // can't GC object references properly across the DOM-JS boundary
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1354 isNode = elem.nodeType,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1355
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1356 // Only DOM nodes need the global jQuery cache; JS object data is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1357 // attached directly to the object so GC can occur automatically
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1358 cache = isNode ? jQuery.cache : elem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1359
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1360 // Only defining an ID for JS objects if its cache already exists allows
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1361 // the code to shortcut on the same path as a DOM node with no cache
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1362 id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1364 // Avoid doing any more work than we need to when trying to get data on an
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1365 // object that has no data at all
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1366 if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1367 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1368 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1369
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1370 if ( !id ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1371 // Only DOM nodes need a new unique ID for each element since their data
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1372 // ends up in the global cache
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1373 if ( isNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1374 elem[ jQuery.expando ] = id = ++jQuery.uuid;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1375 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1376 id = jQuery.expando;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1377 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1378 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1379
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1380 if ( !cache[ id ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1381 cache[ id ] = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1382
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1383 // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1384 // metadata on plain JS objects when the object is serialized using
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1385 // JSON.stringify
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1386 if ( !isNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1387 cache[ id ].toJSON = jQuery.noop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1388 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1389 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1390
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1391 // An object can be passed to jQuery.data instead of a key/value pair; this gets
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1392 // shallow copied over onto the existing cache
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1393 if ( typeof name === "object" || typeof name === "function" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1394 if ( pvt ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1395 cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1396 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1397 cache[ id ] = jQuery.extend(cache[ id ], name);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1398 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1399 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1400
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1401 thisCache = cache[ id ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1402
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1403 // Internal jQuery data is stored in a separate object inside the object's data
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1404 // cache in order to avoid key collisions between internal data and user-defined
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1405 // data
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1406 if ( pvt ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1407 if ( !thisCache[ internalKey ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1408 thisCache[ internalKey ] = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1409 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1410
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1411 thisCache = thisCache[ internalKey ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1412 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1413
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1414 if ( data !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1415 thisCache[ name ] = data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1416 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1417
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1418 // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1419 // not attempt to inspect the internal events object using jQuery.data, as this
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1420 // internal data object is undocumented and subject to change.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1421 if ( name === "events" && !thisCache[name] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1422 return thisCache[ internalKey ] && thisCache[ internalKey ].events;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1423 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1424
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1425 return getByName ? thisCache[ name ] : thisCache;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1426 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1427
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1428 removeData: function( elem, name, pvt /* Internal Use Only */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1429 if ( !jQuery.acceptData( elem ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1430 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1431 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1432
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1433 var internalKey = jQuery.expando, isNode = elem.nodeType,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1434
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1435 // See jQuery.data for more information
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1436 cache = isNode ? jQuery.cache : elem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1437
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1438 // See jQuery.data for more information
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1439 id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1440
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1441 // If there is already no cache entry for this object, there is no
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1442 // purpose in continuing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1443 if ( !cache[ id ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1444 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1445 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1446
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1447 if ( name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1448 var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1449
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1450 if ( thisCache ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1451 delete thisCache[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1452
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1453 // If there is no data left in the cache, we want to continue
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1454 // and let the cache object itself get destroyed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1455 if ( !isEmptyDataObject(thisCache) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1456 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1457 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1458 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1459 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1460
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1461 // See jQuery.data for more information
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1462 if ( pvt ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1463 delete cache[ id ][ internalKey ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1464
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1465 // Don't destroy the parent cache unless the internal data object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1466 // had been the only thing left in it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1467 if ( !isEmptyDataObject(cache[ id ]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1468 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1469 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1470 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1471
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1472 var internalCache = cache[ id ][ internalKey ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1473
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1474 // Browsers that fail expando deletion also refuse to delete expandos on
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1475 // the window, but it will allow it on all other JS objects; other browsers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1476 // don't care
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1477 if ( jQuery.support.deleteExpando || cache != window ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1478 delete cache[ id ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1479 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1480 cache[ id ] = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1481 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1482
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1483 // We destroyed the entire user cache at once because it's faster than
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1484 // iterating through each key, but we need to continue to persist internal
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1485 // data if it existed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1486 if ( internalCache ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1487 cache[ id ] = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1488 // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1489 // metadata on plain JS objects when the object is serialized using
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1490 // JSON.stringify
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1491 if ( !isNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1492 cache[ id ].toJSON = jQuery.noop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1493 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1494
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1495 cache[ id ][ internalKey ] = internalCache;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1496
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1497 // Otherwise, we need to eliminate the expando on the node to avoid
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1498 // false lookups in the cache for entries that no longer exist
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1499 } else if ( isNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1500 // IE does not allow us to delete expando properties from nodes,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1501 // nor does it have a removeAttribute function on Document nodes;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1502 // we must handle all of these cases
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1503 if ( jQuery.support.deleteExpando ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1504 delete elem[ jQuery.expando ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1505 } else if ( elem.removeAttribute ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1506 elem.removeAttribute( jQuery.expando );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1507 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1508 elem[ jQuery.expando ] = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1509 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1510 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1511 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1513 // For internal use only.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1514 _data: function( elem, name, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1515 return jQuery.data( elem, name, data, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1516 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1517
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1518 // A method for determining if a DOM node can handle the data expando
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1519 acceptData: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1520 if ( elem.nodeName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1521 var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1522
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1523 if ( match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1524 return !(match === true || elem.getAttribute("classid") !== match);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1525 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1526 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1527
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1528 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1529 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1530 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1532 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1533 data: function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1534 var data = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1535
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1536 if ( typeof key === "undefined" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1537 if ( this.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1538 data = jQuery.data( this[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1539
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1540 if ( this[0].nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1541 var attr = this[0].attributes, name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1542 for ( var i = 0, l = attr.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1543 name = attr[i].name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1544
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1545 if ( name.indexOf( "data-" ) === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1546 name = name.substr( 5 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1547 dataAttr( this[0], name, data[ name ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1548 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1549 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1550 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1551 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1552
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1553 return data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1554
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1555 } else if ( typeof key === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1556 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1557 jQuery.data( this, key );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1558 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1559 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1560
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1561 var parts = key.split(".");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1562 parts[1] = parts[1] ? "." + parts[1] : "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1563
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1564 if ( value === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1565 data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1566
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1567 // Try to fetch any internally stored data first
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1568 if ( data === undefined && this.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1569 data = jQuery.data( this[0], key );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1570 data = dataAttr( this[0], key, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1571 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1572
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1573 return data === undefined && parts[1] ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1574 this.data( parts[0] ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1575 data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1576
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1577 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1578 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1579 var $this = jQuery( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1580 args = [ parts[0], value ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1581
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1582 $this.triggerHandler( "setData" + parts[1] + "!", args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1583 jQuery.data( this, key, value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1584 $this.triggerHandler( "changeData" + parts[1] + "!", args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1585 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1586 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1587 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1589 removeData: function( key ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1590 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1591 jQuery.removeData( this, key );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1592 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1593 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1594 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1596 function dataAttr( elem, key, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1597 // If nothing was found internally, try to fetch any
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1598 // data from the HTML5 data-* attribute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1599 if ( data === undefined && elem.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1600 data = elem.getAttribute( "data-" + key );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1601
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1602 if ( typeof data === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1603 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1604 data = data === "true" ? true :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1605 data === "false" ? false :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1606 data === "null" ? null :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1607 !jQuery.isNaN( data ) ? parseFloat( data ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1608 rbrace.test( data ) ? jQuery.parseJSON( data ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1609 data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1610 } catch( e ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1611
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1612 // Make sure we set the data so it isn't changed later
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1613 jQuery.data( elem, key, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1614
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1615 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1616 data = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1617 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1618 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1619
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1620 return data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1621 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1622
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1623 // TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1624 // property to be considered empty objects; this property always exists in
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1625 // order to make sure JSON.stringify does not expose internal metadata
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1626 function isEmptyDataObject( obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1627 for ( var name in obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1628 if ( name !== "toJSON" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1629 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1630 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1631 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1632
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1633 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1634 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1635
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1636
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1637
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1638
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1639 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1640 queue: function( elem, type, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1641 if ( !elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1642 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1643 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1644
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1645 type = (type || "fx") + "queue";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1646 var q = jQuery._data( elem, type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1647
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1648 // Speed up dequeue by getting out quickly if this is just a lookup
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1649 if ( !data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1650 return q || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1651 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1652
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1653 if ( !q || jQuery.isArray(data) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1654 q = jQuery._data( elem, type, jQuery.makeArray(data) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1655
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1656 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1657 q.push( data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1658 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1659
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1660 return q;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1661 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1662
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1663 dequeue: function( elem, type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1664 type = type || "fx";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1665
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1666 var queue = jQuery.queue( elem, type ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1667 fn = queue.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1668
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1669 // If the fx queue is dequeued, always remove the progress sentinel
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1670 if ( fn === "inprogress" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1671 fn = queue.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1672 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1673
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1674 if ( fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1675 // Add a progress sentinel to prevent the fx queue from being
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1676 // automatically dequeued
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1677 if ( type === "fx" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1678 queue.unshift("inprogress");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1679 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1680
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1681 fn.call(elem, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1682 jQuery.dequeue(elem, type);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1683 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1684 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1685
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1686 if ( !queue.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1687 jQuery.removeData( elem, type + "queue", true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1688 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1689 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1690 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1691
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1692 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1693 queue: function( type, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1694 if ( typeof type !== "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1695 data = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1696 type = "fx";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1697 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1698
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1699 if ( data === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1700 return jQuery.queue( this[0], type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1701 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1702 return this.each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1703 var queue = jQuery.queue( this, type, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1705 if ( type === "fx" && queue[0] !== "inprogress" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1706 jQuery.dequeue( this, type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1707 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1708 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1709 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1710 dequeue: function( type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1711 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1712 jQuery.dequeue( this, type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1713 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1714 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1715
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1716 // Based off of the plugin by Clint Helfers, with permission.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1717 // http://blindsignals.com/index.php/2009/07/jquery-delay/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1718 delay: function( time, type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1719 time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1720 type = type || "fx";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1721
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1722 return this.queue( type, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1723 var elem = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1724 setTimeout(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1725 jQuery.dequeue( elem, type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1726 }, time );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1727 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1728 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1729
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1730 clearQueue: function( type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1731 return this.queue( type || "fx", [] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1732 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1733 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1734
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1735
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1736
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1737
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1738 var rclass = /[\n\t\r]/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1739 rspaces = /\s+/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1740 rreturn = /\r/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1741 rspecialurl = /^(?:href|src|style)$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1742 rtype = /^(?:button|input)$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1743 rfocusable = /^(?:button|input|object|select|textarea)$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1744 rclickable = /^a(?:rea)?$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1745 rradiocheck = /^(?:radio|checkbox)$/i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1746
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1747 jQuery.props = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1748 "for": "htmlFor",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1749 "class": "className",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1750 readonly: "readOnly",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1751 maxlength: "maxLength",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1752 cellspacing: "cellSpacing",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1753 rowspan: "rowSpan",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1754 colspan: "colSpan",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1755 tabindex: "tabIndex",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1756 usemap: "useMap",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1757 frameborder: "frameBorder"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1758 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1759
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1760 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1761 attr: function( name, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1762 return jQuery.access( this, name, value, true, jQuery.attr );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1763 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1764
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1765 removeAttr: function( name, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1766 return this.each(function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1767 jQuery.attr( this, name, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1768 if ( this.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1769 this.removeAttribute( name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1770 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1771 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1772 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1773
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1774 addClass: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1775 if ( jQuery.isFunction(value) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1776 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1777 var self = jQuery(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1778 self.addClass( value.call(this, i, self.attr("class")) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1779 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1780 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1781
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1782 if ( value && typeof value === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1783 var classNames = (value || "").split( rspaces );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1784
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1785 for ( var i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1786 var elem = this[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1787
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1788 if ( elem.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1789 if ( !elem.className ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1790 elem.className = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1791
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1792 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1793 var className = " " + elem.className + " ",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1794 setClass = elem.className;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1796 for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1797 if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1798 setClass += " " + classNames[c];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1799 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1800 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1801 elem.className = jQuery.trim( setClass );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1802 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1803 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1804 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1805 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1806
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1807 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1808 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1809
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1810 removeClass: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1811 if ( jQuery.isFunction(value) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1812 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1813 var self = jQuery(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1814 self.removeClass( value.call(this, i, self.attr("class")) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1815 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1816 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1817
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1818 if ( (value && typeof value === "string") || value === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1819 var classNames = (value || "").split( rspaces );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1820
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1821 for ( var i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1822 var elem = this[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1823
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1824 if ( elem.nodeType === 1 && elem.className ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1825 if ( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1826 var className = (" " + elem.className + " ").replace(rclass, " ");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1827 for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1828 className = className.replace(" " + classNames[c] + " ", " ");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1829 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1830 elem.className = jQuery.trim( className );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1831
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1832 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1833 elem.className = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1834 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1835 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1836 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1837 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1838
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1839 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1840 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1841
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1842 toggleClass: function( value, stateVal ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1843 var type = typeof value,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1844 isBool = typeof stateVal === "boolean";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1845
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1846 if ( jQuery.isFunction( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1847 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1848 var self = jQuery(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1849 self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1850 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1851 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1852
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1853 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1854 if ( type === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1855 // toggle individual class names
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1856 var className,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1857 i = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1858 self = jQuery( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1859 state = stateVal,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1860 classNames = value.split( rspaces );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1861
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1862 while ( (className = classNames[ i++ ]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1863 // check each className given, space seperated list
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1864 state = isBool ? state : !self.hasClass( className );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1865 self[ state ? "addClass" : "removeClass" ]( className );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1866 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1867
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1868 } else if ( type === "undefined" || type === "boolean" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1869 if ( this.className ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1870 // store className if set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1871 jQuery._data( this, "__className__", this.className );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1872 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1873
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1874 // toggle whole className
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1875 this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1876 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1877 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1878 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1879
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1880 hasClass: function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1881 var className = " " + selector + " ";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1882 for ( var i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1883 if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1884 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1885 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1886 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1887
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1888 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1889 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1890
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1891 val: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1892 if ( !arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1893 var elem = this[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1894
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1895 if ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1896 if ( jQuery.nodeName( elem, "option" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1897 // attributes.value is undefined in Blackberry 4.7 but
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1898 // uses .value. See #6932
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1899 var val = elem.attributes.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1900 return !val || val.specified ? elem.value : elem.text;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1901 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1902
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1903 // We need to handle select boxes special
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1904 if ( jQuery.nodeName( elem, "select" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1905 var index = elem.selectedIndex,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1906 values = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1907 options = elem.options,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1908 one = elem.type === "select-one";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1909
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1910 // Nothing was selected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1911 if ( index < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1912 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1913 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1914
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1915 // Loop through all the selected options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1916 for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1917 var option = options[ i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1918
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1919 // Don't return options that are disabled or in a disabled optgroup
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1920 if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1921 (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1922
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1923 // Get the specific value for the option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1924 value = jQuery(option).val();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1925
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1926 // We don't need an array for one selects
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1927 if ( one ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1928 return value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1929 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1930
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1931 // Multi-Selects return an array
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1932 values.push( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1933 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1934 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1935
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1936 // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1937 if ( one && !values.length && options.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1938 return jQuery( options[ index ] ).val();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1939 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1940
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1941 return values;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1942 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1943
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1944 // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1945 if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1946 return elem.getAttribute("value") === null ? "on" : elem.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1947 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1948
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1949 // Everything else, we just grab the value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1950 return (elem.value || "").replace(rreturn, "");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1951
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1952 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1953
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1954 return undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1955 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1957 var isFunction = jQuery.isFunction(value);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1958
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1959 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1960 var self = jQuery(this), val = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1961
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1962 if ( this.nodeType !== 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1963 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1964 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1965
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1966 if ( isFunction ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1967 val = value.call(this, i, self.val());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1968 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1969
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1970 // Treat null/undefined as ""; convert numbers to string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1971 if ( val == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1972 val = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1973 } else if ( typeof val === "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1974 val += "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1975 } else if ( jQuery.isArray(val) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1976 val = jQuery.map(val, function (value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1977 return value == null ? "" : value + "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1978 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1979 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1980
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1981 if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1982 this.checked = jQuery.inArray( self.val(), val ) >= 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1983
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1984 } else if ( jQuery.nodeName( this, "select" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1985 var values = jQuery.makeArray(val);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1986
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1987 jQuery( "option", this ).each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1988 this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1989 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1990
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1991 if ( !values.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1992 this.selectedIndex = -1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1993 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1994
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1995 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1996 this.value = val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1997 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1998 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
1999 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2000 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2001
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2002 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2003 attrFn: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2004 val: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2005 css: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2006 html: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2007 text: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2008 data: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2009 width: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2010 height: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2011 offset: true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2012 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2013
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2014 attr: function( elem, name, value, pass ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2015 // don't get/set attributes on text, comment and attribute nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2016 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2017 return undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2018 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2019
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2020 if ( pass && name in jQuery.attrFn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2021 return jQuery(elem)[name](value);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2022 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2023
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2024 var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2025 // Whether we are setting (or getting)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2026 set = value !== undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2027
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2028 // Try to normalize/fix the name
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2029 name = notxml && jQuery.props[ name ] || name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2030
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2031 // Only do all the following if this is a node (faster for style)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2032 if ( elem.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2033 // These attributes require special treatment
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2034 var special = rspecialurl.test( name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2035
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2036 // Safari mis-reports the default selected property of an option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2037 // Accessing the parent's selectedIndex property fixes it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2038 if ( name === "selected" && !jQuery.support.optSelected ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2039 var parent = elem.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2040 if ( parent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2041 parent.selectedIndex;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2042
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2043 // Make sure that it also works with optgroups, see #5701
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2044 if ( parent.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2045 parent.parentNode.selectedIndex;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2046 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2047 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2048 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2049
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2050 // If applicable, access the attribute via the DOM 0 way
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2051 // 'in' checks fail in Blackberry 4.7 #6931
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2052 if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2053 if ( set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2054 // We can't allow the type property to be changed (since it causes problems in IE)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2055 if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2056 jQuery.error( "type property can't be changed" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2057 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2058
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2059 if ( value === null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2060 if ( elem.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2061 elem.removeAttribute( name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2062 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2063
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2064 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2065 elem[ name ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2066 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2067 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2068
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2069 // browsers index elements by id/name on forms, give priority to attributes.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2070 if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2071 return elem.getAttributeNode( name ).nodeValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2072 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2073
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2074 // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2075 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2076 if ( name === "tabIndex" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2077 var attributeNode = elem.getAttributeNode( "tabIndex" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2078
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2079 return attributeNode && attributeNode.specified ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2080 attributeNode.value :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2081 rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2082 0 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2083 undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2084 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2085
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2086 return elem[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2087 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2088
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2089 if ( !jQuery.support.style && notxml && name === "style" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2090 if ( set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2091 elem.style.cssText = "" + value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2092 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2093
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2094 return elem.style.cssText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2095 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2096
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2097 if ( set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2098 // convert the value to a string (all browsers do this but IE) see #1070
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2099 elem.setAttribute( name, "" + value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2100 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2101
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2102 // Ensure that missing attributes return undefined
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2103 // Blackberry 4.7 returns "" from getAttribute #6938
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2104 if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2105 return undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2106 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2107
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2108 var attr = !jQuery.support.hrefNormalized && notxml && special ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2109 // Some attributes require a special call on IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2110 elem.getAttribute( name, 2 ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2111 elem.getAttribute( name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2112
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2113 // Non-existent attributes return null, we normalize to undefined
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2114 return attr === null ? undefined : attr;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2115 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2116 // Handle everything which isn't a DOM element node
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2117 if ( set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2118 elem[ name ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2119 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2120 return elem[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2121 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2122 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2123
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2124
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2125
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2126
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2127 var rnamespaces = /\.(.*)$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2128 rformElems = /^(?:textarea|input|select)$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2129 rperiod = /\./g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2130 rspace = / /g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2131 rescape = /[^\w\s.|`]/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2132 fcleanup = function( nm ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2133 return nm.replace(rescape, "\\$&");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2134 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2135
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2136 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2137 * A number of helper functions used for managing events.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2138 * Many of the ideas behind this code originated from
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2139 * Dean Edwards' addEvent library.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2140 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2141 jQuery.event = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2142
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2143 // Bind an event to an element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2144 // Original by Dean Edwards
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2145 add: function( elem, types, handler, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2146 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2147 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2148 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2149
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2150 // TODO :: Use a try/catch until it's safe to pull this out (likely 1.6)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2151 // Minor release fix for bug #8018
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2152 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2153 // For whatever reason, IE has trouble passing the window object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2154 // around, causing it to be cloned in the process
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2155 if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2156 elem = window;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2157 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2158 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2159 catch ( e ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2160
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2161 if ( handler === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2162 handler = returnFalse;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2163 } else if ( !handler ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2164 // Fixes bug #7229. Fix recommended by jdalton
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2165 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2166 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2167
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2168 var handleObjIn, handleObj;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2169
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2170 if ( handler.handler ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2171 handleObjIn = handler;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2172 handler = handleObjIn.handler;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2173 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2174
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2175 // Make sure that the function being executed has a unique ID
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2176 if ( !handler.guid ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2177 handler.guid = jQuery.guid++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2178 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2179
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2180 // Init the element's event structure
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2181 var elemData = jQuery._data( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2182
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2183 // If no elemData is found then we must be trying to bind to one of the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2184 // banned noData elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2185 if ( !elemData ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2186 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2187 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2188
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2189 var events = elemData.events,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2190 eventHandle = elemData.handle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2191
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2192 if ( !events ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2193 elemData.events = events = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2194 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2195
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2196 if ( !eventHandle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2197 elemData.handle = eventHandle = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2198 // Handle the second event of a trigger and when
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2199 // an event is called after a page has unloaded
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2200 return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2201 jQuery.event.handle.apply( eventHandle.elem, arguments ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2202 undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2203 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2204 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2205
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2206 // Add elem as a property of the handle function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2207 // This is to prevent a memory leak with non-native events in IE.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2208 eventHandle.elem = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2209
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2210 // Handle multiple events separated by a space
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2211 // jQuery(...).bind("mouseover mouseout", fn);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2212 types = types.split(" ");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2213
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2214 var type, i = 0, namespaces;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2215
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2216 while ( (type = types[ i++ ]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2217 handleObj = handleObjIn ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2218 jQuery.extend({}, handleObjIn) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2219 { handler: handler, data: data };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2220
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2221 // Namespaced event handlers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2222 if ( type.indexOf(".") > -1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2223 namespaces = type.split(".");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2224 type = namespaces.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2225 handleObj.namespace = namespaces.slice(0).sort().join(".");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2226
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2227 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2228 namespaces = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2229 handleObj.namespace = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2230 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2231
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2232 handleObj.type = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2233 if ( !handleObj.guid ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2234 handleObj.guid = handler.guid;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2235 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2236
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2237 // Get the current list of functions bound to this event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2238 var handlers = events[ type ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2239 special = jQuery.event.special[ type ] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2240
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2241 // Init the event handler queue
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2242 if ( !handlers ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2243 handlers = events[ type ] = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2244
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2245 // Check for a special event handler
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2246 // Only use addEventListener/attachEvent if the special
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2247 // events handler returns false
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2248 if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2249 // Bind the global event handler to the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2250 if ( elem.addEventListener ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2251 elem.addEventListener( type, eventHandle, false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2252
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2253 } else if ( elem.attachEvent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2254 elem.attachEvent( "on" + type, eventHandle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2255 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2256 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2257 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2258
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2259 if ( special.add ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2260 special.add.call( elem, handleObj );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2261
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2262 if ( !handleObj.handler.guid ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2263 handleObj.handler.guid = handler.guid;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2264 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2265 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2266
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2267 // Add the function to the element's handler list
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2268 handlers.push( handleObj );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2269
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2270 // Keep track of which events have been used, for global triggering
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2271 jQuery.event.global[ type ] = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2272 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2273
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2274 // Nullify elem to prevent memory leaks in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2275 elem = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2276 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2277
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2278 global: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2279
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2280 // Detach an event or set of events from an element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2281 remove: function( elem, types, handler, pos ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2282 // don't do events on text and comment nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2283 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2284 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2285 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2286
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2287 if ( handler === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2288 handler = returnFalse;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2289 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2290
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2291 var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2292 elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2293 events = elemData && elemData.events;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2294
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2295 if ( !elemData || !events ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2296 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2297 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2298
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2299 // types is actually an event object here
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2300 if ( types && types.type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2301 handler = types.handler;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2302 types = types.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2303 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2304
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2305 // Unbind all events for the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2306 if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2307 types = types || "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2308
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2309 for ( type in events ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2310 jQuery.event.remove( elem, type + types );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2311 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2313 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2314 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2315
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2316 // Handle multiple events separated by a space
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2317 // jQuery(...).unbind("mouseover mouseout", fn);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2318 types = types.split(" ");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2319
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2320 while ( (type = types[ i++ ]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2321 origType = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2322 handleObj = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2323 all = type.indexOf(".") < 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2324 namespaces = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2325
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2326 if ( !all ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2327 // Namespaced event handlers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2328 namespaces = type.split(".");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2329 type = namespaces.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2330
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2331 namespace = new RegExp("(^|\\.)" +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2332 jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2333 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2334
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2335 eventType = events[ type ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2336
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2337 if ( !eventType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2338 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2339 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2341 if ( !handler ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2342 for ( j = 0; j < eventType.length; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2343 handleObj = eventType[ j ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2344
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2345 if ( all || namespace.test( handleObj.namespace ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2346 jQuery.event.remove( elem, origType, handleObj.handler, j );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2347 eventType.splice( j--, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2348 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2349 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2350
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2351 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2352 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2353
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2354 special = jQuery.event.special[ type ] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2355
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2356 for ( j = pos || 0; j < eventType.length; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2357 handleObj = eventType[ j ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2358
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2359 if ( handler.guid === handleObj.guid ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2360 // remove the given handler for the given type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2361 if ( all || namespace.test( handleObj.namespace ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2362 if ( pos == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2363 eventType.splice( j--, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2364 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2365
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2366 if ( special.remove ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2367 special.remove.call( elem, handleObj );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2368 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2369 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2370
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2371 if ( pos != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2372 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2373 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2374 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2375 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2376
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2377 // remove generic event handler if no more handlers exist
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2378 if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2379 if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2380 jQuery.removeEvent( elem, type, elemData.handle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2381 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2382
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2383 ret = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2384 delete events[ type ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2385 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2386 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2387
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2388 // Remove the expando if it's no longer used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2389 if ( jQuery.isEmptyObject( events ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2390 var handle = elemData.handle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2391 if ( handle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2392 handle.elem = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2393 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2394
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2395 delete elemData.events;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2396 delete elemData.handle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2397
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2398 if ( jQuery.isEmptyObject( elemData ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2399 jQuery.removeData( elem, undefined, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2400 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2401 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2402 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2403
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2404 // bubbling is internal
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2405 trigger: function( event, data, elem /*, bubbling */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2406 // Event object or event type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2407 var type = event.type || event,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2408 bubbling = arguments[3];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2409
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2410 if ( !bubbling ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2411 event = typeof event === "object" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2412 // jQuery.Event object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2413 event[ jQuery.expando ] ? event :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2414 // Object literal
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2415 jQuery.extend( jQuery.Event(type), event ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2416 // Just the event type (string)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2417 jQuery.Event(type);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2418
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2419 if ( type.indexOf("!") >= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2420 event.type = type = type.slice(0, -1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2421 event.exclusive = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2422 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2423
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2424 // Handle a global trigger
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2425 if ( !elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2426 // Don't bubble custom events when global (to avoid too much overhead)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2427 event.stopPropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2428
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2429 // Only trigger if we've ever bound an event for it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2430 if ( jQuery.event.global[ type ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2431 // XXX This code smells terrible. event.js should not be directly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2432 // inspecting the data cache
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2433 jQuery.each( jQuery.cache, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2434 // internalKey variable is just used to make it easier to find
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2435 // and potentially change this stuff later; currently it just
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2436 // points to jQuery.expando
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2437 var internalKey = jQuery.expando,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2438 internalCache = this[ internalKey ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2439 if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2440 jQuery.event.trigger( event, data, internalCache.handle.elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2441 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2442 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2443 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2444 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2445
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2446 // Handle triggering a single element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2447
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2448 // don't do events on text and comment nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2449 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2450 return undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2451 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2452
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2453 // Clean up in case it is reused
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2454 event.result = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2455 event.target = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2456
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2457 // Clone the incoming data, if any
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2458 data = jQuery.makeArray( data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2459 data.unshift( event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2460 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2461
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2462 event.currentTarget = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2463
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2464 // Trigger the event, it is assumed that "handle" is a function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2465 var handle = jQuery._data( elem, "handle" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2466
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2467 if ( handle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2468 handle.apply( elem, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2469 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2470
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2471 var parent = elem.parentNode || elem.ownerDocument;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2472
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2473 // Trigger an inline bound script
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2474 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2475 if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2476 if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2477 event.result = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2478 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2479 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2480 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2481
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2482 // prevent IE from throwing an error for some elements with some event types, see #3533
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2483 } catch (inlineError) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2484
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2485 if ( !event.isPropagationStopped() && parent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2486 jQuery.event.trigger( event, data, parent, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2487
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2488 } else if ( !event.isDefaultPrevented() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2489 var old,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2490 target = event.target,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2491 targetType = type.replace( rnamespaces, "" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2492 isClick = jQuery.nodeName( target, "a" ) && targetType === "click",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2493 special = jQuery.event.special[ targetType ] || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2494
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2495 if ( (!special._default || special._default.call( elem, event ) === false) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2496 !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2497
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2498 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2499 if ( target[ targetType ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2500 // Make sure that we don't accidentally re-trigger the onFOO events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2501 old = target[ "on" + targetType ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2502
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2503 if ( old ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2504 target[ "on" + targetType ] = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2505 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2506
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2507 jQuery.event.triggered = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2508 target[ targetType ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2509 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2510
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2511 // prevent IE from throwing an error for some elements with some event types, see #3533
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2512 } catch (triggerError) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2513
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2514 if ( old ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2515 target[ "on" + targetType ] = old;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2516 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2517
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2518 jQuery.event.triggered = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2519 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2520 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2521 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2522
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2523 handle: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2524 var all, handlers, namespaces, namespace_re, events,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2525 namespace_sort = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2526 args = jQuery.makeArray( arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2527
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2528 event = args[0] = jQuery.event.fix( event || window.event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2529 event.currentTarget = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2530
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2531 // Namespaced event handlers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2532 all = event.type.indexOf(".") < 0 && !event.exclusive;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2533
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2534 if ( !all ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2535 namespaces = event.type.split(".");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2536 event.type = namespaces.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2537 namespace_sort = namespaces.slice(0).sort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2538 namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2539 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2540
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2541 event.namespace = event.namespace || namespace_sort.join(".");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2542
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2543 events = jQuery._data(this, "events");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2544
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2545 handlers = (events || {})[ event.type ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2546
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2547 if ( events && handlers ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2548 // Clone the handlers to prevent manipulation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2549 handlers = handlers.slice(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2550
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2551 for ( var j = 0, l = handlers.length; j < l; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2552 var handleObj = handlers[ j ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2553
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2554 // Filter the functions by class
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2555 if ( all || namespace_re.test( handleObj.namespace ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2556 // Pass in a reference to the handler function itself
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2557 // So that we can later remove it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2558 event.handler = handleObj.handler;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2559 event.data = handleObj.data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2560 event.handleObj = handleObj;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2561
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2562 var ret = handleObj.handler.apply( this, args );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2563
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2564 if ( ret !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2565 event.result = ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2566 if ( ret === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2567 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2568 event.stopPropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2569 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2570 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2571
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2572 if ( event.isImmediatePropagationStopped() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2573 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2574 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2575 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2576 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2577 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2578
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2579 return event.result;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2580 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2581
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2582 props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2583
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2584 fix: function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2585 if ( event[ jQuery.expando ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2586 return event;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2587 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2589 // store a copy of the original event object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2590 // and "clone" to set read-only properties
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2591 var originalEvent = event;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2592 event = jQuery.Event( originalEvent );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2593
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2594 for ( var i = this.props.length, prop; i; ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2595 prop = this.props[ --i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2596 event[ prop ] = originalEvent[ prop ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2597 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2598
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2599 // Fix target property, if necessary
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2600 if ( !event.target ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2601 // Fixes #1925 where srcElement might not be defined either
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2602 event.target = event.srcElement || document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2603 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2604
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2605 // check if target is a textnode (safari)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2606 if ( event.target.nodeType === 3 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2607 event.target = event.target.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2608 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2609
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2610 // Add relatedTarget, if necessary
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2611 if ( !event.relatedTarget && event.fromElement ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2612 event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2613 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2614
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2615 // Calculate pageX/Y if missing and clientX/Y available
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2616 if ( event.pageX == null && event.clientX != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2617 var doc = document.documentElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2618 body = document.body;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2619
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2620 event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2621 event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2622 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2623
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2624 // Add which for key events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2625 if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2626 event.which = event.charCode != null ? event.charCode : event.keyCode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2627 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2628
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2629 // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2630 if ( !event.metaKey && event.ctrlKey ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2631 event.metaKey = event.ctrlKey;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2632 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2633
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2634 // Add which for click: 1 === left; 2 === middle; 3 === right
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2635 // Note: button is not normalized, so don't use it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2636 if ( !event.which && event.button !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2637 event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2638 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2639
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2640 return event;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2641 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2642
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2643 // Deprecated, use jQuery.guid instead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2644 guid: 1E8,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2645
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2646 // Deprecated, use jQuery.proxy instead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2647 proxy: jQuery.proxy,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2648
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2649 special: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2650 ready: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2651 // Make sure the ready event is setup
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2652 setup: jQuery.bindReady,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2653 teardown: jQuery.noop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2654 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2655
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2656 live: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2657 add: function( handleObj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2658 jQuery.event.add( this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2659 liveConvert( handleObj.origType, handleObj.selector ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2660 jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2661 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2662
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2663 remove: function( handleObj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2664 jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2665 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2666 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2667
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2668 beforeunload: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2669 setup: function( data, namespaces, eventHandle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2670 // We only want to do this special case on windows
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2671 if ( jQuery.isWindow( this ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2672 this.onbeforeunload = eventHandle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2673 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2674 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2675
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2676 teardown: function( namespaces, eventHandle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2677 if ( this.onbeforeunload === eventHandle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2678 this.onbeforeunload = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2679 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2680 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2681 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2682 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2683 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2684
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2685 jQuery.removeEvent = document.removeEventListener ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2686 function( elem, type, handle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2687 if ( elem.removeEventListener ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2688 elem.removeEventListener( type, handle, false );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2689 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2690 } :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2691 function( elem, type, handle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2692 if ( elem.detachEvent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2693 elem.detachEvent( "on" + type, handle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2694 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2695 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2696
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2697 jQuery.Event = function( src ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2698 // Allow instantiation without the 'new' keyword
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2699 if ( !this.preventDefault ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2700 return new jQuery.Event( src );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2701 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2702
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2703 // Event object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2704 if ( src && src.type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2705 this.originalEvent = src;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2706 this.type = src.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2707
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2708 // Events bubbling up the document may have been marked as prevented
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2709 // by a handler lower down the tree; reflect the correct value.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2710 this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2711 src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2712
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2713 // Event type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2714 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2715 this.type = src;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2716 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2717
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2718 // timeStamp is buggy for some events on Firefox(#3843)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2719 // So we won't rely on the native value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2720 this.timeStamp = jQuery.now();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2721
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2722 // Mark it as fixed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2723 this[ jQuery.expando ] = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2724 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2725
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2726 function returnFalse() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2727 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2728 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2729 function returnTrue() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2730 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2731 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2732
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2733 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2734 // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2735 jQuery.Event.prototype = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2736 preventDefault: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2737 this.isDefaultPrevented = returnTrue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2738
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2739 var e = this.originalEvent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2740 if ( !e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2741 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2742 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2743
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2744 // if preventDefault exists run it on the original event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2745 if ( e.preventDefault ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2746 e.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2747
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2748 // otherwise set the returnValue property of the original event to false (IE)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2749 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2750 e.returnValue = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2751 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2752 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2753 stopPropagation: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2754 this.isPropagationStopped = returnTrue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2755
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2756 var e = this.originalEvent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2757 if ( !e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2758 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2759 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2760 // if stopPropagation exists run it on the original event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2761 if ( e.stopPropagation ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2762 e.stopPropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2763 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2764 // otherwise set the cancelBubble property of the original event to true (IE)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2765 e.cancelBubble = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2766 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2767 stopImmediatePropagation: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2768 this.isImmediatePropagationStopped = returnTrue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2769 this.stopPropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2770 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2771 isDefaultPrevented: returnFalse,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2772 isPropagationStopped: returnFalse,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2773 isImmediatePropagationStopped: returnFalse
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2774 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2775
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2776 // Checks if an event happened on an element within another element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2777 // Used in jQuery.event.special.mouseenter and mouseleave handlers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2778 var withinElement = function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2779 // Check if mouse(over|out) are still within the same parent element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2780 var parent = event.relatedTarget;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2781
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2782 // Firefox sometimes assigns relatedTarget a XUL element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2783 // which we cannot access the parentNode property of
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2784 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2785
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2786 // Chrome does something similar, the parentNode property
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2787 // can be accessed but is null.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2788 if ( parent !== document && !parent.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2789 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2790 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2791 // Traverse up the tree
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2792 while ( parent && parent !== this ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2793 parent = parent.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2794 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2796 if ( parent !== this ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2797 // set the correct event type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2798 event.type = event.data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2799
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2800 // handle event if we actually just moused on to a non sub-element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2801 jQuery.event.handle.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2802 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2803
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2804 // assuming we've left the element since we most likely mousedover a xul element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2805 } catch(e) { }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2806 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2807
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2808 // In case of event delegation, we only need to rename the event.type,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2809 // liveHandler will take care of the rest.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2810 delegate = function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2811 event.type = event.data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2812 jQuery.event.handle.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2813 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2814
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2815 // Create mouseenter and mouseleave events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2816 jQuery.each({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2817 mouseenter: "mouseover",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2818 mouseleave: "mouseout"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2819 }, function( orig, fix ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2820 jQuery.event.special[ orig ] = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2821 setup: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2822 jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2823 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2824 teardown: function( data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2825 jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2826 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2827 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2828 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2829
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2830 // submit delegation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2831 if ( !jQuery.support.submitBubbles ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2832
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2833 jQuery.event.special.submit = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2834 setup: function( data, namespaces ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2835 if ( this.nodeName && this.nodeName.toLowerCase() !== "form" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2836 jQuery.event.add(this, "click.specialSubmit", function( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2837 var elem = e.target,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2838 type = elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2839
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2840 if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2841 trigger( "submit", this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2842 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2843 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2844
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2845 jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2846 var elem = e.target,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2847 type = elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2848
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2849 if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2850 trigger( "submit", this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2851 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2852 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2853
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2854 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2855 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2856 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2857 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2858
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2859 teardown: function( namespaces ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2860 jQuery.event.remove( this, ".specialSubmit" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2861 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2862 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2863
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2864 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2865
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2866 // change delegation, happens here so we have bind.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2867 if ( !jQuery.support.changeBubbles ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2868
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2869 var changeFilters,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2870
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2871 getVal = function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2872 var type = elem.type, val = elem.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2873
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2874 if ( type === "radio" || type === "checkbox" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2875 val = elem.checked;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2877 } else if ( type === "select-multiple" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2878 val = elem.selectedIndex > -1 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2879 jQuery.map( elem.options, function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2880 return elem.selected;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2881 }).join("-") :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2882 "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2883
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2884 } else if ( elem.nodeName.toLowerCase() === "select" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2885 val = elem.selectedIndex;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2886 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2887
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2888 return val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2889 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2890
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2891 testChange = function testChange( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2892 var elem = e.target, data, val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2893
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2894 if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2895 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2896 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2897
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2898 data = jQuery._data( elem, "_change_data" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2899 val = getVal(elem);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2900
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2901 // the current data will be also retrieved by beforeactivate
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2902 if ( e.type !== "focusout" || elem.type !== "radio" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2903 jQuery._data( elem, "_change_data", val );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2904 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2905
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2906 if ( data === undefined || val === data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2907 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2908 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2909
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2910 if ( data != null || val ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2911 e.type = "change";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2912 e.liveFired = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2913 jQuery.event.trigger( e, arguments[1], elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2914 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2915 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2916
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2917 jQuery.event.special.change = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2918 filters: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2919 focusout: testChange,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2920
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2921 beforedeactivate: testChange,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2922
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2923 click: function( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2924 var elem = e.target, type = elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2925
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2926 if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2927 testChange.call( this, e );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2928 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2929 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2930
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2931 // Change has to be called before submit
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2932 // Keydown will be called before keypress, which is used in submit-event delegation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2933 keydown: function( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2934 var elem = e.target, type = elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2935
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2936 if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2937 (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2938 type === "select-multiple" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2939 testChange.call( this, e );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2940 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2941 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2942
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2943 // Beforeactivate happens also before the previous element is blurred
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2944 // with this event you can't trigger a change event, but you can store
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2945 // information
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2946 beforeactivate: function( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2947 var elem = e.target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2948 jQuery._data( elem, "_change_data", getVal(elem) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2949 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2950 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2951
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2952 setup: function( data, namespaces ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2953 if ( this.type === "file" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2954 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2955 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2957 for ( var type in changeFilters ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2958 jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2959 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2960
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2961 return rformElems.test( this.nodeName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2962 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2963
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2964 teardown: function( namespaces ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2965 jQuery.event.remove( this, ".specialChange" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2966
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2967 return rformElems.test( this.nodeName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2968 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2969 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2970
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2971 changeFilters = jQuery.event.special.change.filters;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2972
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2973 // Handle when the input is .focus()'d
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2974 changeFilters.focus = changeFilters.beforeactivate;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2975 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2976
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2977 function trigger( type, elem, args ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2978 // Piggyback on a donor event to simulate a different one.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2979 // Fake originalEvent to avoid donor's stopPropagation, but if the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2980 // simulated event prevents default then we do the same on the donor.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2981 // Don't pass args or remember liveFired; they apply to the donor event.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2982 var event = jQuery.extend( {}, args[ 0 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2983 event.type = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2984 event.originalEvent = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2985 event.liveFired = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2986 jQuery.event.handle.call( elem, event );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2987 if ( event.isDefaultPrevented() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2988 args[ 0 ].preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2989 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2990 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2991
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2992 // Create "bubbling" focus and blur events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2993 if ( document.addEventListener ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2994 jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2995 jQuery.event.special[ fix ] = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2996 setup: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2997 this.addEventListener( orig, handler, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2998 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
2999 teardown: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3000 this.removeEventListener( orig, handler, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3001 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3002 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3003
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3004 function handler( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3005 e = jQuery.event.fix( e );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3006 e.type = fix;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3007 return jQuery.event.handle.call( this, e );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3008 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3009 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3010 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3011
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3012 jQuery.each(["bind", "one"], function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3013 jQuery.fn[ name ] = function( type, data, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3014 // Handle object literals
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3015 if ( typeof type === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3016 for ( var key in type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3017 this[ name ](key, data, type[key], fn);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3018 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3019 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3020 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3022 if ( jQuery.isFunction( data ) || data === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3023 fn = data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3024 data = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3025 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3026
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3027 var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3028 jQuery( this ).unbind( event, handler );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3029 return fn.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3030 }) : fn;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3031
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3032 if ( type === "unload" && name !== "one" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3033 this.one( type, data, fn );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3034
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3035 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3036 for ( var i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3037 jQuery.event.add( this[i], type, handler, data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3038 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3039 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3040
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3041 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3042 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3043 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3044
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3045 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3046 unbind: function( type, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3047 // Handle object literals
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3048 if ( typeof type === "object" && !type.preventDefault ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3049 for ( var key in type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3050 this.unbind(key, type[key]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3051 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3052
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3053 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3054 for ( var i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3055 jQuery.event.remove( this[i], type, fn );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3056 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3057 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3058
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3059 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3060 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3061
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3062 delegate: function( selector, types, data, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3063 return this.live( types, data, fn, selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3064 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3065
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3066 undelegate: function( selector, types, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3067 if ( arguments.length === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3068 return this.unbind( "live" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3069
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3070 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3071 return this.die( types, null, fn, selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3072 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3073 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3074
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3075 trigger: function( type, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3076 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3077 jQuery.event.trigger( type, data, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3078 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3079 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3080
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3081 triggerHandler: function( type, data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3082 if ( this[0] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3083 var event = jQuery.Event( type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3084 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3085 event.stopPropagation();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3086 jQuery.event.trigger( event, data, this[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3087 return event.result;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3088 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3089 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3090
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3091 toggle: function( fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3092 // Save reference to arguments for access in closure
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3093 var args = arguments,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3094 i = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3095
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3096 // link all the functions, so any of them can unbind this click handler
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3097 while ( i < args.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3098 jQuery.proxy( fn, args[ i++ ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3099 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3100
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3101 return this.click( jQuery.proxy( fn, function( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3102 // Figure out which function to execute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3103 var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3104 jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3105
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3106 // Make sure that clicks stop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3107 event.preventDefault();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3108
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3109 // and execute the function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3110 return args[ lastToggle ].apply( this, arguments ) || false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3111 }));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3112 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3113
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3114 hover: function( fnOver, fnOut ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3115 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3116 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3117 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3118
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3119 var liveMap = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3120 focus: "focusin",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3121 blur: "focusout",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3122 mouseenter: "mouseover",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3123 mouseleave: "mouseout"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3124 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3125
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3126 jQuery.each(["live", "die"], function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3127 jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3128 var type, i = 0, match, namespaces, preType,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3129 selector = origSelector || this.selector,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3130 context = origSelector ? this : jQuery( this.context );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3131
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3132 if ( typeof types === "object" && !types.preventDefault ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3133 for ( var key in types ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3134 context[ name ]( key, data, types[key], selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3135 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3136
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3137 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3138 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3139
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3140 if ( jQuery.isFunction( data ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3141 fn = data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3142 data = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3143 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3144
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3145 types = (types || "").split(" ");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3146
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3147 while ( (type = types[ i++ ]) != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3148 match = rnamespaces.exec( type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3149 namespaces = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3151 if ( match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3152 namespaces = match[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3153 type = type.replace( rnamespaces, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3154 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3155
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3156 if ( type === "hover" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3157 types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3158 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3159 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3160
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3161 preType = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3162
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3163 if ( type === "focus" || type === "blur" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3164 types.push( liveMap[ type ] + namespaces );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3165 type = type + namespaces;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3166
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3167 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3168 type = (liveMap[ type ] || type) + namespaces;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3169 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3170
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3171 if ( name === "live" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3172 // bind live handler
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3173 for ( var j = 0, l = context.length; j < l; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3174 jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3175 { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3176 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3177
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3178 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3179 // unbind live handler
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3180 context.unbind( "live." + liveConvert( type, selector ), fn );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3181 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3182 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3183
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3184 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3185 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3186 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3187
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3188 function liveHandler( event ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3189 var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3190 elems = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3191 selectors = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3192 events = jQuery._data( this, "events" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3193
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3194 // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3195 if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3196 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3197 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3199 if ( event.namespace ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3200 namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3201 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3202
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3203 event.liveFired = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3204
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3205 var live = events.live.slice(0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3206
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3207 for ( j = 0; j < live.length; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3208 handleObj = live[j];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3209
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3210 if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3211 selectors.push( handleObj.selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3212
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3213 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3214 live.splice( j--, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3215 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3216 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3217
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3218 match = jQuery( event.target ).closest( selectors, event.currentTarget );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3219
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3220 for ( i = 0, l = match.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3221 close = match[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3222
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3223 for ( j = 0; j < live.length; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3224 handleObj = live[j];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3225
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3226 if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3227 elem = close.elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3228 related = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3229
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3230 // Those two events require additional checking
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3231 if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3232 event.type = handleObj.preType;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3233 related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3234 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3235
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3236 if ( !related || related !== elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3237 elems.push({ elem: elem, handleObj: handleObj, level: close.level });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3238 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3239 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3240 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3241 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3242
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3243 for ( i = 0, l = elems.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3244 match = elems[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3245
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3246 if ( maxLevel && match.level > maxLevel ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3247 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3248 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3249
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3250 event.currentTarget = match.elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3251 event.data = match.handleObj.data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3252 event.handleObj = match.handleObj;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3253
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3254 ret = match.handleObj.origHandler.apply( match.elem, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3255
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3256 if ( ret === false || event.isPropagationStopped() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3257 maxLevel = match.level;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3258
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3259 if ( ret === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3260 stop = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3261 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3262 if ( event.isImmediatePropagationStopped() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3263 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3264 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3265 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3266 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3267
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3268 return stop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3269 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3270
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3271 function liveConvert( type, selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3272 return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3273 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3274
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3275 jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3276 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3277 "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3278
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3279 // Handle event binding
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3280 jQuery.fn[ name ] = function( data, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3281 if ( fn == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3282 fn = data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3283 data = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3284 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3285
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3286 return arguments.length > 0 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3287 this.bind( name, data, fn ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3288 this.trigger( name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3289 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3290
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3291 if ( jQuery.attrFn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3292 jQuery.attrFn[ name ] = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3293 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3294 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3295
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3296
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3297 /*!
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3298 * Sizzle CSS Selector Engine
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3299 * Copyright 2011, The Dojo Foundation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3300 * Released under the MIT, BSD, and GPL Licenses.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3301 * More information: http://sizzlejs.com/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3302 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3303 (function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3304
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3305 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3306 done = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3307 toString = Object.prototype.toString,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3308 hasDuplicate = false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3309 baseHasDuplicate = true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3310 rBackslash = /\\/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3311 rNonWord = /\W/;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3313 // Here we check if the JavaScript engine is using some sort of
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3314 // optimization where it does not always call our comparision
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3315 // function. If that is the case, discard the hasDuplicate value.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3316 // Thus far that includes Google Chrome.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3317 [0, 0].sort(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3318 baseHasDuplicate = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3319 return 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3320 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3321
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3322 var Sizzle = function( selector, context, results, seed ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3323 results = results || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3324 context = context || document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3325
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3326 var origContext = context;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3327
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3328 if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3329 return [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3330 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3331
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3332 if ( !selector || typeof selector !== "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3333 return results;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3334 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3335
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3336 var m, set, checkSet, extra, ret, cur, pop, i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3337 prune = true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3338 contextXML = Sizzle.isXML( context ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3339 parts = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3340 soFar = selector;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3341
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3342 // Reset the position of the chunker regexp (start from head)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3343 do {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3344 chunker.exec( "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3345 m = chunker.exec( soFar );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3346
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3347 if ( m ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3348 soFar = m[3];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3349
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3350 parts.push( m[1] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3351
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3352 if ( m[2] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3353 extra = m[3];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3354 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3355 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3356 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3357 } while ( m );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3358
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3359 if ( parts.length > 1 && origPOS.exec( selector ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3360
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3361 if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3362 set = posProcess( parts[0] + parts[1], context );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3364 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3365 set = Expr.relative[ parts[0] ] ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3366 [ context ] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3367 Sizzle( parts.shift(), context );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3368
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3369 while ( parts.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3370 selector = parts.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3371
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3372 if ( Expr.relative[ selector ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3373 selector += parts.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3374 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3375
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3376 set = posProcess( selector, set );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3377 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3378 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3379
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3380 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3381 // Take a shortcut and set the context if the root selector is an ID
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3382 // (but not if it'll be faster if the inner selector is an ID)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3383 if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3384 Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3385
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3386 ret = Sizzle.find( parts.shift(), context, contextXML );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3387 context = ret.expr ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3388 Sizzle.filter( ret.expr, ret.set )[0] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3389 ret.set[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3390 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3391
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3392 if ( context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3393 ret = seed ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3394 { expr: parts.pop(), set: makeArray(seed) } :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3395 Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3396
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3397 set = ret.expr ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3398 Sizzle.filter( ret.expr, ret.set ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3399 ret.set;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3400
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3401 if ( parts.length > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3402 checkSet = makeArray( set );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3403
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3404 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3405 prune = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3406 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3407
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3408 while ( parts.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3409 cur = parts.pop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3410 pop = cur;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3411
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3412 if ( !Expr.relative[ cur ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3413 cur = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3414 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3415 pop = parts.pop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3416 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3417
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3418 if ( pop == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3419 pop = context;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3420 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3421
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3422 Expr.relative[ cur ]( checkSet, pop, contextXML );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3423 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3424
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3425 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3426 checkSet = parts = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3427 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3428 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3429
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3430 if ( !checkSet ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3431 checkSet = set;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3432 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3433
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3434 if ( !checkSet ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3435 Sizzle.error( cur || selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3436 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3437
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3438 if ( toString.call(checkSet) === "[object Array]" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3439 if ( !prune ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3440 results.push.apply( results, checkSet );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3441
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3442 } else if ( context && context.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3443 for ( i = 0; checkSet[i] != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3444 if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3445 results.push( set[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3446 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3447 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3448
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3449 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3450 for ( i = 0; checkSet[i] != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3451 if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3452 results.push( set[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3453 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3454 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3455 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3456
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3457 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3458 makeArray( checkSet, results );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3459 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3460
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3461 if ( extra ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3462 Sizzle( extra, origContext, results, seed );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3463 Sizzle.uniqueSort( results );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3464 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3465
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3466 return results;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3467 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3468
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3469 Sizzle.uniqueSort = function( results ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3470 if ( sortOrder ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3471 hasDuplicate = baseHasDuplicate;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3472 results.sort( sortOrder );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3473
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3474 if ( hasDuplicate ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3475 for ( var i = 1; i < results.length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3476 if ( results[i] === results[ i - 1 ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3477 results.splice( i--, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3478 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3479 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3480 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3481 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3482
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3483 return results;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3484 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3485
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3486 Sizzle.matches = function( expr, set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3487 return Sizzle( expr, null, null, set );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3488 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3489
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3490 Sizzle.matchesSelector = function( node, expr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3491 return Sizzle( expr, null, null, [node] ).length > 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3492 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3493
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3494 Sizzle.find = function( expr, context, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3495 var set;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3496
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3497 if ( !expr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3498 return [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3499 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3500
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3501 for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3502 var match,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3503 type = Expr.order[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3504
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3505 if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3506 var left = match[1];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3507 match.splice( 1, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3508
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3509 if ( left.substr( left.length - 1 ) !== "\\" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3510 match[1] = (match[1] || "").replace( rBackslash, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3511 set = Expr.find[ type ]( match, context, isXML );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3513 if ( set != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3514 expr = expr.replace( Expr.match[ type ], "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3515 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3516 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3517 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3518 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3519 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3520
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3521 if ( !set ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3522 set = typeof context.getElementsByTagName !== "undefined" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3523 context.getElementsByTagName( "*" ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3524 [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3525 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3526
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3527 return { set: set, expr: expr };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3528 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3529
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3530 Sizzle.filter = function( expr, set, inplace, not ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3531 var match, anyFound,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3532 old = expr,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3533 result = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3534 curLoop = set,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3535 isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3536
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3537 while ( expr && set.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3538 for ( var type in Expr.filter ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3539 if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3540 var found, item,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3541 filter = Expr.filter[ type ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3542 left = match[1];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3543
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3544 anyFound = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3545
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3546 match.splice(1,1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3547
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3548 if ( left.substr( left.length - 1 ) === "\\" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3549 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3550 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3551
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3552 if ( curLoop === result ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3553 result = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3554 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3555
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3556 if ( Expr.preFilter[ type ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3557 match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3558
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3559 if ( !match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3560 anyFound = found = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3561
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3562 } else if ( match === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3563 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3564 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3565 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3566
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3567 if ( match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3568 for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3569 if ( item ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3570 found = filter( item, match, i, curLoop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3571 var pass = not ^ !!found;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3572
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3573 if ( inplace && found != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3574 if ( pass ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3575 anyFound = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3576
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3577 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3578 curLoop[i] = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3579 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3580
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3581 } else if ( pass ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3582 result.push( item );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3583 anyFound = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3584 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3585 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3586 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3587 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3589 if ( found !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3590 if ( !inplace ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3591 curLoop = result;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3592 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3593
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3594 expr = expr.replace( Expr.match[ type ], "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3596 if ( !anyFound ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3597 return [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3598 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3600 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3601 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3602 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3603 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3604
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3605 // Improper expression
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3606 if ( expr === old ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3607 if ( anyFound == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3608 Sizzle.error( expr );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3609
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3610 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3611 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3612 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3613 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3614
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3615 old = expr;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3616 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3617
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3618 return curLoop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3619 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3620
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3621 Sizzle.error = function( msg ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3622 throw "Syntax error, unrecognized expression: " + msg;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3623 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3624
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3625 var Expr = Sizzle.selectors = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3626 order: [ "ID", "NAME", "TAG" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3627
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3628 match: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3629 ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3630 CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3631 NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3632 ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3633 TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3634 CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3635 POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3636 PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3637 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3638
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3639 leftMatch: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3640
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3641 attrMap: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3642 "class": "className",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3643 "for": "htmlFor"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3644 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3645
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3646 attrHandle: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3647 href: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3648 return elem.getAttribute( "href" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3649 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3650 type: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3651 return elem.getAttribute( "type" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3652 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3653 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3654
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3655 relative: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3656 "+": function(checkSet, part){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3657 var isPartStr = typeof part === "string",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3658 isTag = isPartStr && !rNonWord.test( part ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3659 isPartStrNotTag = isPartStr && !isTag;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3660
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3661 if ( isTag ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3662 part = part.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3663 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3664
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3665 for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3666 if ( (elem = checkSet[i]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3667 while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3668
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3669 checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3670 elem || false :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3671 elem === part;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3672 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3673 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3674
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3675 if ( isPartStrNotTag ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3676 Sizzle.filter( part, checkSet, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3677 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3678 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3679
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3680 ">": function( checkSet, part ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3681 var elem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3682 isPartStr = typeof part === "string",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3683 i = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3684 l = checkSet.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3685
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3686 if ( isPartStr && !rNonWord.test( part ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3687 part = part.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3688
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3689 for ( ; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3690 elem = checkSet[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3691
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3692 if ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3693 var parent = elem.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3694 checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3695 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3696 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3697
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3698 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3699 for ( ; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3700 elem = checkSet[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3701
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3702 if ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3703 checkSet[i] = isPartStr ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3704 elem.parentNode :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3705 elem.parentNode === part;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3706 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3707 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3708
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3709 if ( isPartStr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3710 Sizzle.filter( part, checkSet, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3711 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3712 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3713 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3714
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3715 "": function(checkSet, part, isXML){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3716 var nodeCheck,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3717 doneName = done++,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3718 checkFn = dirCheck;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3719
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3720 if ( typeof part === "string" && !rNonWord.test( part ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3721 part = part.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3722 nodeCheck = part;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3723 checkFn = dirNodeCheck;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3724 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3725
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3726 checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3727 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3728
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3729 "~": function( checkSet, part, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3730 var nodeCheck,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3731 doneName = done++,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3732 checkFn = dirCheck;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3733
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3734 if ( typeof part === "string" && !rNonWord.test( part ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3735 part = part.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3736 nodeCheck = part;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3737 checkFn = dirNodeCheck;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3738 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3739
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3740 checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3741 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3742 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3743
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3744 find: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3745 ID: function( match, context, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3746 if ( typeof context.getElementById !== "undefined" && !isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3747 var m = context.getElementById(match[1]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3748 // Check parentNode to catch when Blackberry 4.6 returns
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3749 // nodes that are no longer in the document #6963
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3750 return m && m.parentNode ? [m] : [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3751 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3752 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3753
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3754 NAME: function( match, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3755 if ( typeof context.getElementsByName !== "undefined" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3756 var ret = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3757 results = context.getElementsByName( match[1] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3758
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3759 for ( var i = 0, l = results.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3760 if ( results[i].getAttribute("name") === match[1] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3761 ret.push( results[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3762 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3763 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3764
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3765 return ret.length === 0 ? null : ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3766 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3767 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3768
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3769 TAG: function( match, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3770 if ( typeof context.getElementsByTagName !== "undefined" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3771 return context.getElementsByTagName( match[1] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3772 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3773 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3774 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3775 preFilter: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3776 CLASS: function( match, curLoop, inplace, result, not, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3777 match = " " + match[1].replace( rBackslash, "" ) + " ";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3779 if ( isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3780 return match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3781 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3782
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3783 for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3784 if ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3785 if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3786 if ( !inplace ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3787 result.push( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3788 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3789
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3790 } else if ( inplace ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3791 curLoop[i] = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3792 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3793 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3794 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3796 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3797 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3798
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3799 ID: function( match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3800 return match[1].replace( rBackslash, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3801 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3802
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3803 TAG: function( match, curLoop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3804 return match[1].replace( rBackslash, "" ).toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3805 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3806
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3807 CHILD: function( match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3808 if ( match[1] === "nth" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3809 if ( !match[2] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3810 Sizzle.error( match[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3811 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3812
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3813 match[2] = match[2].replace(/^\+|\s*/g, '');
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3814
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3815 // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3816 var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3817 match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3818 !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3819
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3820 // calculate the numbers (first)n+(last) including if they are negative
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3821 match[2] = (test[1] + (test[2] || 1)) - 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3822 match[3] = test[3] - 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3823 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3824 else if ( match[2] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3825 Sizzle.error( match[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3826 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3827
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3828 // TODO: Move to normal caching system
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3829 match[0] = done++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3830
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3831 return match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3832 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3833
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3834 ATTR: function( match, curLoop, inplace, result, not, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3835 var name = match[1] = match[1].replace( rBackslash, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3836
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3837 if ( !isXML && Expr.attrMap[name] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3838 match[1] = Expr.attrMap[name];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3839 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3840
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3841 // Handle if an un-quoted value was used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3842 match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3843
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3844 if ( match[2] === "~=" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3845 match[4] = " " + match[4] + " ";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3846 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3847
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3848 return match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3849 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3850
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3851 PSEUDO: function( match, curLoop, inplace, result, not ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3852 if ( match[1] === "not" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3853 // If we're dealing with a complex expression, or a simple one
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3854 if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3855 match[3] = Sizzle(match[3], null, null, curLoop);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3856
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3857 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3858 var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3859
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3860 if ( !inplace ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3861 result.push.apply( result, ret );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3862 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3863
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3864 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3865 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3866
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3867 } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3868 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3869 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3870
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3871 return match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3872 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3873
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3874 POS: function( match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3875 match.unshift( true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3877 return match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3878 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3879 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3880
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3881 filters: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3882 enabled: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3883 return elem.disabled === false && elem.type !== "hidden";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3884 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3885
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3886 disabled: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3887 return elem.disabled === true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3888 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3889
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3890 checked: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3891 return elem.checked === true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3892 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3893
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3894 selected: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3895 // Accessing this property makes selected-by-default
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3896 // options in Safari work properly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3897 if ( elem.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3898 elem.parentNode.selectedIndex;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3899 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3900
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3901 return elem.selected === true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3902 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3903
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3904 parent: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3905 return !!elem.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3906 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3907
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3908 empty: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3909 return !elem.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3910 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3911
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3912 has: function( elem, i, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3913 return !!Sizzle( match[3], elem ).length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3914 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3915
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3916 header: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3917 return (/h\d/i).test( elem.nodeName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3918 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3919
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3920 text: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3921 // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3922 // use getAttribute instead to test this case
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3923 return "text" === elem.getAttribute( 'type' );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3924 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3925 radio: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3926 return "radio" === elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3927 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3928
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3929 checkbox: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3930 return "checkbox" === elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3931 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3932
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3933 file: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3934 return "file" === elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3935 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3936 password: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3937 return "password" === elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3938 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3939
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3940 submit: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3941 return "submit" === elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3942 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3943
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3944 image: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3945 return "image" === elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3946 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3947
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3948 reset: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3949 return "reset" === elem.type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3950 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3951
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3952 button: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3953 return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3954 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3955
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3956 input: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3957 return (/input|select|textarea|button/i).test( elem.nodeName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3958 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3959 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3960 setFilters: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3961 first: function( elem, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3962 return i === 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3963 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3964
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3965 last: function( elem, i, match, array ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3966 return i === array.length - 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3967 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3968
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3969 even: function( elem, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3970 return i % 2 === 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3971 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3972
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3973 odd: function( elem, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3974 return i % 2 === 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3975 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3976
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3977 lt: function( elem, i, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3978 return i < match[3] - 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3979 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3980
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3981 gt: function( elem, i, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3982 return i > match[3] - 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3983 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3984
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3985 nth: function( elem, i, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3986 return match[3] - 0 === i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3987 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3988
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3989 eq: function( elem, i, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3990 return match[3] - 0 === i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3991 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3992 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3993 filter: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3994 PSEUDO: function( elem, match, i, array ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3995 var name = match[1],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3996 filter = Expr.filters[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3997
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3998 if ( filter ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
3999 return filter( elem, i, match, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4000
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4001 } else if ( name === "contains" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4002 return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4003
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4004 } else if ( name === "not" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4005 var not = match[3];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4006
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4007 for ( var j = 0, l = not.length; j < l; j++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4008 if ( not[j] === elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4009 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4010 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4011 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4012
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4013 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4014
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4015 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4016 Sizzle.error( name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4017 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4018 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4019
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4020 CHILD: function( elem, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4021 var type = match[1],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4022 node = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4023
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4024 switch ( type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4025 case "only":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4026 case "first":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4027 while ( (node = node.previousSibling) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4028 if ( node.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4029 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4030 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4031 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4032
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4033 if ( type === "first" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4034 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4035 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4036
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4037 node = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4038
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4039 case "last":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4040 while ( (node = node.nextSibling) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4041 if ( node.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4042 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4043 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4044 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4045
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4046 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4048 case "nth":
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4049 var first = match[2],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4050 last = match[3];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4051
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4052 if ( first === 1 && last === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4053 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4054 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4055
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4056 var doneName = match[0],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4057 parent = elem.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4058
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4059 if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4060 var count = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4061
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4062 for ( node = parent.firstChild; node; node = node.nextSibling ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4063 if ( node.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4064 node.nodeIndex = ++count;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4065 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4066 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4067
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4068 parent.sizcache = doneName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4069 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4070
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4071 var diff = elem.nodeIndex - last;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4072
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4073 if ( first === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4074 return diff === 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4075
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4076 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4077 return ( diff % first === 0 && diff / first >= 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4078 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4079 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4080 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4081
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4082 ID: function( elem, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4083 return elem.nodeType === 1 && elem.getAttribute("id") === match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4084 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4085
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4086 TAG: function( elem, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4087 return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4088 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4089
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4090 CLASS: function( elem, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4091 return (" " + (elem.className || elem.getAttribute("class")) + " ")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4092 .indexOf( match ) > -1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4093 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4094
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4095 ATTR: function( elem, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4096 var name = match[1],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4097 result = Expr.attrHandle[ name ] ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4098 Expr.attrHandle[ name ]( elem ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4099 elem[ name ] != null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4100 elem[ name ] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4101 elem.getAttribute( name ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4102 value = result + "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4103 type = match[2],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4104 check = match[4];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4105
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4106 return result == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4107 type === "!=" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4108 type === "=" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4109 value === check :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4110 type === "*=" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4111 value.indexOf(check) >= 0 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4112 type === "~=" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4113 (" " + value + " ").indexOf(check) >= 0 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4114 !check ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4115 value && result !== false :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4116 type === "!=" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4117 value !== check :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4118 type === "^=" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4119 value.indexOf(check) === 0 :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4120 type === "$=" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4121 value.substr(value.length - check.length) === check :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4122 type === "|=" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4123 value === check || value.substr(0, check.length + 1) === check + "-" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4124 false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4125 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4126
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4127 POS: function( elem, match, i, array ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4128 var name = match[2],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4129 filter = Expr.setFilters[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4130
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4131 if ( filter ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4132 return filter( elem, i, match, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4133 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4134 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4135 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4136 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4137
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4138 var origPOS = Expr.match.POS,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4139 fescape = function(all, num){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4140 return "\\" + (num - 0 + 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4141 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4142
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4143 for ( var type in Expr.match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4144 Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4145 Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4146 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4147
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4148 var makeArray = function( array, results ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4149 array = Array.prototype.slice.call( array, 0 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4151 if ( results ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4152 results.push.apply( results, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4153 return results;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4154 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4155
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4156 return array;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4157 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4158
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4159 // Perform a simple check to determine if the browser is capable of
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4160 // converting a NodeList to an array using builtin methods.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4161 // Also verifies that the returned array holds DOM nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4162 // (which is not the case in the Blackberry browser)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4163 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4164 Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4165
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4166 // Provide a fallback method if it does not work
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4167 } catch( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4168 makeArray = function( array, results ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4169 var i = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4170 ret = results || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4171
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4172 if ( toString.call(array) === "[object Array]" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4173 Array.prototype.push.apply( ret, array );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4174
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4175 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4176 if ( typeof array.length === "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4177 for ( var l = array.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4178 ret.push( array[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4179 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4180
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4181 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4182 for ( ; array[i]; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4183 ret.push( array[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4184 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4185 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4186 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4187
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4188 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4189 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4190 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4191
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4192 var sortOrder, siblingCheck;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4193
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4194 if ( document.documentElement.compareDocumentPosition ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4195 sortOrder = function( a, b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4196 if ( a === b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4197 hasDuplicate = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4198 return 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4199 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4200
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4201 if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4202 return a.compareDocumentPosition ? -1 : 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4203 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4204
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4205 return a.compareDocumentPosition(b) & 4 ? -1 : 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4206 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4207
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4208 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4209 sortOrder = function( a, b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4210 var al, bl,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4211 ap = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4212 bp = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4213 aup = a.parentNode,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4214 bup = b.parentNode,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4215 cur = aup;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4216
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4217 // The nodes are identical, we can exit early
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4218 if ( a === b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4219 hasDuplicate = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4220 return 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4221
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4222 // If the nodes are siblings (or identical) we can do a quick check
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4223 } else if ( aup === bup ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4224 return siblingCheck( a, b );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4225
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4226 // If no parents were found then the nodes are disconnected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4227 } else if ( !aup ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4228 return -1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4229
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4230 } else if ( !bup ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4231 return 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4232 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4233
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4234 // Otherwise they're somewhere else in the tree so we need
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4235 // to build up a full list of the parentNodes for comparison
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4236 while ( cur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4237 ap.unshift( cur );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4238 cur = cur.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4239 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4240
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4241 cur = bup;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4242
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4243 while ( cur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4244 bp.unshift( cur );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4245 cur = cur.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4246 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4247
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4248 al = ap.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4249 bl = bp.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4250
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4251 // Start walking down the tree looking for a discrepancy
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4252 for ( var i = 0; i < al && i < bl; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4253 if ( ap[i] !== bp[i] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4254 return siblingCheck( ap[i], bp[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4255 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4256 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4257
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4258 // We ended someplace up the tree so do a sibling check
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4259 return i === al ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4260 siblingCheck( a, bp[i], -1 ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4261 siblingCheck( ap[i], b, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4262 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4263
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4264 siblingCheck = function( a, b, ret ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4265 if ( a === b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4266 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4267 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4268
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4269 var cur = a.nextSibling;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4270
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4271 while ( cur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4272 if ( cur === b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4273 return -1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4274 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4276 cur = cur.nextSibling;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4277 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4278
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4279 return 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4280 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4281 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4283 // Utility function for retreiving the text value of an array of DOM nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4284 Sizzle.getText = function( elems ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4285 var ret = "", elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4286
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4287 for ( var i = 0; elems[i]; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4288 elem = elems[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4289
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4290 // Get the text from text nodes and CDATA nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4291 if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4292 ret += elem.nodeValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4293
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4294 // Traverse everything else, except comment nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4295 } else if ( elem.nodeType !== 8 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4296 ret += Sizzle.getText( elem.childNodes );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4297 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4298 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4299
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4300 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4301 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4302
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4303 // Check to see if the browser returns elements by name when
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4304 // querying by getElementById (and provide a workaround)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4305 (function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4306 // We're going to inject a fake input element with a specified name
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4307 var form = document.createElement("div"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4308 id = "script" + (new Date()).getTime(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4309 root = document.documentElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4310
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4311 form.innerHTML = "<a name='" + id + "'/>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4313 // Inject it into the root element, check its status, and remove it quickly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4314 root.insertBefore( form, root.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4315
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4316 // The workaround has to do additional checks after a getElementById
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4317 // Which slows things down for other browsers (hence the branching)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4318 if ( document.getElementById( id ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4319 Expr.find.ID = function( match, context, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4320 if ( typeof context.getElementById !== "undefined" && !isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4321 var m = context.getElementById(match[1]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4322
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4323 return m ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4324 m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4325 [m] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4326 undefined :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4327 [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4328 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4329 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4330
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4331 Expr.filter.ID = function( elem, match ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4332 var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4333
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4334 return elem.nodeType === 1 && node && node.nodeValue === match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4335 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4336 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4337
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4338 root.removeChild( form );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4339
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4340 // release memory in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4341 root = form = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4342 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4343
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4344 (function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4345 // Check to see if the browser returns only elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4346 // when doing getElementsByTagName("*")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4347
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4348 // Create a fake element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4349 var div = document.createElement("div");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4350 div.appendChild( document.createComment("") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4351
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4352 // Make sure no comments are found
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4353 if ( div.getElementsByTagName("*").length > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4354 Expr.find.TAG = function( match, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4355 var results = context.getElementsByTagName( match[1] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4356
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4357 // Filter out possible comments
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4358 if ( match[1] === "*" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4359 var tmp = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4360
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4361 for ( var i = 0; results[i]; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4362 if ( results[i].nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4363 tmp.push( results[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4364 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4365 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4366
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4367 results = tmp;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4368 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4369
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4370 return results;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4371 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4372 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4373
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4374 // Check to see if an attribute returns normalized href attributes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4375 div.innerHTML = "<a href='#'></a>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4376
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4377 if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4378 div.firstChild.getAttribute("href") !== "#" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4379
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4380 Expr.attrHandle.href = function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4381 return elem.getAttribute( "href", 2 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4382 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4383 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4384
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4385 // release memory in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4386 div = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4387 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4388
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4389 if ( document.querySelectorAll ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4390 (function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4391 var oldSizzle = Sizzle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4392 div = document.createElement("div"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4393 id = "__sizzle__";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4394
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4395 div.innerHTML = "<p class='TEST'></p>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4396
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4397 // Safari can't handle uppercase or unicode characters when
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4398 // in quirks mode.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4399 if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4400 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4401 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4402
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4403 Sizzle = function( query, context, extra, seed ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4404 context = context || document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4405
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4406 // Only use querySelectorAll on non-XML documents
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4407 // (ID selectors don't work in non-HTML documents)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4408 if ( !seed && !Sizzle.isXML(context) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4409 // See if we find a selector to speed up
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4410 var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4411
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4412 if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4413 // Speed-up: Sizzle("TAG")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4414 if ( match[1] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4415 return makeArray( context.getElementsByTagName( query ), extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4416
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4417 // Speed-up: Sizzle(".CLASS")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4418 } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4419 return makeArray( context.getElementsByClassName( match[2] ), extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4420 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4421 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4422
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4423 if ( context.nodeType === 9 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4424 // Speed-up: Sizzle("body")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4425 // The body element only exists once, optimize finding it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4426 if ( query === "body" && context.body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4427 return makeArray( [ context.body ], extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4428
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4429 // Speed-up: Sizzle("#ID")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4430 } else if ( match && match[3] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4431 var elem = context.getElementById( match[3] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4432
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4433 // Check parentNode to catch when Blackberry 4.6 returns
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4434 // nodes that are no longer in the document #6963
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4435 if ( elem && elem.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4436 // Handle the case where IE and Opera return items
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4437 // by name instead of ID
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4438 if ( elem.id === match[3] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4439 return makeArray( [ elem ], extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4440 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4441
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4442 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4443 return makeArray( [], extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4444 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4445 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4446
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4447 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4448 return makeArray( context.querySelectorAll(query), extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4449 } catch(qsaError) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4450
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4451 // qSA works strangely on Element-rooted queries
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4452 // We can work around this by specifying an extra ID on the root
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4453 // and working up from there (Thanks to Andrew Dupont for the technique)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4454 // IE 8 doesn't work on object elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4455 } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4456 var oldContext = context,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4457 old = context.getAttribute( "id" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4458 nid = old || id,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4459 hasParent = context.parentNode,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4460 relativeHierarchySelector = /^\s*[+~]/.test( query );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4461
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4462 if ( !old ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4463 context.setAttribute( "id", nid );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4464 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4465 nid = nid.replace( /'/g, "\\$&" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4466 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4467 if ( relativeHierarchySelector && hasParent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4468 context = context.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4469 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4470
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4471 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4472 if ( !relativeHierarchySelector || hasParent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4473 return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4474 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4475
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4476 } catch(pseudoError) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4477 } finally {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4478 if ( !old ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4479 oldContext.removeAttribute( "id" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4480 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4481 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4482 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4483 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4484
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4485 return oldSizzle(query, context, extra, seed);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4486 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4487
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4488 for ( var prop in oldSizzle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4489 Sizzle[ prop ] = oldSizzle[ prop ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4490 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4491
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4492 // release memory in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4493 div = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4494 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4495 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4496
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4497 (function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4498 var html = document.documentElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4499 matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4500 pseudoWorks = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4501
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4502 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4503 // This should fail with an exception
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4504 // Gecko does not error, returns false instead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4505 matches.call( document.documentElement, "[test!='']:sizzle" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4506
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4507 } catch( pseudoError ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4508 pseudoWorks = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4509 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4510
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4511 if ( matches ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4512 Sizzle.matchesSelector = function( node, expr ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4513 // Make sure that attribute selectors are quoted
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4514 expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4515
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4516 if ( !Sizzle.isXML( node ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4517 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4518 if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4519 return matches.call( node, expr );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4520 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4521 } catch(e) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4522 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4523
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4524 return Sizzle(expr, null, null, [node]).length > 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4525 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4526 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4527 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4528
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4529 (function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4530 var div = document.createElement("div");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4532 div.innerHTML = "<div class='test e'></div><div class='test'></div>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4533
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4534 // Opera can't find a second classname (in 9.6)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4535 // Also, make sure that getElementsByClassName actually exists
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4536 if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4537 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4538 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4539
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4540 // Safari caches class attributes, doesn't catch changes (in 3.2)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4541 div.lastChild.className = "e";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4542
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4543 if ( div.getElementsByClassName("e").length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4544 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4545 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4546
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4547 Expr.order.splice(1, 0, "CLASS");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4548 Expr.find.CLASS = function( match, context, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4549 if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4550 return context.getElementsByClassName(match[1]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4551 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4552 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4553
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4554 // release memory in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4555 div = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4556 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4557
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4558 function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4559 for ( var i = 0, l = checkSet.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4560 var elem = checkSet[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4561
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4562 if ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4563 var match = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4564
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4565 elem = elem[dir];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4566
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4567 while ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4568 if ( elem.sizcache === doneName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4569 match = checkSet[elem.sizset];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4570 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4571 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4572
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4573 if ( elem.nodeType === 1 && !isXML ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4574 elem.sizcache = doneName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4575 elem.sizset = i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4576 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4577
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4578 if ( elem.nodeName.toLowerCase() === cur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4579 match = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4580 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4581 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4582
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4583 elem = elem[dir];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4584 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4585
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4586 checkSet[i] = match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4587 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4588 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4589 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4590
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4591 function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4592 for ( var i = 0, l = checkSet.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4593 var elem = checkSet[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4594
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4595 if ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4596 var match = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4597
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4598 elem = elem[dir];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4600 while ( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4601 if ( elem.sizcache === doneName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4602 match = checkSet[elem.sizset];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4603 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4604 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4605
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4606 if ( elem.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4607 if ( !isXML ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4608 elem.sizcache = doneName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4609 elem.sizset = i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4610 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4611
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4612 if ( typeof cur !== "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4613 if ( elem === cur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4614 match = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4615 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4616 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4617
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4618 } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4619 match = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4620 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4621 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4622 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4623
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4624 elem = elem[dir];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4625 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4626
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4627 checkSet[i] = match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4628 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4629 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4630 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4631
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4632 if ( document.documentElement.contains ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4633 Sizzle.contains = function( a, b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4634 return a !== b && (a.contains ? a.contains(b) : true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4635 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4636
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4637 } else if ( document.documentElement.compareDocumentPosition ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4638 Sizzle.contains = function( a, b ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4639 return !!(a.compareDocumentPosition(b) & 16);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4640 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4641
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4642 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4643 Sizzle.contains = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4644 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4645 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4646 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4647
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4648 Sizzle.isXML = function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4649 // documentElement is verified for cases where it doesn't yet exist
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4650 // (such as loading iframes in IE - #4833)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4651 var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4652
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4653 return documentElement ? documentElement.nodeName !== "HTML" : false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4654 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4655
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4656 var posProcess = function( selector, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4657 var match,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4658 tmpSet = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4659 later = "",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4660 root = context.nodeType ? [context] : context;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4661
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4662 // Position selectors must be done after the filter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4663 // And so must :not(positional) so we move all PSEUDOs to the end
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4664 while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4665 later += match[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4666 selector = selector.replace( Expr.match.PSEUDO, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4667 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4668
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4669 selector = Expr.relative[selector] ? selector + "*" : selector;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4670
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4671 for ( var i = 0, l = root.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4672 Sizzle( selector, root[i], tmpSet );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4673 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4674
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4675 return Sizzle.filter( later, tmpSet );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4676 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4677
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4678 // EXPOSE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4679 jQuery.find = Sizzle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4680 jQuery.expr = Sizzle.selectors;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4681 jQuery.expr[":"] = jQuery.expr.filters;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4682 jQuery.unique = Sizzle.uniqueSort;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4683 jQuery.text = Sizzle.getText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4684 jQuery.isXMLDoc = Sizzle.isXML;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4685 jQuery.contains = Sizzle.contains;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4686
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4687
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4688 })();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4689
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4690
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4691 var runtil = /Until$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4692 rparentsprev = /^(?:parents|prevUntil|prevAll)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4693 // Note: This RegExp should be improved, or likely pulled from Sizzle
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4694 rmultiselector = /,/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4695 isSimple = /^.[^:#\[\.,]*$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4696 slice = Array.prototype.slice,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4697 POS = jQuery.expr.match.POS,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4698 // methods guaranteed to produce a unique set when starting from a unique set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4699 guaranteedUnique = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4700 children: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4701 contents: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4702 next: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4703 prev: true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4704 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4705
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4706 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4707 find: function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4708 var ret = this.pushStack( "", "find", selector ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4709 length = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4710
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4711 for ( var i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4712 length = ret.length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4713 jQuery.find( selector, this[i], ret );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4714
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4715 if ( i > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4716 // Make sure that the results are unique
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4717 for ( var n = length; n < ret.length; n++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4718 for ( var r = 0; r < length; r++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4719 if ( ret[r] === ret[n] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4720 ret.splice(n--, 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4721 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4722 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4723 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4724 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4725 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4726 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4727
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4728 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4729 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4730
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4731 has: function( target ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4732 var targets = jQuery( target );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4733 return this.filter(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4734 for ( var i = 0, l = targets.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4735 if ( jQuery.contains( this, targets[i] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4736 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4737 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4738 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4739 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4740 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4741
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4742 not: function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4743 return this.pushStack( winnow(this, selector, false), "not", selector);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4744 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4745
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4746 filter: function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4747 return this.pushStack( winnow(this, selector, true), "filter", selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4748 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4749
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4750 is: function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4751 return !!selector && jQuery.filter( selector, this ).length > 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4752 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4753
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4754 closest: function( selectors, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4755 var ret = [], i, l, cur = this[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4756
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4757 if ( jQuery.isArray( selectors ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4758 var match, selector,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4759 matches = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4760 level = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4761
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4762 if ( cur && selectors.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4763 for ( i = 0, l = selectors.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4764 selector = selectors[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4765
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4766 if ( !matches[selector] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4767 matches[selector] = jQuery.expr.match.POS.test( selector ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4768 jQuery( selector, context || this.context ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4769 selector;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4770 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4771 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4772
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4773 while ( cur && cur.ownerDocument && cur !== context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4774 for ( selector in matches ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4775 match = matches[selector];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4776
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4777 if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4778 ret.push({ selector: selector, elem: cur, level: level });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4779 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4780 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4781
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4782 cur = cur.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4783 level++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4784 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4785 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4786
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4787 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4788 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4789
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4790 var pos = POS.test( selectors ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4791 jQuery( selectors, context || this.context ) : null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4792
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4793 for ( i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4794 cur = this[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4795
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4796 while ( cur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4797 if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4798 ret.push( cur );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4799 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4800
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4801 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4802 cur = cur.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4803 if ( !cur || !cur.ownerDocument || cur === context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4804 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4805 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4806 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4807 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4808 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4809
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4810 ret = ret.length > 1 ? jQuery.unique(ret) : ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4811
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4812 return this.pushStack( ret, "closest", selectors );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4813 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4814
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4815 // Determine the position of an element within
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4816 // the matched set of elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4817 index: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4818 if ( !elem || typeof elem === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4819 return jQuery.inArray( this[0],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4820 // If it receives a string, the selector is used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4821 // If it receives nothing, the siblings are used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4822 elem ? jQuery( elem ) : this.parent().children() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4823 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4824 // Locate the position of the desired element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4825 return jQuery.inArray(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4826 // If it receives a jQuery object, the first element is used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4827 elem.jquery ? elem[0] : elem, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4828 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4829
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4830 add: function( selector, context ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4831 var set = typeof selector === "string" ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4832 jQuery( selector, context ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4833 jQuery.makeArray( selector ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4834 all = jQuery.merge( this.get(), set );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4835
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4836 return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4837 all :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4838 jQuery.unique( all ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4839 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4840
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4841 andSelf: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4842 return this.add( this.prevObject );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4843 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4844 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4845
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4846 // A painfully simple check to see if an element is disconnected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4847 // from a document (should be improved, where feasible).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4848 function isDisconnected( node ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4849 return !node || !node.parentNode || node.parentNode.nodeType === 11;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4850 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4851
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4852 jQuery.each({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4853 parent: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4854 var parent = elem.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4855 return parent && parent.nodeType !== 11 ? parent : null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4856 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4857 parents: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4858 return jQuery.dir( elem, "parentNode" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4859 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4860 parentsUntil: function( elem, i, until ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4861 return jQuery.dir( elem, "parentNode", until );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4862 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4863 next: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4864 return jQuery.nth( elem, 2, "nextSibling" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4865 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4866 prev: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4867 return jQuery.nth( elem, 2, "previousSibling" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4868 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4869 nextAll: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4870 return jQuery.dir( elem, "nextSibling" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4871 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4872 prevAll: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4873 return jQuery.dir( elem, "previousSibling" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4874 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4875 nextUntil: function( elem, i, until ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4876 return jQuery.dir( elem, "nextSibling", until );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4877 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4878 prevUntil: function( elem, i, until ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4879 return jQuery.dir( elem, "previousSibling", until );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4880 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4881 siblings: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4882 return jQuery.sibling( elem.parentNode.firstChild, elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4883 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4884 children: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4885 return jQuery.sibling( elem.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4886 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4887 contents: function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4888 return jQuery.nodeName( elem, "iframe" ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4889 elem.contentDocument || elem.contentWindow.document :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4890 jQuery.makeArray( elem.childNodes );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4891 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4892 }, function( name, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4893 jQuery.fn[ name ] = function( until, selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4894 var ret = jQuery.map( this, fn, until ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4895 // The variable 'args' was introduced in
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4896 // https://github.com/jquery/jquery/commit/52a0238
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4897 // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4898 // http://code.google.com/p/v8/issues/detail?id=1050
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4899 args = slice.call(arguments);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4900
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4901 if ( !runtil.test( name ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4902 selector = until;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4903 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4904
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4905 if ( selector && typeof selector === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4906 ret = jQuery.filter( selector, ret );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4907 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4908
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4909 ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4910
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4911 if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4912 ret = ret.reverse();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4913 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4914
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4915 return this.pushStack( ret, name, args.join(",") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4916 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4917 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4918
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4919 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4920 filter: function( expr, elems, not ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4921 if ( not ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4922 expr = ":not(" + expr + ")";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4923 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4924
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4925 return elems.length === 1 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4926 jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4927 jQuery.find.matches(expr, elems);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4928 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4929
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4930 dir: function( elem, dir, until ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4931 var matched = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4932 cur = elem[ dir ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4933
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4934 while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4935 if ( cur.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4936 matched.push( cur );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4937 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4938 cur = cur[dir];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4939 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4940 return matched;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4941 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4942
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4943 nth: function( cur, result, dir, elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4944 result = result || 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4945 var num = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4946
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4947 for ( ; cur; cur = cur[dir] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4948 if ( cur.nodeType === 1 && ++num === result ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4949 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4950 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4951 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4952
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4953 return cur;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4954 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4955
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4956 sibling: function( n, elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4957 var r = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4958
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4959 for ( ; n; n = n.nextSibling ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4960 if ( n.nodeType === 1 && n !== elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4961 r.push( n );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4962 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4963 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4964
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4965 return r;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4966 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4967 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4968
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4969 // Implement the identical functionality for filter and not
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4970 function winnow( elements, qualifier, keep ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4971 if ( jQuery.isFunction( qualifier ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4972 return jQuery.grep(elements, function( elem, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4973 var retVal = !!qualifier.call( elem, i, elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4974 return retVal === keep;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4975 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4976
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4977 } else if ( qualifier.nodeType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4978 return jQuery.grep(elements, function( elem, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4979 return (elem === qualifier) === keep;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4980 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4981
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4982 } else if ( typeof qualifier === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4983 var filtered = jQuery.grep(elements, function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4984 return elem.nodeType === 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4985 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4986
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4987 if ( isSimple.test( qualifier ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4988 return jQuery.filter(qualifier, filtered, !keep);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4989 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4990 qualifier = jQuery.filter( qualifier, filtered );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4991 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4992 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4993
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4994 return jQuery.grep(elements, function( elem, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4995 return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4996 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4997 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4998
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
4999
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5000
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5001
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5002 var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5003 rleadingWhitespace = /^\s+/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5004 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5005 rtagName = /<([\w:]+)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5006 rtbody = /<tbody/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5007 rhtml = /<|&#?\w+;/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5008 rnocache = /<(?:script|object|embed|option|style)/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5009 // checked="checked" or checked
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5010 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5011 wrapMap = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5012 option: [ 1, "<select multiple='multiple'>", "</select>" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5013 legend: [ 1, "<fieldset>", "</fieldset>" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5014 thead: [ 1, "<table>", "</table>" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5015 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5016 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5017 col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5018 area: [ 1, "<map>", "</map>" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5019 _default: [ 0, "", "" ]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5020 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5021
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5022 wrapMap.optgroup = wrapMap.option;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5023 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5024 wrapMap.th = wrapMap.td;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5025
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5026 // IE can't serialize <link> and <script> tags normally
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5027 if ( !jQuery.support.htmlSerialize ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5028 wrapMap._default = [ 1, "div<div>", "</div>" ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5029 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5030
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5031 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5032 text: function( text ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5033 if ( jQuery.isFunction(text) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5034 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5035 var self = jQuery( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5036
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5037 self.text( text.call(this, i, self.text()) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5038 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5039 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5040
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5041 if ( typeof text !== "object" && text !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5042 return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5043 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5044
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5045 return jQuery.text( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5046 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5048 wrapAll: function( html ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5049 if ( jQuery.isFunction( html ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5050 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5051 jQuery(this).wrapAll( html.call(this, i) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5052 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5053 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5054
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5055 if ( this[0] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5056 // The elements to wrap the target around
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5057 var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5058
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5059 if ( this[0].parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5060 wrap.insertBefore( this[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5061 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5062
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5063 wrap.map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5064 var elem = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5065
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5066 while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5067 elem = elem.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5068 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5069
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5070 return elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5071 }).append(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5072 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5073
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5074 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5075 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5076
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5077 wrapInner: function( html ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5078 if ( jQuery.isFunction( html ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5079 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5080 jQuery(this).wrapInner( html.call(this, i) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5081 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5082 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5083
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5084 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5085 var self = jQuery( this ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5086 contents = self.contents();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5087
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5088 if ( contents.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5089 contents.wrapAll( html );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5090
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5091 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5092 self.append( html );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5093 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5094 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5095 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5096
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5097 wrap: function( html ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5098 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5099 jQuery( this ).wrapAll( html );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5100 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5101 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5102
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5103 unwrap: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5104 return this.parent().each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5105 if ( !jQuery.nodeName( this, "body" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5106 jQuery( this ).replaceWith( this.childNodes );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5107 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5108 }).end();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5109 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5110
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5111 append: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5112 return this.domManip(arguments, true, function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5113 if ( this.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5114 this.appendChild( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5115 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5116 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5117 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5118
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5119 prepend: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5120 return this.domManip(arguments, true, function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5121 if ( this.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5122 this.insertBefore( elem, this.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5123 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5124 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5125 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5126
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5127 before: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5128 if ( this[0] && this[0].parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5129 return this.domManip(arguments, false, function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5130 this.parentNode.insertBefore( elem, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5131 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5132 } else if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5133 var set = jQuery(arguments[0]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5134 set.push.apply( set, this.toArray() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5135 return this.pushStack( set, "before", arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5136 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5137 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5138
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5139 after: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5140 if ( this[0] && this[0].parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5141 return this.domManip(arguments, false, function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5142 this.parentNode.insertBefore( elem, this.nextSibling );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5143 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5144 } else if ( arguments.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5145 var set = this.pushStack( this, "after", arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5146 set.push.apply( set, jQuery(arguments[0]).toArray() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5147 return set;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5148 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5149 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5151 // keepData is for internal use only--do not document
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5152 remove: function( selector, keepData ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5153 for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5154 if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5155 if ( !keepData && elem.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5156 jQuery.cleanData( elem.getElementsByTagName("*") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5157 jQuery.cleanData( [ elem ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5158 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5159
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5160 if ( elem.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5161 elem.parentNode.removeChild( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5162 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5163 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5164 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5165
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5166 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5167 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5168
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5169 empty: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5170 for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5171 // Remove element nodes and prevent memory leaks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5172 if ( elem.nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5173 jQuery.cleanData( elem.getElementsByTagName("*") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5174 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5175
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5176 // Remove any remaining nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5177 while ( elem.firstChild ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5178 elem.removeChild( elem.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5179 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5180 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5181
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5182 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5183 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5184
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5185 clone: function( dataAndEvents, deepDataAndEvents ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5186 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5187 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5188
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5189 return this.map( function () {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5190 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5191 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5192 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5193
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5194 html: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5195 if ( value === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5196 return this[0] && this[0].nodeType === 1 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5197 this[0].innerHTML.replace(rinlinejQuery, "") :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5198 null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5199
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5200 // See if we can take a shortcut and just use innerHTML
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5201 } else if ( typeof value === "string" && !rnocache.test( value ) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5202 (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5203 !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5204
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5205 value = value.replace(rxhtmlTag, "<$1></$2>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5206
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5207 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5208 for ( var i = 0, l = this.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5209 // Remove element nodes and prevent memory leaks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5210 if ( this[i].nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5211 jQuery.cleanData( this[i].getElementsByTagName("*") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5212 this[i].innerHTML = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5213 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5214 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5215
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5216 // If using innerHTML throws an exception, use the fallback method
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5217 } catch(e) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5218 this.empty().append( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5219 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5220
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5221 } else if ( jQuery.isFunction( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5222 this.each(function(i){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5223 var self = jQuery( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5224
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5225 self.html( value.call(this, i, self.html()) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5226 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5227
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5228 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5229 this.empty().append( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5230 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5231
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5232 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5233 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5234
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5235 replaceWith: function( value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5236 if ( this[0] && this[0].parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5237 // Make sure that the elements are removed from the DOM before they are inserted
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5238 // this can help fix replacing a parent with child elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5239 if ( jQuery.isFunction( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5240 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5241 var self = jQuery(this), old = self.html();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5242 self.replaceWith( value.call( this, i, old ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5243 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5244 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5245
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5246 if ( typeof value !== "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5247 value = jQuery( value ).detach();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5248 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5249
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5250 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5251 var next = this.nextSibling,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5252 parent = this.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5253
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5254 jQuery( this ).remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5255
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5256 if ( next ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5257 jQuery(next).before( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5258 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5259 jQuery(parent).append( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5260 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5261 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5262 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5263 return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5264 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5265 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5266
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5267 detach: function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5268 return this.remove( selector, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5269 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5270
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5271 domManip: function( args, table, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5272 var results, first, fragment, parent,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5273 value = args[0],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5274 scripts = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5276 // We can't cloneNode fragments that contain checked, in WebKit
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5277 if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5278 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5279 jQuery(this).domManip( args, table, callback, true );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5280 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5281 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5283 if ( jQuery.isFunction(value) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5284 return this.each(function(i) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5285 var self = jQuery(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5286 args[0] = value.call(this, i, table ? self.html() : undefined);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5287 self.domManip( args, table, callback );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5288 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5289 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5290
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5291 if ( this[0] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5292 parent = value && value.parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5293
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5294 // If we're in a fragment, just use that instead of building a new one
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5295 if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5296 results = { fragment: parent };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5297
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5298 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5299 results = jQuery.buildFragment( args, this, scripts );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5300 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5301
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5302 fragment = results.fragment;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5303
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5304 if ( fragment.childNodes.length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5305 first = fragment = fragment.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5306 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5307 first = fragment.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5308 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5309
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5310 if ( first ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5311 table = table && jQuery.nodeName( first, "tr" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5313 for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5314 callback.call(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5315 table ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5316 root(this[i], first) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5317 this[i],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5318 // Make sure that we do not leak memory by inadvertently discarding
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5319 // the original fragment (which might have attached data) instead of
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5320 // using it; in addition, use the original fragment object for the last
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5321 // item instead of first because it can end up being emptied incorrectly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5322 // in certain situations (Bug #8070).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5323 // Fragments from the fragment cache must always be cloned and never used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5324 // in place.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5325 results.cacheable || (l > 1 && i < lastIndex) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5326 jQuery.clone( fragment, true, true ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5327 fragment
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5328 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5329 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5330 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5331
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5332 if ( scripts.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5333 jQuery.each( scripts, evalScript );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5334 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5335 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5336
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5337 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5338 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5339 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5340
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5341 function root( elem, cur ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5342 return jQuery.nodeName(elem, "table") ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5343 (elem.getElementsByTagName("tbody")[0] ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5344 elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5345 elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5346 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5347
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5348 function cloneCopyEvent( src, dest ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5349
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5350 if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5351 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5352 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5353
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5354 var internalKey = jQuery.expando,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5355 oldData = jQuery.data( src ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5356 curData = jQuery.data( dest, oldData );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5357
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5358 // Switch to use the internal data object, if it exists, for the next
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5359 // stage of data copying
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5360 if ( (oldData = oldData[ internalKey ]) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5361 var events = oldData.events;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5362 curData = curData[ internalKey ] = jQuery.extend({}, oldData);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5363
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5364 if ( events ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5365 delete curData.handle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5366 curData.events = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5367
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5368 for ( var type in events ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5369 for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5370 jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5371 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5372 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5373 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5374 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5375 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5376
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5377 function cloneFixAttributes(src, dest) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5378 // We do not need to do anything for non-Elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5379 if ( dest.nodeType !== 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5380 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5381 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5382
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5383 var nodeName = dest.nodeName.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5384
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5385 // clearAttributes removes the attributes, which we don't want,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5386 // but also removes the attachEvent events, which we *do* want
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5387 dest.clearAttributes();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5388
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5389 // mergeAttributes, in contrast, only merges back on the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5390 // original attributes, not the events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5391 dest.mergeAttributes(src);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5392
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5393 // IE6-8 fail to clone children inside object elements that use
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5394 // the proprietary classid attribute value (rather than the type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5395 // attribute) to identify the type of content to display
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5396 if ( nodeName === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5397 dest.outerHTML = src.outerHTML;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5398
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5399 } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5400 // IE6-8 fails to persist the checked state of a cloned checkbox
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5401 // or radio button. Worse, IE6-7 fail to give the cloned element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5402 // a checked appearance if the defaultChecked value isn't also set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5403 if ( src.checked ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5404 dest.defaultChecked = dest.checked = src.checked;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5405 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5406
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5407 // IE6-7 get confused and end up setting the value of a cloned
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5408 // checkbox/radio button to an empty string instead of "on"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5409 if ( dest.value !== src.value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5410 dest.value = src.value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5411 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5412
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5413 // IE6-8 fails to return the selected option to the default selected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5414 // state when cloning options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5415 } else if ( nodeName === "option" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5416 dest.selected = src.defaultSelected;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5417
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5418 // IE6-8 fails to set the defaultValue to the correct value when
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5419 // cloning other types of input fields
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5420 } else if ( nodeName === "input" || nodeName === "textarea" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5421 dest.defaultValue = src.defaultValue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5422 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5423
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5424 // Event data gets referenced instead of copied if the expando
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5425 // gets copied too
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5426 dest.removeAttribute( jQuery.expando );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5427 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5428
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5429 jQuery.buildFragment = function( args, nodes, scripts ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5430 var fragment, cacheable, cacheresults,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5431 doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5432
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5433 // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5434 // Cloning options loses the selected state, so don't cache them
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5435 // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5436 // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5437 if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5438 args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5439
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5440 cacheable = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5441 cacheresults = jQuery.fragments[ args[0] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5442 if ( cacheresults ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5443 if ( cacheresults !== 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5444 fragment = cacheresults;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5445 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5446 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5447 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5448
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5449 if ( !fragment ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5450 fragment = doc.createDocumentFragment();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5451 jQuery.clean( args, doc, fragment, scripts );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5452 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5453
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5454 if ( cacheable ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5455 jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5456 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5457
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5458 return { fragment: fragment, cacheable: cacheable };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5459 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5460
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5461 jQuery.fragments = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5462
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5463 jQuery.each({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5464 appendTo: "append",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5465 prependTo: "prepend",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5466 insertBefore: "before",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5467 insertAfter: "after",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5468 replaceAll: "replaceWith"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5469 }, function( name, original ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5470 jQuery.fn[ name ] = function( selector ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5471 var ret = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5472 insert = jQuery( selector ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5473 parent = this.length === 1 && this[0].parentNode;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5474
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5475 if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5476 insert[ original ]( this[0] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5477 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5478
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5479 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5480 for ( var i = 0, l = insert.length; i < l; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5481 var elems = (i > 0 ? this.clone(true) : this).get();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5482 jQuery( insert[i] )[ original ]( elems );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5483 ret = ret.concat( elems );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5484 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5485
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5486 return this.pushStack( ret, name, insert.selector );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5487 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5488 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5489 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5490
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5491 function getAll( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5492 if ( "getElementsByTagName" in elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5493 return elem.getElementsByTagName( "*" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5494
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5495 } else if ( "querySelectorAll" in elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5496 return elem.querySelectorAll( "*" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5497
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5498 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5499 return [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5500 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5501 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5502
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5503 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5504 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5505 var clone = elem.cloneNode(true),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5506 srcElements,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5507 destElements,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5508 i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5509
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5510 if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5511 (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5512 // IE copies events bound via attachEvent when using cloneNode.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5513 // Calling detachEvent on the clone will also remove the events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5514 // from the original. In order to get around this, we use some
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5515 // proprietary methods to clear the events. Thanks to MooTools
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5516 // guys for this hotness.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5517
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5518 cloneFixAttributes( elem, clone );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5519
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5520 // Using Sizzle here is crazy slow, so we use getElementsByTagName
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5521 // instead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5522 srcElements = getAll( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5523 destElements = getAll( clone );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5524
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5525 // Weird iteration because IE will replace the length property
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5526 // with an element if you are cloning the body and one of the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5527 // elements on the page has a name or id of "length"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5528 for ( i = 0; srcElements[i]; ++i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5529 cloneFixAttributes( srcElements[i], destElements[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5530 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5531 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5532
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5533 // Copy the events from the original to the clone
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5534 if ( dataAndEvents ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5535 cloneCopyEvent( elem, clone );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5536
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5537 if ( deepDataAndEvents ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5538 srcElements = getAll( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5539 destElements = getAll( clone );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5540
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5541 for ( i = 0; srcElements[i]; ++i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5542 cloneCopyEvent( srcElements[i], destElements[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5543 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5544 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5545 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5546
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5547 // Return the cloned set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5548 return clone;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5549 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5550 clean: function( elems, context, fragment, scripts ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5551 context = context || document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5552
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5553 // !context.createElement fails in IE with an error but returns typeof 'object'
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5554 if ( typeof context.createElement === "undefined" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5555 context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5556 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5557
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5558 var ret = [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5559
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5560 for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5561 if ( typeof elem === "number" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5562 elem += "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5563 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5564
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5565 if ( !elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5566 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5567 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5568
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5569 // Convert html string into DOM nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5570 if ( typeof elem === "string" && !rhtml.test( elem ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5571 elem = context.createTextNode( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5572
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5573 } else if ( typeof elem === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5574 // Fix "XHTML"-style tags in all browsers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5575 elem = elem.replace(rxhtmlTag, "<$1></$2>");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5576
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5577 // Trim whitespace, otherwise indexOf won't work as expected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5578 var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5579 wrap = wrapMap[ tag ] || wrapMap._default,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5580 depth = wrap[0],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5581 div = context.createElement("div");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5582
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5583 // Go to html and back, then peel off extra wrappers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5584 div.innerHTML = wrap[1] + elem + wrap[2];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5585
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5586 // Move to the right depth
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5587 while ( depth-- ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5588 div = div.lastChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5589 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5590
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5591 // Remove IE's autoinserted <tbody> from table fragments
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5592 if ( !jQuery.support.tbody ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5593
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5594 // String was a <table>, *may* have spurious <tbody>
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5595 var hasBody = rtbody.test(elem),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5596 tbody = tag === "table" && !hasBody ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5597 div.firstChild && div.firstChild.childNodes :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5598
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5599 // String was a bare <thead> or <tfoot>
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5600 wrap[1] === "<table>" && !hasBody ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5601 div.childNodes :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5602 [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5603
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5604 for ( var j = tbody.length - 1; j >= 0 ; --j ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5605 if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5606 tbody[ j ].parentNode.removeChild( tbody[ j ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5607 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5608 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5609
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5610 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5611
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5612 // IE completely kills leading whitespace when innerHTML is used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5613 if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5614 div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5615 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5616
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5617 elem = div.childNodes;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5618 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5619
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5620 if ( elem.nodeType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5621 ret.push( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5622 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5623 ret = jQuery.merge( ret, elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5624 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5625 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5626
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5627 if ( fragment ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5628 for ( i = 0; ret[i]; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5629 if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5630 scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5631
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5632 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5633 if ( ret[i].nodeType === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5634 ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5635 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5636 fragment.appendChild( ret[i] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5637 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5638 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5639 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5640
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5641 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5642 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5643
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5644 cleanData: function( elems ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5645 var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5646 deleteExpando = jQuery.support.deleteExpando;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5647
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5648 for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5649 if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5650 continue;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5651 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5652
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5653 id = elem[ jQuery.expando ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5654
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5655 if ( id ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5656 data = cache[ id ] && cache[ id ][ internalKey ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5657
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5658 if ( data && data.events ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5659 for ( var type in data.events ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5660 if ( special[ type ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5661 jQuery.event.remove( elem, type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5662
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5663 // This is a shortcut to avoid jQuery.event.remove's overhead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5664 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5665 jQuery.removeEvent( elem, type, data.handle );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5666 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5667 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5668
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5669 // Null the DOM reference to avoid IE6/7/8 leak (#7054)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5670 if ( data.handle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5671 data.handle.elem = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5672 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5673 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5674
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5675 if ( deleteExpando ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5676 delete elem[ jQuery.expando ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5677
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5678 } else if ( elem.removeAttribute ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5679 elem.removeAttribute( jQuery.expando );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5680 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5681
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5682 delete cache[ id ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5683 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5684 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5685 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5686 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5687
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5688 function evalScript( i, elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5689 if ( elem.src ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5690 jQuery.ajax({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5691 url: elem.src,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5692 async: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5693 dataType: "script"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5694 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5695 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5696 jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5697 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5698
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5699 if ( elem.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5700 elem.parentNode.removeChild( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5701 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5702 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5703
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5704
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5705
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5706
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5707 var ralpha = /alpha\([^)]*\)/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5708 ropacity = /opacity=([^)]*)/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5709 rdashAlpha = /-([a-z])/ig,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5710 rupper = /([A-Z])/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5711 rnumpx = /^-?\d+(?:px)?$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5712 rnum = /^-?\d/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5713
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5714 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5715 cssWidth = [ "Left", "Right" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5716 cssHeight = [ "Top", "Bottom" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5717 curCSS,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5718
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5719 getComputedStyle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5720 currentStyle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5721
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5722 fcamelCase = function( all, letter ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5723 return letter.toUpperCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5724 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5725
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5726 jQuery.fn.css = function( name, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5727 // Setting 'undefined' is a no-op
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5728 if ( arguments.length === 2 && value === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5729 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5730 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5731
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5732 return jQuery.access( this, name, value, true, function( elem, name, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5733 return value !== undefined ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5734 jQuery.style( elem, name, value ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5735 jQuery.css( elem, name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5736 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5737 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5738
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5739 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5740 // Add in style property hooks for overriding the default
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5741 // behavior of getting and setting a style property
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5742 cssHooks: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5743 opacity: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5744 get: function( elem, computed ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5745 if ( computed ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5746 // We should always get a number back from opacity
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5747 var ret = curCSS( elem, "opacity", "opacity" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5748 return ret === "" ? "1" : ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5749
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5750 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5751 return elem.style.opacity;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5752 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5753 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5754 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5755 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5756
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5757 // Exclude the following css properties to add px
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5758 cssNumber: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5759 "zIndex": true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5760 "fontWeight": true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5761 "opacity": true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5762 "zoom": true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5763 "lineHeight": true
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5764 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5765
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5766 // Add in properties whose names you wish to fix before
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5767 // setting or getting the value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5768 cssProps: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5769 // normalize float css property
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5770 "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5771 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5772
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5773 // Get and set the style property on a DOM Node
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5774 style: function( elem, name, value, extra ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5775 // Don't set styles on text and comment nodes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5776 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5777 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5778 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5779
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5780 // Make sure that we're working with the right name
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5781 var ret, origName = jQuery.camelCase( name ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5782 style = elem.style, hooks = jQuery.cssHooks[ origName ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5783
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5784 name = jQuery.cssProps[ origName ] || origName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5785
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5786 // Check if we're setting a value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5787 if ( value !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5788 // Make sure that NaN and null values aren't set. See: #7116
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5789 if ( typeof value === "number" && isNaN( value ) || value == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5790 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5791 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5792
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5793 // If a number was passed in, add 'px' to the (except for certain CSS properties)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5794 if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5795 value += "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5796 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5797
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5798 // If a hook was provided, use that value, otherwise just set the specified value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5799 if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5800 // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5801 // Fixes bug #5509
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5802 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5803 style[ name ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5804 } catch(e) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5805 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5806
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5807 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5808 // If a hook was provided get the non-computed value from there
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5809 if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5810 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5811 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5812
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5813 // Otherwise just get the value from the style object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5814 return style[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5815 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5816 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5817
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5818 css: function( elem, name, extra ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5819 // Make sure that we're working with the right name
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5820 var ret, origName = jQuery.camelCase( name ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5821 hooks = jQuery.cssHooks[ origName ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5822
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5823 name = jQuery.cssProps[ origName ] || origName;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5824
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5825 // If a hook was provided get the computed value from there
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5826 if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5827 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5828
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5829 // Otherwise, if a way to get the computed value exists, use that
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5830 } else if ( curCSS ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5831 return curCSS( elem, name, origName );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5832 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5833 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5834
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5835 // A method for quickly swapping in/out CSS properties to get correct calculations
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5836 swap: function( elem, options, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5837 var old = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5838
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5839 // Remember the old values, and insert the new ones
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5840 for ( var name in options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5841 old[ name ] = elem.style[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5842 elem.style[ name ] = options[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5843 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5844
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5845 callback.call( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5846
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5847 // Revert the old values
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5848 for ( name in options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5849 elem.style[ name ] = old[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5850 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5851 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5852
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5853 camelCase: function( string ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5854 return string.replace( rdashAlpha, fcamelCase );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5855 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5856 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5857
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5858 // DEPRECATED, Use jQuery.css() instead
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5859 jQuery.curCSS = jQuery.css;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5860
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5861 jQuery.each(["height", "width"], function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5862 jQuery.cssHooks[ name ] = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5863 get: function( elem, computed, extra ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5864 var val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5865
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5866 if ( computed ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5867 if ( elem.offsetWidth !== 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5868 val = getWH( elem, name, extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5869
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5870 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5871 jQuery.swap( elem, cssShow, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5872 val = getWH( elem, name, extra );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5873 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5874 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5875
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5876 if ( val <= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5877 val = curCSS( elem, name, name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5878
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5879 if ( val === "0px" && currentStyle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5880 val = currentStyle( elem, name, name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5881 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5882
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5883 if ( val != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5884 // Should return "auto" instead of 0, use 0 for
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5885 // temporary backwards-compat
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5886 return val === "" || val === "auto" ? "0px" : val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5887 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5888 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5889
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5890 if ( val < 0 || val == null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5891 val = elem.style[ name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5892
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5893 // Should return "auto" instead of 0, use 0 for
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5894 // temporary backwards-compat
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5895 return val === "" || val === "auto" ? "0px" : val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5896 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5897
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5898 return typeof val === "string" ? val : val + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5899 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5900 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5901
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5902 set: function( elem, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5903 if ( rnumpx.test( value ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5904 // ignore negative width and height values #1599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5905 value = parseFloat(value);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5906
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5907 if ( value >= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5908 return value + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5909 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5910
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5911 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5912 return value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5913 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5914 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5915 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5916 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5917
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5918 if ( !jQuery.support.opacity ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5919 jQuery.cssHooks.opacity = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5920 get: function( elem, computed ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5921 // IE uses filters for opacity
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5922 return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5923 (parseFloat(RegExp.$1) / 100) + "" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5924 computed ? "1" : "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5925 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5926
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5927 set: function( elem, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5928 var style = elem.style;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5929
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5930 // IE has trouble with opacity if it does not have layout
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5931 // Force it by setting the zoom level
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5932 style.zoom = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5933
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5934 // Set the alpha filter to set the opacity
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5935 var opacity = jQuery.isNaN(value) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5936 "" :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5937 "alpha(opacity=" + value * 100 + ")",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5938 filter = style.filter || "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5939
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5940 style.filter = ralpha.test(filter) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5941 filter.replace(ralpha, opacity) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5942 style.filter + ' ' + opacity;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5943 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5944 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5945 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5946
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5947 if ( document.defaultView && document.defaultView.getComputedStyle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5948 getComputedStyle = function( elem, newName, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5949 var ret, defaultView, computedStyle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5950
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5951 name = name.replace( rupper, "-$1" ).toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5952
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5953 if ( !(defaultView = elem.ownerDocument.defaultView) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5954 return undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5955 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5956
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5957 if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5958 ret = computedStyle.getPropertyValue( name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5959 if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5960 ret = jQuery.style( elem, name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5961 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5962 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5963
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5964 return ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5965 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5966 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5967
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5968 if ( document.documentElement.currentStyle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5969 currentStyle = function( elem, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5970 var left,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5971 ret = elem.currentStyle && elem.currentStyle[ name ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5972 rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5973 style = elem.style;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5974
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5975 // From the awesome hack by Dean Edwards
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5976 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5977
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5978 // If we're not dealing with a regular pixel number
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5979 // but a number that has a weird ending, we need to convert it to pixels
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5980 if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5981 // Remember the original values
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5982 left = style.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5983
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5984 // Put in the new values to get a computed value out
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5985 if ( rsLeft ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5986 elem.runtimeStyle.left = elem.currentStyle.left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5987 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5988 style.left = name === "fontSize" ? "1em" : (ret || 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5989 ret = style.pixelLeft + "px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5990
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5991 // Revert the changed values
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5992 style.left = left;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5993 if ( rsLeft ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5994 elem.runtimeStyle.left = rsLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5995 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5996 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5997
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5998 return ret === "" ? "auto" : ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
5999 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6000 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6001
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6002 curCSS = getComputedStyle || currentStyle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6003
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6004 function getWH( elem, name, extra ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6005 var which = name === "width" ? cssWidth : cssHeight,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6006 val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6007
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6008 if ( extra === "border" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6009 return val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6010 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6011
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6012 jQuery.each( which, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6013 if ( !extra ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6014 val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6015 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6016
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6017 if ( extra === "margin" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6018 val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6019
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6020 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6021 val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6022 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6023 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6024
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6025 return val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6026 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6027
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6028 if ( jQuery.expr && jQuery.expr.filters ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6029 jQuery.expr.filters.hidden = function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6030 var width = elem.offsetWidth,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6031 height = elem.offsetHeight;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6032
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6033 return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6034 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6035
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6036 jQuery.expr.filters.visible = function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6037 return !jQuery.expr.filters.hidden( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6038 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6039 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6040
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6041
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6042
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6043
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6044 var r20 = /%20/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6045 rbracket = /\[\]$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6046 rCRLF = /\r?\n/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6047 rhash = /#.*$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6048 rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6049 rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6050 // #7653, #8125, #8152: local protocol detection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6051 rlocalProtocol = /(?:^file|^widget|\-extension):$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6052 rnoContent = /^(?:GET|HEAD)$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6053 rprotocol = /^\/\//,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6054 rquery = /\?/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6055 rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6056 rselectTextarea = /^(?:select|textarea)/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6057 rspacesAjax = /\s+/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6058 rts = /([?&])_=[^&]*/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6059 rucHeaders = /(^|\-)([a-z])/g,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6060 rucHeadersFunc = function( _, $1, $2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6061 return $1 + $2.toUpperCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6062 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6063 rurl = /^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6064
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6065 // Keep a copy of the old load method
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6066 _load = jQuery.fn.load,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6067
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6068 /* Prefilters
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6069 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6070 * 2) These are called:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6071 * - BEFORE asking for a transport
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6072 * - AFTER param serialization (s.data is a string if s.processData is true)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6073 * 3) key is the dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6074 * 4) the catchall symbol "*" can be used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6075 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6076 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6077 prefilters = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6078
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6079 /* Transports bindings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6080 * 1) key is the dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6081 * 2) the catchall symbol "*" can be used
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6082 * 3) selection will start with transport dataType and THEN go to "*" if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6083 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6084 transports = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6085
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6086 // Document location
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6087 ajaxLocation,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6088
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6089 // Document location segments
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6090 ajaxLocParts;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6091
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6092 // #8138, IE may throw an exception when accessing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6093 // a field from document.location if document.domain has been set
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6094 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6095 ajaxLocation = document.location.href;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6096 } catch( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6097 // Use the href attribute of an A element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6098 // since IE will modify it given document.location
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6099 ajaxLocation = document.createElement( "a" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6100 ajaxLocation.href = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6101 ajaxLocation = ajaxLocation.href;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6102 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6103
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6104 // Segment location into parts
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6105 ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6106
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6107 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6108 function addToPrefiltersOrTransports( structure ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6109
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6110 // dataTypeExpression is optional and defaults to "*"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6111 return function( dataTypeExpression, func ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6112
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6113 if ( typeof dataTypeExpression !== "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6114 func = dataTypeExpression;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6115 dataTypeExpression = "*";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6116 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6117
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6118 if ( jQuery.isFunction( func ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6119 var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6120 i = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6121 length = dataTypes.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6122 dataType,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6123 list,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6124 placeBefore;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6125
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6126 // For each dataType in the dataTypeExpression
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6127 for(; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6128 dataType = dataTypes[ i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6129 // We control if we're asked to add before
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6130 // any existing element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6131 placeBefore = /^\+/.test( dataType );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6132 if ( placeBefore ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6133 dataType = dataType.substr( 1 ) || "*";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6134 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6135 list = structure[ dataType ] = structure[ dataType ] || [];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6136 // then we add to the structure accordingly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6137 list[ placeBefore ? "unshift" : "push" ]( func );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6138 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6139 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6140 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6141 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6142
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6143 //Base inspection function for prefilters and transports
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6144 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6145 dataType /* internal */, inspected /* internal */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6146
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6147 dataType = dataType || options.dataTypes[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6148 inspected = inspected || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6149
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6150 inspected[ dataType ] = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6151
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6152 var list = structure[ dataType ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6153 i = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6154 length = list ? list.length : 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6155 executeOnly = ( structure === prefilters ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6156 selection;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6157
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6158 for(; i < length && ( executeOnly || !selection ); i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6159 selection = list[ i ]( options, originalOptions, jqXHR );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6160 // If we got redirected to another dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6161 // we try there if executing only and not done already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6162 if ( typeof selection === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6163 if ( !executeOnly || inspected[ selection ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6164 selection = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6165 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6166 options.dataTypes.unshift( selection );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6167 selection = inspectPrefiltersOrTransports(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6168 structure, options, originalOptions, jqXHR, selection, inspected );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6169 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6170 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6171 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6172 // If we're only executing or nothing was selected
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6173 // we try the catchall dataType if not done already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6174 if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6175 selection = inspectPrefiltersOrTransports(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6176 structure, options, originalOptions, jqXHR, "*", inspected );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6177 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6178 // unnecessary when only executing (prefilters)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6179 // but it'll be ignored by the caller in that case
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6180 return selection;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6181 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6182
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6183 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6184 load: function( url, params, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6185 if ( typeof url !== "string" && _load ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6186 return _load.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6187
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6188 // Don't do a request if no elements are being requested
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6189 } else if ( !this.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6190 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6191 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6192
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6193 var off = url.indexOf( " " );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6194 if ( off >= 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6195 var selector = url.slice( off, url.length );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6196 url = url.slice( 0, off );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6197 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6198
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6199 // Default to a GET request
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6200 var type = "GET";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6201
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6202 // If the second parameter was provided
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6203 if ( params ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6204 // If it's a function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6205 if ( jQuery.isFunction( params ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6206 // We assume that it's the callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6207 callback = params;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6208 params = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6209
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6210 // Otherwise, build a param string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6211 } else if ( typeof params === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6212 params = jQuery.param( params, jQuery.ajaxSettings.traditional );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6213 type = "POST";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6214 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6215 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6216
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6217 var self = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6218
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6219 // Request the remote document
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6220 jQuery.ajax({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6221 url: url,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6222 type: type,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6223 dataType: "html",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6224 data: params,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6225 // Complete callback (responseText is used internally)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6226 complete: function( jqXHR, status, responseText ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6227 // Store the response as specified by the jqXHR object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6228 responseText = jqXHR.responseText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6229 // If successful, inject the HTML into all the matched elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6230 if ( jqXHR.isResolved() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6231 // #4825: Get the actual response in case
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6232 // a dataFilter is present in ajaxSettings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6233 jqXHR.done(function( r ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6234 responseText = r;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6235 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6236 // See if a selector was specified
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6237 self.html( selector ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6238 // Create a dummy div to hold the results
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6239 jQuery("<div>")
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6240 // inject the contents of the document in, removing the scripts
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6241 // to avoid any 'Permission Denied' errors in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6242 .append(responseText.replace(rscript, ""))
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6243
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6244 // Locate the specified elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6245 .find(selector) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6246
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6247 // If not, just inject the full result
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6248 responseText );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6249 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6250
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6251 if ( callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6252 self.each( callback, [ responseText, status, jqXHR ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6253 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6254 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6255 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6256
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6257 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6258 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6259
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6260 serialize: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6261 return jQuery.param( this.serializeArray() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6262 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6263
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6264 serializeArray: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6265 return this.map(function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6266 return this.elements ? jQuery.makeArray( this.elements ) : this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6267 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6268 .filter(function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6269 return this.name && !this.disabled &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6270 ( this.checked || rselectTextarea.test( this.nodeName ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6271 rinput.test( this.type ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6272 })
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6273 .map(function( i, elem ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6274 var val = jQuery( this ).val();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6276 return val == null ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6277 null :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6278 jQuery.isArray( val ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6279 jQuery.map( val, function( val, i ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6280 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6281 }) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6282 { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6283 }).get();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6284 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6285 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6286
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6287 // Attach a bunch of functions for handling common AJAX events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6288 jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6289 jQuery.fn[ o ] = function( f ){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6290 return this.bind( o, f );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6291 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6292 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6293
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6294 jQuery.each( [ "get", "post" ], function( i, method ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6295 jQuery[ method ] = function( url, data, callback, type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6296 // shift arguments if data argument was omitted
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6297 if ( jQuery.isFunction( data ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6298 type = type || callback;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6299 callback = data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6300 data = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6301 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6302
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6303 return jQuery.ajax({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6304 type: method,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6305 url: url,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6306 data: data,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6307 success: callback,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6308 dataType: type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6309 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6310 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6311 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6312
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6313 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6314
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6315 getScript: function( url, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6316 return jQuery.get( url, undefined, callback, "script" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6317 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6318
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6319 getJSON: function( url, data, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6320 return jQuery.get( url, data, callback, "json" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6321 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6322
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6323 // Creates a full fledged settings object into target
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6324 // with both ajaxSettings and settings fields.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6325 // If target is omitted, writes into ajaxSettings.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6326 ajaxSetup: function ( target, settings ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6327 if ( !settings ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6328 // Only one parameter, we extend ajaxSettings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6329 settings = target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6330 target = jQuery.extend( true, jQuery.ajaxSettings, settings );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6331 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6332 // target was provided, we extend into it
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6333 jQuery.extend( true, target, jQuery.ajaxSettings, settings );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6334 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6335 // Flatten fields we don't want deep extended
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6336 for( var field in { context: 1, url: 1 } ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6337 if ( field in settings ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6338 target[ field ] = settings[ field ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6339 } else if( field in jQuery.ajaxSettings ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6340 target[ field ] = jQuery.ajaxSettings[ field ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6341 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6342 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6343 return target;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6344 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6345
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6346 ajaxSettings: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6347 url: ajaxLocation,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6348 isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6349 global: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6350 type: "GET",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6351 contentType: "application/x-www-form-urlencoded",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6352 processData: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6353 async: true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6354 /*
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6355 timeout: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6356 data: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6357 dataType: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6358 username: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6359 password: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6360 cache: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6361 traditional: false,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6362 headers: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6363 crossDomain: null,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6364 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6365
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6366 accepts: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6367 xml: "application/xml, text/xml",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6368 html: "text/html",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6369 text: "text/plain",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6370 json: "application/json, text/javascript",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6371 "*": "*/*"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6372 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6373
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6374 contents: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6375 xml: /xml/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6376 html: /html/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6377 json: /json/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6378 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6379
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6380 responseFields: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6381 xml: "responseXML",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6382 text: "responseText"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6383 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6384
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6385 // List of data converters
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6386 // 1) key format is "source_type destination_type" (a single space in-between)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6387 // 2) the catchall symbol "*" can be used for source_type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6388 converters: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6389
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6390 // Convert anything to text
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6391 "* text": window.String,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6392
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6393 // Text to html (true = no transformation)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6394 "text html": true,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6395
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6396 // Evaluate text as a json expression
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6397 "text json": jQuery.parseJSON,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6398
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6399 // Parse text as xml
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6400 "text xml": jQuery.parseXML
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6401 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6402 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6403
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6404 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6405 ajaxTransport: addToPrefiltersOrTransports( transports ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6406
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6407 // Main method
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6408 ajax: function( url, options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6409
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6410 // If url is an object, simulate pre-1.5 signature
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6411 if ( typeof url === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6412 options = url;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6413 url = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6414 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6415
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6416 // Force options to be an object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6417 options = options || {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6418
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6419 var // Create the final options object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6420 s = jQuery.ajaxSetup( {}, options ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6421 // Callbacks context
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6422 callbackContext = s.context || s,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6423 // Context for global events
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6424 // It's the callbackContext if one was provided in the options
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6425 // and if it's a DOM node or a jQuery collection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6426 globalEventContext = callbackContext !== s &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6427 ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6428 jQuery( callbackContext ) : jQuery.event,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6429 // Deferreds
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6430 deferred = jQuery.Deferred(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6431 completeDeferred = jQuery._Deferred(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6432 // Status-dependent callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6433 statusCode = s.statusCode || {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6434 // ifModified key
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6435 ifModifiedKey,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6436 // Headers (they are sent all at once)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6437 requestHeaders = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6438 // Response headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6439 responseHeadersString,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6440 responseHeaders,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6441 // transport
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6442 transport,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6443 // timeout handle
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6444 timeoutTimer,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6445 // Cross-domain detection vars
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6446 parts,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6447 // The jqXHR state
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6448 state = 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6449 // To know if global events are to be dispatched
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6450 fireGlobals,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6451 // Loop variable
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6452 i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6453 // Fake xhr
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6454 jqXHR = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6455
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6456 readyState: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6457
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6458 // Caches the header
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6459 setRequestHeader: function( name, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6460 if ( !state ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6461 requestHeaders[ name.toLowerCase().replace( rucHeaders, rucHeadersFunc ) ] = value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6462 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6463 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6464 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6465
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6466 // Raw string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6467 getAllResponseHeaders: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6468 return state === 2 ? responseHeadersString : null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6469 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6470
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6471 // Builds headers hashtable if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6472 getResponseHeader: function( key ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6473 var match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6474 if ( state === 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6475 if ( !responseHeaders ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6476 responseHeaders = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6477 while( ( match = rheaders.exec( responseHeadersString ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6478 responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6479 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6480 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6481 match = responseHeaders[ key.toLowerCase() ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6482 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6483 return match === undefined ? null : match;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6484 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6485
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6486 // Overrides response content-type header
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6487 overrideMimeType: function( type ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6488 if ( !state ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6489 s.mimeType = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6490 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6491 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6492 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6493
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6494 // Cancel the request
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6495 abort: function( statusText ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6496 statusText = statusText || "abort";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6497 if ( transport ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6498 transport.abort( statusText );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6499 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6500 done( 0, statusText );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6501 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6502 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6503 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6504
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6505 // Callback for when everything is done
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6506 // It is defined here because jslint complains if it is declared
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6507 // at the end of the function (which would be more logical and readable)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6508 function done( status, statusText, responses, headers ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6509
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6510 // Called once
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6511 if ( state === 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6512 return;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6513 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6514
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6515 // State is "done" now
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6516 state = 2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6517
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6518 // Clear timeout if it exists
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6519 if ( timeoutTimer ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6520 clearTimeout( timeoutTimer );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6521 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6522
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6523 // Dereference transport for early garbage collection
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6524 // (no matter how long the jqXHR object will be used)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6525 transport = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6526
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6527 // Cache response headers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6528 responseHeadersString = headers || "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6529
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6530 // Set readyState
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6531 jqXHR.readyState = status ? 4 : 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6532
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6533 var isSuccess,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6534 success,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6535 error,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6536 response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6537 lastModified,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6538 etag;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6539
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6540 // If successful, handle type chaining
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6541 if ( status >= 200 && status < 300 || status === 304 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6542
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6543 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6544 if ( s.ifModified ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6545
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6546 if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6547 jQuery.lastModified[ ifModifiedKey ] = lastModified;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6548 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6549 if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6550 jQuery.etag[ ifModifiedKey ] = etag;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6551 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6552 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6553
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6554 // If not modified
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6555 if ( status === 304 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6556
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6557 statusText = "notmodified";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6558 isSuccess = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6559
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6560 // If we have data
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6561 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6562
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6563 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6564 success = ajaxConvert( s, response );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6565 statusText = "success";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6566 isSuccess = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6567 } catch(e) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6568 // We have a parsererror
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6569 statusText = "parsererror";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6570 error = e;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6571 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6572 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6573 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6574 // We extract error from statusText
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6575 // then normalize statusText and status for non-aborts
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6576 error = statusText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6577 if( !statusText || status ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6578 statusText = "error";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6579 if ( status < 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6580 status = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6581 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6582 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6583 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6584
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6585 // Set data for the fake xhr object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6586 jqXHR.status = status;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6587 jqXHR.statusText = statusText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6588
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6589 // Success/Error
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6590 if ( isSuccess ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6591 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6592 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6593 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6594 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6595
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6596 // Status-dependent callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6597 jqXHR.statusCode( statusCode );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6598 statusCode = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6600 if ( fireGlobals ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6601 globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6602 [ jqXHR, s, isSuccess ? success : error ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6603 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6604
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6605 // Complete
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6606 completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6607
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6608 if ( fireGlobals ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6609 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6610 // Handle the global AJAX counter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6611 if ( !( --jQuery.active ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6612 jQuery.event.trigger( "ajaxStop" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6613 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6614 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6615 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6616
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6617 // Attach deferreds
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6618 deferred.promise( jqXHR );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6619 jqXHR.success = jqXHR.done;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6620 jqXHR.error = jqXHR.fail;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6621 jqXHR.complete = completeDeferred.done;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6622
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6623 // Status-dependent callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6624 jqXHR.statusCode = function( map ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6625 if ( map ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6626 var tmp;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6627 if ( state < 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6628 for( tmp in map ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6629 statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6630 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6631 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6632 tmp = map[ jqXHR.status ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6633 jqXHR.then( tmp, tmp );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6634 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6635 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6636 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6637 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6638
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6639 // Remove hash character (#7531: and string promotion)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6640 // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6641 // We also use the url parameter if available
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6642 s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6643
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6644 // Extract dataTypes list
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6645 s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6646
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6647 // Determine if a cross-domain request is in order
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6648 if ( !s.crossDomain ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6649 parts = rurl.exec( s.url.toLowerCase() );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6650 s.crossDomain = !!( parts &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6651 ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6652 ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6653 ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6654 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6655 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6656
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6657 // Convert data if not already a string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6658 if ( s.data && s.processData && typeof s.data !== "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6659 s.data = jQuery.param( s.data, s.traditional );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6660 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6661
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6662 // Apply prefilters
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6663 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6664
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6665 // If request was aborted inside a prefiler, stop there
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6666 if ( state === 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6667 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6668 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6669
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6670 // We can fire global events as of now if asked to
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6671 fireGlobals = s.global;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6672
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6673 // Uppercase the type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6674 s.type = s.type.toUpperCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6675
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6676 // Determine if request has content
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6677 s.hasContent = !rnoContent.test( s.type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6678
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6679 // Watch for a new set of requests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6680 if ( fireGlobals && jQuery.active++ === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6681 jQuery.event.trigger( "ajaxStart" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6682 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6683
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6684 // More options handling for requests with no content
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6685 if ( !s.hasContent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6686
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6687 // If data is available, append data to url
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6688 if ( s.data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6689 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6690 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6691
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6692 // Get ifModifiedKey before adding the anti-cache parameter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6693 ifModifiedKey = s.url;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6694
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6695 // Add anti-cache in url if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6696 if ( s.cache === false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6697
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6698 var ts = jQuery.now(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6699 // try replacing _= if it is there
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6700 ret = s.url.replace( rts, "$1_=" + ts );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6701
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6702 // if nothing was replaced, add timestamp to the end
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6703 s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6704 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6705 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6706
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6707 // Set the correct header, if data is being sent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6708 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6709 requestHeaders[ "Content-Type" ] = s.contentType;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6710 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6711
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6712 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6713 if ( s.ifModified ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6714 ifModifiedKey = ifModifiedKey || s.url;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6715 if ( jQuery.lastModified[ ifModifiedKey ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6716 requestHeaders[ "If-Modified-Since" ] = jQuery.lastModified[ ifModifiedKey ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6717 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6718 if ( jQuery.etag[ ifModifiedKey ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6719 requestHeaders[ "If-None-Match" ] = jQuery.etag[ ifModifiedKey ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6720 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6721 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6722
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6723 // Set the Accepts header for the server, depending on the dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6724 requestHeaders.Accept = s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6725 s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6726 s.accepts[ "*" ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6727
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6728 // Check for headers option
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6729 for ( i in s.headers ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6730 jqXHR.setRequestHeader( i, s.headers[ i ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6731 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6732
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6733 // Allow custom headers/mimetypes and early abort
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6734 if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6735 // Abort if not done already
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6736 jqXHR.abort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6737 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6738
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6739 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6740
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6741 // Install callbacks on deferreds
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6742 for ( i in { success: 1, error: 1, complete: 1 } ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6743 jqXHR[ i ]( s[ i ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6744 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6745
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6746 // Get transport
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6747 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6748
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6749 // If no transport, we auto-abort
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6750 if ( !transport ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6751 done( -1, "No Transport" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6752 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6753 jqXHR.readyState = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6754 // Send global event
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6755 if ( fireGlobals ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6756 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6757 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6758 // Timeout
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6759 if ( s.async && s.timeout > 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6760 timeoutTimer = setTimeout( function(){
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6761 jqXHR.abort( "timeout" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6762 }, s.timeout );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6763 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6764
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6765 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6766 state = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6767 transport.send( requestHeaders, done );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6768 } catch (e) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6769 // Propagate exception as error if not done
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6770 if ( status < 2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6771 done( -1, e );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6772 // Simply rethrow otherwise
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6773 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6774 jQuery.error( e );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6775 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6776 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6777 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6779 return jqXHR;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6780 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6781
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6782 // Serialize an array of form elements or a set of
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6783 // key/values into a query string
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6784 param: function( a, traditional ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6785 var s = [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6786 add = function( key, value ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6787 // If value is a function, invoke it and return its value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6788 value = jQuery.isFunction( value ) ? value() : value;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6789 s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6790 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6791
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6792 // Set traditional to true for jQuery <= 1.3.2 behavior.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6793 if ( traditional === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6794 traditional = jQuery.ajaxSettings.traditional;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6795 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6796
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6797 // If an array was passed in, assume that it is an array of form elements.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6798 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6799 // Serialize the form elements
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6800 jQuery.each( a, function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6801 add( this.name, this.value );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6802 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6803
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6804 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6805 // If traditional, encode the "old" way (the way 1.3.2 or older
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6806 // did it), otherwise encode params recursively.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6807 for ( var prefix in a ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6808 buildParams( prefix, a[ prefix ], traditional, add );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6809 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6810 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6811
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6812 // Return the resulting serialization
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6813 return s.join( "&" ).replace( r20, "+" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6814 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6815 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6816
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6817 function buildParams( prefix, obj, traditional, add ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6818 if ( jQuery.isArray( obj ) && obj.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6819 // Serialize array item.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6820 jQuery.each( obj, function( i, v ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6821 if ( traditional || rbracket.test( prefix ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6822 // Treat each array item as a scalar.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6823 add( prefix, v );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6824
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6825 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6826 // If array item is non-scalar (array or object), encode its
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6827 // numeric index to resolve deserialization ambiguity issues.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6828 // Note that rack (as of 1.0.0) can't currently deserialize
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6829 // nested arrays properly, and attempting to do so may cause
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6830 // a server error. Possible fixes are to modify rack's
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6831 // deserialization algorithm or to provide an option or flag
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6832 // to force array serialization to be shallow.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6833 buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6834 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6835 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6836
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6837 } else if ( !traditional && obj != null && typeof obj === "object" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6838 // If we see an array here, it is empty and should be treated as an empty
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6839 // object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6840 if ( jQuery.isArray( obj ) || jQuery.isEmptyObject( obj ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6841 add( prefix, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6842
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6843 // Serialize object item.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6844 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6845 for ( var name in obj ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6846 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6847 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6848 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6849
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6850 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6851 // Serialize scalar item.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6852 add( prefix, obj );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6853 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6854 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6855
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6856 // This is still on the jQuery object... for now
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6857 // Want to move this to jQuery.ajax some day
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6858 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6859
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6860 // Counter for holding the number of active queries
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6861 active: 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6862
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6863 // Last-Modified header cache for next request
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6864 lastModified: {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6865 etag: {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6866
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6867 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6868
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6869 /* Handles responses to an ajax request:
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6870 * - sets all responseXXX fields accordingly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6871 * - finds the right dataType (mediates between content-type and expected dataType)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6872 * - returns the corresponding response
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6873 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6874 function ajaxHandleResponses( s, jqXHR, responses ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6875
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6876 var contents = s.contents,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6877 dataTypes = s.dataTypes,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6878 responseFields = s.responseFields,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6879 ct,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6880 type,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6881 finalDataType,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6882 firstDataType;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6883
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6884 // Fill responseXXX fields
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6885 for( type in responseFields ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6886 if ( type in responses ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6887 jqXHR[ responseFields[type] ] = responses[ type ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6888 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6889 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6890
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6891 // Remove auto dataType and get content-type in the process
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6892 while( dataTypes[ 0 ] === "*" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6893 dataTypes.shift();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6894 if ( ct === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6895 ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6896 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6897 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6898
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6899 // Check if we're dealing with a known content-type
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6900 if ( ct ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6901 for ( type in contents ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6902 if ( contents[ type ] && contents[ type ].test( ct ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6903 dataTypes.unshift( type );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6904 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6905 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6906 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6907 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6908
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6909 // Check to see if we have a response for the expected dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6910 if ( dataTypes[ 0 ] in responses ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6911 finalDataType = dataTypes[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6912 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6913 // Try convertible dataTypes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6914 for ( type in responses ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6915 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6916 finalDataType = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6917 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6918 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6919 if ( !firstDataType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6920 firstDataType = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6921 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6922 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6923 // Or just use first one
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6924 finalDataType = finalDataType || firstDataType;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6925 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6926
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6927 // If we found a dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6928 // We add the dataType to the list if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6929 // and return the corresponding response
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6930 if ( finalDataType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6931 if ( finalDataType !== dataTypes[ 0 ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6932 dataTypes.unshift( finalDataType );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6933 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6934 return responses[ finalDataType ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6935 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6936 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6937
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6938 // Chain conversions given the request and the original response
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6939 function ajaxConvert( s, response ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6940
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6941 // Apply the dataFilter if provided
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6942 if ( s.dataFilter ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6943 response = s.dataFilter( response, s.dataType );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6944 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6945
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6946 var dataTypes = s.dataTypes,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6947 converters = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6948 i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6949 key,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6950 length = dataTypes.length,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6951 tmp,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6952 // Current and previous dataTypes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6953 current = dataTypes[ 0 ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6954 prev,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6955 // Conversion expression
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6956 conversion,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6957 // Conversion function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6958 conv,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6959 // Conversion functions (transitive conversion)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6960 conv1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6961 conv2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6962
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6963 // For each dataType in the chain
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6964 for( i = 1; i < length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6965
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6966 // Create converters map
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6967 // with lowercased keys
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6968 if ( i === 1 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6969 for( key in s.converters ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6970 if( typeof key === "string" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6971 converters[ key.toLowerCase() ] = s.converters[ key ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6972 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6973 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6974 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6975
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6976 // Get the dataTypes
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6977 prev = current;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6978 current = dataTypes[ i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6979
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6980 // If current is auto dataType, update it to prev
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6981 if( current === "*" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6982 current = prev;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6983 // If no auto and dataTypes are actually different
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6984 } else if ( prev !== "*" && prev !== current ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6985
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6986 // Get the converter
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6987 conversion = prev + " " + current;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6988 conv = converters[ conversion ] || converters[ "* " + current ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6989
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6990 // If there is no direct converter, search transitively
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6991 if ( !conv ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6992 conv2 = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6993 for( conv1 in converters ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6994 tmp = conv1.split( " " );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6995 if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6996 conv2 = converters[ tmp[1] + " " + current ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6997 if ( conv2 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6998 conv1 = converters[ conv1 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
6999 if ( conv1 === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7000 conv = conv2;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7001 } else if ( conv2 === true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7002 conv = conv1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7003 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7004 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7005 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7006 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7007 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7008 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7009 // If we found no converter, dispatch an error
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7010 if ( !( conv || conv2 ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7011 jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7012 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7013 // If found converter is not an equivalence
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7014 if ( conv !== true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7015 // Convert with 1 or 2 converters accordingly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7016 response = conv ? conv( response ) : conv2( conv1(response) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7017 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7018 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7019 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7020 return response;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7021 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7022
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7023
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7024
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7025
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7026 var jsc = jQuery.now(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7027 jsre = /(\=)\?(&|$)|()\?\?()/i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7028
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7029 // Default jsonp settings
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7030 jQuery.ajaxSetup({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7031 jsonp: "callback",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7032 jsonpCallback: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7033 return jQuery.expando + "_" + ( jsc++ );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7034 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7035 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7036
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7037 // Detect, normalize options and install callbacks for jsonp requests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7038 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7039
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7040 var dataIsString = ( typeof s.data === "string" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7041
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7042 if ( s.dataTypes[ 0 ] === "jsonp" ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7043 originalSettings.jsonpCallback ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7044 originalSettings.jsonp != null ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7045 s.jsonp !== false && ( jsre.test( s.url ) ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7046 dataIsString && jsre.test( s.data ) ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7048 var responseContainer,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7049 jsonpCallback = s.jsonpCallback =
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7050 jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7051 previous = window[ jsonpCallback ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7052 url = s.url,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7053 data = s.data,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7054 replace = "$1" + jsonpCallback + "$2",
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7055 cleanUp = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7056 // Set callback back to previous value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7057 window[ jsonpCallback ] = previous;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7058 // Call if it was a function and we have a response
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7059 if ( responseContainer && jQuery.isFunction( previous ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7060 window[ jsonpCallback ]( responseContainer[ 0 ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7061 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7062 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7063
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7064 if ( s.jsonp !== false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7065 url = url.replace( jsre, replace );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7066 if ( s.url === url ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7067 if ( dataIsString ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7068 data = data.replace( jsre, replace );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7069 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7070 if ( s.data === data ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7071 // Add callback manually
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7072 url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7073 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7074 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7075 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7076
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7077 s.url = url;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7078 s.data = data;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7079
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7080 // Install callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7081 window[ jsonpCallback ] = function( response ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7082 responseContainer = [ response ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7083 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7084
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7085 // Install cleanUp function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7086 jqXHR.then( cleanUp, cleanUp );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7087
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7088 // Use data converter to retrieve json after script execution
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7089 s.converters["script json"] = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7090 if ( !responseContainer ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7091 jQuery.error( jsonpCallback + " was not called" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7092 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7093 return responseContainer[ 0 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7094 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7095
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7096 // force json dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7097 s.dataTypes[ 0 ] = "json";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7098
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7099 // Delegate to script
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7100 return "script";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7101 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7102 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7103
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7104
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7105
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7106
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7107 // Install script dataType
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7108 jQuery.ajaxSetup({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7109 accepts: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7110 script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7111 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7112 contents: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7113 script: /javascript|ecmascript/
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7114 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7115 converters: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7116 "text script": function( text ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7117 jQuery.globalEval( text );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7118 return text;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7119 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7120 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7121 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7122
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7123 // Handle cache's special case and global
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7124 jQuery.ajaxPrefilter( "script", function( s ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7125 if ( s.cache === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7126 s.cache = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7127 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7128 if ( s.crossDomain ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7129 s.type = "GET";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7130 s.global = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7131 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7132 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7134 // Bind script tag hack transport
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7135 jQuery.ajaxTransport( "script", function(s) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7136
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7137 // This transport only deals with cross domain requests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7138 if ( s.crossDomain ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7139
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7140 var script,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7141 head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7142
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7143 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7144
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7145 send: function( _, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7146
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7147 script = document.createElement( "script" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7148
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7149 script.async = "async";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7150
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7151 if ( s.scriptCharset ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7152 script.charset = s.scriptCharset;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7153 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7154
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7155 script.src = s.url;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7156
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7157 // Attach handlers for all browsers
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7158 script.onload = script.onreadystatechange = function( _, isAbort ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7159
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7160 if ( !script.readyState || /loaded|complete/.test( script.readyState ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7161
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7162 // Handle memory leak in IE
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7163 script.onload = script.onreadystatechange = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7164
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7165 // Remove the script
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7166 if ( head && script.parentNode ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7167 head.removeChild( script );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7168 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7169
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7170 // Dereference the script
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7171 script = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7172
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7173 // Callback if not abort
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7174 if ( !isAbort ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7175 callback( 200, "success" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7176 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7177 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7178 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7179 // Use insertBefore instead of appendChild to circumvent an IE6 bug.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7180 // This arises when a base node is used (#2709 and #4378).
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7181 head.insertBefore( script, head.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7182 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7183
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7184 abort: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7185 if ( script ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7186 script.onload( 0, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7187 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7188 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7189 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7190 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7191 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7192
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7193
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7194
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7195
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7196 var // #5280: next active xhr id and list of active xhrs' callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7197 xhrId = jQuery.now(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7198 xhrCallbacks,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7199
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7200 // XHR used to determine supports properties
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7201 testXHR;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7202
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7203 // #5280: Internet Explorer will keep connections alive if we don't abort on unload
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7204 function xhrOnUnloadAbort() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7205 jQuery( window ).unload(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7206 // Abort all pending requests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7207 for ( var key in xhrCallbacks ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7208 xhrCallbacks[ key ]( 0, 1 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7209 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7210 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7211 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7212
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7213 // Functions to create xhrs
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7214 function createStandardXHR() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7215 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7216 return new window.XMLHttpRequest();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7217 } catch( e ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7218 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7219
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7220 function createActiveXHR() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7221 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7222 return new window.ActiveXObject( "Microsoft.XMLHTTP" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7223 } catch( e ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7224 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7225
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7226 // Create the request object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7227 // (This is still attached to ajaxSettings for backward compatibility)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7228 jQuery.ajaxSettings.xhr = window.ActiveXObject ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7229 /* Microsoft failed to properly
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7230 * implement the XMLHttpRequest in IE7 (can't request local files),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7231 * so we use the ActiveXObject when it is available
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7232 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7233 * we need a fallback.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7234 */
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7235 function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7236 return !this.isLocal && createStandardXHR() || createActiveXHR();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7237 } :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7238 // For all other browsers, use the standard XMLHttpRequest object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7239 createStandardXHR;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7240
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7241 // Test if we can create an xhr object
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7242 testXHR = jQuery.ajaxSettings.xhr();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7243 jQuery.support.ajax = !!testXHR;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7244
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7245 // Does this browser support crossDomain XHR requests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7246 jQuery.support.cors = testXHR && ( "withCredentials" in testXHR );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7247
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7248 // No need for the temporary xhr anymore
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7249 testXHR = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7250
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7251 // Create transport if the browser can provide an xhr
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7252 if ( jQuery.support.ajax ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7253
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7254 jQuery.ajaxTransport(function( s ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7255 // Cross domain only allowed if supported through XMLHttpRequest
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7256 if ( !s.crossDomain || jQuery.support.cors ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7257
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7258 var callback;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7259
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7260 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7261 send: function( headers, complete ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7262
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7263 // Get a new xhr
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7264 var xhr = s.xhr(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7265 handle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7266 i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7267
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7268 // Open the socket
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7269 // Passing null username, generates a login popup on Opera (#2865)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7270 if ( s.username ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7271 xhr.open( s.type, s.url, s.async, s.username, s.password );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7272 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7273 xhr.open( s.type, s.url, s.async );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7274 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7276 // Apply custom fields if provided
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7277 if ( s.xhrFields ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7278 for ( i in s.xhrFields ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7279 xhr[ i ] = s.xhrFields[ i ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7280 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7281 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7283 // Override mime type if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7284 if ( s.mimeType && xhr.overrideMimeType ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7285 xhr.overrideMimeType( s.mimeType );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7286 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7287
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7288 // Requested-With header
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7289 // Not set for crossDomain requests with no content
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7290 // (see why at http://trac.dojotoolkit.org/ticket/9486)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7291 // Won't change header if already provided
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7292 if ( !( s.crossDomain && !s.hasContent ) && !headers["X-Requested-With"] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7293 headers[ "X-Requested-With" ] = "XMLHttpRequest";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7294 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7295
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7296 // Need an extra try/catch for cross domain requests in Firefox 3
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7297 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7298 for ( i in headers ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7299 xhr.setRequestHeader( i, headers[ i ] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7300 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7301 } catch( _ ) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7302
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7303 // Do send the request
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7304 // This may raise an exception which is actually
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7305 // handled in jQuery.ajax (so no try/catch here)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7306 xhr.send( ( s.hasContent && s.data ) || null );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7307
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7308 // Listener
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7309 callback = function( _, isAbort ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7310
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7311 var status,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7312 statusText,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7313 responseHeaders,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7314 responses,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7315 xml;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7316
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7317 // Firefox throws exceptions when accessing properties
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7318 // of an xhr when a network error occured
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7319 // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7320 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7321
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7322 // Was never called and is aborted or complete
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7323 if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7324
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7325 // Only called once
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7326 callback = undefined;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7327
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7328 // Do not keep as active anymore
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7329 if ( handle ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7330 xhr.onreadystatechange = jQuery.noop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7331 delete xhrCallbacks[ handle ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7332 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7333
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7334 // If it's an abort
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7335 if ( isAbort ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7336 // Abort it manually if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7337 if ( xhr.readyState !== 4 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7338 xhr.abort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7339 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7340 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7341 status = xhr.status;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7342 responseHeaders = xhr.getAllResponseHeaders();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7343 responses = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7344 xml = xhr.responseXML;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7345
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7346 // Construct response list
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7347 if ( xml && xml.documentElement /* #4958 */ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7348 responses.xml = xml;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7349 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7350 responses.text = xhr.responseText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7351
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7352 // Firefox throws an exception when accessing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7353 // statusText for faulty cross-domain requests
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7354 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7355 statusText = xhr.statusText;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7356 } catch( e ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7357 // We normalize with Webkit giving an empty statusText
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7358 statusText = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7359 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7360
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7361 // Filter status for non standard behaviors
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7362
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7363 // If the request is local and we have data: assume a success
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7364 // (success with no data won't get notified, that's the best we
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7365 // can do given current implementations)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7366 if ( !status && s.isLocal && !s.crossDomain ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7367 status = responses.text ? 200 : 404;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7368 // IE - #1450: sometimes returns 1223 when it should be 204
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7369 } else if ( status === 1223 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7370 status = 204;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7371 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7372 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7373 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7374 } catch( firefoxAccessException ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7375 if ( !isAbort ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7376 complete( -1, firefoxAccessException );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7377 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7378 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7379
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7380 // Call complete if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7381 if ( responses ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7382 complete( status, statusText, responses, responseHeaders );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7383 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7384 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7385
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7386 // if we're in sync mode or it's in cache
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7387 // and has been retrieved directly (IE6 & IE7)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7388 // we need to manually fire the callback
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7389 if ( !s.async || xhr.readyState === 4 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7390 callback();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7391 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7392 // Create the active xhrs callbacks list if needed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7393 // and attach the unload handler
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7394 if ( !xhrCallbacks ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7395 xhrCallbacks = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7396 xhrOnUnloadAbort();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7397 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7398 // Add to list of active xhrs callbacks
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7399 handle = xhrId++;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7400 xhr.onreadystatechange = xhrCallbacks[ handle ] = callback;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7401 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7402 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7403
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7404 abort: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7405 if ( callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7406 callback(0,1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7407 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7408 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7409 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7410 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7411 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7412 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7413
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7414
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7415
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7416
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7417 var elemdisplay = {},
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7418 rfxtypes = /^(?:toggle|show|hide)$/,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7419 rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7420 timerId,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7421 fxAttrs = [
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7422 // height animations
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7423 [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7424 // width animations
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7425 [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7426 // opacity animations
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7427 [ "opacity" ]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7428 ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7429
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7430 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7431 show: function( speed, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7432 var elem, display;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7433
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7434 if ( speed || speed === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7435 return this.animate( genFx("show", 3), speed, easing, callback);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7436
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7437 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7438 for ( var i = 0, j = this.length; i < j; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7439 elem = this[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7440 display = elem.style.display;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7441
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7442 // Reset the inline display of this element to learn if it is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7443 // being hidden by cascaded rules or not
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7444 if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7445 display = elem.style.display = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7446 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7447
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7448 // Set elements which have been overridden with display: none
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7449 // in a stylesheet to whatever the default browser style is
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7450 // for such an element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7451 if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7452 jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7453 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7454 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7455
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7456 // Set the display of most of the elements in a second loop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7457 // to avoid the constant reflow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7458 for ( i = 0; i < j; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7459 elem = this[i];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7460 display = elem.style.display;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7461
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7462 if ( display === "" || display === "none" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7463 elem.style.display = jQuery._data(elem, "olddisplay") || "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7464 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7465 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7466
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7467 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7468 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7469 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7470
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7471 hide: function( speed, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7472 if ( speed || speed === 0 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7473 return this.animate( genFx("hide", 3), speed, easing, callback);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7474
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7475 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7476 for ( var i = 0, j = this.length; i < j; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7477 var display = jQuery.css( this[i], "display" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7478
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7479 if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7480 jQuery._data( this[i], "olddisplay", display );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7481 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7482 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7483
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7484 // Set the display of the elements in a second loop
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7485 // to avoid the constant reflow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7486 for ( i = 0; i < j; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7487 this[i].style.display = "none";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7488 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7489
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7490 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7491 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7492 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7493
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7494 // Save the old toggle function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7495 _toggle: jQuery.fn.toggle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7496
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7497 toggle: function( fn, fn2, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7498 var bool = typeof fn === "boolean";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7499
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7500 if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7501 this._toggle.apply( this, arguments );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7502
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7503 } else if ( fn == null || bool ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7504 this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7505 var state = bool ? fn : jQuery(this).is(":hidden");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7506 jQuery(this)[ state ? "show" : "hide" ]();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7507 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7508
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7509 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7510 this.animate(genFx("toggle", 3), fn, fn2, callback);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7511 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7512
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7513 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7514 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7515
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7516 fadeTo: function( speed, to, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7517 return this.filter(":hidden").css("opacity", 0).show().end()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7518 .animate({opacity: to}, speed, easing, callback);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7519 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7520
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7521 animate: function( prop, speed, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7522 var optall = jQuery.speed(speed, easing, callback);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7523
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7524 if ( jQuery.isEmptyObject( prop ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7525 return this.each( optall.complete );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7526 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7527
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7528 return this[ optall.queue === false ? "each" : "queue" ](function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7529 // XXX 'this' does not always have a nodeName when running the
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7530 // test suite
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7531
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7532 var opt = jQuery.extend({}, optall), p,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7533 isElement = this.nodeType === 1,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7534 hidden = isElement && jQuery(this).is(":hidden"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7535 self = this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7536
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7537 for ( p in prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7538 var name = jQuery.camelCase( p );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7539
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7540 if ( p !== name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7541 prop[ name ] = prop[ p ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7542 delete prop[ p ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7543 p = name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7544 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7545
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7546 if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7547 return opt.complete.call(this);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7548 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7549
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7550 if ( isElement && ( p === "height" || p === "width" ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7551 // Make sure that nothing sneaks out
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7552 // Record all 3 overflow attributes because IE does not
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7553 // change the overflow attribute when overflowX and
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7554 // overflowY are set to the same value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7555 opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7556
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7557 // Set display property to inline-block for height/width
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7558 // animations on inline elements that are having width/height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7559 // animated
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7560 if ( jQuery.css( this, "display" ) === "inline" &&
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7561 jQuery.css( this, "float" ) === "none" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7562 if ( !jQuery.support.inlineBlockNeedsLayout ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7563 this.style.display = "inline-block";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7564
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7565 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7566 var display = defaultDisplay(this.nodeName);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7567
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7568 // inline-level elements accept inline-block;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7569 // block-level elements need to be inline with layout
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7570 if ( display === "inline" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7571 this.style.display = "inline-block";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7572
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7573 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7574 this.style.display = "inline";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7575 this.style.zoom = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7576 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7577 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7578 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7579 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7580
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7581 if ( jQuery.isArray( prop[p] ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7582 // Create (if needed) and add to specialEasing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7583 (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7584 prop[p] = prop[p][0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7585 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7586 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7587
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7588 if ( opt.overflow != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7589 this.style.overflow = "hidden";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7590 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7591
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7592 opt.curAnim = jQuery.extend({}, prop);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7593
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7594 jQuery.each( prop, function( name, val ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7595 var e = new jQuery.fx( self, opt, name );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7596
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7597 if ( rfxtypes.test(val) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7598 e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7599
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7600 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7601 var parts = rfxnum.exec(val),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7602 start = e.cur();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7603
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7604 if ( parts ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7605 var end = parseFloat( parts[2] ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7606 unit = parts[3] || ( jQuery.cssNumber[ name ] ? "" : "px" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7607
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7608 // We need to compute starting value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7609 if ( unit !== "px" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7610 jQuery.style( self, name, (end || 1) + unit);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7611 start = ((end || 1) / e.cur()) * start;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7612 jQuery.style( self, name, start + unit);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7613 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7614
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7615 // If a +=/-= token was provided, we're doing a relative animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7616 if ( parts[1] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7617 end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7618 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7619
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7620 e.custom( start, end, unit );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7621
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7622 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7623 e.custom( start, val, "" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7624 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7625 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7626 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7627
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7628 // For JS strict compliance
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7629 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7630 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7631 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7632
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7633 stop: function( clearQueue, gotoEnd ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7634 var timers = jQuery.timers;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7635
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7636 if ( clearQueue ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7637 this.queue([]);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7638 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7639
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7640 this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7641 // go in reverse order so anything added to the queue during the loop is ignored
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7642 for ( var i = timers.length - 1; i >= 0; i-- ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7643 if ( timers[i].elem === this ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7644 if (gotoEnd) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7645 // force the next step to be the last
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7646 timers[i](true);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7647 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7648
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7649 timers.splice(i, 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7650 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7651 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7652 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7653
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7654 // start the next in the queue if the last step wasn't forced
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7655 if ( !gotoEnd ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7656 this.dequeue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7657 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7658
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7659 return this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7660 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7661
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7662 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7663
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7664 function genFx( type, num ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7665 var obj = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7666
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7667 jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7668 obj[ this ] = type;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7669 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7670
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7671 return obj;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7672 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7673
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7674 // Generate shortcuts for custom animations
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7675 jQuery.each({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7676 slideDown: genFx("show", 1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7677 slideUp: genFx("hide", 1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7678 slideToggle: genFx("toggle", 1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7679 fadeIn: { opacity: "show" },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7680 fadeOut: { opacity: "hide" },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7681 fadeToggle: { opacity: "toggle" }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7682 }, function( name, props ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7683 jQuery.fn[ name ] = function( speed, easing, callback ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7684 return this.animate( props, speed, easing, callback );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7685 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7686 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7687
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7688 jQuery.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7689 speed: function( speed, easing, fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7690 var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7691 complete: fn || !fn && easing ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7692 jQuery.isFunction( speed ) && speed,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7693 duration: speed,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7694 easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7695 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7696
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7697 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7698 opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7699
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7700 // Queueing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7701 opt.old = opt.complete;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7702 opt.complete = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7703 if ( opt.queue !== false ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7704 jQuery(this).dequeue();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7705 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7706 if ( jQuery.isFunction( opt.old ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7707 opt.old.call( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7708 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7709 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7710
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7711 return opt;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7712 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7713
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7714 easing: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7715 linear: function( p, n, firstNum, diff ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7716 return firstNum + diff * p;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7717 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7718 swing: function( p, n, firstNum, diff ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7719 return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7720 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7721 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7722
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7723 timers: [],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7724
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7725 fx: function( elem, options, prop ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7726 this.options = options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7727 this.elem = elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7728 this.prop = prop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7729
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7730 if ( !options.orig ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7731 options.orig = {};
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7732 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7733 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7734
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7735 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7736
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7737 jQuery.fx.prototype = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7738 // Simple function for setting a style value
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7739 update: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7740 if ( this.options.step ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7741 this.options.step.call( this.elem, this.now, this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7742 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7743
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7744 (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7745 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7746
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7747 // Get the current size
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7748 cur: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7749 if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7750 return this.elem[ this.prop ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7751 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7752
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7753 var parsed,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7754 r = jQuery.css( this.elem, this.prop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7755 // Empty strings, null, undefined and "auto" are converted to 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7756 // complex values such as "rotate(1rad)" are returned as is,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7757 // simple values such as "10px" are parsed to Float.
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7758 return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7759 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7760
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7761 // Start an animation from one number to another
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7762 custom: function( from, to, unit ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7763 var self = this,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7764 fx = jQuery.fx;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7765
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7766 this.startTime = jQuery.now();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7767 this.start = from;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7768 this.end = to;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7769 this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7770 this.now = this.start;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7771 this.pos = this.state = 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7772
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7773 function t( gotoEnd ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7774 return self.step(gotoEnd);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7775 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7776
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7777 t.elem = this.elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7778
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7779 if ( t() && jQuery.timers.push(t) && !timerId ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7780 timerId = setInterval(fx.tick, fx.interval);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7781 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7782 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7783
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7784 // Simple 'show' function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7785 show: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7786 // Remember where we started, so that we can go back to it later
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7787 this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7788 this.options.show = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7789
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7790 // Begin the animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7791 // Make sure that we start at a small width/height to avoid any
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7792 // flash of content
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7793 this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7794
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7795 // Start by showing the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7796 jQuery( this.elem ).show();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7797 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7798
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7799 // Simple 'hide' function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7800 hide: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7801 // Remember where we started, so that we can go back to it later
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7802 this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7803 this.options.hide = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7804
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7805 // Begin the animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7806 this.custom(this.cur(), 0);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7807 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7808
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7809 // Each step of an animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7810 step: function( gotoEnd ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7811 var t = jQuery.now(), done = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7812
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7813 if ( gotoEnd || t >= this.options.duration + this.startTime ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7814 this.now = this.end;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7815 this.pos = this.state = 1;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7816 this.update();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7817
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7818 this.options.curAnim[ this.prop ] = true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7819
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7820 for ( var i in this.options.curAnim ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7821 if ( this.options.curAnim[i] !== true ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7822 done = false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7823 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7824 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7825
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7826 if ( done ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7827 // Reset the overflow
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7828 if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7829 var elem = this.elem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7830 options = this.options;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7831
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7832 jQuery.each( [ "", "X", "Y" ], function (index, value) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7833 elem.style[ "overflow" + value ] = options.overflow[index];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7834 } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7835 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7836
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7837 // Hide the element if the "hide" operation was done
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7838 if ( this.options.hide ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7839 jQuery(this.elem).hide();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7840 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7841
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7842 // Reset the properties, if the item has been hidden or shown
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7843 if ( this.options.hide || this.options.show ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7844 for ( var p in this.options.curAnim ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7845 jQuery.style( this.elem, p, this.options.orig[p] );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7846 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7847 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7848
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7849 // Execute the complete function
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7850 this.options.complete.call( this.elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7851 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7852
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7853 return false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7854
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7855 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7856 var n = t - this.startTime;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7857 this.state = n / this.options.duration;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7858
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7859 // Perform the easing function, defaults to swing
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7860 var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7861 var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7862 this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7863 this.now = this.start + ((this.end - this.start) * this.pos);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7864
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7865 // Perform the next step of the animation
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7866 this.update();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7867 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7868
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7869 return true;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7870 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7871 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7872
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7873 jQuery.extend( jQuery.fx, {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7874 tick: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7875 var timers = jQuery.timers;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7876
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7877 for ( var i = 0; i < timers.length; i++ ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7878 if ( !timers[i]() ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7879 timers.splice(i--, 1);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7880 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7881 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7882
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7883 if ( !timers.length ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7884 jQuery.fx.stop();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7885 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7886 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7887
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7888 interval: 13,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7889
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7890 stop: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7891 clearInterval( timerId );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7892 timerId = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7893 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7894
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7895 speeds: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7896 slow: 600,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7897 fast: 200,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7898 // Default speed
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7899 _default: 400
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7900 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7901
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7902 step: {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7903 opacity: function( fx ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7904 jQuery.style( fx.elem, "opacity", fx.now );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7905 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7906
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7907 _default: function( fx ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7908 if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7909 fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7910 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7911 fx.elem[ fx.prop ] = fx.now;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7912 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7913 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7914 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7915 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7916
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7917 if ( jQuery.expr && jQuery.expr.filters ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7918 jQuery.expr.filters.animated = function( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7919 return jQuery.grep(jQuery.timers, function( fn ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7920 return elem === fn.elem;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7921 }).length;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7922 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7923 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7924
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7925 function defaultDisplay( nodeName ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7926 if ( !elemdisplay[ nodeName ] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7927 var elem = jQuery("<" + nodeName + ">").appendTo("body"),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7928 display = elem.css("display");
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7929
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7930 elem.remove();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7931
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7932 if ( display === "none" || display === "" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7933 display = "block";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7934 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7935
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7936 elemdisplay[ nodeName ] = display;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7937 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7938
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7939 return elemdisplay[ nodeName ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7940 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7941
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7942
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7943
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7944
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7945 var rtable = /^t(?:able|d|h)$/i,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7946 rroot = /^(?:body|html)$/i;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7947
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7948 if ( "getBoundingClientRect" in document.documentElement ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7949 jQuery.fn.offset = function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7950 var elem = this[0], box;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7951
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7952 if ( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7953 return this.each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7954 jQuery.offset.setOffset( this, options, i );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7955 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7956 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7957
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7958 if ( !elem || !elem.ownerDocument ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7959 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7960 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7961
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7962 if ( elem === elem.ownerDocument.body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7963 return jQuery.offset.bodyOffset( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7964 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7965
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7966 try {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7967 box = elem.getBoundingClientRect();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7968 } catch(e) {}
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7969
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7970 var doc = elem.ownerDocument,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7971 docElem = doc.documentElement;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7972
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7973 // Make sure we're not dealing with a disconnected DOM node
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7974 if ( !box || !jQuery.contains( docElem, elem ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7975 return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7976 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7977
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7978 var body = doc.body,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7979 win = getWindow(doc),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7980 clientTop = docElem.clientTop || body.clientTop || 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7981 clientLeft = docElem.clientLeft || body.clientLeft || 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7982 scrollTop = (win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7983 scrollLeft = (win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7984 top = box.top + scrollTop - clientTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7985 left = box.left + scrollLeft - clientLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7986
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7987 return { top: top, left: left };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7988 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7989
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7990 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7991 jQuery.fn.offset = function( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7992 var elem = this[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7993
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7994 if ( options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7995 return this.each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7996 jQuery.offset.setOffset( this, options, i );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7997 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7998 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
7999
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8000 if ( !elem || !elem.ownerDocument ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8001 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8002 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8003
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8004 if ( elem === elem.ownerDocument.body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8005 return jQuery.offset.bodyOffset( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8006 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8007
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8008 jQuery.offset.initialize();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8009
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8010 var computedStyle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8011 offsetParent = elem.offsetParent,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8012 prevOffsetParent = elem,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8013 doc = elem.ownerDocument,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8014 docElem = doc.documentElement,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8015 body = doc.body,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8016 defaultView = doc.defaultView,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8017 prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8018 top = elem.offsetTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8019 left = elem.offsetLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8020
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8021 while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8022 if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8023 break;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8024 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8025
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8026 computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8027 top -= elem.scrollTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8028 left -= elem.scrollLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8029
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8030 if ( elem === offsetParent ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8031 top += elem.offsetTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8032 left += elem.offsetLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8033
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8034 if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8035 top += parseFloat( computedStyle.borderTopWidth ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8036 left += parseFloat( computedStyle.borderLeftWidth ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8037 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8038
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8039 prevOffsetParent = offsetParent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8040 offsetParent = elem.offsetParent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8041 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8042
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8043 if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8044 top += parseFloat( computedStyle.borderTopWidth ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8045 left += parseFloat( computedStyle.borderLeftWidth ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8046 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8047
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8048 prevComputedStyle = computedStyle;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8049 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8050
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8051 if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8052 top += body.offsetTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8053 left += body.offsetLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8054 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8055
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8056 if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8057 top += Math.max( docElem.scrollTop, body.scrollTop );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8058 left += Math.max( docElem.scrollLeft, body.scrollLeft );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8059 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8060
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8061 return { top: top, left: left };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8062 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8063 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8064
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8065 jQuery.offset = {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8066 initialize: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8067 var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8068 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>";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8069
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8070 jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8071
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8072 container.innerHTML = html;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8073 body.insertBefore( container, body.firstChild );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8074 innerDiv = container.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8075 checkDiv = innerDiv.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8076 td = innerDiv.nextSibling.firstChild.firstChild;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8077
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8078 this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8079 this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8080
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8081 checkDiv.style.position = "fixed";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8082 checkDiv.style.top = "20px";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8083
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8084 // safari subtracts parent border width here which is 5px
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8085 this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8086 checkDiv.style.position = checkDiv.style.top = "";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8087
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8088 innerDiv.style.overflow = "hidden";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8089 innerDiv.style.position = "relative";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8090
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8091 this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8092
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8093 this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8094
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8095 body.removeChild( container );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8096 body = container = innerDiv = checkDiv = table = td = null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8097 jQuery.offset.initialize = jQuery.noop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8098 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8099
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8100 bodyOffset: function( body ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8101 var top = body.offsetTop,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8102 left = body.offsetLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8103
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8104 jQuery.offset.initialize();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8105
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8106 if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8107 top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8108 left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8109 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8110
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8111 return { top: top, left: left };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8112 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8113
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8114 setOffset: function( elem, options, i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8115 var position = jQuery.css( elem, "position" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8116
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8117 // set position first, in-case top/left are set even on static elem
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8118 if ( position === "static" ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8119 elem.style.position = "relative";
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8120 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8121
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8122 var curElem = jQuery( elem ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8123 curOffset = curElem.offset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8124 curCSSTop = jQuery.css( elem, "top" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8125 curCSSLeft = jQuery.css( elem, "left" ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8126 calculatePosition = (position === "absolute" && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8127 props = {}, curPosition = {}, curTop, curLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8128
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8129 // need to be able to calculate position if either top or left is auto and position is absolute
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8130 if ( calculatePosition ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8131 curPosition = curElem.position();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8132 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8133
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8134 curTop = calculatePosition ? curPosition.top : parseInt( curCSSTop, 10 ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8135 curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8136
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8137 if ( jQuery.isFunction( options ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8138 options = options.call( elem, i, curOffset );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8139 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8140
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8141 if (options.top != null) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8142 props.top = (options.top - curOffset.top) + curTop;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8143 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8144 if (options.left != null) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8145 props.left = (options.left - curOffset.left) + curLeft;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8146 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8147
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8148 if ( "using" in options ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8149 options.using.call( elem, props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8150 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8151 curElem.css( props );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8152 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8153 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8154 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8155
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8156
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8157 jQuery.fn.extend({
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8158 position: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8159 if ( !this[0] ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8160 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8161 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8162
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8163 var elem = this[0],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8164
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8165 // Get *real* offsetParent
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8166 offsetParent = this.offsetParent(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8167
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8168 // Get correct offsets
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8169 offset = this.offset(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8170 parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8171
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8172 // Subtract element margins
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8173 // note: when an element has margin: auto the offsetLeft and marginLeft
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8174 // are the same in Safari causing offset.left to incorrectly be 0
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8175 offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8176 offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8177
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8178 // Add offsetParent borders
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8179 parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8180 parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8181
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8182 // Subtract the two offsets
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8183 return {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8184 top: offset.top - parentOffset.top,
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8185 left: offset.left - parentOffset.left
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8186 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8187 },
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8188
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8189 offsetParent: function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8190 return this.map(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8191 var offsetParent = this.offsetParent || document.body;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8192 while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8193 offsetParent = offsetParent.offsetParent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8194 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8195 return offsetParent;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8196 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8197 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8198 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8199
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8200
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8201 // Create scrollLeft and scrollTop methods
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8202 jQuery.each( ["Left", "Top"], function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8203 var method = "scroll" + name;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8204
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8205 jQuery.fn[ method ] = function(val) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8206 var elem = this[0], win;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8207
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8208 if ( !elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8209 return null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8210 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8211
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8212 if ( val !== undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8213 // Set the scroll offset
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8214 return this.each(function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8215 win = getWindow( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8216
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8217 if ( win ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8218 win.scrollTo(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8219 !i ? val : jQuery(win).scrollLeft(),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8220 i ? val : jQuery(win).scrollTop()
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8221 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8222
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8223 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8224 this[ method ] = val;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8225 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8226 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8227 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8228 win = getWindow( elem );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8229
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8230 // Return the scroll offset
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8231 return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8232 jQuery.support.boxModel && win.document.documentElement[ method ] ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8233 win.document.body[ method ] :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8234 elem[ method ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8235 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8236 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8237 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8238
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8239 function getWindow( elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8240 return jQuery.isWindow( elem ) ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8241 elem :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8242 elem.nodeType === 9 ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8243 elem.defaultView || elem.parentWindow :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8244 false;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8245 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8246
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8247
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8248
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8249
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8250 // Create innerHeight, innerWidth, outerHeight and outerWidth methods
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8251 jQuery.each([ "Height", "Width" ], function( i, name ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8252
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8253 var type = name.toLowerCase();
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8254
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8255 // innerHeight and innerWidth
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8256 jQuery.fn["inner" + name] = function() {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8257 return this[0] ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8258 parseFloat( jQuery.css( this[0], type, "padding" ) ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8259 null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8260 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8261
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8262 // outerHeight and outerWidth
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8263 jQuery.fn["outer" + name] = function( margin ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8264 return this[0] ?
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8265 parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8266 null;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8267 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8268
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8269 jQuery.fn[ type ] = function( size ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8270 // Get window width or height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8271 var elem = this[0];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8272 if ( !elem ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8273 return size == null ? null : this;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8274 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8275
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8276 if ( jQuery.isFunction( size ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8277 return this.each(function( i ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8278 var self = jQuery( this );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8279 self[ type ]( size.call( this, i, self[ type ]() ) );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8280 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8281 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8282
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8283 if ( jQuery.isWindow( elem ) ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8284 // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8285 // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8286 var docElemProp = elem.document.documentElement[ "client" + name ];
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8287 return elem.document.compatMode === "CSS1Compat" && docElemProp ||
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8288 elem.document.body[ "client" + name ] || docElemProp;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8289
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8290 // Get document width or height
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8291 } else if ( elem.nodeType === 9 ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8292 // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8293 return Math.max(
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8294 elem.documentElement["client" + name],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8295 elem.body["scroll" + name], elem.documentElement["scroll" + name],
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8296 elem.body["offset" + name], elem.documentElement["offset" + name]
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8297 );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8298
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8299 // Get or set width or height on the element
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8300 } else if ( size === undefined ) {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8301 var orig = jQuery.css( elem, type ),
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8302 ret = parseFloat( orig );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8303
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8304 return jQuery.isNaN( ret ) ? orig : ret;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8305
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8306 // Set the width or height on the element (default to pixels if value is unitless)
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8307 } else {
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8308 return this.css( type, typeof size === "string" ? size : size + "px" );
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8309 }
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8310 };
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8311
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8312 });
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8313
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8314
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8315 window.jQuery = window.$ = jQuery;
c73753f1606f Uploaded
saskia-hiltemann
parents:
diff changeset
8316 })(window);