annotate query_builder/js/jquery-1.11.3.js @ 32:acc60a20582c

Temporary Changes for querybuilder. Selecting attribute and having results list filter not fully working yet. Need 'ALL' option in attributes.
author arussell
date Sat, 19 Dec 2015 09:15:43 -0500
parents f82512502b31
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1 /*!
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2 * jQuery JavaScript Library v1.11.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3 * http://jquery.com/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5 * Includes Sizzle.js
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6 * http://sizzlejs.com/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9 * Released under the MIT license
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10 * http://jquery.org/license
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
11 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
12 * Date: 2015-04-28T16:19Z
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
13 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
14
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
15 (function( global, factory ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
16
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
17 if ( typeof module === "object" && typeof module.exports === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
18 // For CommonJS and CommonJS-like environments where a proper window is present,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
19 // execute the factory and get jQuery
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
20 // For environments that do not inherently posses a window with a document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
21 // (such as Node.js), expose a jQuery-making factory as module.exports
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
22 // This accentuates the need for the creation of a real window
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
23 // e.g. var jQuery = require("jquery")(window);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
24 // See ticket #14549 for more info
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
25 module.exports = global.document ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
26 factory( global, true ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
27 function( w ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
28 if ( !w.document ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
29 throw new Error( "jQuery requires a window with a document" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
30 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
31 return factory( w );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
32 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
33 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
34 factory( global );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
35 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
36
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
37 // Pass this if window is not defined yet
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
38 }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
39
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
40 // Can't do this because several apps including ASP.NET trace
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
41 // the stack via arguments.caller.callee and Firefox dies if
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
42 // you try to trace through "use strict" call chains. (#13335)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
43 // Support: Firefox 18+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
44 //
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
45
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
46 var deletedIds = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
47
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
48 var slice = deletedIds.slice;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
49
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
50 var concat = deletedIds.concat;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
51
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
52 var push = deletedIds.push;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
53
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
54 var indexOf = deletedIds.indexOf;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
55
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
56 var class2type = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
57
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
58 var toString = class2type.toString;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
59
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
60 var hasOwn = class2type.hasOwnProperty;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
61
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
62 var support = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
63
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
64
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
65
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
66 var
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
67 version = "1.11.3",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
68
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
69 // Define a local copy of jQuery
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
70 jQuery = function( selector, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
71 // The jQuery object is actually just the init constructor 'enhanced'
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
72 // Need init if jQuery is called (just allow error to be thrown if not included)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
73 return new jQuery.fn.init( selector, context );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
74 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
75
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
76 // Support: Android<4.1, IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
77 // Make sure we trim BOM and NBSP
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
78 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
79
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
80 // Matches dashed string for camelizing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
81 rmsPrefix = /^-ms-/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
82 rdashAlpha = /-([\da-z])/gi,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
83
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
84 // Used by jQuery.camelCase as callback to replace()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
85 fcamelCase = function( all, letter ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
86 return letter.toUpperCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
87 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
88
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
89 jQuery.fn = jQuery.prototype = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
90 // The current version of jQuery being used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
91 jquery: version,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
92
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
93 constructor: jQuery,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
94
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
95 // Start with an empty selector
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
96 selector: "",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
97
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
98 // The default length of a jQuery object is 0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
99 length: 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
100
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
101 toArray: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
102 return slice.call( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
103 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
104
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
105 // Get the Nth element in the matched element set OR
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
106 // Get the whole matched element set as a clean array
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
107 get: function( num ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
108 return num != null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
109
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
110 // Return just the one element from the set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
111 ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
112
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
113 // Return all the elements in a clean array
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
114 slice.call( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
115 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
116
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
117 // Take an array of elements and push it onto the stack
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
118 // (returning the new matched element set)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
119 pushStack: function( elems ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
120
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
121 // Build a new jQuery matched element set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
122 var ret = jQuery.merge( this.constructor(), elems );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
123
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
124 // Add the old object onto the stack (as a reference)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
125 ret.prevObject = this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
126 ret.context = this.context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
127
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
128 // Return the newly-formed element set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
129 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
130 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
131
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
132 // Execute a callback for every element in the matched set.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
133 // (You can seed the arguments with an array of args, but this is
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
134 // only used internally.)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
135 each: function( callback, args ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
136 return jQuery.each( this, callback, args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
137 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
138
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
139 map: function( callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
140 return this.pushStack( jQuery.map(this, function( elem, i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
141 return callback.call( elem, i, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
142 }));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
143 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
144
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
145 slice: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
146 return this.pushStack( slice.apply( this, arguments ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
147 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
148
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
149 first: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
150 return this.eq( 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
151 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
152
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
153 last: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
154 return this.eq( -1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
155 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
156
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
157 eq: function( i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
158 var len = this.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
159 j = +i + ( i < 0 ? len : 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
160 return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
161 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
162
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
163 end: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
164 return this.prevObject || this.constructor(null);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
165 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
166
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
167 // For internal use only.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
168 // Behaves like an Array's method, not like a jQuery method.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
169 push: push,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
170 sort: deletedIds.sort,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
171 splice: deletedIds.splice
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
172 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
173
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
174 jQuery.extend = jQuery.fn.extend = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
175 var src, copyIsArray, copy, name, options, clone,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
176 target = arguments[0] || {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
177 i = 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
178 length = arguments.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
179 deep = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
180
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
181 // Handle a deep copy situation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
182 if ( typeof target === "boolean" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
183 deep = target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
184
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
185 // skip the boolean and the target
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
186 target = arguments[ i ] || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
187 i++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
188 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
189
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
190 // Handle case when target is a string or something (possible in deep copy)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
191 if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
192 target = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
193 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
194
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
195 // extend jQuery itself if only one argument is passed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
196 if ( i === length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
197 target = this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
198 i--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
199 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
200
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
201 for ( ; i < length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
202 // Only deal with non-null/undefined values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
203 if ( (options = arguments[ i ]) != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
204 // Extend the base object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
205 for ( name in options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
206 src = target[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
207 copy = options[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
208
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
209 // Prevent never-ending loop
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
210 if ( target === copy ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
211 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
212 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
213
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
214 // Recurse if we're merging plain objects or arrays
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
215 if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
216 if ( copyIsArray ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
217 copyIsArray = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
218 clone = src && jQuery.isArray(src) ? src : [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
219
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
220 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
221 clone = src && jQuery.isPlainObject(src) ? src : {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
222 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
223
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
224 // Never move original objects, clone them
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
225 target[ name ] = jQuery.extend( deep, clone, copy );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
226
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
227 // Don't bring in undefined values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
228 } else if ( copy !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
229 target[ name ] = copy;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
230 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
231 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
232 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
233 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
234
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
235 // Return the modified object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
236 return target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
237 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
238
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
239 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
240 // Unique for each copy of jQuery on the page
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
241 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
242
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
243 // Assume jQuery is ready without the ready module
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
244 isReady: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
245
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
246 error: function( msg ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
247 throw new Error( msg );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
248 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
249
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
250 noop: function() {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
251
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
252 // See test/unit/core.js for details concerning isFunction.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
253 // Since version 1.3, DOM methods and functions like alert
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
254 // aren't supported. They return false on IE (#2968).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
255 isFunction: function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
256 return jQuery.type(obj) === "function";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
257 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
258
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
259 isArray: Array.isArray || function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
260 return jQuery.type(obj) === "array";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
261 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
262
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
263 isWindow: function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
264 /* jshint eqeqeq: false */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
265 return obj != null && obj == obj.window;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
266 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
267
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
268 isNumeric: function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
269 // parseFloat NaNs numeric-cast false positives (null|true|false|"")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
270 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
271 // subtraction forces infinities to NaN
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
272 // adding 1 corrects loss of precision from parseFloat (#15100)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
273 return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
274 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
275
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
276 isEmptyObject: function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
277 var name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
278 for ( name in obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
279 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
280 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
281 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
282 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
283
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
284 isPlainObject: function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
285 var key;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
286
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
287 // Must be an Object.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
288 // Because of IE, we also have to check the presence of the constructor property.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
289 // Make sure that DOM nodes and window objects don't pass through, as well
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
290 if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
291 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
292 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
293
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
294 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
295 // Not own constructor property must be Object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
296 if ( obj.constructor &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
297 !hasOwn.call(obj, "constructor") &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
298 !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
299 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
300 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
301 } catch ( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
302 // IE8,9 Will throw exceptions on certain host objects #9897
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
303 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
304 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
305
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
306 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
307 // Handle iteration over inherited properties before own properties.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
308 if ( support.ownLast ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
309 for ( key in obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
310 return hasOwn.call( obj, key );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
311 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
312 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
313
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
314 // Own properties are enumerated firstly, so to speed up,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
315 // if last one is own, then all properties are own.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
316 for ( key in obj ) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
317
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
318 return key === undefined || hasOwn.call( obj, key );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
319 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
320
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
321 type: function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
322 if ( obj == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
323 return obj + "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
324 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
325 return typeof obj === "object" || typeof obj === "function" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
326 class2type[ toString.call(obj) ] || "object" :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
327 typeof obj;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
328 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
329
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
330 // Evaluates a script in a global context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
331 // Workarounds based on findings by Jim Driscoll
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
332 // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
333 globalEval: function( data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
334 if ( data && jQuery.trim( data ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
335 // We use execScript on Internet Explorer
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
336 // We use an anonymous function so that context is window
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
337 // rather than jQuery in Firefox
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
338 ( window.execScript || function( data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
339 window[ "eval" ].call( window, data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
340 } )( data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
341 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
342 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
343
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
344 // Convert dashed to camelCase; used by the css and data modules
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
345 // Microsoft forgot to hump their vendor prefix (#9572)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
346 camelCase: function( string ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
347 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
348 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
349
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
350 nodeName: function( elem, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
351 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
352 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
353
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
354 // args is for internal usage only
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
355 each: function( obj, callback, args ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
356 var value,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
357 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
358 length = obj.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
359 isArray = isArraylike( obj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
360
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
361 if ( args ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
362 if ( isArray ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
363 for ( ; i < length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
364 value = callback.apply( obj[ i ], args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
365
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
366 if ( value === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
367 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
368 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
369 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
370 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
371 for ( i in obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
372 value = callback.apply( obj[ i ], args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
373
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
374 if ( value === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
375 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
376 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
377 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
378 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
379
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
380 // A special, fast, case for the most common use of each
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
381 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
382 if ( isArray ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
383 for ( ; i < length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
384 value = callback.call( obj[ i ], i, obj[ i ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
385
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
386 if ( value === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
387 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
388 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
389 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
390 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
391 for ( i in obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
392 value = callback.call( obj[ i ], i, obj[ i ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
393
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
394 if ( value === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
395 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
396 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
397 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
398 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
399 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
400
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
401 return obj;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
402 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
403
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
404 // Support: Android<4.1, IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
405 trim: function( text ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
406 return text == null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
407 "" :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
408 ( text + "" ).replace( rtrim, "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
409 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
410
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
411 // results is for internal usage only
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
412 makeArray: function( arr, results ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
413 var ret = results || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
414
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
415 if ( arr != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
416 if ( isArraylike( Object(arr) ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
417 jQuery.merge( ret,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
418 typeof arr === "string" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
419 [ arr ] : arr
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
420 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
421 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
422 push.call( ret, arr );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
423 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
424 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
425
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
426 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
427 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
428
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
429 inArray: function( elem, arr, i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
430 var len;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
431
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
432 if ( arr ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
433 if ( indexOf ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
434 return indexOf.call( arr, elem, i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
435 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
436
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
437 len = arr.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
438 i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
439
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
440 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
441 // Skip accessing in sparse arrays
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
442 if ( i in arr && arr[ i ] === elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
443 return i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
444 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
445 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
446 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
447
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
448 return -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
449 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
450
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
451 merge: function( first, second ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
452 var len = +second.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
453 j = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
454 i = first.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
455
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
456 while ( j < len ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
457 first[ i++ ] = second[ j++ ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
458 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
459
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
460 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
461 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
462 if ( len !== len ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
463 while ( second[j] !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
464 first[ i++ ] = second[ j++ ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
465 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
466 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
467
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
468 first.length = i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
469
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
470 return first;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
471 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
472
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
473 grep: function( elems, callback, invert ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
474 var callbackInverse,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
475 matches = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
476 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
477 length = elems.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
478 callbackExpect = !invert;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
479
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
480 // Go through the array, only saving the items
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
481 // that pass the validator function
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
482 for ( ; i < length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
483 callbackInverse = !callback( elems[ i ], i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
484 if ( callbackInverse !== callbackExpect ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
485 matches.push( elems[ i ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
486 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
487 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
488
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
489 return matches;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
490 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
491
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
492 // arg is for internal usage only
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
493 map: function( elems, callback, arg ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
494 var value,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
495 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
496 length = elems.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
497 isArray = isArraylike( elems ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
498 ret = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
499
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
500 // Go through the array, translating each of the items to their new values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
501 if ( isArray ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
502 for ( ; i < length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
503 value = callback( elems[ i ], i, arg );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
504
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
505 if ( value != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
506 ret.push( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
507 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
508 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
509
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
510 // Go through every key on the object,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
511 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
512 for ( i in elems ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
513 value = callback( elems[ i ], i, arg );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
514
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
515 if ( value != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
516 ret.push( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
517 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
518 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
519 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
520
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
521 // Flatten any nested arrays
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
522 return concat.apply( [], ret );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
523 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
524
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
525 // A global GUID counter for objects
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
526 guid: 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
527
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
528 // Bind a function to a context, optionally partially applying any
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
529 // arguments.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
530 proxy: function( fn, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
531 var args, proxy, tmp;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
532
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
533 if ( typeof context === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
534 tmp = fn[ context ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
535 context = fn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
536 fn = tmp;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
537 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
538
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
539 // Quick check to determine if target is callable, in the spec
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
540 // this throws a TypeError, but we will just return undefined.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
541 if ( !jQuery.isFunction( fn ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
542 return undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
543 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
544
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
545 // Simulated bind
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
546 args = slice.call( arguments, 2 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
547 proxy = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
548 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
549 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
550
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
551 // Set the guid of unique handler to the same of original handler, so it can be removed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
552 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
553
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
554 return proxy;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
555 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
556
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
557 now: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
558 return +( new Date() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
559 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
560
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
561 // jQuery.support is not used in Core but other projects attach their
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
562 // properties to it so it needs to exist.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
563 support: support
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
564 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
565
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
566 // Populate the class2type map
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
567 jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
568 class2type[ "[object " + name + "]" ] = name.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
569 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
570
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
571 function isArraylike( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
572
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
573 // Support: iOS 8.2 (not reproducible in simulator)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
574 // `in` check used to prevent JIT error (gh-2145)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
575 // hasOwn isn't used here due to false negatives
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
576 // regarding Nodelist length in IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
577 var length = "length" in obj && obj.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
578 type = jQuery.type( obj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
579
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
580 if ( type === "function" || jQuery.isWindow( obj ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
581 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
582 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
583
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
584 if ( obj.nodeType === 1 && length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
585 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
586 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
587
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
588 return type === "array" || length === 0 ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
589 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
590 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
591 var Sizzle =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
592 /*!
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
593 * Sizzle CSS Selector Engine v2.2.0-pre
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
594 * http://sizzlejs.com/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
595 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
596 * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
597 * Released under the MIT license
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
598 * http://jquery.org/license
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
599 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
600 * Date: 2014-12-16
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
601 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
602 (function( window ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
603
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
604 var i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
605 support,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
606 Expr,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
607 getText,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
608 isXML,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
609 tokenize,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
610 compile,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
611 select,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
612 outermostContext,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
613 sortInput,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
614 hasDuplicate,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
615
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
616 // Local document vars
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
617 setDocument,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
618 document,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
619 docElem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
620 documentIsHTML,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
621 rbuggyQSA,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
622 rbuggyMatches,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
623 matches,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
624 contains,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
625
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
626 // Instance-specific data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
627 expando = "sizzle" + 1 * new Date(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
628 preferredDoc = window.document,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
629 dirruns = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
630 done = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
631 classCache = createCache(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
632 tokenCache = createCache(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
633 compilerCache = createCache(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
634 sortOrder = function( a, b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
635 if ( a === b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
636 hasDuplicate = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
637 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
638 return 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
639 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
640
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
641 // General-purpose constants
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
642 MAX_NEGATIVE = 1 << 31,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
643
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
644 // Instance methods
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
645 hasOwn = ({}).hasOwnProperty,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
646 arr = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
647 pop = arr.pop,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
648 push_native = arr.push,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
649 push = arr.push,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
650 slice = arr.slice,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
651 // Use a stripped-down indexOf as it's faster than native
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
652 // http://jsperf.com/thor-indexof-vs-for/5
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
653 indexOf = function( list, elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
654 var i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
655 len = list.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
656 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
657 if ( list[i] === elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
658 return i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
659 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
660 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
661 return -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
662 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
663
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
664 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
665
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
666 // Regular expressions
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
667
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
668 // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
669 whitespace = "[\\x20\\t\\r\\n\\f]",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
670 // http://www.w3.org/TR/css3-syntax/#characters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
671 characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
672
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
673 // Loosely modeled on CSS identifier characters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
674 // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
675 // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
676 identifier = characterEncoding.replace( "w", "w#" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
677
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
678 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
679 attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
680 // Operator (capture 2)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
681 "*([*^$|!~]?=)" + whitespace +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
682 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
683 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
684 "*\\]",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
685
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
686 pseudos = ":(" + characterEncoding + ")(?:\\((" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
687 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
688 // 1. quoted (capture 3; capture 4 or capture 5)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
689 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
690 // 2. simple (capture 6)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
691 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
692 // 3. anything else (capture 2)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
693 ".*" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
694 ")\\)|)",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
695
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
696 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
697 rwhitespace = new RegExp( whitespace + "+", "g" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
698 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
699
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
700 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
701 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
702
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
703 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
704
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
705 rpseudo = new RegExp( pseudos ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
706 ridentifier = new RegExp( "^" + identifier + "$" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
707
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
708 matchExpr = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
709 "ID": new RegExp( "^#(" + characterEncoding + ")" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
710 "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
711 "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
712 "ATTR": new RegExp( "^" + attributes ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
713 "PSEUDO": new RegExp( "^" + pseudos ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
714 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
715 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
716 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
717 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
718 // For use in libraries implementing .is()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
719 // We use this for POS matching in `select`
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
720 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
721 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
722 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
723
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
724 rinputs = /^(?:input|select|textarea|button)$/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
725 rheader = /^h\d$/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
726
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
727 rnative = /^[^{]+\{\s*\[native \w/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
728
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
729 // Easily-parseable/retrievable ID or TAG or CLASS selectors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
730 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
731
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
732 rsibling = /[+~]/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
733 rescape = /'|\\/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
734
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
735 // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
736 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
737 funescape = function( _, escaped, escapedWhitespace ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
738 var high = "0x" + escaped - 0x10000;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
739 // NaN means non-codepoint
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
740 // Support: Firefox<24
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
741 // Workaround erroneous numeric interpretation of +"0x"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
742 return high !== high || escapedWhitespace ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
743 escaped :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
744 high < 0 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
745 // BMP codepoint
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
746 String.fromCharCode( high + 0x10000 ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
747 // Supplemental Plane codepoint (surrogate pair)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
748 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
749 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
750
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
751 // Used for iframes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
752 // See setDocument()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
753 // Removing the function wrapper causes a "Permission Denied"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
754 // error in IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
755 unloadHandler = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
756 setDocument();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
757 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
758
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
759 // Optimize for push.apply( _, NodeList )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
760 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
761 push.apply(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
762 (arr = slice.call( preferredDoc.childNodes )),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
763 preferredDoc.childNodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
764 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
765 // Support: Android<4.0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
766 // Detect silently failing push.apply
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
767 arr[ preferredDoc.childNodes.length ].nodeType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
768 } catch ( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
769 push = { apply: arr.length ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
770
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
771 // Leverage slice if possible
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
772 function( target, els ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
773 push_native.apply( target, slice.call(els) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
774 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
775
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
776 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
777 // Otherwise append directly
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
778 function( target, els ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
779 var j = target.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
780 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
781 // Can't trust NodeList.length
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
782 while ( (target[j++] = els[i++]) ) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
783 target.length = j - 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
784 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
785 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
786 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
787
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
788 function Sizzle( selector, context, results, seed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
789 var match, elem, m, nodeType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
790 // QSA vars
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
791 i, groups, old, nid, newContext, newSelector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
792
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
793 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
794 setDocument( context );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
795 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
796
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
797 context = context || document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
798 results = results || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
799 nodeType = context.nodeType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
800
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
801 if ( typeof selector !== "string" || !selector ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
802 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
803
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
804 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
805 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
806
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
807 if ( !seed && documentIsHTML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
808
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
809 // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
810 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
811 // Speed-up: Sizzle("#ID")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
812 if ( (m = match[1]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
813 if ( nodeType === 9 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
814 elem = context.getElementById( m );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
815 // Check parentNode to catch when Blackberry 4.6 returns
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
816 // nodes that are no longer in the document (jQuery #6963)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
817 if ( elem && elem.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
818 // Handle the case where IE, Opera, and Webkit return items
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
819 // by name instead of ID
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
820 if ( elem.id === m ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
821 results.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
822 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
823 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
824 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
825 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
826 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
827 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
828 // Context is not a document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
829 if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
830 contains( context, elem ) && elem.id === m ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
831 results.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
832 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
833 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
834 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
835
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
836 // Speed-up: Sizzle("TAG")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
837 } else if ( match[2] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
838 push.apply( results, context.getElementsByTagName( selector ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
839 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
840
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
841 // Speed-up: Sizzle(".CLASS")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
842 } else if ( (m = match[3]) && support.getElementsByClassName ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
843 push.apply( results, context.getElementsByClassName( m ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
844 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
845 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
846 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
847
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
848 // QSA path
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
849 if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
850 nid = old = expando;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
851 newContext = context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
852 newSelector = nodeType !== 1 && selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
853
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
854 // qSA works strangely on Element-rooted queries
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
855 // We can work around this by specifying an extra ID on the root
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
856 // and working up from there (Thanks to Andrew Dupont for the technique)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
857 // IE 8 doesn't work on object elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
858 if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
859 groups = tokenize( selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
860
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
861 if ( (old = context.getAttribute("id")) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
862 nid = old.replace( rescape, "\\$&" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
863 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
864 context.setAttribute( "id", nid );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
865 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
866 nid = "[id='" + nid + "'] ";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
867
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
868 i = groups.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
869 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
870 groups[i] = nid + toSelector( groups[i] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
871 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
872 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
873 newSelector = groups.join(",");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
874 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
875
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
876 if ( newSelector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
877 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
878 push.apply( results,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
879 newContext.querySelectorAll( newSelector )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
880 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
881 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
882 } catch(qsaError) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
883 } finally {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
884 if ( !old ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
885 context.removeAttribute("id");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
886 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
887 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
888 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
889 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
890 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
891
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
892 // All others
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
893 return select( selector.replace( rtrim, "$1" ), context, results, seed );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
894 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
895
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
896 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
897 * Create key-value caches of limited size
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
898 * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
899 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
900 * deleting the oldest entry
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
901 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
902 function createCache() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
903 var keys = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
904
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
905 function cache( key, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
906 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
907 if ( keys.push( key + " " ) > Expr.cacheLength ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
908 // Only keep the most recent entries
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
909 delete cache[ keys.shift() ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
910 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
911 return (cache[ key + " " ] = value);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
912 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
913 return cache;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
914 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
915
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
916 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
917 * Mark a function for special use by Sizzle
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
918 * @param {Function} fn The function to mark
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
919 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
920 function markFunction( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
921 fn[ expando ] = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
922 return fn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
923 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
924
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
925 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
926 * Support testing using an element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
927 * @param {Function} fn Passed the created div and expects a boolean result
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
928 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
929 function assert( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
930 var div = document.createElement("div");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
931
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
932 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
933 return !!fn( div );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
934 } catch (e) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
935 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
936 } finally {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
937 // Remove from its parent by default
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
938 if ( div.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
939 div.parentNode.removeChild( div );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
940 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
941 // release memory in IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
942 div = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
943 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
944 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
945
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
946 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
947 * Adds the same handler for all of the specified attrs
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
948 * @param {String} attrs Pipe-separated list of attributes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
949 * @param {Function} handler The method that will be applied
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
950 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
951 function addHandle( attrs, handler ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
952 var arr = attrs.split("|"),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
953 i = attrs.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
954
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
955 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
956 Expr.attrHandle[ arr[i] ] = handler;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
957 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
958 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
959
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
960 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
961 * Checks document order of two siblings
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
962 * @param {Element} a
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
963 * @param {Element} b
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
964 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
965 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
966 function siblingCheck( a, b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
967 var cur = b && a,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
968 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
969 ( ~b.sourceIndex || MAX_NEGATIVE ) -
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
970 ( ~a.sourceIndex || MAX_NEGATIVE );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
971
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
972 // Use IE sourceIndex if available on both nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
973 if ( diff ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
974 return diff;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
975 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
976
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
977 // Check if b follows a
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
978 if ( cur ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
979 while ( (cur = cur.nextSibling) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
980 if ( cur === b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
981 return -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
982 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
983 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
984 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
985
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
986 return a ? 1 : -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
987 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
988
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
989 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
990 * Returns a function to use in pseudos for input types
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
991 * @param {String} type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
992 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
993 function createInputPseudo( type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
994 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
995 var name = elem.nodeName.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
996 return name === "input" && elem.type === type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
997 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
998 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
999
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1000 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1001 * Returns a function to use in pseudos for buttons
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1002 * @param {String} type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1003 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1004 function createButtonPseudo( type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1005 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1006 var name = elem.nodeName.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1007 return (name === "input" || name === "button") && elem.type === type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1008 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1009 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1010
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1011 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1012 * Returns a function to use in pseudos for positionals
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1013 * @param {Function} fn
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1014 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1015 function createPositionalPseudo( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1016 return markFunction(function( argument ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1017 argument = +argument;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1018 return markFunction(function( seed, matches ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1019 var j,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1020 matchIndexes = fn( [], seed.length, argument ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1021 i = matchIndexes.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1022
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1023 // Match elements found at the specified indexes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1024 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1025 if ( seed[ (j = matchIndexes[i]) ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1026 seed[j] = !(matches[j] = seed[j]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1027 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1028 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1029 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1030 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1031 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1032
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1033 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1034 * Checks a node for validity as a Sizzle context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1035 * @param {Element|Object=} context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1036 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1037 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1038 function testContext( context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1039 return context && typeof context.getElementsByTagName !== "undefined" && context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1040 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1041
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1042 // Expose support vars for convenience
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1043 support = Sizzle.support = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1044
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1045 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1046 * Detects XML nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1047 * @param {Element|Object} elem An element or a document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1048 * @returns {Boolean} True iff elem is a non-HTML XML node
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1049 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1050 isXML = Sizzle.isXML = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1051 // documentElement is verified for cases where it doesn't yet exist
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1052 // (such as loading iframes in IE - #4833)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1053 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1054 return documentElement ? documentElement.nodeName !== "HTML" : false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1055 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1056
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1057 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1058 * Sets document-related variables once based on the current document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1059 * @param {Element|Object} [doc] An element or document object to use to set the document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1060 * @returns {Object} Returns the current document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1061 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1062 setDocument = Sizzle.setDocument = function( node ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1063 var hasCompare, parent,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1064 doc = node ? node.ownerDocument || node : preferredDoc;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1065
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1066 // If no document and documentElement is available, return
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1067 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1068 return document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1069 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1070
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1071 // Set our document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1072 document = doc;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1073 docElem = doc.documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1074 parent = doc.defaultView;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1075
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1076 // Support: IE>8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1077 // If iframe document is assigned to "document" variable and if iframe has been reloaded,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1078 // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1079 // IE6-8 do not support the defaultView property so parent will be undefined
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1080 if ( parent && parent !== parent.top ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1081 // IE11 does not have attachEvent, so all must suffer
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1082 if ( parent.addEventListener ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1083 parent.addEventListener( "unload", unloadHandler, false );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1084 } else if ( parent.attachEvent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1085 parent.attachEvent( "onunload", unloadHandler );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1086 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1087 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1088
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1089 /* Support tests
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1090 ---------------------------------------------------------------------- */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1091 documentIsHTML = !isXML( doc );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1092
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1093 /* Attributes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1094 ---------------------------------------------------------------------- */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1095
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1096 // Support: IE<8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1097 // Verify that getAttribute really returns attributes and not properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1098 // (excepting IE8 booleans)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1099 support.attributes = assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1100 div.className = "i";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1101 return !div.getAttribute("className");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1102 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1103
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1104 /* getElement(s)By*
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1105 ---------------------------------------------------------------------- */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1106
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1107 // Check if getElementsByTagName("*") returns only elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1108 support.getElementsByTagName = assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1109 div.appendChild( doc.createComment("") );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1110 return !div.getElementsByTagName("*").length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1111 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1112
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1113 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1114 support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1115
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1116 // Support: IE<10
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1117 // Check if getElementById returns elements by name
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1118 // The broken getElementById methods don't pick up programatically-set names,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1119 // so use a roundabout getElementsByName test
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1120 support.getById = assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1121 docElem.appendChild( div ).id = expando;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1122 return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1123 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1124
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1125 // ID find and filter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1126 if ( support.getById ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1127 Expr.find["ID"] = function( id, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1128 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1129 var m = context.getElementById( id );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1130 // Check parentNode to catch when Blackberry 4.6 returns
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1131 // nodes that are no longer in the document #6963
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1132 return m && m.parentNode ? [ m ] : [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1133 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1134 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1135 Expr.filter["ID"] = function( id ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1136 var attrId = id.replace( runescape, funescape );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1137 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1138 return elem.getAttribute("id") === attrId;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1139 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1140 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1141 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1142 // Support: IE6/7
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1143 // getElementById is not reliable as a find shortcut
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1144 delete Expr.find["ID"];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1145
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1146 Expr.filter["ID"] = function( id ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1147 var attrId = id.replace( runescape, funescape );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1148 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1149 var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1150 return node && node.value === attrId;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1151 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1152 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1153 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1154
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1155 // Tag
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1156 Expr.find["TAG"] = support.getElementsByTagName ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1157 function( tag, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1158 if ( typeof context.getElementsByTagName !== "undefined" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1159 return context.getElementsByTagName( tag );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1160
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1161 // DocumentFragment nodes don't have gEBTN
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1162 } else if ( support.qsa ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1163 return context.querySelectorAll( tag );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1164 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1165 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1166
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1167 function( tag, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1168 var elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1169 tmp = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1170 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1171 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1172 results = context.getElementsByTagName( tag );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1173
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1174 // Filter out possible comments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1175 if ( tag === "*" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1176 while ( (elem = results[i++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1177 if ( elem.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1178 tmp.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1179 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1180 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1181
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1182 return tmp;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1183 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1184 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1185 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1186
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1187 // Class
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1188 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1189 if ( documentIsHTML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1190 return context.getElementsByClassName( className );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1191 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1192 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1193
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1194 /* QSA/matchesSelector
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1195 ---------------------------------------------------------------------- */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1196
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1197 // QSA and matchesSelector support
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1198
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1199 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1200 rbuggyMatches = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1201
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1202 // qSa(:focus) reports false when true (Chrome 21)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1203 // We allow this because of a bug in IE8/9 that throws an error
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1204 // whenever `document.activeElement` is accessed on an iframe
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1205 // So, we allow :focus to pass through QSA all the time to avoid the IE error
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1206 // See http://bugs.jquery.com/ticket/13378
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1207 rbuggyQSA = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1208
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1209 if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1210 // Build QSA regex
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1211 // Regex strategy adopted from Diego Perini
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1212 assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1213 // Select is set to empty string on purpose
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1214 // This is to test IE's treatment of not explicitly
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1215 // setting a boolean content attribute,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1216 // since its presence should be enough
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1217 // http://bugs.jquery.com/ticket/12359
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1218 docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1219 "<select id='" + expando + "-\f]' msallowcapture=''>" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1220 "<option selected=''></option></select>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1221
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1222 // Support: IE8, Opera 11-12.16
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1223 // Nothing should be selected when empty strings follow ^= or $= or *=
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1224 // The test attribute must be unknown in Opera but "safe" for WinRT
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1225 // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1226 if ( div.querySelectorAll("[msallowcapture^='']").length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1227 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1228 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1229
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1230 // Support: IE8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1231 // Boolean attributes and "value" are not treated correctly
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1232 if ( !div.querySelectorAll("[selected]").length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1233 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1234 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1235
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1236 // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1237 if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1238 rbuggyQSA.push("~=");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1239 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1240
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1241 // Webkit/Opera - :checked should return selected option elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1242 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1243 // IE8 throws error here and will not see later tests
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1244 if ( !div.querySelectorAll(":checked").length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1245 rbuggyQSA.push(":checked");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1246 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1247
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1248 // Support: Safari 8+, iOS 8+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1249 // https://bugs.webkit.org/show_bug.cgi?id=136851
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1250 // In-page `selector#id sibing-combinator selector` fails
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1251 if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1252 rbuggyQSA.push(".#.+[+~]");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1253 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1254 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1255
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1256 assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1257 // Support: Windows 8 Native Apps
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1258 // The type and name attributes are restricted during .innerHTML assignment
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1259 var input = doc.createElement("input");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1260 input.setAttribute( "type", "hidden" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1261 div.appendChild( input ).setAttribute( "name", "D" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1262
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1263 // Support: IE8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1264 // Enforce case-sensitivity of name attribute
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1265 if ( div.querySelectorAll("[name=d]").length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1266 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1267 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1268
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1269 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1270 // IE8 throws error here and will not see later tests
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1271 if ( !div.querySelectorAll(":enabled").length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1272 rbuggyQSA.push( ":enabled", ":disabled" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1273 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1274
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1275 // Opera 10-11 does not throw on post-comma invalid pseudos
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1276 div.querySelectorAll("*,:x");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1277 rbuggyQSA.push(",.*:");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1278 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1279 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1280
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1281 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1282 docElem.webkitMatchesSelector ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1283 docElem.mozMatchesSelector ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1284 docElem.oMatchesSelector ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1285 docElem.msMatchesSelector) )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1286
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1287 assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1288 // Check to see if it's possible to do matchesSelector
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1289 // on a disconnected node (IE 9)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1290 support.disconnectedMatch = matches.call( div, "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1291
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1292 // This should fail with an exception
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1293 // Gecko does not error, returns false instead
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1294 matches.call( div, "[s!='']:x" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1295 rbuggyMatches.push( "!=", pseudos );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1296 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1297 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1298
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1299 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1300 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1301
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1302 /* Contains
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1303 ---------------------------------------------------------------------- */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1304 hasCompare = rnative.test( docElem.compareDocumentPosition );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1305
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1306 // Element contains another
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1307 // Purposefully does not implement inclusive descendent
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1308 // As in, an element does not contain itself
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1309 contains = hasCompare || rnative.test( docElem.contains ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1310 function( a, b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1311 var adown = a.nodeType === 9 ? a.documentElement : a,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1312 bup = b && b.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1313 return a === bup || !!( bup && bup.nodeType === 1 && (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1314 adown.contains ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1315 adown.contains( bup ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1316 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1317 ));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1318 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1319 function( a, b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1320 if ( b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1321 while ( (b = b.parentNode) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1322 if ( b === a ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1323 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1324 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1325 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1326 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1327 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1328 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1329
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1330 /* Sorting
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1331 ---------------------------------------------------------------------- */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1332
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1333 // Document order sorting
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1334 sortOrder = hasCompare ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1335 function( a, b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1336
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1337 // Flag for duplicate removal
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1338 if ( a === b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1339 hasDuplicate = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1340 return 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1341 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1342
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1343 // Sort on method existence if only one input has compareDocumentPosition
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1344 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1345 if ( compare ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1346 return compare;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1347 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1348
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1349 // Calculate position if both inputs belong to the same document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1350 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1351 a.compareDocumentPosition( b ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1352
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1353 // Otherwise we know they are disconnected
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1354 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1355
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1356 // Disconnected nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1357 if ( compare & 1 ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1358 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1359
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1360 // Choose the first element that is related to our preferred document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1361 if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1362 return -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1363 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1364 if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1365 return 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1366 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1367
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1368 // Maintain original order
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1369 return sortInput ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1370 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1371 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1372 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1373
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1374 return compare & 4 ? -1 : 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1375 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1376 function( a, b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1377 // Exit early if the nodes are identical
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1378 if ( a === b ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1379 hasDuplicate = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1380 return 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1381 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1382
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1383 var cur,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1384 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1385 aup = a.parentNode,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1386 bup = b.parentNode,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1387 ap = [ a ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1388 bp = [ b ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1389
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1390 // Parentless nodes are either documents or disconnected
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1391 if ( !aup || !bup ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1392 return a === doc ? -1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1393 b === doc ? 1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1394 aup ? -1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1395 bup ? 1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1396 sortInput ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1397 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1398 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1399
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1400 // If the nodes are siblings, we can do a quick check
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1401 } else if ( aup === bup ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1402 return siblingCheck( a, b );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1403 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1404
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1405 // Otherwise we need full lists of their ancestors for comparison
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1406 cur = a;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1407 while ( (cur = cur.parentNode) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1408 ap.unshift( cur );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1409 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1410 cur = b;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1411 while ( (cur = cur.parentNode) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1412 bp.unshift( cur );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1413 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1414
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1415 // Walk down the tree looking for a discrepancy
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1416 while ( ap[i] === bp[i] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1417 i++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1418 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1419
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1420 return i ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1421 // Do a sibling check if the nodes have a common ancestor
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1422 siblingCheck( ap[i], bp[i] ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1423
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1424 // Otherwise nodes in our document sort first
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1425 ap[i] === preferredDoc ? -1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1426 bp[i] === preferredDoc ? 1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1427 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1428 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1429
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1430 return doc;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1431 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1432
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1433 Sizzle.matches = function( expr, elements ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1434 return Sizzle( expr, null, null, elements );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1435 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1436
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1437 Sizzle.matchesSelector = function( elem, expr ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1438 // Set document vars if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1439 if ( ( elem.ownerDocument || elem ) !== document ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1440 setDocument( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1441 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1442
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1443 // Make sure that attribute selectors are quoted
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1444 expr = expr.replace( rattributeQuotes, "='$1']" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1445
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1446 if ( support.matchesSelector && documentIsHTML &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1447 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1448 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1449
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1450 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1451 var ret = matches.call( elem, expr );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1452
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1453 // IE 9's matchesSelector returns false on disconnected nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1454 if ( ret || support.disconnectedMatch ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1455 // As well, disconnected nodes are said to be in a document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1456 // fragment in IE 9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1457 elem.document && elem.document.nodeType !== 11 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1458 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1459 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1460 } catch (e) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1461 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1462
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1463 return Sizzle( expr, document, null, [ elem ] ).length > 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1464 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1465
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1466 Sizzle.contains = function( context, elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1467 // Set document vars if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1468 if ( ( context.ownerDocument || context ) !== document ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1469 setDocument( context );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1470 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1471 return contains( context, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1472 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1473
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1474 Sizzle.attr = function( elem, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1475 // Set document vars if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1476 if ( ( elem.ownerDocument || elem ) !== document ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1477 setDocument( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1478 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1479
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1480 var fn = Expr.attrHandle[ name.toLowerCase() ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1481 // Don't get fooled by Object.prototype properties (jQuery #13807)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1482 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1483 fn( elem, name, !documentIsHTML ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1484 undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1485
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1486 return val !== undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1487 val :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1488 support.attributes || !documentIsHTML ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1489 elem.getAttribute( name ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1490 (val = elem.getAttributeNode(name)) && val.specified ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1491 val.value :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1492 null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1493 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1494
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1495 Sizzle.error = function( msg ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1496 throw new Error( "Syntax error, unrecognized expression: " + msg );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1497 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1498
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1499 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1500 * Document sorting and removing duplicates
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1501 * @param {ArrayLike} results
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1502 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1503 Sizzle.uniqueSort = function( results ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1504 var elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1505 duplicates = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1506 j = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1507 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1508
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1509 // Unless we *know* we can detect duplicates, assume their presence
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1510 hasDuplicate = !support.detectDuplicates;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1511 sortInput = !support.sortStable && results.slice( 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1512 results.sort( sortOrder );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1513
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1514 if ( hasDuplicate ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1515 while ( (elem = results[i++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1516 if ( elem === results[ i ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1517 j = duplicates.push( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1518 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1519 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1520 while ( j-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1521 results.splice( duplicates[ j ], 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1522 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1523 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1524
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1525 // Clear input after sorting to release objects
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1526 // See https://github.com/jquery/sizzle/pull/225
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1527 sortInput = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1528
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1529 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1530 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1531
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1532 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1533 * Utility function for retrieving the text value of an array of DOM nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1534 * @param {Array|Element} elem
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1535 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1536 getText = Sizzle.getText = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1537 var node,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1538 ret = "",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1539 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1540 nodeType = elem.nodeType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1541
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1542 if ( !nodeType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1543 // If no nodeType, this is expected to be an array
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1544 while ( (node = elem[i++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1545 // Do not traverse comment nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1546 ret += getText( node );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1547 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1548 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1549 // Use textContent for elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1550 // innerText usage removed for consistency of new lines (jQuery #11153)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1551 if ( typeof elem.textContent === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1552 return elem.textContent;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1553 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1554 // Traverse its children
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1555 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1556 ret += getText( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1557 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1558 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1559 } else if ( nodeType === 3 || nodeType === 4 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1560 return elem.nodeValue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1561 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1562 // Do not include comment or processing instruction nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1563
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1564 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1565 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1566
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1567 Expr = Sizzle.selectors = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1568
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1569 // Can be adjusted by the user
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1570 cacheLength: 50,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1571
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1572 createPseudo: markFunction,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1573
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1574 match: matchExpr,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1575
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1576 attrHandle: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1577
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1578 find: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1579
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1580 relative: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1581 ">": { dir: "parentNode", first: true },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1582 " ": { dir: "parentNode" },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1583 "+": { dir: "previousSibling", first: true },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1584 "~": { dir: "previousSibling" }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1585 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1586
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1587 preFilter: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1588 "ATTR": function( match ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1589 match[1] = match[1].replace( runescape, funescape );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1590
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1591 // Move the given value to match[3] whether quoted or unquoted
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1592 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1593
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1594 if ( match[2] === "~=" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1595 match[3] = " " + match[3] + " ";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1596 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1597
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1598 return match.slice( 0, 4 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1599 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1600
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1601 "CHILD": function( match ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1602 /* matches from matchExpr["CHILD"]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1603 1 type (only|nth|...)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1604 2 what (child|of-type)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1605 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1606 4 xn-component of xn+y argument ([+-]?\d*n|)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1607 5 sign of xn-component
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1608 6 x of xn-component
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1609 7 sign of y-component
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1610 8 y of y-component
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1611 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1612 match[1] = match[1].toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1613
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1614 if ( match[1].slice( 0, 3 ) === "nth" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1615 // nth-* requires argument
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1616 if ( !match[3] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1617 Sizzle.error( match[0] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1618 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1619
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1620 // numeric x and y parameters for Expr.filter.CHILD
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1621 // remember that false/true cast respectively to 0/1
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1622 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1623 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1624
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1625 // other types prohibit arguments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1626 } else if ( match[3] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1627 Sizzle.error( match[0] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1628 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1629
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1630 return match;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1631 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1632
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1633 "PSEUDO": function( match ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1634 var excess,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1635 unquoted = !match[6] && match[2];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1636
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1637 if ( matchExpr["CHILD"].test( match[0] ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1638 return null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1639 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1640
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1641 // Accept quoted arguments as-is
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1642 if ( match[3] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1643 match[2] = match[4] || match[5] || "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1644
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1645 // Strip excess characters from unquoted arguments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1646 } else if ( unquoted && rpseudo.test( unquoted ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1647 // Get excess from tokenize (recursively)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1648 (excess = tokenize( unquoted, true )) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1649 // advance to the next closing parenthesis
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1650 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1651
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1652 // excess is a negative index
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1653 match[0] = match[0].slice( 0, excess );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1654 match[2] = unquoted.slice( 0, excess );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1655 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1656
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1657 // Return only captures needed by the pseudo filter method (type and argument)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1658 return match.slice( 0, 3 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1659 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1660 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1661
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1662 filter: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1663
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1664 "TAG": function( nodeNameSelector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1665 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1666 return nodeNameSelector === "*" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1667 function() { return true; } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1668 function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1669 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1670 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1671 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1672
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1673 "CLASS": function( className ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1674 var pattern = classCache[ className + " " ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1675
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1676 return pattern ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1677 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1678 classCache( className, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1679 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1680 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1681 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1682
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1683 "ATTR": function( name, operator, check ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1684 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1685 var result = Sizzle.attr( elem, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1686
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1687 if ( result == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1688 return operator === "!=";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1689 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1690 if ( !operator ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1691 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1692 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1693
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1694 result += "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1695
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1696 return operator === "=" ? result === check :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1697 operator === "!=" ? result !== check :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1698 operator === "^=" ? check && result.indexOf( check ) === 0 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1699 operator === "*=" ? check && result.indexOf( check ) > -1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1700 operator === "$=" ? check && result.slice( -check.length ) === check :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1701 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1702 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1703 false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1704 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1705 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1706
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1707 "CHILD": function( type, what, argument, first, last ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1708 var simple = type.slice( 0, 3 ) !== "nth",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1709 forward = type.slice( -4 ) !== "last",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1710 ofType = what === "of-type";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1711
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1712 return first === 1 && last === 0 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1713
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1714 // Shortcut for :nth-*(n)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1715 function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1716 return !!elem.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1717 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1718
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1719 function( elem, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1720 var cache, outerCache, node, diff, nodeIndex, start,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1721 dir = simple !== forward ? "nextSibling" : "previousSibling",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1722 parent = elem.parentNode,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1723 name = ofType && elem.nodeName.toLowerCase(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1724 useCache = !xml && !ofType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1725
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1726 if ( parent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1727
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1728 // :(first|last|only)-(child|of-type)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1729 if ( simple ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1730 while ( dir ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1731 node = elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1732 while ( (node = node[ dir ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1733 if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1734 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1735 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1736 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1737 // Reverse direction for :only-* (if we haven't yet done so)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1738 start = dir = type === "only" && !start && "nextSibling";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1739 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1740 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1741 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1742
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1743 start = [ forward ? parent.firstChild : parent.lastChild ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1744
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1745 // non-xml :nth-child(...) stores cache data on `parent`
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1746 if ( forward && useCache ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1747 // Seek `elem` from a previously-cached index
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1748 outerCache = parent[ expando ] || (parent[ expando ] = {});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1749 cache = outerCache[ type ] || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1750 nodeIndex = cache[0] === dirruns && cache[1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1751 diff = cache[0] === dirruns && cache[2];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1752 node = nodeIndex && parent.childNodes[ nodeIndex ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1753
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1754 while ( (node = ++nodeIndex && node && node[ dir ] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1755
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1756 // Fallback to seeking `elem` from the start
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1757 (diff = nodeIndex = 0) || start.pop()) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1758
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1759 // When found, cache indexes on `parent` and break
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1760 if ( node.nodeType === 1 && ++diff && node === elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1761 outerCache[ type ] = [ dirruns, nodeIndex, diff ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1762 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1763 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1764 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1765
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1766 // Use previously-cached element index if available
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1767 } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1768 diff = cache[1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1769
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1770 // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1771 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1772 // Use the same loop as above to seek `elem` from the start
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1773 while ( (node = ++nodeIndex && node && node[ dir ] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1774 (diff = nodeIndex = 0) || start.pop()) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1775
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1776 if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1777 // Cache the index of each encountered element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1778 if ( useCache ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1779 (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1780 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1781
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1782 if ( node === elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1783 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1784 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1785 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1786 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1787 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1788
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1789 // Incorporate the offset, then check against cycle size
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1790 diff -= last;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1791 return diff === first || ( diff % first === 0 && diff / first >= 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1792 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1793 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1794 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1795
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1796 "PSEUDO": function( pseudo, argument ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1797 // pseudo-class names are case-insensitive
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1798 // http://www.w3.org/TR/selectors/#pseudo-classes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1799 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1800 // Remember that setFilters inherits from pseudos
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1801 var args,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1802 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1803 Sizzle.error( "unsupported pseudo: " + pseudo );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1804
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1805 // The user may use createPseudo to indicate that
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1806 // arguments are needed to create the filter function
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1807 // just as Sizzle does
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1808 if ( fn[ expando ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1809 return fn( argument );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1810 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1811
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1812 // But maintain support for old signatures
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1813 if ( fn.length > 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1814 args = [ pseudo, pseudo, "", argument ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1815 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1816 markFunction(function( seed, matches ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1817 var idx,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1818 matched = fn( seed, argument ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1819 i = matched.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1820 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1821 idx = indexOf( seed, matched[i] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1822 seed[ idx ] = !( matches[ idx ] = matched[i] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1823 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1824 }) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1825 function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1826 return fn( elem, 0, args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1827 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1828 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1829
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1830 return fn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1831 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1832 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1833
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1834 pseudos: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1835 // Potentially complex pseudos
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1836 "not": markFunction(function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1837 // Trim the selector passed to compile
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1838 // to avoid treating leading and trailing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1839 // spaces as combinators
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1840 var input = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1841 results = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1842 matcher = compile( selector.replace( rtrim, "$1" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1843
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1844 return matcher[ expando ] ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1845 markFunction(function( seed, matches, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1846 var elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1847 unmatched = matcher( seed, null, xml, [] ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1848 i = seed.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1849
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1850 // Match elements unmatched by `matcher`
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1851 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1852 if ( (elem = unmatched[i]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1853 seed[i] = !(matches[i] = elem);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1854 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1855 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1856 }) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1857 function( elem, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1858 input[0] = elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1859 matcher( input, null, xml, results );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1860 // Don't keep the element (issue #299)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1861 input[0] = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1862 return !results.pop();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1863 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1864 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1865
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1866 "has": markFunction(function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1867 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1868 return Sizzle( selector, elem ).length > 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1869 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1870 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1871
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1872 "contains": markFunction(function( text ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1873 text = text.replace( runescape, funescape );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1874 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1875 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1876 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1877 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1878
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1879 // "Whether an element is represented by a :lang() selector
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1880 // is based solely on the element's language value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1881 // being equal to the identifier C,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1882 // or beginning with the identifier C immediately followed by "-".
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1883 // The matching of C against the element's language value is performed case-insensitively.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1884 // The identifier C does not have to be a valid language name."
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1885 // http://www.w3.org/TR/selectors/#lang-pseudo
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1886 "lang": markFunction( function( lang ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1887 // lang value must be a valid identifier
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1888 if ( !ridentifier.test(lang || "") ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1889 Sizzle.error( "unsupported lang: " + lang );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1890 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1891 lang = lang.replace( runescape, funescape ).toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1892 return function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1893 var elemLang;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1894 do {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1895 if ( (elemLang = documentIsHTML ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1896 elem.lang :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1897 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1898
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1899 elemLang = elemLang.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1900 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1901 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1902 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1903 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1904 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1905 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1906
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1907 // Miscellaneous
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1908 "target": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1909 var hash = window.location && window.location.hash;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1910 return hash && hash.slice( 1 ) === elem.id;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1911 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1912
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1913 "root": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1914 return elem === docElem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1915 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1916
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1917 "focus": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1918 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1919 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1920
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1921 // Boolean properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1922 "enabled": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1923 return elem.disabled === false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1924 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1925
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1926 "disabled": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1927 return elem.disabled === true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1928 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1929
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1930 "checked": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1931 // In CSS3, :checked should return both checked and selected elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1932 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1933 var nodeName = elem.nodeName.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1934 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1935 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1936
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1937 "selected": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1938 // Accessing this property makes selected-by-default
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1939 // options in Safari work properly
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1940 if ( elem.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1941 elem.parentNode.selectedIndex;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1942 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1943
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1944 return elem.selected === true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1945 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1946
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1947 // Contents
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1948 "empty": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1949 // http://www.w3.org/TR/selectors/#empty-pseudo
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1950 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1951 // but not by others (comment: 8; processing instruction: 7; etc.)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1952 // nodeType < 6 works because attributes (2) do not appear as children
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1953 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1954 if ( elem.nodeType < 6 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1955 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1956 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1957 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1958 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1959 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1960
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1961 "parent": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1962 return !Expr.pseudos["empty"]( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1963 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1964
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1965 // Element/input types
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1966 "header": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1967 return rheader.test( elem.nodeName );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1968 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1969
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1970 "input": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1971 return rinputs.test( elem.nodeName );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1972 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1973
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1974 "button": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1975 var name = elem.nodeName.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1976 return name === "input" && elem.type === "button" || name === "button";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1977 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1978
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1979 "text": function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1980 var attr;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1981 return elem.nodeName.toLowerCase() === "input" &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1982 elem.type === "text" &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1983
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1984 // Support: IE<8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1985 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1986 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1987 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1988
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1989 // Position-in-collection
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1990 "first": createPositionalPseudo(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1991 return [ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1992 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1993
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1994 "last": createPositionalPseudo(function( matchIndexes, length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1995 return [ length - 1 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1996 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1997
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1998 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
1999 return [ argument < 0 ? argument + length : argument ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2000 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2001
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2002 "even": createPositionalPseudo(function( matchIndexes, length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2003 var i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2004 for ( ; i < length; i += 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2005 matchIndexes.push( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2006 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2007 return matchIndexes;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2008 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2009
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2010 "odd": createPositionalPseudo(function( matchIndexes, length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2011 var i = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2012 for ( ; i < length; i += 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2013 matchIndexes.push( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2014 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2015 return matchIndexes;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2016 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2017
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2018 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2019 var i = argument < 0 ? argument + length : argument;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2020 for ( ; --i >= 0; ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2021 matchIndexes.push( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2022 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2023 return matchIndexes;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2024 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2025
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2026 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2027 var i = argument < 0 ? argument + length : argument;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2028 for ( ; ++i < length; ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2029 matchIndexes.push( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2030 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2031 return matchIndexes;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2032 })
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2033 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2034 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2035
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2036 Expr.pseudos["nth"] = Expr.pseudos["eq"];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2037
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2038 // Add button/input type pseudos
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2039 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2040 Expr.pseudos[ i ] = createInputPseudo( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2041 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2042 for ( i in { submit: true, reset: true } ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2043 Expr.pseudos[ i ] = createButtonPseudo( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2044 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2045
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2046 // Easy API for creating new setFilters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2047 function setFilters() {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2048 setFilters.prototype = Expr.filters = Expr.pseudos;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2049 Expr.setFilters = new setFilters();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2050
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2051 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2052 var matched, match, tokens, type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2053 soFar, groups, preFilters,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2054 cached = tokenCache[ selector + " " ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2055
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2056 if ( cached ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2057 return parseOnly ? 0 : cached.slice( 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2058 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2059
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2060 soFar = selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2061 groups = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2062 preFilters = Expr.preFilter;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2063
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2064 while ( soFar ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2065
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2066 // Comma and first run
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2067 if ( !matched || (match = rcomma.exec( soFar )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2068 if ( match ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2069 // Don't consume trailing commas as valid
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2070 soFar = soFar.slice( match[0].length ) || soFar;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2071 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2072 groups.push( (tokens = []) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2073 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2074
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2075 matched = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2076
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2077 // Combinators
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2078 if ( (match = rcombinators.exec( soFar )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2079 matched = match.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2080 tokens.push({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2081 value: matched,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2082 // Cast descendant combinators to space
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2083 type: match[0].replace( rtrim, " " )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2084 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2085 soFar = soFar.slice( matched.length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2086 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2087
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2088 // Filters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2089 for ( type in Expr.filter ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2090 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2091 (match = preFilters[ type ]( match ))) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2092 matched = match.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2093 tokens.push({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2094 value: matched,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2095 type: type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2096 matches: match
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2097 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2098 soFar = soFar.slice( matched.length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2099 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2100 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2101
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2102 if ( !matched ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2103 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2104 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2105 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2106
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2107 // Return the length of the invalid excess
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2108 // if we're just parsing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2109 // Otherwise, throw an error or return tokens
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2110 return parseOnly ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2111 soFar.length :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2112 soFar ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2113 Sizzle.error( selector ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2114 // Cache the tokens
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2115 tokenCache( selector, groups ).slice( 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2116 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2117
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2118 function toSelector( tokens ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2119 var i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2120 len = tokens.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2121 selector = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2122 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2123 selector += tokens[i].value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2124 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2125 return selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2126 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2127
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2128 function addCombinator( matcher, combinator, base ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2129 var dir = combinator.dir,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2130 checkNonElements = base && dir === "parentNode",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2131 doneName = done++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2132
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2133 return combinator.first ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2134 // Check against closest ancestor/preceding element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2135 function( elem, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2136 while ( (elem = elem[ dir ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2137 if ( elem.nodeType === 1 || checkNonElements ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2138 return matcher( elem, context, xml );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2139 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2140 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2141 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2142
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2143 // Check against all ancestor/preceding elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2144 function( elem, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2145 var oldCache, outerCache,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2146 newCache = [ dirruns, doneName ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2147
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2148 // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2149 if ( xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2150 while ( (elem = elem[ dir ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2151 if ( elem.nodeType === 1 || checkNonElements ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2152 if ( matcher( elem, context, xml ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2153 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2154 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2155 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2156 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2157 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2158 while ( (elem = elem[ dir ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2159 if ( elem.nodeType === 1 || checkNonElements ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2160 outerCache = elem[ expando ] || (elem[ expando ] = {});
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2161 if ( (oldCache = outerCache[ dir ]) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2162 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2163
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2164 // Assign to newCache so results back-propagate to previous elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2165 return (newCache[ 2 ] = oldCache[ 2 ]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2166 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2167 // Reuse newcache so results back-propagate to previous elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2168 outerCache[ dir ] = newCache;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2169
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2170 // A match means we're done; a fail means we have to keep checking
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2171 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2172 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2173 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2174 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2175 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2176 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2177 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2178 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2179 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2180
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2181 function elementMatcher( matchers ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2182 return matchers.length > 1 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2183 function( elem, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2184 var i = matchers.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2185 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2186 if ( !matchers[i]( elem, context, xml ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2187 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2188 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2189 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2190 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2191 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2192 matchers[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2193 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2194
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2195 function multipleContexts( selector, contexts, results ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2196 var i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2197 len = contexts.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2198 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2199 Sizzle( selector, contexts[i], results );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2200 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2201 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2202 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2203
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2204 function condense( unmatched, map, filter, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2205 var elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2206 newUnmatched = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2207 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2208 len = unmatched.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2209 mapped = map != null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2210
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2211 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2212 if ( (elem = unmatched[i]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2213 if ( !filter || filter( elem, context, xml ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2214 newUnmatched.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2215 if ( mapped ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2216 map.push( i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2217 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2218 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2219 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2220 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2221
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2222 return newUnmatched;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2223 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2224
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2225 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2226 if ( postFilter && !postFilter[ expando ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2227 postFilter = setMatcher( postFilter );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2228 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2229 if ( postFinder && !postFinder[ expando ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2230 postFinder = setMatcher( postFinder, postSelector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2231 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2232 return markFunction(function( seed, results, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2233 var temp, i, elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2234 preMap = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2235 postMap = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2236 preexisting = results.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2237
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2238 // Get initial elements from seed or context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2239 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2240
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2241 // Prefilter to get matcher input, preserving a map for seed-results synchronization
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2242 matcherIn = preFilter && ( seed || !selector ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2243 condense( elems, preMap, preFilter, context, xml ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2244 elems,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2245
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2246 matcherOut = matcher ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2247 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2248 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2249
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2250 // ...intermediate processing is necessary
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2251 [] :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2252
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2253 // ...otherwise use results directly
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2254 results :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2255 matcherIn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2256
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2257 // Find primary matches
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2258 if ( matcher ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2259 matcher( matcherIn, matcherOut, context, xml );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2260 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2261
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2262 // Apply postFilter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2263 if ( postFilter ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2264 temp = condense( matcherOut, postMap );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2265 postFilter( temp, [], context, xml );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2266
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2267 // Un-match failing elements by moving them back to matcherIn
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2268 i = temp.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2269 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2270 if ( (elem = temp[i]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2271 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2272 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2273 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2274 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2275
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2276 if ( seed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2277 if ( postFinder || preFilter ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2278 if ( postFinder ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2279 // Get the final matcherOut by condensing this intermediate into postFinder contexts
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2280 temp = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2281 i = matcherOut.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2282 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2283 if ( (elem = matcherOut[i]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2284 // Restore matcherIn since elem is not yet a final match
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2285 temp.push( (matcherIn[i] = elem) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2286 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2287 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2288 postFinder( null, (matcherOut = []), temp, xml );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2289 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2290
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2291 // Move matched elements from seed to results to keep them synchronized
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2292 i = matcherOut.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2293 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2294 if ( (elem = matcherOut[i]) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2295 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2296
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2297 seed[temp] = !(results[temp] = elem);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2298 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2299 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2300 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2301
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2302 // Add elements to results, through postFinder if defined
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2303 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2304 matcherOut = condense(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2305 matcherOut === results ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2306 matcherOut.splice( preexisting, matcherOut.length ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2307 matcherOut
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2308 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2309 if ( postFinder ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2310 postFinder( null, results, matcherOut, xml );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2311 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2312 push.apply( results, matcherOut );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2313 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2314 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2315 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2316 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2317
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2318 function matcherFromTokens( tokens ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2319 var checkContext, matcher, j,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2320 len = tokens.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2321 leadingRelative = Expr.relative[ tokens[0].type ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2322 implicitRelative = leadingRelative || Expr.relative[" "],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2323 i = leadingRelative ? 1 : 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2324
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2325 // The foundational matcher ensures that elements are reachable from top-level context(s)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2326 matchContext = addCombinator( function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2327 return elem === checkContext;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2328 }, implicitRelative, true ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2329 matchAnyContext = addCombinator( function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2330 return indexOf( checkContext, elem ) > -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2331 }, implicitRelative, true ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2332 matchers = [ function( elem, context, xml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2333 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2334 (checkContext = context).nodeType ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2335 matchContext( elem, context, xml ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2336 matchAnyContext( elem, context, xml ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2337 // Avoid hanging onto element (issue #299)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2338 checkContext = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2339 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2340 } ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2341
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2342 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2343 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2344 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2345 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2346 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2347
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2348 // Return special upon seeing a positional matcher
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2349 if ( matcher[ expando ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2350 // Find the next relative operator (if any) for proper handling
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2351 j = ++i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2352 for ( ; j < len; j++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2353 if ( Expr.relative[ tokens[j].type ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2354 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2355 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2356 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2357 return setMatcher(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2358 i > 1 && elementMatcher( matchers ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2359 i > 1 && toSelector(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2360 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2361 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2362 ).replace( rtrim, "$1" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2363 matcher,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2364 i < j && matcherFromTokens( tokens.slice( i, j ) ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2365 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2366 j < len && toSelector( tokens )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2367 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2368 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2369 matchers.push( matcher );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2370 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2371 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2372
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2373 return elementMatcher( matchers );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2374 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2375
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2376 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2377 var bySet = setMatchers.length > 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2378 byElement = elementMatchers.length > 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2379 superMatcher = function( seed, context, xml, results, outermost ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2380 var elem, j, matcher,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2381 matchedCount = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2382 i = "0",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2383 unmatched = seed && [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2384 setMatched = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2385 contextBackup = outermostContext,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2386 // We must always have either seed elements or outermost context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2387 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2388 // Use integer dirruns iff this is the outermost matcher
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2389 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2390 len = elems.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2391
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2392 if ( outermost ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2393 outermostContext = context !== document && context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2394 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2395
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2396 // Add elements passing elementMatchers directly to results
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2397 // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2398 // Support: IE<9, Safari
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2399 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2400 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2401 if ( byElement && elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2402 j = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2403 while ( (matcher = elementMatchers[j++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2404 if ( matcher( elem, context, xml ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2405 results.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2406 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2407 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2408 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2409 if ( outermost ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2410 dirruns = dirrunsUnique;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2411 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2412 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2413
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2414 // Track unmatched elements for set filters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2415 if ( bySet ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2416 // They will have gone through all possible matchers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2417 if ( (elem = !matcher && elem) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2418 matchedCount--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2419 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2420
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2421 // Lengthen the array for every element, matched or not
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2422 if ( seed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2423 unmatched.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2424 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2425 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2426 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2427
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2428 // Apply set filters to unmatched elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2429 matchedCount += i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2430 if ( bySet && i !== matchedCount ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2431 j = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2432 while ( (matcher = setMatchers[j++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2433 matcher( unmatched, setMatched, context, xml );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2434 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2435
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2436 if ( seed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2437 // Reintegrate element matches to eliminate the need for sorting
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2438 if ( matchedCount > 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2439 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2440 if ( !(unmatched[i] || setMatched[i]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2441 setMatched[i] = pop.call( results );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2442 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2443 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2444 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2445
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2446 // Discard index placeholder values to get only actual matches
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2447 setMatched = condense( setMatched );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2448 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2449
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2450 // Add matches to results
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2451 push.apply( results, setMatched );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2452
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2453 // Seedless set matches succeeding multiple successful matchers stipulate sorting
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2454 if ( outermost && !seed && setMatched.length > 0 &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2455 ( matchedCount + setMatchers.length ) > 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2456
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2457 Sizzle.uniqueSort( results );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2458 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2459 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2460
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2461 // Override manipulation of globals by nested matchers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2462 if ( outermost ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2463 dirruns = dirrunsUnique;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2464 outermostContext = contextBackup;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2465 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2466
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2467 return unmatched;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2468 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2469
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2470 return bySet ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2471 markFunction( superMatcher ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2472 superMatcher;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2473 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2474
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2475 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2476 var i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2477 setMatchers = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2478 elementMatchers = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2479 cached = compilerCache[ selector + " " ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2480
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2481 if ( !cached ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2482 // Generate a function of recursive functions that can be used to check each element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2483 if ( !match ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2484 match = tokenize( selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2485 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2486 i = match.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2487 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2488 cached = matcherFromTokens( match[i] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2489 if ( cached[ expando ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2490 setMatchers.push( cached );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2491 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2492 elementMatchers.push( cached );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2493 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2494 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2495
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2496 // Cache the compiled function
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2497 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2498
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2499 // Save selector and tokenization
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2500 cached.selector = selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2501 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2502 return cached;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2503 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2504
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2505 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2506 * A low-level selection function that works with Sizzle's compiled
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2507 * selector functions
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2508 * @param {String|Function} selector A selector or a pre-compiled
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2509 * selector function built with Sizzle.compile
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2510 * @param {Element} context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2511 * @param {Array} [results]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2512 * @param {Array} [seed] A set of elements to match against
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2513 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2514 select = Sizzle.select = function( selector, context, results, seed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2515 var i, tokens, token, type, find,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2516 compiled = typeof selector === "function" && selector,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2517 match = !seed && tokenize( (selector = compiled.selector || selector) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2518
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2519 results = results || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2520
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2521 // Try to minimize operations if there is no seed and only one group
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2522 if ( match.length === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2523
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2524 // Take a shortcut and set the context if the root selector is an ID
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2525 tokens = match[0] = match[0].slice( 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2526 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2527 support.getById && context.nodeType === 9 && documentIsHTML &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2528 Expr.relative[ tokens[1].type ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2529
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2530 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2531 if ( !context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2532 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2533
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2534 // Precompiled matchers will still verify ancestry, so step up a level
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2535 } else if ( compiled ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2536 context = context.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2537 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2538
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2539 selector = selector.slice( tokens.shift().value.length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2540 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2541
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2542 // Fetch a seed set for right-to-left matching
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2543 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2544 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2545 token = tokens[i];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2546
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2547 // Abort if we hit a combinator
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2548 if ( Expr.relative[ (type = token.type) ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2549 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2550 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2551 if ( (find = Expr.find[ type ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2552 // Search, expanding context for leading sibling combinators
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2553 if ( (seed = find(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2554 token.matches[0].replace( runescape, funescape ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2555 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2556 )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2557
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2558 // If seed is empty or no tokens remain, we can return early
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2559 tokens.splice( i, 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2560 selector = seed.length && toSelector( tokens );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2561 if ( !selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2562 push.apply( results, seed );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2563 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2564 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2565
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2566 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2567 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2568 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2569 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2570 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2571
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2572 // Compile and execute a filtering function if one is not provided
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2573 // Provide `match` to avoid retokenization if we modified the selector above
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2574 ( compiled || compile( selector, match ) )(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2575 seed,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2576 context,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2577 !documentIsHTML,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2578 results,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2579 rsibling.test( selector ) && testContext( context.parentNode ) || context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2580 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2581 return results;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2582 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2583
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2584 // One-time assignments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2585
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2586 // Sort stability
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2587 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2588
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2589 // Support: Chrome 14-35+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2590 // Always assume duplicates if they aren't passed to the comparison function
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2591 support.detectDuplicates = !!hasDuplicate;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2592
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2593 // Initialize against the default document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2594 setDocument();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2595
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2596 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2597 // Detached nodes confoundingly follow *each other*
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2598 support.sortDetached = assert(function( div1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2599 // Should return 1, but returns 4 (following)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2600 return div1.compareDocumentPosition( document.createElement("div") ) & 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2601 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2602
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2603 // Support: IE<8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2604 // Prevent attribute/property "interpolation"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2605 // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2606 if ( !assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2607 div.innerHTML = "<a href='#'></a>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2608 return div.firstChild.getAttribute("href") === "#" ;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2609 }) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2610 addHandle( "type|href|height|width", function( elem, name, isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2611 if ( !isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2612 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2613 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2614 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2615 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2616
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2617 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2618 // Use defaultValue in place of getAttribute("value")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2619 if ( !support.attributes || !assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2620 div.innerHTML = "<input/>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2621 div.firstChild.setAttribute( "value", "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2622 return div.firstChild.getAttribute( "value" ) === "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2623 }) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2624 addHandle( "value", function( elem, name, isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2625 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2626 return elem.defaultValue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2627 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2628 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2629 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2630
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2631 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2632 // Use getAttributeNode to fetch booleans when getAttribute lies
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2633 if ( !assert(function( div ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2634 return div.getAttribute("disabled") == null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2635 }) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2636 addHandle( booleans, function( elem, name, isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2637 var val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2638 if ( !isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2639 return elem[ name ] === true ? name.toLowerCase() :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2640 (val = elem.getAttributeNode( name )) && val.specified ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2641 val.value :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2642 null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2643 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2644 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2645 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2646
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2647 return Sizzle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2648
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2649 })( window );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2650
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2651
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2652
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2653 jQuery.find = Sizzle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2654 jQuery.expr = Sizzle.selectors;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2655 jQuery.expr[":"] = jQuery.expr.pseudos;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2656 jQuery.unique = Sizzle.uniqueSort;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2657 jQuery.text = Sizzle.getText;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2658 jQuery.isXMLDoc = Sizzle.isXML;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2659 jQuery.contains = Sizzle.contains;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2660
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2661
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2662
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2663 var rneedsContext = jQuery.expr.match.needsContext;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2664
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2665 var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2666
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2667
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2668
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2669 var risSimple = /^.[^:#\[\.,]*$/;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2670
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2671 // Implement the identical functionality for filter and not
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2672 function winnow( elements, qualifier, not ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2673 if ( jQuery.isFunction( qualifier ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2674 return jQuery.grep( elements, function( elem, i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2675 /* jshint -W018 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2676 return !!qualifier.call( elem, i, elem ) !== not;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2677 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2678
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2679 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2680
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2681 if ( qualifier.nodeType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2682 return jQuery.grep( elements, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2683 return ( elem === qualifier ) !== not;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2684 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2685
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2686 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2687
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2688 if ( typeof qualifier === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2689 if ( risSimple.test( qualifier ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2690 return jQuery.filter( qualifier, elements, not );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2691 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2692
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2693 qualifier = jQuery.filter( qualifier, elements );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2694 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2695
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2696 return jQuery.grep( elements, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2697 return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2698 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2699 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2700
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2701 jQuery.filter = function( expr, elems, not ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2702 var elem = elems[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2703
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2704 if ( not ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2705 expr = ":not(" + expr + ")";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2706 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2707
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2708 return elems.length === 1 && elem.nodeType === 1 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2709 jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2710 jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2711 return elem.nodeType === 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2712 }));
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2713 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2714
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2715 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2716 find: function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2717 var i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2718 ret = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2719 self = this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2720 len = self.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2721
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2722 if ( typeof selector !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2723 return this.pushStack( jQuery( selector ).filter(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2724 for ( i = 0; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2725 if ( jQuery.contains( self[ i ], this ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2726 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2727 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2728 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2729 }) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2730 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2731
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2732 for ( i = 0; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2733 jQuery.find( selector, self[ i ], ret );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2734 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2735
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2736 // Needed because $( selector, context ) becomes $( context ).find( selector )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2737 ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2738 ret.selector = this.selector ? this.selector + " " + selector : selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2739 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2740 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2741 filter: function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2742 return this.pushStack( winnow(this, selector || [], false) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2743 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2744 not: function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2745 return this.pushStack( winnow(this, selector || [], true) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2746 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2747 is: function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2748 return !!winnow(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2749 this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2750
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2751 // If this is a positional/relative selector, check membership in the returned set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2752 // so $("p:first").is("p:last") won't return true for a doc with two "p".
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2753 typeof selector === "string" && rneedsContext.test( selector ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2754 jQuery( selector ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2755 selector || [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2756 false
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2757 ).length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2758 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2759 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2760
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2761
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2762 // Initialize a jQuery object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2763
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2764
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2765 // A central reference to the root jQuery(document)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2766 var rootjQuery,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2767
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2768 // Use the correct document accordingly with window argument (sandbox)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2769 document = window.document,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2770
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2771 // A simple way to check for HTML strings
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2772 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2773 // Strict HTML recognition (#11290: must start with <)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2774 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2775
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2776 init = jQuery.fn.init = function( selector, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2777 var match, elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2778
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2779 // HANDLE: $(""), $(null), $(undefined), $(false)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2780 if ( !selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2781 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2782 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2783
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2784 // Handle HTML strings
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2785 if ( typeof selector === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2786 if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2787 // Assume that strings that start and end with <> are HTML and skip the regex check
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2788 match = [ null, selector, null ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2789
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2790 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2791 match = rquickExpr.exec( selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2792 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2793
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2794 // Match html or make sure no context is specified for #id
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2795 if ( match && (match[1] || !context) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2796
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2797 // HANDLE: $(html) -> $(array)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2798 if ( match[1] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2799 context = context instanceof jQuery ? context[0] : context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2800
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2801 // scripts is true for back-compat
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2802 // Intentionally let the error be thrown if parseHTML is not present
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2803 jQuery.merge( this, jQuery.parseHTML(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2804 match[1],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2805 context && context.nodeType ? context.ownerDocument || context : document,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2806 true
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2807 ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2808
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2809 // HANDLE: $(html, props)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2810 if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2811 for ( match in context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2812 // Properties of context are called as methods if possible
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2813 if ( jQuery.isFunction( this[ match ] ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2814 this[ match ]( context[ match ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2815
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2816 // ...and otherwise set as attributes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2817 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2818 this.attr( match, context[ match ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2819 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2820 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2821 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2822
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2823 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2824
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2825 // HANDLE: $(#id)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2826 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2827 elem = document.getElementById( match[2] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2828
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2829 // Check parentNode to catch when Blackberry 4.6 returns
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2830 // nodes that are no longer in the document #6963
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2831 if ( elem && elem.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2832 // Handle the case where IE and Opera return items
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2833 // by name instead of ID
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2834 if ( elem.id !== match[2] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2835 return rootjQuery.find( selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2836 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2837
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2838 // Otherwise, we inject the element directly into the jQuery object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2839 this.length = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2840 this[0] = elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2841 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2842
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2843 this.context = document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2844 this.selector = selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2845 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2846 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2847
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2848 // HANDLE: $(expr, $(...))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2849 } else if ( !context || context.jquery ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2850 return ( context || rootjQuery ).find( selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2851
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2852 // HANDLE: $(expr, context)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2853 // (which is just equivalent to: $(context).find(expr)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2854 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2855 return this.constructor( context ).find( selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2856 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2857
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2858 // HANDLE: $(DOMElement)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2859 } else if ( selector.nodeType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2860 this.context = this[0] = selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2861 this.length = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2862 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2863
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2864 // HANDLE: $(function)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2865 // Shortcut for document ready
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2866 } else if ( jQuery.isFunction( selector ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2867 return typeof rootjQuery.ready !== "undefined" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2868 rootjQuery.ready( selector ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2869 // Execute immediately if ready is not present
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2870 selector( jQuery );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2871 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2872
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2873 if ( selector.selector !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2874 this.selector = selector.selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2875 this.context = selector.context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2876 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2877
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2878 return jQuery.makeArray( selector, this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2879 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2880
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2881 // Give the init function the jQuery prototype for later instantiation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2882 init.prototype = jQuery.fn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2883
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2884 // Initialize central reference
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2885 rootjQuery = jQuery( document );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2886
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2887
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2888 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2889 // methods guaranteed to produce a unique set when starting from a unique set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2890 guaranteedUnique = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2891 children: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2892 contents: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2893 next: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2894 prev: true
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2895 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2896
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2897 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2898 dir: function( elem, dir, until ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2899 var matched = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2900 cur = elem[ dir ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2901
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2902 while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2903 if ( cur.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2904 matched.push( cur );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2905 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2906 cur = cur[dir];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2907 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2908 return matched;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2909 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2910
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2911 sibling: function( n, elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2912 var r = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2913
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2914 for ( ; n; n = n.nextSibling ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2915 if ( n.nodeType === 1 && n !== elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2916 r.push( n );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2917 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2918 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2919
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2920 return r;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2921 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2922 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2923
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2924 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2925 has: function( target ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2926 var i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2927 targets = jQuery( target, this ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2928 len = targets.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2929
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2930 return this.filter(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2931 for ( i = 0; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2932 if ( jQuery.contains( this, targets[i] ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2933 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2934 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2935 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2936 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2937 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2938
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2939 closest: function( selectors, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2940 var cur,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2941 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2942 l = this.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2943 matched = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2944 pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2945 jQuery( selectors, context || this.context ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2946 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2947
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2948 for ( ; i < l; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2949 for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2950 // Always skip document fragments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2951 if ( cur.nodeType < 11 && (pos ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2952 pos.index(cur) > -1 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2953
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2954 // Don't pass non-elements to Sizzle
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2955 cur.nodeType === 1 &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2956 jQuery.find.matchesSelector(cur, selectors)) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2957
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2958 matched.push( cur );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2959 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2960 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2961 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2962 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2963
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2964 return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2965 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2966
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2967 // Determine the position of an element within
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2968 // the matched set of elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2969 index: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2970
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2971 // No argument, return index in parent
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2972 if ( !elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2973 return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2974 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2975
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2976 // index in selector
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2977 if ( typeof elem === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2978 return jQuery.inArray( this[0], jQuery( elem ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2979 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2980
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2981 // Locate the position of the desired element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2982 return jQuery.inArray(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2983 // If it receives a jQuery object, the first element is used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2984 elem.jquery ? elem[0] : elem, this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2985 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2986
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2987 add: function( selector, context ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2988 return this.pushStack(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2989 jQuery.unique(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2990 jQuery.merge( this.get(), jQuery( selector, context ) )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2991 )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2992 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2993 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2994
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2995 addBack: function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2996 return this.add( selector == null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2997 this.prevObject : this.prevObject.filter(selector)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2998 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
2999 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3000 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3001
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3002 function sibling( cur, dir ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3003 do {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3004 cur = cur[ dir ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3005 } while ( cur && cur.nodeType !== 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3006
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3007 return cur;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3008 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3009
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3010 jQuery.each({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3011 parent: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3012 var parent = elem.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3013 return parent && parent.nodeType !== 11 ? parent : null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3014 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3015 parents: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3016 return jQuery.dir( elem, "parentNode" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3017 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3018 parentsUntil: function( elem, i, until ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3019 return jQuery.dir( elem, "parentNode", until );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3020 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3021 next: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3022 return sibling( elem, "nextSibling" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3023 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3024 prev: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3025 return sibling( elem, "previousSibling" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3026 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3027 nextAll: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3028 return jQuery.dir( elem, "nextSibling" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3029 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3030 prevAll: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3031 return jQuery.dir( elem, "previousSibling" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3032 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3033 nextUntil: function( elem, i, until ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3034 return jQuery.dir( elem, "nextSibling", until );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3035 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3036 prevUntil: function( elem, i, until ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3037 return jQuery.dir( elem, "previousSibling", until );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3038 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3039 siblings: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3040 return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3041 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3042 children: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3043 return jQuery.sibling( elem.firstChild );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3044 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3045 contents: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3046 return jQuery.nodeName( elem, "iframe" ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3047 elem.contentDocument || elem.contentWindow.document :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3048 jQuery.merge( [], elem.childNodes );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3049 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3050 }, function( name, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3051 jQuery.fn[ name ] = function( until, selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3052 var ret = jQuery.map( this, fn, until );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3053
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3054 if ( name.slice( -5 ) !== "Until" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3055 selector = until;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3056 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3057
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3058 if ( selector && typeof selector === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3059 ret = jQuery.filter( selector, ret );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3060 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3061
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3062 if ( this.length > 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3063 // Remove duplicates
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3064 if ( !guaranteedUnique[ name ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3065 ret = jQuery.unique( ret );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3066 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3067
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3068 // Reverse order for parents* and prev-derivatives
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3069 if ( rparentsprev.test( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3070 ret = ret.reverse();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3071 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3072 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3073
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3074 return this.pushStack( ret );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3075 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3076 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3077 var rnotwhite = (/\S+/g);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3078
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3079
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3080
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3081 // String to Object options format cache
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3082 var optionsCache = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3083
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3084 // Convert String-formatted options into Object-formatted ones and store in cache
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3085 function createOptions( options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3086 var object = optionsCache[ options ] = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3087 jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3088 object[ flag ] = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3089 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3090 return object;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3091 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3092
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3093 /*
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3094 * Create a callback list using the following parameters:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3095 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3096 * options: an optional list of space-separated options that will change how
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3097 * the callback list behaves or a more traditional option object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3098 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3099 * By default a callback list will act like an event callback list and can be
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3100 * "fired" multiple times.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3101 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3102 * Possible options:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3103 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3104 * once: will ensure the callback list can only be fired once (like a Deferred)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3105 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3106 * memory: will keep track of previous values and will call any callback added
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3107 * after the list has been fired right away with the latest "memorized"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3108 * values (like a Deferred)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3109 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3110 * unique: will ensure a callback can only be added once (no duplicate in the list)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3111 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3112 * stopOnFalse: interrupt callings when a callback returns false
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3113 *
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3114 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3115 jQuery.Callbacks = function( options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3116
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3117 // Convert options from String-formatted to Object-formatted if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3118 // (we check in cache first)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3119 options = typeof options === "string" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3120 ( optionsCache[ options ] || createOptions( options ) ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3121 jQuery.extend( {}, options );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3122
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3123 var // Flag to know if list is currently firing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3124 firing,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3125 // Last fire value (for non-forgettable lists)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3126 memory,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3127 // Flag to know if list was already fired
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3128 fired,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3129 // End of the loop when firing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3130 firingLength,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3131 // Index of currently firing callback (modified by remove if needed)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3132 firingIndex,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3133 // First callback to fire (used internally by add and fireWith)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3134 firingStart,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3135 // Actual callback list
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3136 list = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3137 // Stack of fire calls for repeatable lists
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3138 stack = !options.once && [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3139 // Fire callbacks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3140 fire = function( data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3141 memory = options.memory && data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3142 fired = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3143 firingIndex = firingStart || 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3144 firingStart = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3145 firingLength = list.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3146 firing = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3147 for ( ; list && firingIndex < firingLength; firingIndex++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3148 if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3149 memory = false; // To prevent further calls using add
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3150 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3151 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3152 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3153 firing = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3154 if ( list ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3155 if ( stack ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3156 if ( stack.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3157 fire( stack.shift() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3158 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3159 } else if ( memory ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3160 list = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3161 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3162 self.disable();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3163 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3164 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3165 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3166 // Actual Callbacks object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3167 self = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3168 // Add a callback or a collection of callbacks to the list
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3169 add: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3170 if ( list ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3171 // First, we save the current length
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3172 var start = list.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3173 (function add( args ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3174 jQuery.each( args, function( _, arg ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3175 var type = jQuery.type( arg );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3176 if ( type === "function" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3177 if ( !options.unique || !self.has( arg ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3178 list.push( arg );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3179 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3180 } else if ( arg && arg.length && type !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3181 // Inspect recursively
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3182 add( arg );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3183 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3184 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3185 })( arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3186 // Do we need to add the callbacks to the
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3187 // current firing batch?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3188 if ( firing ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3189 firingLength = list.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3190 // With memory, if we're not firing then
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3191 // we should call right away
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3192 } else if ( memory ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3193 firingStart = start;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3194 fire( memory );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3195 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3196 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3197 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3198 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3199 // Remove a callback from the list
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3200 remove: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3201 if ( list ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3202 jQuery.each( arguments, function( _, arg ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3203 var index;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3204 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3205 list.splice( index, 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3206 // Handle firing indexes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3207 if ( firing ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3208 if ( index <= firingLength ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3209 firingLength--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3210 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3211 if ( index <= firingIndex ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3212 firingIndex--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3213 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3214 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3215 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3216 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3217 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3218 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3219 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3220 // Check if a given callback is in the list.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3221 // If no argument is given, return whether or not list has callbacks attached.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3222 has: function( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3223 return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3224 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3225 // Remove all callbacks from the list
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3226 empty: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3227 list = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3228 firingLength = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3229 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3230 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3231 // Have the list do nothing anymore
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3232 disable: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3233 list = stack = memory = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3234 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3235 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3236 // Is it disabled?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3237 disabled: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3238 return !list;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3239 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3240 // Lock the list in its current state
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3241 lock: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3242 stack = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3243 if ( !memory ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3244 self.disable();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3245 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3246 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3247 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3248 // Is it locked?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3249 locked: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3250 return !stack;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3251 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3252 // Call all callbacks with the given context and arguments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3253 fireWith: function( context, args ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3254 if ( list && ( !fired || stack ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3255 args = args || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3256 args = [ context, args.slice ? args.slice() : args ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3257 if ( firing ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3258 stack.push( args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3259 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3260 fire( args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3261 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3262 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3263 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3264 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3265 // Call all the callbacks with the given arguments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3266 fire: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3267 self.fireWith( this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3268 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3269 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3270 // To know if the callbacks have already been called at least once
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3271 fired: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3272 return !!fired;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3273 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3274 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3275
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3276 return self;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3277 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3278
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3279
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3280 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3281
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3282 Deferred: function( func ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3283 var tuples = [
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3284 // action, add listener, listener list, final state
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3285 [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3286 [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3287 [ "notify", "progress", jQuery.Callbacks("memory") ]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3288 ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3289 state = "pending",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3290 promise = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3291 state: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3292 return state;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3293 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3294 always: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3295 deferred.done( arguments ).fail( arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3296 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3297 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3298 then: function( /* fnDone, fnFail, fnProgress */ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3299 var fns = arguments;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3300 return jQuery.Deferred(function( newDefer ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3301 jQuery.each( tuples, function( i, tuple ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3302 var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3303 // deferred[ done | fail | progress ] for forwarding actions to newDefer
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3304 deferred[ tuple[1] ](function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3305 var returned = fn && fn.apply( this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3306 if ( returned && jQuery.isFunction( returned.promise ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3307 returned.promise()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3308 .done( newDefer.resolve )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3309 .fail( newDefer.reject )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3310 .progress( newDefer.notify );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3311 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3312 newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3313 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3314 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3315 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3316 fns = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3317 }).promise();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3318 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3319 // Get a promise for this deferred
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3320 // If obj is provided, the promise aspect is added to the object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3321 promise: function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3322 return obj != null ? jQuery.extend( obj, promise ) : promise;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3323 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3324 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3325 deferred = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3326
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3327 // Keep pipe for back-compat
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3328 promise.pipe = promise.then;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3329
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3330 // Add list-specific methods
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3331 jQuery.each( tuples, function( i, tuple ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3332 var list = tuple[ 2 ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3333 stateString = tuple[ 3 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3334
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3335 // promise[ done | fail | progress ] = list.add
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3336 promise[ tuple[1] ] = list.add;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3337
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3338 // Handle state
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3339 if ( stateString ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3340 list.add(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3341 // state = [ resolved | rejected ]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3342 state = stateString;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3343
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3344 // [ reject_list | resolve_list ].disable; progress_list.lock
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3345 }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3346 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3347
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3348 // deferred[ resolve | reject | notify ]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3349 deferred[ tuple[0] ] = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3350 deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3351 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3352 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3353 deferred[ tuple[0] + "With" ] = list.fireWith;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3354 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3355
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3356 // Make the deferred a promise
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3357 promise.promise( deferred );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3358
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3359 // Call given func if any
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3360 if ( func ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3361 func.call( deferred, deferred );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3362 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3363
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3364 // All done!
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3365 return deferred;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3366 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3367
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3368 // Deferred helper
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3369 when: function( subordinate /* , ..., subordinateN */ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3370 var i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3371 resolveValues = slice.call( arguments ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3372 length = resolveValues.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3373
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3374 // the count of uncompleted subordinates
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3375 remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3376
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3377 // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3378 deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3379
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3380 // Update function for both resolve and progress values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3381 updateFunc = function( i, contexts, values ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3382 return function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3383 contexts[ i ] = this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3384 values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3385 if ( values === progressValues ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3386 deferred.notifyWith( contexts, values );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3387
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3388 } else if ( !(--remaining) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3389 deferred.resolveWith( contexts, values );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3390 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3391 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3392 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3393
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3394 progressValues, progressContexts, resolveContexts;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3395
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3396 // add listeners to Deferred subordinates; treat others as resolved
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3397 if ( length > 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3398 progressValues = new Array( length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3399 progressContexts = new Array( length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3400 resolveContexts = new Array( length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3401 for ( ; i < length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3402 if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3403 resolveValues[ i ].promise()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3404 .done( updateFunc( i, resolveContexts, resolveValues ) )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3405 .fail( deferred.reject )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3406 .progress( updateFunc( i, progressContexts, progressValues ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3407 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3408 --remaining;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3409 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3410 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3411 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3412
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3413 // if we're not waiting on anything, resolve the master
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3414 if ( !remaining ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3415 deferred.resolveWith( resolveContexts, resolveValues );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3416 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3417
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3418 return deferred.promise();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3419 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3420 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3421
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3422
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3423 // The deferred used on DOM ready
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3424 var readyList;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3425
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3426 jQuery.fn.ready = function( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3427 // Add the callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3428 jQuery.ready.promise().done( fn );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3429
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3430 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3431 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3432
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3433 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3434 // Is the DOM ready to be used? Set to true once it occurs.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3435 isReady: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3436
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3437 // A counter to track how many items to wait for before
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3438 // the ready event fires. See #6781
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3439 readyWait: 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3440
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3441 // Hold (or release) the ready event
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3442 holdReady: function( hold ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3443 if ( hold ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3444 jQuery.readyWait++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3445 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3446 jQuery.ready( true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3447 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3448 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3449
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3450 // Handle when the DOM is ready
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3451 ready: function( wait ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3452
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3453 // Abort if there are pending holds or we're already ready
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3454 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3455 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3456 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3457
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3458 // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3459 if ( !document.body ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3460 return setTimeout( jQuery.ready );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3461 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3462
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3463 // Remember that the DOM is ready
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3464 jQuery.isReady = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3465
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3466 // If a normal DOM Ready event fired, decrement, and wait if need be
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3467 if ( wait !== true && --jQuery.readyWait > 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3468 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3469 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3470
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3471 // If there are functions bound, to execute
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3472 readyList.resolveWith( document, [ jQuery ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3473
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3474 // Trigger any bound ready events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3475 if ( jQuery.fn.triggerHandler ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3476 jQuery( document ).triggerHandler( "ready" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3477 jQuery( document ).off( "ready" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3478 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3479 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3480 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3481
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3482 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3483 * Clean-up method for dom ready events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3484 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3485 function detach() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3486 if ( document.addEventListener ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3487 document.removeEventListener( "DOMContentLoaded", completed, false );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3488 window.removeEventListener( "load", completed, false );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3489
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3490 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3491 document.detachEvent( "onreadystatechange", completed );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3492 window.detachEvent( "onload", completed );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3493 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3494 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3495
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3496 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3497 * The ready event handler and self cleanup method
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3498 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3499 function completed() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3500 // readyState === "complete" is good enough for us to call the dom ready in oldIE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3501 if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3502 detach();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3503 jQuery.ready();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3504 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3505 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3506
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3507 jQuery.ready.promise = function( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3508 if ( !readyList ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3509
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3510 readyList = jQuery.Deferred();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3511
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3512 // Catch cases where $(document).ready() is called after the browser event has already occurred.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3513 // we once tried to use readyState "interactive" here, but it caused issues like the one
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3514 // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3515 if ( document.readyState === "complete" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3516 // Handle it asynchronously to allow scripts the opportunity to delay ready
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3517 setTimeout( jQuery.ready );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3518
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3519 // Standards-based browsers support DOMContentLoaded
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3520 } else if ( document.addEventListener ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3521 // Use the handy event callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3522 document.addEventListener( "DOMContentLoaded", completed, false );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3523
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3524 // A fallback to window.onload, that will always work
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3525 window.addEventListener( "load", completed, false );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3526
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3527 // If IE event model is used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3528 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3529 // Ensure firing before onload, maybe late but safe also for iframes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3530 document.attachEvent( "onreadystatechange", completed );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3531
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3532 // A fallback to window.onload, that will always work
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3533 window.attachEvent( "onload", completed );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3534
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3535 // If IE and not a frame
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3536 // continually check to see if the document is ready
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3537 var top = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3538
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3539 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3540 top = window.frameElement == null && document.documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3541 } catch(e) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3542
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3543 if ( top && top.doScroll ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3544 (function doScrollCheck() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3545 if ( !jQuery.isReady ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3546
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3547 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3548 // Use the trick by Diego Perini
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3549 // http://javascript.nwbox.com/IEContentLoaded/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3550 top.doScroll("left");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3551 } catch(e) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3552 return setTimeout( doScrollCheck, 50 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3553 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3554
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3555 // detach all dom ready events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3556 detach();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3557
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3558 // and execute any waiting functions
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3559 jQuery.ready();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3560 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3561 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3562 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3563 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3564 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3565 return readyList.promise( obj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3566 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3567
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3568
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3569 var strundefined = typeof undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3570
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3571
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3572
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3573 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3574 // Iteration over object's inherited properties before its own
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3575 var i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3576 for ( i in jQuery( support ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3577 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3578 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3579 support.ownLast = i !== "0";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3580
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3581 // Note: most support tests are defined in their respective modules.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3582 // false until the test is run
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3583 support.inlineBlockNeedsLayout = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3584
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3585 // Execute ASAP in case we need to set body.style.zoom
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3586 jQuery(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3587 // Minified: var a,b,c,d
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3588 var val, div, body, container;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3589
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3590 body = document.getElementsByTagName( "body" )[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3591 if ( !body || !body.style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3592 // Return for frameset docs that don't have a body
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3593 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3594 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3595
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3596 // Setup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3597 div = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3598 container = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3599 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3600 body.appendChild( container ).appendChild( div );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3601
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3602 if ( typeof div.style.zoom !== strundefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3603 // Support: IE<8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3604 // Check if natively block-level elements act like inline-block
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3605 // elements when setting their display to 'inline' and giving
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3606 // them layout
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3607 div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3608
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3609 support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3610 if ( val ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3611 // Prevent IE 6 from affecting layout for positioned elements #11048
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3612 // Prevent IE from shrinking the body in IE 7 mode #12869
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3613 // Support: IE<8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3614 body.style.zoom = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3615 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3616 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3617
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3618 body.removeChild( container );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3619 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3620
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3621
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3622
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3623
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3624 (function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3625 var div = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3626
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3627 // Execute the test only if not already executed in another module.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3628 if (support.deleteExpando == null) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3629 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3630 support.deleteExpando = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3631 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3632 delete div.test;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3633 } catch( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3634 support.deleteExpando = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3635 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3636 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3637
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3638 // Null elements to avoid leaks in IE.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3639 div = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3640 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3641
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3642
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3643 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3644 * Determines whether an object can have data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3645 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3646 jQuery.acceptData = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3647 var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3648 nodeType = +elem.nodeType || 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3649
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3650 // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3651 return nodeType !== 1 && nodeType !== 9 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3652 false :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3653
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3654 // Nodes accept data unless otherwise specified; rejection can be conditional
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3655 !noData || noData !== true && elem.getAttribute("classid") === noData;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3656 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3657
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3658
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3659 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3660 rmultiDash = /([A-Z])/g;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3661
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3662 function dataAttr( elem, key, data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3663 // If nothing was found internally, try to fetch any
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3664 // data from the HTML5 data-* attribute
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3665 if ( data === undefined && elem.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3666
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3667 var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3668
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3669 data = elem.getAttribute( name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3670
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3671 if ( typeof data === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3672 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3673 data = data === "true" ? true :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3674 data === "false" ? false :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3675 data === "null" ? null :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3676 // Only convert to a number if it doesn't change the string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3677 +data + "" === data ? +data :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3678 rbrace.test( data ) ? jQuery.parseJSON( data ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3679 data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3680 } catch( e ) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3681
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3682 // Make sure we set the data so it isn't changed later
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3683 jQuery.data( elem, key, data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3684
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3685 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3686 data = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3687 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3688 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3689
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3690 return data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3691 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3692
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3693 // checks a cache object for emptiness
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3694 function isEmptyDataObject( obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3695 var name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3696 for ( name in obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3697
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3698 // if the public data object is empty, the private is still empty
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3699 if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3700 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3701 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3702 if ( name !== "toJSON" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3703 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3704 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3705 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3706
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3707 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3708 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3709
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3710 function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3711 if ( !jQuery.acceptData( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3712 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3713 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3714
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3715 var ret, thisCache,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3716 internalKey = jQuery.expando,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3717
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3718 // We have to handle DOM nodes and JS objects differently because IE6-7
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3719 // can't GC object references properly across the DOM-JS boundary
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3720 isNode = elem.nodeType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3721
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3722 // Only DOM nodes need the global jQuery cache; JS object data is
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3723 // attached directly to the object so GC can occur automatically
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3724 cache = isNode ? jQuery.cache : elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3725
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3726 // Only defining an ID for JS objects if its cache already exists allows
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3727 // the code to shortcut on the same path as a DOM node with no cache
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3728 id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3729
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3730 // Avoid doing any more work than we need to when trying to get data on an
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3731 // object that has no data at all
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3732 if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3733 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3734 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3735
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3736 if ( !id ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3737 // Only DOM nodes need a new unique ID for each element since their data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3738 // ends up in the global cache
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3739 if ( isNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3740 id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3741 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3742 id = internalKey;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3743 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3744 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3745
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3746 if ( !cache[ id ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3747 // Avoid exposing jQuery metadata on plain JS objects when the object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3748 // is serialized using JSON.stringify
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3749 cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3750 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3751
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3752 // An object can be passed to jQuery.data instead of a key/value pair; this gets
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3753 // shallow copied over onto the existing cache
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3754 if ( typeof name === "object" || typeof name === "function" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3755 if ( pvt ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3756 cache[ id ] = jQuery.extend( cache[ id ], name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3757 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3758 cache[ id ].data = jQuery.extend( cache[ id ].data, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3759 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3760 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3761
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3762 thisCache = cache[ id ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3763
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3764 // jQuery data() is stored in a separate object inside the object's internal data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3765 // cache in order to avoid key collisions between internal data and user-defined
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3766 // data.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3767 if ( !pvt ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3768 if ( !thisCache.data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3769 thisCache.data = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3770 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3771
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3772 thisCache = thisCache.data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3773 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3774
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3775 if ( data !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3776 thisCache[ jQuery.camelCase( name ) ] = data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3777 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3778
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3779 // Check for both converted-to-camel and non-converted data property names
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3780 // If a data property was specified
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3781 if ( typeof name === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3782
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3783 // First Try to find as-is property data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3784 ret = thisCache[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3785
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3786 // Test for null|undefined property data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3787 if ( ret == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3788
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3789 // Try to find the camelCased property
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3790 ret = thisCache[ jQuery.camelCase( name ) ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3791 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3792 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3793 ret = thisCache;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3794 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3795
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3796 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3797 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3798
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3799 function internalRemoveData( elem, name, pvt ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3800 if ( !jQuery.acceptData( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3801 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3802 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3803
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3804 var thisCache, i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3805 isNode = elem.nodeType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3806
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3807 // See jQuery.data for more information
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3808 cache = isNode ? jQuery.cache : elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3809 id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3810
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3811 // If there is already no cache entry for this object, there is no
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3812 // purpose in continuing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3813 if ( !cache[ id ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3814 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3815 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3816
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3817 if ( name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3818
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3819 thisCache = pvt ? cache[ id ] : cache[ id ].data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3820
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3821 if ( thisCache ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3822
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3823 // Support array or space separated string names for data keys
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3824 if ( !jQuery.isArray( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3825
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3826 // try the string as a key before any manipulation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3827 if ( name in thisCache ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3828 name = [ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3829 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3830
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3831 // split the camel cased version by spaces unless a key with the spaces exists
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3832 name = jQuery.camelCase( name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3833 if ( name in thisCache ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3834 name = [ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3835 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3836 name = name.split(" ");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3837 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3838 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3839 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3840 // If "name" is an array of keys...
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3841 // When data is initially created, via ("key", "val") signature,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3842 // keys will be converted to camelCase.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3843 // Since there is no way to tell _how_ a key was added, remove
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3844 // both plain key and camelCase key. #12786
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3845 // This will only penalize the array argument path.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3846 name = name.concat( jQuery.map( name, jQuery.camelCase ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3847 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3848
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3849 i = name.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3850 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3851 delete thisCache[ name[i] ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3852 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3853
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3854 // If there is no data left in the cache, we want to continue
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3855 // and let the cache object itself get destroyed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3856 if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3857 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3858 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3859 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3860 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3861
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3862 // See jQuery.data for more information
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3863 if ( !pvt ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3864 delete cache[ id ].data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3865
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3866 // Don't destroy the parent cache unless the internal data object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3867 // had been the only thing left in it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3868 if ( !isEmptyDataObject( cache[ id ] ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3869 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3870 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3871 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3872
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3873 // Destroy the cache
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3874 if ( isNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3875 jQuery.cleanData( [ elem ], true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3876
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3877 // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3878 /* jshint eqeqeq: false */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3879 } else if ( support.deleteExpando || cache != cache.window ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3880 /* jshint eqeqeq: true */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3881 delete cache[ id ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3882
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3883 // When all else fails, null
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3884 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3885 cache[ id ] = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3886 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3887 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3888
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3889 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3890 cache: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3891
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3892 // The following elements (space-suffixed to avoid Object.prototype collisions)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3893 // throw uncatchable exceptions if you attempt to set expando properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3894 noData: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3895 "applet ": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3896 "embed ": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3897 // ...but Flash objects (which have this classid) *can* handle expandos
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3898 "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3899 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3900
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3901 hasData: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3902 elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3903 return !!elem && !isEmptyDataObject( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3904 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3905
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3906 data: function( elem, name, data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3907 return internalData( elem, name, data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3908 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3909
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3910 removeData: function( elem, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3911 return internalRemoveData( elem, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3912 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3913
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3914 // For internal use only.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3915 _data: function( elem, name, data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3916 return internalData( elem, name, data, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3917 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3918
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3919 _removeData: function( elem, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3920 return internalRemoveData( elem, name, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3921 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3922 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3923
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3924 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3925 data: function( key, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3926 var i, name, data,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3927 elem = this[0],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3928 attrs = elem && elem.attributes;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3929
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3930 // Special expections of .data basically thwart jQuery.access,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3931 // so implement the relevant behavior ourselves
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3932
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3933 // Gets all values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3934 if ( key === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3935 if ( this.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3936 data = jQuery.data( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3937
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3938 if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3939 i = attrs.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3940 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3941
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3942 // Support: IE11+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3943 // The attrs elements can be null (#14894)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3944 if ( attrs[ i ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3945 name = attrs[ i ].name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3946 if ( name.indexOf( "data-" ) === 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3947 name = jQuery.camelCase( name.slice(5) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3948 dataAttr( elem, name, data[ name ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3949 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3950 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3951 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3952 jQuery._data( elem, "parsedAttrs", true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3953 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3954 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3955
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3956 return data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3957 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3958
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3959 // Sets multiple values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3960 if ( typeof key === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3961 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3962 jQuery.data( this, key );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3963 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3964 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3965
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3966 return arguments.length > 1 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3967
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3968 // Sets one value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3969 this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3970 jQuery.data( this, key, value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3971 }) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3972
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3973 // Gets one value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3974 // Try to fetch any internally stored data first
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3975 elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3976 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3977
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3978 removeData: function( key ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3979 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3980 jQuery.removeData( this, key );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3981 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3982 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3983 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3984
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3985
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3986 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3987 queue: function( elem, type, data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3988 var queue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3989
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3990 if ( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3991 type = ( type || "fx" ) + "queue";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3992 queue = jQuery._data( elem, type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3993
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3994 // Speed up dequeue by getting out quickly if this is just a lookup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3995 if ( data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3996 if ( !queue || jQuery.isArray(data) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3997 queue = jQuery._data( elem, type, jQuery.makeArray(data) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3998 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
3999 queue.push( data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4000 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4001 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4002 return queue || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4003 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4004 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4005
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4006 dequeue: function( elem, type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4007 type = type || "fx";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4008
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4009 var queue = jQuery.queue( elem, type ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4010 startLength = queue.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4011 fn = queue.shift(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4012 hooks = jQuery._queueHooks( elem, type ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4013 next = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4014 jQuery.dequeue( elem, type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4015 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4016
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4017 // If the fx queue is dequeued, always remove the progress sentinel
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4018 if ( fn === "inprogress" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4019 fn = queue.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4020 startLength--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4021 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4022
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4023 if ( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4024
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4025 // Add a progress sentinel to prevent the fx queue from being
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4026 // automatically dequeued
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4027 if ( type === "fx" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4028 queue.unshift( "inprogress" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4029 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4030
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4031 // clear up the last queue stop function
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4032 delete hooks.stop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4033 fn.call( elem, next, hooks );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4034 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4035
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4036 if ( !startLength && hooks ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4037 hooks.empty.fire();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4038 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4039 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4040
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4041 // not intended for public consumption - generates a queueHooks object, or returns the current one
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4042 _queueHooks: function( elem, type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4043 var key = type + "queueHooks";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4044 return jQuery._data( elem, key ) || jQuery._data( elem, key, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4045 empty: jQuery.Callbacks("once memory").add(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4046 jQuery._removeData( elem, type + "queue" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4047 jQuery._removeData( elem, key );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4048 })
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4049 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4050 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4051 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4052
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4053 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4054 queue: function( type, data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4055 var setter = 2;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4056
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4057 if ( typeof type !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4058 data = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4059 type = "fx";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4060 setter--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4061 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4062
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4063 if ( arguments.length < setter ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4064 return jQuery.queue( this[0], type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4065 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4066
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4067 return data === undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4068 this :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4069 this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4070 var queue = jQuery.queue( this, type, data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4071
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4072 // ensure a hooks for this queue
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4073 jQuery._queueHooks( this, type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4074
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4075 if ( type === "fx" && queue[0] !== "inprogress" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4076 jQuery.dequeue( this, type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4077 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4078 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4079 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4080 dequeue: function( type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4081 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4082 jQuery.dequeue( this, type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4083 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4084 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4085 clearQueue: function( type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4086 return this.queue( type || "fx", [] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4087 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4088 // Get a promise resolved when queues of a certain type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4089 // are emptied (fx is the type by default)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4090 promise: function( type, obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4091 var tmp,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4092 count = 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4093 defer = jQuery.Deferred(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4094 elements = this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4095 i = this.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4096 resolve = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4097 if ( !( --count ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4098 defer.resolveWith( elements, [ elements ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4099 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4100 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4101
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4102 if ( typeof type !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4103 obj = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4104 type = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4105 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4106 type = type || "fx";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4107
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4108 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4109 tmp = jQuery._data( elements[ i ], type + "queueHooks" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4110 if ( tmp && tmp.empty ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4111 count++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4112 tmp.empty.add( resolve );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4113 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4114 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4115 resolve();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4116 return defer.promise( obj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4117 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4118 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4119 var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4120
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4121 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4122
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4123 var isHidden = function( elem, el ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4124 // isHidden might be called from jQuery#filter function;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4125 // in that case, element will be second argument
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4126 elem = el || elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4127 return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4128 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4129
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4130
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4131
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4132 // Multifunctional method to get and set values of a collection
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4133 // The value/s can optionally be executed if it's a function
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4134 var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4135 var i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4136 length = elems.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4137 bulk = key == null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4138
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4139 // Sets many values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4140 if ( jQuery.type( key ) === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4141 chainable = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4142 for ( i in key ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4143 jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4144 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4145
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4146 // Sets one value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4147 } else if ( value !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4148 chainable = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4149
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4150 if ( !jQuery.isFunction( value ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4151 raw = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4152 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4153
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4154 if ( bulk ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4155 // Bulk operations run against the entire set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4156 if ( raw ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4157 fn.call( elems, value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4158 fn = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4159
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4160 // ...except when executing function values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4161 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4162 bulk = fn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4163 fn = function( elem, key, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4164 return bulk.call( jQuery( elem ), value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4165 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4166 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4167 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4168
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4169 if ( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4170 for ( ; i < length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4171 fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4172 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4173 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4174 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4175
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4176 return chainable ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4177 elems :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4178
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4179 // Gets
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4180 bulk ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4181 fn.call( elems ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4182 length ? fn( elems[0], key ) : emptyGet;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4183 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4184 var rcheckableType = (/^(?:checkbox|radio)$/i);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4185
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4186
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4187
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4188 (function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4189 // Minified: var a,b,c
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4190 var input = document.createElement( "input" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4191 div = document.createElement( "div" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4192 fragment = document.createDocumentFragment();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4193
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4194 // Setup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4195 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4196
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4197 // IE strips leading whitespace when .innerHTML is used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4198 support.leadingWhitespace = div.firstChild.nodeType === 3;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4199
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4200 // Make sure that tbody elements aren't automatically inserted
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4201 // IE will insert them into empty tables
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4202 support.tbody = !div.getElementsByTagName( "tbody" ).length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4203
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4204 // Make sure that link elements get serialized correctly by innerHTML
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4205 // This requires a wrapper element in IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4206 support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4207
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4208 // Makes sure cloning an html5 element does not cause problems
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4209 // Where outerHTML is undefined, this still works
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4210 support.html5Clone =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4211 document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4212
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4213 // Check if a disconnected checkbox will retain its checked
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4214 // value of true after appended to the DOM (IE6/7)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4215 input.type = "checkbox";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4216 input.checked = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4217 fragment.appendChild( input );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4218 support.appendChecked = input.checked;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4219
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4220 // Make sure textarea (and checkbox) defaultValue is properly cloned
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4221 // Support: IE6-IE11+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4222 div.innerHTML = "<textarea>x</textarea>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4223 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4224
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4225 // #11217 - WebKit loses check when the name is after the checked attribute
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4226 fragment.appendChild( div );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4227 div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4228
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4229 // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4230 // old WebKit doesn't clone checked state correctly in fragments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4231 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4232
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4233 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4234 // Opera does not clone events (and typeof div.attachEvent === undefined).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4235 // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4236 support.noCloneEvent = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4237 if ( div.attachEvent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4238 div.attachEvent( "onclick", function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4239 support.noCloneEvent = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4240 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4241
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4242 div.cloneNode( true ).click();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4243 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4244
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4245 // Execute the test only if not already executed in another module.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4246 if (support.deleteExpando == null) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4247 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4248 support.deleteExpando = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4249 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4250 delete div.test;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4251 } catch( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4252 support.deleteExpando = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4253 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4254 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4255 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4256
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4257
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4258 (function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4259 var i, eventName,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4260 div = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4261
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4262 // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4263 for ( i in { submit: true, change: true, focusin: true }) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4264 eventName = "on" + i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4265
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4266 if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4267 // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4268 div.setAttribute( eventName, "t" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4269 support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4270 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4271 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4272
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4273 // Null elements to avoid leaks in IE.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4274 div = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4275 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4276
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4277
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4278 var rformElems = /^(?:input|select|textarea)$/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4279 rkeyEvent = /^key/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4280 rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4281 rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4282 rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4283
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4284 function returnTrue() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4285 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4286 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4287
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4288 function returnFalse() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4289 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4290 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4291
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4292 function safeActiveElement() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4293 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4294 return document.activeElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4295 } catch ( err ) { }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4296 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4297
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4298 /*
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4299 * Helper functions for managing events -- not part of the public interface.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4300 * Props to Dean Edwards' addEvent library for many of the ideas.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4301 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4302 jQuery.event = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4303
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4304 global: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4305
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4306 add: function( elem, types, handler, data, selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4307 var tmp, events, t, handleObjIn,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4308 special, eventHandle, handleObj,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4309 handlers, type, namespaces, origType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4310 elemData = jQuery._data( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4311
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4312 // Don't attach events to noData or text/comment nodes (but allow plain objects)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4313 if ( !elemData ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4314 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4315 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4316
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4317 // Caller can pass in an object of custom data in lieu of the handler
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4318 if ( handler.handler ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4319 handleObjIn = handler;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4320 handler = handleObjIn.handler;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4321 selector = handleObjIn.selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4322 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4323
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4324 // Make sure that the handler has a unique ID, used to find/remove it later
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4325 if ( !handler.guid ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4326 handler.guid = jQuery.guid++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4327 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4328
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4329 // Init the element's event structure and main handler, if this is the first
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4330 if ( !(events = elemData.events) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4331 events = elemData.events = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4332 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4333 if ( !(eventHandle = elemData.handle) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4334 eventHandle = elemData.handle = function( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4335 // Discard the second event of a jQuery.event.trigger() and
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4336 // when an event is called after a page has unloaded
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4337 return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4338 jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4339 undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4340 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4341 // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4342 eventHandle.elem = elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4343 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4344
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4345 // Handle multiple events separated by a space
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4346 types = ( types || "" ).match( rnotwhite ) || [ "" ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4347 t = types.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4348 while ( t-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4349 tmp = rtypenamespace.exec( types[t] ) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4350 type = origType = tmp[1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4351 namespaces = ( tmp[2] || "" ).split( "." ).sort();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4352
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4353 // There *must* be a type, no attaching namespace-only handlers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4354 if ( !type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4355 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4356 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4357
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4358 // If event changes its type, use the special event handlers for the changed type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4359 special = jQuery.event.special[ type ] || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4360
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4361 // If selector defined, determine special event api type, otherwise given type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4362 type = ( selector ? special.delegateType : special.bindType ) || type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4363
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4364 // Update special based on newly reset type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4365 special = jQuery.event.special[ type ] || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4366
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4367 // handleObj is passed to all event handlers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4368 handleObj = jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4369 type: type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4370 origType: origType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4371 data: data,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4372 handler: handler,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4373 guid: handler.guid,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4374 selector: selector,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4375 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4376 namespace: namespaces.join(".")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4377 }, handleObjIn );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4378
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4379 // Init the event handler queue if we're the first
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4380 if ( !(handlers = events[ type ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4381 handlers = events[ type ] = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4382 handlers.delegateCount = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4383
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4384 // Only use addEventListener/attachEvent if the special events handler returns false
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4385 if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4386 // Bind the global event handler to the element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4387 if ( elem.addEventListener ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4388 elem.addEventListener( type, eventHandle, false );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4389
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4390 } else if ( elem.attachEvent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4391 elem.attachEvent( "on" + type, eventHandle );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4392 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4393 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4394 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4395
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4396 if ( special.add ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4397 special.add.call( elem, handleObj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4398
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4399 if ( !handleObj.handler.guid ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4400 handleObj.handler.guid = handler.guid;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4401 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4402 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4403
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4404 // Add to the element's handler list, delegates in front
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4405 if ( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4406 handlers.splice( handlers.delegateCount++, 0, handleObj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4407 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4408 handlers.push( handleObj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4409 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4410
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4411 // Keep track of which events have ever been used, for event optimization
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4412 jQuery.event.global[ type ] = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4413 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4414
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4415 // Nullify elem to prevent memory leaks in IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4416 elem = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4417 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4418
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4419 // Detach an event or set of events from an element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4420 remove: function( elem, types, handler, selector, mappedTypes ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4421 var j, handleObj, tmp,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4422 origCount, t, events,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4423 special, handlers, type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4424 namespaces, origType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4425 elemData = jQuery.hasData( elem ) && jQuery._data( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4426
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4427 if ( !elemData || !(events = elemData.events) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4428 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4429 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4430
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4431 // Once for each type.namespace in types; type may be omitted
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4432 types = ( types || "" ).match( rnotwhite ) || [ "" ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4433 t = types.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4434 while ( t-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4435 tmp = rtypenamespace.exec( types[t] ) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4436 type = origType = tmp[1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4437 namespaces = ( tmp[2] || "" ).split( "." ).sort();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4438
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4439 // Unbind all events (on this namespace, if provided) for the element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4440 if ( !type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4441 for ( type in events ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4442 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4443 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4444 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4445 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4446
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4447 special = jQuery.event.special[ type ] || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4448 type = ( selector ? special.delegateType : special.bindType ) || type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4449 handlers = events[ type ] || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4450 tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4451
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4452 // Remove matching events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4453 origCount = j = handlers.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4454 while ( j-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4455 handleObj = handlers[ j ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4456
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4457 if ( ( mappedTypes || origType === handleObj.origType ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4458 ( !handler || handler.guid === handleObj.guid ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4459 ( !tmp || tmp.test( handleObj.namespace ) ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4460 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4461 handlers.splice( j, 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4462
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4463 if ( handleObj.selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4464 handlers.delegateCount--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4465 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4466 if ( special.remove ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4467 special.remove.call( elem, handleObj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4468 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4469 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4470 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4471
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4472 // Remove generic event handler if we removed something and no more handlers exist
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4473 // (avoids potential for endless recursion during removal of special event handlers)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4474 if ( origCount && !handlers.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4475 if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4476 jQuery.removeEvent( elem, type, elemData.handle );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4477 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4478
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4479 delete events[ type ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4480 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4481 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4482
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4483 // Remove the expando if it's no longer used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4484 if ( jQuery.isEmptyObject( events ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4485 delete elemData.handle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4486
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4487 // removeData also checks for emptiness and clears the expando if empty
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4488 // so use it instead of delete
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4489 jQuery._removeData( elem, "events" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4490 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4491 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4492
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4493 trigger: function( event, data, elem, onlyHandlers ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4494 var handle, ontype, cur,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4495 bubbleType, special, tmp, i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4496 eventPath = [ elem || document ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4497 type = hasOwn.call( event, "type" ) ? event.type : event,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4498 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4499
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4500 cur = tmp = elem = elem || document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4501
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4502 // Don't do events on text and comment nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4503 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4504 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4505 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4506
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4507 // focus/blur morphs to focusin/out; ensure we're not firing them right now
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4508 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4509 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4510 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4511
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4512 if ( type.indexOf(".") >= 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4513 // Namespaced trigger; create a regexp to match event type in handle()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4514 namespaces = type.split(".");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4515 type = namespaces.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4516 namespaces.sort();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4517 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4518 ontype = type.indexOf(":") < 0 && "on" + type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4519
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4520 // Caller can pass in a jQuery.Event object, Object, or just an event type string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4521 event = event[ jQuery.expando ] ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4522 event :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4523 new jQuery.Event( type, typeof event === "object" && event );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4524
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4525 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4526 event.isTrigger = onlyHandlers ? 2 : 3;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4527 event.namespace = namespaces.join(".");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4528 event.namespace_re = event.namespace ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4529 new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4530 null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4531
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4532 // Clean up the event in case it is being reused
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4533 event.result = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4534 if ( !event.target ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4535 event.target = elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4536 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4537
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4538 // Clone any incoming data and prepend the event, creating the handler arg list
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4539 data = data == null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4540 [ event ] :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4541 jQuery.makeArray( data, [ event ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4542
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4543 // Allow special events to draw outside the lines
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4544 special = jQuery.event.special[ type ] || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4545 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4546 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4547 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4548
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4549 // Determine event propagation path in advance, per W3C events spec (#9951)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4550 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4551 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4552
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4553 bubbleType = special.delegateType || type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4554 if ( !rfocusMorph.test( bubbleType + type ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4555 cur = cur.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4556 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4557 for ( ; cur; cur = cur.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4558 eventPath.push( cur );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4559 tmp = cur;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4560 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4561
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4562 // Only add window if we got to document (e.g., not plain obj or detached DOM)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4563 if ( tmp === (elem.ownerDocument || document) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4564 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4565 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4566 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4567
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4568 // Fire handlers on the event path
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4569 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4570 while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4571
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4572 event.type = i > 1 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4573 bubbleType :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4574 special.bindType || type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4575
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4576 // jQuery handler
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4577 handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4578 if ( handle ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4579 handle.apply( cur, data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4580 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4581
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4582 // Native handler
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4583 handle = ontype && cur[ ontype ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4584 if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4585 event.result = handle.apply( cur, data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4586 if ( event.result === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4587 event.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4588 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4589 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4590 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4591 event.type = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4592
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4593 // If nobody prevented the default action, do it now
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4594 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4595
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4596 if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4597 jQuery.acceptData( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4598
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4599 // Call a native DOM method on the target with the same name name as the event.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4600 // Can't use an .isFunction() check here because IE6/7 fails that test.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4601 // Don't do default actions on window, that's where global variables be (#6170)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4602 if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4603
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4604 // Don't re-trigger an onFOO event when we call its FOO() method
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4605 tmp = elem[ ontype ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4606
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4607 if ( tmp ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4608 elem[ ontype ] = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4609 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4610
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4611 // Prevent re-triggering of the same event, since we already bubbled it above
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4612 jQuery.event.triggered = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4613 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4614 elem[ type ]();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4615 } catch ( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4616 // IE<9 dies on focus/blur to hidden element (#1486,#12518)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4617 // only reproducible on winXP IE8 native, not IE9 in IE8 mode
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4618 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4619 jQuery.event.triggered = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4620
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4621 if ( tmp ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4622 elem[ ontype ] = tmp;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4623 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4624 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4625 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4626 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4627
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4628 return event.result;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4629 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4630
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4631 dispatch: function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4632
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4633 // Make a writable jQuery.Event from the native event object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4634 event = jQuery.event.fix( event );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4635
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4636 var i, ret, handleObj, matched, j,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4637 handlerQueue = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4638 args = slice.call( arguments ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4639 handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4640 special = jQuery.event.special[ event.type ] || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4641
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4642 // Use the fix-ed jQuery.Event rather than the (read-only) native event
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4643 args[0] = event;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4644 event.delegateTarget = this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4645
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4646 // Call the preDispatch hook for the mapped type, and let it bail if desired
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4647 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4648 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4649 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4650
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4651 // Determine handlers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4652 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4653
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4654 // Run delegates first; they may want to stop propagation beneath us
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4655 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4656 while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4657 event.currentTarget = matched.elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4658
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4659 j = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4660 while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4661
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4662 // Triggered event must either 1) have no namespace, or
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4663 // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4664 if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4665
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4666 event.handleObj = handleObj;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4667 event.data = handleObj.data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4668
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4669 ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4670 .apply( matched.elem, args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4671
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4672 if ( ret !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4673 if ( (event.result = ret) === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4674 event.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4675 event.stopPropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4676 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4677 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4678 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4679 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4680 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4681
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4682 // Call the postDispatch hook for the mapped type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4683 if ( special.postDispatch ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4684 special.postDispatch.call( this, event );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4685 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4686
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4687 return event.result;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4688 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4689
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4690 handlers: function( event, handlers ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4691 var sel, handleObj, matches, i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4692 handlerQueue = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4693 delegateCount = handlers.delegateCount,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4694 cur = event.target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4695
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4696 // Find delegate handlers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4697 // Black-hole SVG <use> instance trees (#13180)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4698 // Avoid non-left-click bubbling in Firefox (#3861)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4699 if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4700
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4701 /* jshint eqeqeq: false */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4702 for ( ; cur != this; cur = cur.parentNode || this ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4703 /* jshint eqeqeq: true */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4704
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4705 // Don't check non-elements (#13208)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4706 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4707 if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4708 matches = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4709 for ( i = 0; i < delegateCount; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4710 handleObj = handlers[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4711
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4712 // Don't conflict with Object.prototype properties (#13203)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4713 sel = handleObj.selector + " ";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4714
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4715 if ( matches[ sel ] === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4716 matches[ sel ] = handleObj.needsContext ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4717 jQuery( sel, this ).index( cur ) >= 0 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4718 jQuery.find( sel, this, null, [ cur ] ).length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4719 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4720 if ( matches[ sel ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4721 matches.push( handleObj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4722 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4723 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4724 if ( matches.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4725 handlerQueue.push({ elem: cur, handlers: matches });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4726 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4727 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4728 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4729 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4730
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4731 // Add the remaining (directly-bound) handlers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4732 if ( delegateCount < handlers.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4733 handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4734 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4735
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4736 return handlerQueue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4737 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4738
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4739 fix: function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4740 if ( event[ jQuery.expando ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4741 return event;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4742 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4743
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4744 // Create a writable copy of the event object and normalize some properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4745 var i, prop, copy,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4746 type = event.type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4747 originalEvent = event,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4748 fixHook = this.fixHooks[ type ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4749
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4750 if ( !fixHook ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4751 this.fixHooks[ type ] = fixHook =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4752 rmouseEvent.test( type ) ? this.mouseHooks :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4753 rkeyEvent.test( type ) ? this.keyHooks :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4754 {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4755 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4756 copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4757
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4758 event = new jQuery.Event( originalEvent );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4759
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4760 i = copy.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4761 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4762 prop = copy[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4763 event[ prop ] = originalEvent[ prop ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4764 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4765
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4766 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4767 // Fix target property (#1925)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4768 if ( !event.target ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4769 event.target = originalEvent.srcElement || document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4770 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4771
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4772 // Support: Chrome 23+, Safari?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4773 // Target should not be a text node (#504, #13143)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4774 if ( event.target.nodeType === 3 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4775 event.target = event.target.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4776 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4777
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4778 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4779 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4780 event.metaKey = !!event.metaKey;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4781
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4782 return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4783 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4784
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4785 // Includes some event props shared by KeyEvent and MouseEvent
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4786 props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4787
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4788 fixHooks: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4789
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4790 keyHooks: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4791 props: "char charCode key keyCode".split(" "),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4792 filter: function( event, original ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4793
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4794 // Add which for key events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4795 if ( event.which == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4796 event.which = original.charCode != null ? original.charCode : original.keyCode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4797 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4798
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4799 return event;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4800 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4801 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4802
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4803 mouseHooks: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4804 props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4805 filter: function( event, original ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4806 var body, eventDoc, doc,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4807 button = original.button,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4808 fromElement = original.fromElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4809
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4810 // Calculate pageX/Y if missing and clientX/Y available
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4811 if ( event.pageX == null && original.clientX != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4812 eventDoc = event.target.ownerDocument || document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4813 doc = eventDoc.documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4814 body = eventDoc.body;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4815
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4816 event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4817 event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4818 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4819
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4820 // Add relatedTarget, if necessary
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4821 if ( !event.relatedTarget && fromElement ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4822 event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4823 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4824
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4825 // Add which for click: 1 === left; 2 === middle; 3 === right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4826 // Note: button is not normalized, so don't use it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4827 if ( !event.which && button !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4828 event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4829 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4830
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4831 return event;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4832 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4833 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4834
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4835 special: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4836 load: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4837 // Prevent triggered image.load events from bubbling to window.load
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4838 noBubble: true
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4839 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4840 focus: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4841 // Fire native event if possible so blur/focus sequence is correct
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4842 trigger: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4843 if ( this !== safeActiveElement() && this.focus ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4844 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4845 this.focus();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4846 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4847 } catch ( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4848 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4849 // If we error on focus to hidden element (#1486, #12518),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4850 // let .trigger() run the handlers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4851 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4852 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4853 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4854 delegateType: "focusin"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4855 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4856 blur: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4857 trigger: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4858 if ( this === safeActiveElement() && this.blur ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4859 this.blur();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4860 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4861 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4862 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4863 delegateType: "focusout"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4864 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4865 click: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4866 // For checkbox, fire native event so checked state will be right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4867 trigger: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4868 if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4869 this.click();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4870 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4871 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4872 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4873
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4874 // For cross-browser consistency, don't fire native .click() on links
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4875 _default: function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4876 return jQuery.nodeName( event.target, "a" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4877 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4878 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4879
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4880 beforeunload: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4881 postDispatch: function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4882
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4883 // Support: Firefox 20+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4884 // Firefox doesn't alert if the returnValue field is not set.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4885 if ( event.result !== undefined && event.originalEvent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4886 event.originalEvent.returnValue = event.result;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4887 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4888 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4889 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4890 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4891
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4892 simulate: function( type, elem, event, bubble ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4893 // Piggyback on a donor event to simulate a different one.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4894 // Fake originalEvent to avoid donor's stopPropagation, but if the
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4895 // simulated event prevents default then we do the same on the donor.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4896 var e = jQuery.extend(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4897 new jQuery.Event(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4898 event,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4899 {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4900 type: type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4901 isSimulated: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4902 originalEvent: {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4903 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4904 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4905 if ( bubble ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4906 jQuery.event.trigger( e, null, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4907 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4908 jQuery.event.dispatch.call( elem, e );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4909 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4910 if ( e.isDefaultPrevented() ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4911 event.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4912 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4913 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4914 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4915
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4916 jQuery.removeEvent = document.removeEventListener ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4917 function( elem, type, handle ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4918 if ( elem.removeEventListener ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4919 elem.removeEventListener( type, handle, false );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4920 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4921 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4922 function( elem, type, handle ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4923 var name = "on" + type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4924
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4925 if ( elem.detachEvent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4926
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4927 // #8545, #7054, preventing memory leaks for custom events in IE6-8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4928 // detachEvent needed property on element, by name of that event, to properly expose it to GC
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4929 if ( typeof elem[ name ] === strundefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4930 elem[ name ] = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4931 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4932
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4933 elem.detachEvent( name, handle );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4934 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4935 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4936
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4937 jQuery.Event = function( src, props ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4938 // Allow instantiation without the 'new' keyword
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4939 if ( !(this instanceof jQuery.Event) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4940 return new jQuery.Event( src, props );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4941 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4942
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4943 // Event object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4944 if ( src && src.type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4945 this.originalEvent = src;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4946 this.type = src.type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4947
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4948 // Events bubbling up the document may have been marked as prevented
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4949 // by a handler lower down the tree; reflect the correct value.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4950 this.isDefaultPrevented = src.defaultPrevented ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4951 src.defaultPrevented === undefined &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4952 // Support: IE < 9, Android < 4.0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4953 src.returnValue === false ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4954 returnTrue :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4955 returnFalse;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4956
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4957 // Event type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4958 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4959 this.type = src;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4960 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4961
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4962 // Put explicitly provided properties onto the event object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4963 if ( props ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4964 jQuery.extend( this, props );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4965 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4966
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4967 // Create a timestamp if incoming event doesn't have one
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4968 this.timeStamp = src && src.timeStamp || jQuery.now();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4969
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4970 // Mark it as fixed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4971 this[ jQuery.expando ] = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4972 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4973
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4974 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4975 // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4976 jQuery.Event.prototype = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4977 isDefaultPrevented: returnFalse,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4978 isPropagationStopped: returnFalse,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4979 isImmediatePropagationStopped: returnFalse,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4980
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4981 preventDefault: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4982 var e = this.originalEvent;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4983
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4984 this.isDefaultPrevented = returnTrue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4985 if ( !e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4986 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4987 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4988
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4989 // If preventDefault exists, run it on the original event
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4990 if ( e.preventDefault ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4991 e.preventDefault();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4992
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4993 // Support: IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4994 // Otherwise set the returnValue property of the original event to false
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4995 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4996 e.returnValue = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4997 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4998 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
4999 stopPropagation: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5000 var e = this.originalEvent;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5001
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5002 this.isPropagationStopped = returnTrue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5003 if ( !e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5004 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5005 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5006 // If stopPropagation exists, run it on the original event
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5007 if ( e.stopPropagation ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5008 e.stopPropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5009 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5010
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5011 // Support: IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5012 // Set the cancelBubble property of the original event to true
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5013 e.cancelBubble = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5014 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5015 stopImmediatePropagation: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5016 var e = this.originalEvent;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5017
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5018 this.isImmediatePropagationStopped = returnTrue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5019
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5020 if ( e && e.stopImmediatePropagation ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5021 e.stopImmediatePropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5022 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5023
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5024 this.stopPropagation();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5025 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5026 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5027
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5028 // Create mouseenter/leave events using mouseover/out and event-time checks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5029 jQuery.each({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5030 mouseenter: "mouseover",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5031 mouseleave: "mouseout",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5032 pointerenter: "pointerover",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5033 pointerleave: "pointerout"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5034 }, function( orig, fix ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5035 jQuery.event.special[ orig ] = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5036 delegateType: fix,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5037 bindType: fix,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5038
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5039 handle: function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5040 var ret,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5041 target = this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5042 related = event.relatedTarget,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5043 handleObj = event.handleObj;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5044
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5045 // For mousenter/leave call the handler if related is outside the target.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5046 // NB: No relatedTarget if the mouse left/entered the browser window
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5047 if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5048 event.type = handleObj.origType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5049 ret = handleObj.handler.apply( this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5050 event.type = fix;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5051 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5052 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5053 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5054 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5055 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5056
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5057 // IE submit delegation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5058 if ( !support.submitBubbles ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5059
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5060 jQuery.event.special.submit = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5061 setup: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5062 // Only need this for delegated form submit events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5063 if ( jQuery.nodeName( this, "form" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5064 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5065 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5066
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5067 // Lazy-add a submit handler when a descendant form may potentially be submitted
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5068 jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5069 // Node name check avoids a VML-related crash in IE (#9807)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5070 var elem = e.target,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5071 form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5072 if ( form && !jQuery._data( form, "submitBubbles" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5073 jQuery.event.add( form, "submit._submit", function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5074 event._submit_bubble = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5075 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5076 jQuery._data( form, "submitBubbles", true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5077 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5078 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5079 // return undefined since we don't need an event listener
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5080 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5081
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5082 postDispatch: function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5083 // If form was submitted by the user, bubble the event up the tree
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5084 if ( event._submit_bubble ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5085 delete event._submit_bubble;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5086 if ( this.parentNode && !event.isTrigger ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5087 jQuery.event.simulate( "submit", this.parentNode, event, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5088 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5089 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5090 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5091
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5092 teardown: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5093 // Only need this for delegated form submit events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5094 if ( jQuery.nodeName( this, "form" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5095 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5096 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5097
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5098 // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5099 jQuery.event.remove( this, "._submit" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5100 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5101 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5102 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5103
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5104 // IE change delegation and checkbox/radio fix
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5105 if ( !support.changeBubbles ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5106
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5107 jQuery.event.special.change = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5108
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5109 setup: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5110
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5111 if ( rformElems.test( this.nodeName ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5112 // IE doesn't fire change on a check/radio until blur; trigger it on click
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5113 // after a propertychange. Eat the blur-change in special.change.handle.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5114 // This still fires onchange a second time for check/radio after blur.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5115 if ( this.type === "checkbox" || this.type === "radio" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5116 jQuery.event.add( this, "propertychange._change", function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5117 if ( event.originalEvent.propertyName === "checked" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5118 this._just_changed = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5119 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5120 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5121 jQuery.event.add( this, "click._change", function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5122 if ( this._just_changed && !event.isTrigger ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5123 this._just_changed = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5124 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5125 // Allow triggered, simulated change events (#11500)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5126 jQuery.event.simulate( "change", this, event, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5127 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5128 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5129 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5130 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5131 // Delegated event; lazy-add a change handler on descendant inputs
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5132 jQuery.event.add( this, "beforeactivate._change", function( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5133 var elem = e.target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5134
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5135 if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5136 jQuery.event.add( elem, "change._change", function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5137 if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5138 jQuery.event.simulate( "change", this.parentNode, event, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5139 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5140 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5141 jQuery._data( elem, "changeBubbles", true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5142 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5143 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5144 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5145
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5146 handle: function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5147 var elem = event.target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5148
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5149 // Swallow native change events from checkbox/radio, we already triggered them above
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5150 if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5151 return event.handleObj.handler.apply( this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5152 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5153 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5154
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5155 teardown: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5156 jQuery.event.remove( this, "._change" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5157
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5158 return !rformElems.test( this.nodeName );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5159 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5160 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5161 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5162
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5163 // Create "bubbling" focus and blur events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5164 if ( !support.focusinBubbles ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5165 jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5166
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5167 // Attach a single capturing handler on the document while someone wants focusin/focusout
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5168 var handler = function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5169 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5170 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5171
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5172 jQuery.event.special[ fix ] = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5173 setup: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5174 var doc = this.ownerDocument || this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5175 attaches = jQuery._data( doc, fix );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5176
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5177 if ( !attaches ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5178 doc.addEventListener( orig, handler, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5179 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5180 jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5181 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5182 teardown: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5183 var doc = this.ownerDocument || this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5184 attaches = jQuery._data( doc, fix ) - 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5185
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5186 if ( !attaches ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5187 doc.removeEventListener( orig, handler, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5188 jQuery._removeData( doc, fix );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5189 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5190 jQuery._data( doc, fix, attaches );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5191 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5192 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5193 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5194 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5195 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5196
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5197 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5198
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5199 on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5200 var type, origFn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5201
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5202 // Types can be a map of types/handlers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5203 if ( typeof types === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5204 // ( types-Object, selector, data )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5205 if ( typeof selector !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5206 // ( types-Object, data )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5207 data = data || selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5208 selector = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5209 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5210 for ( type in types ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5211 this.on( type, selector, data, types[ type ], one );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5212 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5213 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5214 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5215
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5216 if ( data == null && fn == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5217 // ( types, fn )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5218 fn = selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5219 data = selector = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5220 } else if ( fn == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5221 if ( typeof selector === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5222 // ( types, selector, fn )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5223 fn = data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5224 data = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5225 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5226 // ( types, data, fn )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5227 fn = data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5228 data = selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5229 selector = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5230 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5231 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5232 if ( fn === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5233 fn = returnFalse;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5234 } else if ( !fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5235 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5236 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5237
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5238 if ( one === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5239 origFn = fn;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5240 fn = function( event ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5241 // Can use an empty set, since event contains the info
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5242 jQuery().off( event );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5243 return origFn.apply( this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5244 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5245 // Use same guid so caller can remove using origFn
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5246 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5247 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5248 return this.each( function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5249 jQuery.event.add( this, types, fn, data, selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5250 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5251 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5252 one: function( types, selector, data, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5253 return this.on( types, selector, data, fn, 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5254 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5255 off: function( types, selector, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5256 var handleObj, type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5257 if ( types && types.preventDefault && types.handleObj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5258 // ( event ) dispatched jQuery.Event
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5259 handleObj = types.handleObj;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5260 jQuery( types.delegateTarget ).off(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5261 handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5262 handleObj.selector,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5263 handleObj.handler
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5264 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5265 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5266 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5267 if ( typeof types === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5268 // ( types-object [, selector] )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5269 for ( type in types ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5270 this.off( type, selector, types[ type ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5271 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5272 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5273 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5274 if ( selector === false || typeof selector === "function" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5275 // ( types [, fn] )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5276 fn = selector;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5277 selector = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5278 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5279 if ( fn === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5280 fn = returnFalse;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5281 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5282 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5283 jQuery.event.remove( this, types, fn, selector );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5284 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5285 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5286
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5287 trigger: function( type, data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5288 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5289 jQuery.event.trigger( type, data, this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5290 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5291 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5292 triggerHandler: function( type, data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5293 var elem = this[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5294 if ( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5295 return jQuery.event.trigger( type, data, elem, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5296 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5297 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5298 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5299
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5300
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5301 function createSafeFragment( document ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5302 var list = nodeNames.split( "|" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5303 safeFrag = document.createDocumentFragment();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5304
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5305 if ( safeFrag.createElement ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5306 while ( list.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5307 safeFrag.createElement(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5308 list.pop()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5309 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5310 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5311 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5312 return safeFrag;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5313 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5314
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5315 var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5316 "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5317 rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5318 rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5319 rleadingWhitespace = /^\s+/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5320 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5321 rtagName = /<([\w:]+)/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5322 rtbody = /<tbody/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5323 rhtml = /<|&#?\w+;/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5324 rnoInnerhtml = /<(?:script|style|link)/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5325 // checked="checked" or checked
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5326 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5327 rscriptType = /^$|\/(?:java|ecma)script/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5328 rscriptTypeMasked = /^true\/(.*)/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5329 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5330
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5331 // We have to close these tags to support XHTML (#13200)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5332 wrapMap = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5333 option: [ 1, "<select multiple='multiple'>", "</select>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5334 legend: [ 1, "<fieldset>", "</fieldset>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5335 area: [ 1, "<map>", "</map>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5336 param: [ 1, "<object>", "</object>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5337 thead: [ 1, "<table>", "</table>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5338 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5339 col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5340 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5341
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5342 // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5343 // unless wrapped in a div with non-breaking characters in front of it.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5344 _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5345 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5346 safeFragment = createSafeFragment( document ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5347 fragmentDiv = safeFragment.appendChild( document.createElement("div") );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5348
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5349 wrapMap.optgroup = wrapMap.option;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5350 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5351 wrapMap.th = wrapMap.td;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5352
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5353 function getAll( context, tag ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5354 var elems, elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5355 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5356 found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5357 typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5358 undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5359
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5360 if ( !found ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5361 for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5362 if ( !tag || jQuery.nodeName( elem, tag ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5363 found.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5364 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5365 jQuery.merge( found, getAll( elem, tag ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5366 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5367 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5368 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5369
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5370 return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5371 jQuery.merge( [ context ], found ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5372 found;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5373 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5374
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5375 // Used in buildFragment, fixes the defaultChecked property
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5376 function fixDefaultChecked( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5377 if ( rcheckableType.test( elem.type ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5378 elem.defaultChecked = elem.checked;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5379 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5380 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5381
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5382 // Support: IE<8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5383 // Manipulating tables requires a tbody
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5384 function manipulationTarget( elem, content ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5385 return jQuery.nodeName( elem, "table" ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5386 jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5387
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5388 elem.getElementsByTagName("tbody")[0] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5389 elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5390 elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5391 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5392
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5393 // Replace/restore the type attribute of script elements for safe DOM manipulation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5394 function disableScript( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5395 elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5396 return elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5397 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5398 function restoreScript( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5399 var match = rscriptTypeMasked.exec( elem.type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5400 if ( match ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5401 elem.type = match[1];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5402 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5403 elem.removeAttribute("type");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5404 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5405 return elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5406 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5407
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5408 // Mark scripts as having already been evaluated
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5409 function setGlobalEval( elems, refElements ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5410 var elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5411 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5412 for ( ; (elem = elems[i]) != null; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5413 jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5414 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5415 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5416
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5417 function cloneCopyEvent( src, dest ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5418
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5419 if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5420 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5421 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5422
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5423 var type, i, l,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5424 oldData = jQuery._data( src ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5425 curData = jQuery._data( dest, oldData ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5426 events = oldData.events;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5427
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5428 if ( events ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5429 delete curData.handle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5430 curData.events = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5431
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5432 for ( type in events ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5433 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5434 jQuery.event.add( dest, type, events[ type ][ i ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5435 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5436 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5437 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5438
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5439 // make the cloned public data object a copy from the original
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5440 if ( curData.data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5441 curData.data = jQuery.extend( {}, curData.data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5442 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5443 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5444
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5445 function fixCloneNodeIssues( src, dest ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5446 var nodeName, e, data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5447
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5448 // We do not need to do anything for non-Elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5449 if ( dest.nodeType !== 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5450 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5451 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5452
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5453 nodeName = dest.nodeName.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5454
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5455 // IE6-8 copies events bound via attachEvent when using cloneNode.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5456 if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5457 data = jQuery._data( dest );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5458
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5459 for ( e in data.events ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5460 jQuery.removeEvent( dest, e, data.handle );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5461 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5462
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5463 // Event data gets referenced instead of copied if the expando gets copied too
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5464 dest.removeAttribute( jQuery.expando );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5465 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5466
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5467 // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5468 if ( nodeName === "script" && dest.text !== src.text ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5469 disableScript( dest ).text = src.text;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5470 restoreScript( dest );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5471
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5472 // IE6-10 improperly clones children of object elements using classid.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5473 // IE10 throws NoModificationAllowedError if parent is null, #12132.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5474 } else if ( nodeName === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5475 if ( dest.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5476 dest.outerHTML = src.outerHTML;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5477 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5478
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5479 // This path appears unavoidable for IE9. When cloning an object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5480 // element in IE9, the outerHTML strategy above is not sufficient.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5481 // If the src has innerHTML and the destination does not,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5482 // copy the src.innerHTML into the dest.innerHTML. #10324
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5483 if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5484 dest.innerHTML = src.innerHTML;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5485 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5486
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5487 } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5488 // IE6-8 fails to persist the checked state of a cloned checkbox
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5489 // or radio button. Worse, IE6-7 fail to give the cloned element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5490 // a checked appearance if the defaultChecked value isn't also set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5491
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5492 dest.defaultChecked = dest.checked = src.checked;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5493
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5494 // IE6-7 get confused and end up setting the value of a cloned
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5495 // checkbox/radio button to an empty string instead of "on"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5496 if ( dest.value !== src.value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5497 dest.value = src.value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5498 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5499
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5500 // IE6-8 fails to return the selected option to the default selected
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5501 // state when cloning options
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5502 } else if ( nodeName === "option" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5503 dest.defaultSelected = dest.selected = src.defaultSelected;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5504
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5505 // IE6-8 fails to set the defaultValue to the correct value when
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5506 // cloning other types of input fields
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5507 } else if ( nodeName === "input" || nodeName === "textarea" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5508 dest.defaultValue = src.defaultValue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5509 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5510 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5511
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5512 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5513 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5514 var destElements, node, clone, i, srcElements,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5515 inPage = jQuery.contains( elem.ownerDocument, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5516
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5517 if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5518 clone = elem.cloneNode( true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5519
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5520 // IE<=8 does not properly clone detached, unknown element nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5521 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5522 fragmentDiv.innerHTML = elem.outerHTML;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5523 fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5524 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5525
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5526 if ( (!support.noCloneEvent || !support.noCloneChecked) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5527 (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5528
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5529 // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5530 destElements = getAll( clone );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5531 srcElements = getAll( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5532
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5533 // Fix all IE cloning issues
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5534 for ( i = 0; (node = srcElements[i]) != null; ++i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5535 // Ensure that the destination node is not null; Fixes #9587
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5536 if ( destElements[i] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5537 fixCloneNodeIssues( node, destElements[i] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5538 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5539 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5540 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5541
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5542 // Copy the events from the original to the clone
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5543 if ( dataAndEvents ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5544 if ( deepDataAndEvents ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5545 srcElements = srcElements || getAll( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5546 destElements = destElements || getAll( clone );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5547
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5548 for ( i = 0; (node = srcElements[i]) != null; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5549 cloneCopyEvent( node, destElements[i] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5550 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5551 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5552 cloneCopyEvent( elem, clone );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5553 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5554 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5555
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5556 // Preserve script evaluation history
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5557 destElements = getAll( clone, "script" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5558 if ( destElements.length > 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5559 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5560 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5561
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5562 destElements = srcElements = node = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5563
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5564 // Return the cloned set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5565 return clone;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5566 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5567
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5568 buildFragment: function( elems, context, scripts, selection ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5569 var j, elem, contains,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5570 tmp, tag, tbody, wrap,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5571 l = elems.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5572
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5573 // Ensure a safe fragment
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5574 safe = createSafeFragment( context ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5575
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5576 nodes = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5577 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5578
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5579 for ( ; i < l; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5580 elem = elems[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5581
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5582 if ( elem || elem === 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5583
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5584 // Add nodes directly
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5585 if ( jQuery.type( elem ) === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5586 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5587
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5588 // Convert non-html into a text node
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5589 } else if ( !rhtml.test( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5590 nodes.push( context.createTextNode( elem ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5591
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5592 // Convert html into DOM nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5593 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5594 tmp = tmp || safe.appendChild( context.createElement("div") );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5595
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5596 // Deserialize a standard representation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5597 tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5598 wrap = wrapMap[ tag ] || wrapMap._default;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5599
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5600 tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5601
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5602 // Descend through wrappers to the right content
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5603 j = wrap[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5604 while ( j-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5605 tmp = tmp.lastChild;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5606 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5607
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5608 // Manually add leading whitespace removed by IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5609 if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5610 nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5611 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5612
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5613 // Remove IE's autoinserted <tbody> from table fragments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5614 if ( !support.tbody ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5615
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5616 // String was a <table>, *may* have spurious <tbody>
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5617 elem = tag === "table" && !rtbody.test( elem ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5618 tmp.firstChild :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5619
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5620 // String was a bare <thead> or <tfoot>
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5621 wrap[1] === "<table>" && !rtbody.test( elem ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5622 tmp :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5623 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5624
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5625 j = elem && elem.childNodes.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5626 while ( j-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5627 if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5628 elem.removeChild( tbody );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5629 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5630 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5631 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5632
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5633 jQuery.merge( nodes, tmp.childNodes );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5634
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5635 // Fix #12392 for WebKit and IE > 9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5636 tmp.textContent = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5637
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5638 // Fix #12392 for oldIE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5639 while ( tmp.firstChild ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5640 tmp.removeChild( tmp.firstChild );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5641 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5642
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5643 // Remember the top-level container for proper cleanup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5644 tmp = safe.lastChild;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5645 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5646 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5647 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5648
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5649 // Fix #11356: Clear elements from fragment
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5650 if ( tmp ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5651 safe.removeChild( tmp );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5652 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5653
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5654 // Reset defaultChecked for any radios and checkboxes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5655 // about to be appended to the DOM in IE 6/7 (#8060)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5656 if ( !support.appendChecked ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5657 jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5658 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5659
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5660 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5661 while ( (elem = nodes[ i++ ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5662
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5663 // #4087 - If origin and destination elements are the same, and this is
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5664 // that element, do not do anything
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5665 if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5666 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5667 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5668
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5669 contains = jQuery.contains( elem.ownerDocument, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5670
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5671 // Append to fragment
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5672 tmp = getAll( safe.appendChild( elem ), "script" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5673
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5674 // Preserve script evaluation history
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5675 if ( contains ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5676 setGlobalEval( tmp );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5677 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5678
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5679 // Capture executables
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5680 if ( scripts ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5681 j = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5682 while ( (elem = tmp[ j++ ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5683 if ( rscriptType.test( elem.type || "" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5684 scripts.push( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5685 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5686 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5687 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5688 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5689
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5690 tmp = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5691
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5692 return safe;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5693 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5694
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5695 cleanData: function( elems, /* internal */ acceptData ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5696 var elem, type, id, data,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5697 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5698 internalKey = jQuery.expando,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5699 cache = jQuery.cache,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5700 deleteExpando = support.deleteExpando,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5701 special = jQuery.event.special;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5702
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5703 for ( ; (elem = elems[i]) != null; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5704 if ( acceptData || jQuery.acceptData( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5705
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5706 id = elem[ internalKey ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5707 data = id && cache[ id ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5708
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5709 if ( data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5710 if ( data.events ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5711 for ( type in data.events ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5712 if ( special[ type ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5713 jQuery.event.remove( elem, type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5714
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5715 // This is a shortcut to avoid jQuery.event.remove's overhead
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5716 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5717 jQuery.removeEvent( elem, type, data.handle );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5718 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5719 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5720 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5721
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5722 // Remove cache only if it was not already removed by jQuery.event.remove
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5723 if ( cache[ id ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5724
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5725 delete cache[ id ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5726
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5727 // IE does not allow us to delete expando properties from nodes,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5728 // nor does it have a removeAttribute function on Document nodes;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5729 // we must handle all of these cases
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5730 if ( deleteExpando ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5731 delete elem[ internalKey ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5732
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5733 } else if ( typeof elem.removeAttribute !== strundefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5734 elem.removeAttribute( internalKey );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5735
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5736 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5737 elem[ internalKey ] = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5738 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5739
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5740 deletedIds.push( id );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5741 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5742 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5743 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5744 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5745 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5746 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5747
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5748 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5749 text: function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5750 return access( this, function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5751 return value === undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5752 jQuery.text( this ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5753 this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5754 }, null, value, arguments.length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5755 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5756
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5757 append: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5758 return this.domManip( arguments, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5759 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5760 var target = manipulationTarget( this, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5761 target.appendChild( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5762 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5763 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5764 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5765
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5766 prepend: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5767 return this.domManip( arguments, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5768 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5769 var target = manipulationTarget( this, elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5770 target.insertBefore( elem, target.firstChild );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5771 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5772 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5773 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5774
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5775 before: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5776 return this.domManip( arguments, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5777 if ( this.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5778 this.parentNode.insertBefore( elem, this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5779 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5780 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5781 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5782
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5783 after: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5784 return this.domManip( arguments, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5785 if ( this.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5786 this.parentNode.insertBefore( elem, this.nextSibling );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5787 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5788 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5789 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5790
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5791 remove: function( selector, keepData /* Internal Use Only */ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5792 var elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5793 elems = selector ? jQuery.filter( selector, this ) : this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5794 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5795
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5796 for ( ; (elem = elems[i]) != null; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5797
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5798 if ( !keepData && elem.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5799 jQuery.cleanData( getAll( elem ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5800 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5801
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5802 if ( elem.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5803 if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5804 setGlobalEval( getAll( elem, "script" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5805 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5806 elem.parentNode.removeChild( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5807 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5808 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5809
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5810 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5811 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5812
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5813 empty: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5814 var elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5815 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5816
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5817 for ( ; (elem = this[i]) != null; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5818 // Remove element nodes and prevent memory leaks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5819 if ( elem.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5820 jQuery.cleanData( getAll( elem, false ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5821 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5822
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5823 // Remove any remaining nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5824 while ( elem.firstChild ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5825 elem.removeChild( elem.firstChild );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5826 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5827
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5828 // If this is a select, ensure that it displays empty (#12336)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5829 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5830 if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5831 elem.options.length = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5832 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5833 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5834
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5835 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5836 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5837
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5838 clone: function( dataAndEvents, deepDataAndEvents ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5839 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5840 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5841
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5842 return this.map(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5843 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5844 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5845 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5846
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5847 html: function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5848 return access( this, function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5849 var elem = this[ 0 ] || {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5850 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5851 l = this.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5852
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5853 if ( value === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5854 return elem.nodeType === 1 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5855 elem.innerHTML.replace( rinlinejQuery, "" ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5856 undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5857 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5858
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5859 // See if we can take a shortcut and just use innerHTML
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5860 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5861 ( support.htmlSerialize || !rnoshimcache.test( value ) ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5862 ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5863 !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5864
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5865 value = value.replace( rxhtmlTag, "<$1></$2>" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5866
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5867 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5868 for (; i < l; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5869 // Remove element nodes and prevent memory leaks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5870 elem = this[i] || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5871 if ( elem.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5872 jQuery.cleanData( getAll( elem, false ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5873 elem.innerHTML = value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5874 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5875 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5876
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5877 elem = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5878
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5879 // If using innerHTML throws an exception, use the fallback method
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5880 } catch(e) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5881 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5882
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5883 if ( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5884 this.empty().append( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5885 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5886 }, null, value, arguments.length );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5887 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5888
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5889 replaceWith: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5890 var arg = arguments[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5891
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5892 // Make the changes, replacing each context element with the new content
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5893 this.domManip( arguments, function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5894 arg = this.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5895
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5896 jQuery.cleanData( getAll( this ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5897
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5898 if ( arg ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5899 arg.replaceChild( elem, this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5900 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5901 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5902
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5903 // Force removal if there was no new content (e.g., from empty arguments)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5904 return arg && (arg.length || arg.nodeType) ? this : this.remove();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5905 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5906
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5907 detach: function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5908 return this.remove( selector, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5909 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5910
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5911 domManip: function( args, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5912
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5913 // Flatten any nested arrays
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5914 args = concat.apply( [], args );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5915
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5916 var first, node, hasScripts,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5917 scripts, doc, fragment,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5918 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5919 l = this.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5920 set = this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5921 iNoClone = l - 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5922 value = args[0],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5923 isFunction = jQuery.isFunction( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5924
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5925 // We can't cloneNode fragments that contain checked, in WebKit
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5926 if ( isFunction ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5927 ( l > 1 && typeof value === "string" &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5928 !support.checkClone && rchecked.test( value ) ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5929 return this.each(function( index ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5930 var self = set.eq( index );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5931 if ( isFunction ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5932 args[0] = value.call( this, index, self.html() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5933 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5934 self.domManip( args, callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5935 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5936 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5937
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5938 if ( l ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5939 fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5940 first = fragment.firstChild;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5941
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5942 if ( fragment.childNodes.length === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5943 fragment = first;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5944 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5945
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5946 if ( first ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5947 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5948 hasScripts = scripts.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5949
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5950 // Use the original fragment for the last item instead of the first because it can end up
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5951 // being emptied incorrectly in certain situations (#8070).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5952 for ( ; i < l; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5953 node = fragment;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5954
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5955 if ( i !== iNoClone ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5956 node = jQuery.clone( node, true, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5957
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5958 // Keep references to cloned scripts for later restoration
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5959 if ( hasScripts ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5960 jQuery.merge( scripts, getAll( node, "script" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5961 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5962 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5963
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5964 callback.call( this[i], node, i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5965 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5966
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5967 if ( hasScripts ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5968 doc = scripts[ scripts.length - 1 ].ownerDocument;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5969
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5970 // Reenable scripts
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5971 jQuery.map( scripts, restoreScript );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5972
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5973 // Evaluate executable scripts on first document insertion
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5974 for ( i = 0; i < hasScripts; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5975 node = scripts[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5976 if ( rscriptType.test( node.type || "" ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5977 !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5978
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5979 if ( node.src ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5980 // Optional AJAX dependency, but won't run scripts if not present
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5981 if ( jQuery._evalUrl ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5982 jQuery._evalUrl( node.src );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5983 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5984 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5985 jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5986 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5987 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5988 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5989 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5990
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5991 // Fix #11809: Avoid leaking memory
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5992 fragment = first = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5993 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5994 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5995
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5996 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5997 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5998 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
5999
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6000 jQuery.each({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6001 appendTo: "append",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6002 prependTo: "prepend",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6003 insertBefore: "before",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6004 insertAfter: "after",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6005 replaceAll: "replaceWith"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6006 }, function( name, original ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6007 jQuery.fn[ name ] = function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6008 var elems,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6009 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6010 ret = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6011 insert = jQuery( selector ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6012 last = insert.length - 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6013
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6014 for ( ; i <= last; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6015 elems = i === last ? this : this.clone(true);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6016 jQuery( insert[i] )[ original ]( elems );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6017
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6018 // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6019 push.apply( ret, elems.get() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6020 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6021
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6022 return this.pushStack( ret );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6023 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6024 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6025
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6026
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6027 var iframe,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6028 elemdisplay = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6029
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6030 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6031 * Retrieve the actual display of a element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6032 * @param {String} name nodeName of the element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6033 * @param {Object} doc Document object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6034 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6035 // Called only from within defaultDisplay
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6036 function actualDisplay( name, doc ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6037 var style,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6038 elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6039
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6040 // getDefaultComputedStyle might be reliably used only on attached element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6041 display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6042
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6043 // Use of this method is a temporary fix (more like optmization) until something better comes along,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6044 // since it was removed from specification and supported only in FF
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6045 style.display : jQuery.css( elem[ 0 ], "display" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6046
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6047 // We don't have any data stored on the element,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6048 // so use "detach" method as fast way to get rid of the element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6049 elem.detach();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6050
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6051 return display;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6052 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6053
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6054 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6055 * Try to determine the default display value of an element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6056 * @param {String} nodeName
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6057 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6058 function defaultDisplay( nodeName ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6059 var doc = document,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6060 display = elemdisplay[ nodeName ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6061
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6062 if ( !display ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6063 display = actualDisplay( nodeName, doc );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6064
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6065 // If the simple way fails, read from inside an iframe
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6066 if ( display === "none" || !display ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6067
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6068 // Use the already-created iframe if possible
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6069 iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6070
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6071 // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6072 doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6073
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6074 // Support: IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6075 doc.write();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6076 doc.close();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6077
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6078 display = actualDisplay( nodeName, doc );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6079 iframe.detach();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6080 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6081
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6082 // Store the correct default display
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6083 elemdisplay[ nodeName ] = display;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6084 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6085
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6086 return display;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6087 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6088
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6089
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6090 (function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6091 var shrinkWrapBlocksVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6092
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6093 support.shrinkWrapBlocks = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6094 if ( shrinkWrapBlocksVal != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6095 return shrinkWrapBlocksVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6096 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6097
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6098 // Will be changed later if needed.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6099 shrinkWrapBlocksVal = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6100
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6101 // Minified: var b,c,d
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6102 var div, body, container;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6103
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6104 body = document.getElementsByTagName( "body" )[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6105 if ( !body || !body.style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6106 // Test fired too early or in an unsupported environment, exit.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6107 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6108 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6109
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6110 // Setup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6111 div = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6112 container = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6113 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6114 body.appendChild( container ).appendChild( div );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6115
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6116 // Support: IE6
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6117 // Check if elements with layout shrink-wrap their children
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6118 if ( typeof div.style.zoom !== strundefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6119 // Reset CSS: box-sizing; display; margin; border
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6120 div.style.cssText =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6121 // Support: Firefox<29, Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6122 // Vendor-prefix box-sizing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6123 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6124 "box-sizing:content-box;display:block;margin:0;border:0;" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6125 "padding:1px;width:1px;zoom:1";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6126 div.appendChild( document.createElement( "div" ) ).style.width = "5px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6127 shrinkWrapBlocksVal = div.offsetWidth !== 3;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6128 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6129
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6130 body.removeChild( container );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6131
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6132 return shrinkWrapBlocksVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6133 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6134
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6135 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6136 var rmargin = (/^margin/);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6137
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6138 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6139
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6140
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6141
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6142 var getStyles, curCSS,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6143 rposition = /^(top|right|bottom|left)$/;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6144
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6145 if ( window.getComputedStyle ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6146 getStyles = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6147 // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6148 // IE throws on elements created in popups
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6149 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6150 if ( elem.ownerDocument.defaultView.opener ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6151 return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6152 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6153
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6154 return window.getComputedStyle( elem, null );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6155 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6156
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6157 curCSS = function( elem, name, computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6158 var width, minWidth, maxWidth, ret,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6159 style = elem.style;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6160
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6161 computed = computed || getStyles( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6162
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6163 // getPropertyValue is only needed for .css('filter') in IE9, see #12537
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6164 ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6165
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6166 if ( computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6167
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6168 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6169 ret = jQuery.style( elem, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6170 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6171
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6172 // A tribute to the "awesome hack by Dean Edwards"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6173 // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6174 // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6175 // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6176 if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6177
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6178 // Remember the original values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6179 width = style.width;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6180 minWidth = style.minWidth;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6181 maxWidth = style.maxWidth;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6182
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6183 // Put in the new values to get a computed value out
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6184 style.minWidth = style.maxWidth = style.width = ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6185 ret = computed.width;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6186
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6187 // Revert the changed values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6188 style.width = width;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6189 style.minWidth = minWidth;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6190 style.maxWidth = maxWidth;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6191 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6192 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6193
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6194 // Support: IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6195 // IE returns zIndex value as an integer.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6196 return ret === undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6197 ret :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6198 ret + "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6199 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6200 } else if ( document.documentElement.currentStyle ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6201 getStyles = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6202 return elem.currentStyle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6203 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6204
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6205 curCSS = function( elem, name, computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6206 var left, rs, rsLeft, ret,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6207 style = elem.style;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6208
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6209 computed = computed || getStyles( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6210 ret = computed ? computed[ name ] : undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6211
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6212 // Avoid setting ret to empty string here
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6213 // so we don't default to auto
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6214 if ( ret == null && style && style[ name ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6215 ret = style[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6216 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6217
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6218 // From the awesome hack by Dean Edwards
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6219 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6220
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6221 // If we're not dealing with a regular pixel number
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6222 // but a number that has a weird ending, we need to convert it to pixels
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6223 // but not position css attributes, as those are proportional to the parent element instead
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6224 // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6225 if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6226
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6227 // Remember the original values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6228 left = style.left;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6229 rs = elem.runtimeStyle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6230 rsLeft = rs && rs.left;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6231
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6232 // Put in the new values to get a computed value out
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6233 if ( rsLeft ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6234 rs.left = elem.currentStyle.left;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6235 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6236 style.left = name === "fontSize" ? "1em" : ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6237 ret = style.pixelLeft + "px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6238
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6239 // Revert the changed values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6240 style.left = left;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6241 if ( rsLeft ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6242 rs.left = rsLeft;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6243 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6244 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6245
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6246 // Support: IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6247 // IE returns zIndex value as an integer.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6248 return ret === undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6249 ret :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6250 ret + "" || "auto";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6251 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6252 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6253
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6254
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6255
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6256
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6257 function addGetHookIf( conditionFn, hookFn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6258 // Define the hook, we'll check on the first run if it's really needed.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6259 return {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6260 get: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6261 var condition = conditionFn();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6262
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6263 if ( condition == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6264 // The test was not ready at this point; screw the hook this time
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6265 // but check again when needed next time.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6266 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6267 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6268
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6269 if ( condition ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6270 // Hook not needed (or it's not possible to use it due to missing dependency),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6271 // remove it.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6272 // Since there are no other hooks for marginRight, remove the whole object.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6273 delete this.get;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6274 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6275 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6276
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6277 // Hook needed; redefine it so that the support test is not executed again.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6278
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6279 return (this.get = hookFn).apply( this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6280 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6281 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6282 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6283
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6284
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6285 (function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6286 // Minified: var b,c,d,e,f,g, h,i
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6287 var div, style, a, pixelPositionVal, boxSizingReliableVal,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6288 reliableHiddenOffsetsVal, reliableMarginRightVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6289
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6290 // Setup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6291 div = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6292 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6293 a = div.getElementsByTagName( "a" )[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6294 style = a && a.style;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6295
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6296 // Finish early in limited (non-browser) environments
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6297 if ( !style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6298 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6299 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6300
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6301 style.cssText = "float:left;opacity:.5";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6302
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6303 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6304 // Make sure that element opacity exists (as opposed to filter)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6305 support.opacity = style.opacity === "0.5";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6306
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6307 // Verify style float existence
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6308 // (IE uses styleFloat instead of cssFloat)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6309 support.cssFloat = !!style.cssFloat;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6310
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6311 div.style.backgroundClip = "content-box";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6312 div.cloneNode( true ).style.backgroundClip = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6313 support.clearCloneStyle = div.style.backgroundClip === "content-box";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6314
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6315 // Support: Firefox<29, Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6316 // Vendor-prefix box-sizing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6317 support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6318 style.WebkitBoxSizing === "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6319
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6320 jQuery.extend(support, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6321 reliableHiddenOffsets: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6322 if ( reliableHiddenOffsetsVal == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6323 computeStyleTests();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6324 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6325 return reliableHiddenOffsetsVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6326 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6327
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6328 boxSizingReliable: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6329 if ( boxSizingReliableVal == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6330 computeStyleTests();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6331 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6332 return boxSizingReliableVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6333 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6334
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6335 pixelPosition: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6336 if ( pixelPositionVal == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6337 computeStyleTests();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6338 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6339 return pixelPositionVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6340 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6341
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6342 // Support: Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6343 reliableMarginRight: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6344 if ( reliableMarginRightVal == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6345 computeStyleTests();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6346 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6347 return reliableMarginRightVal;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6348 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6349 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6350
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6351 function computeStyleTests() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6352 // Minified: var b,c,d,j
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6353 var div, body, container, contents;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6354
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6355 body = document.getElementsByTagName( "body" )[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6356 if ( !body || !body.style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6357 // Test fired too early or in an unsupported environment, exit.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6358 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6359 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6360
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6361 // Setup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6362 div = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6363 container = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6364 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6365 body.appendChild( container ).appendChild( div );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6366
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6367 div.style.cssText =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6368 // Support: Firefox<29, Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6369 // Vendor-prefix box-sizing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6370 "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6371 "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6372 "border:1px;padding:1px;width:4px;position:absolute";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6373
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6374 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6375 // Assume reasonable values in the absence of getComputedStyle
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6376 pixelPositionVal = boxSizingReliableVal = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6377 reliableMarginRightVal = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6378
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6379 // Check for getComputedStyle so that this code is not run in IE<9.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6380 if ( window.getComputedStyle ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6381 pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6382 boxSizingReliableVal =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6383 ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6384
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6385 // Support: Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6386 // Div with explicit width and no margin-right incorrectly
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6387 // gets computed margin-right based on width of container (#3333)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6388 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6389 contents = div.appendChild( document.createElement( "div" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6390
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6391 // Reset CSS: box-sizing; display; margin; border; padding
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6392 contents.style.cssText = div.style.cssText =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6393 // Support: Firefox<29, Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6394 // Vendor-prefix box-sizing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6395 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6396 "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6397 contents.style.marginRight = contents.style.width = "0";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6398 div.style.width = "1px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6399
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6400 reliableMarginRightVal =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6401 !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6402
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6403 div.removeChild( contents );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6404 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6405
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6406 // Support: IE8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6407 // Check if table cells still have offsetWidth/Height when they are set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6408 // to display:none and there are still other visible table cells in a
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6409 // table row; if so, offsetWidth/Height are not reliable for use when
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6410 // determining if an element has been hidden directly using
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6411 // display:none (it is still safe to use offsets if a parent element is
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6412 // hidden; don safety goggles and see bug #4512 for more information).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6413 div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6414 contents = div.getElementsByTagName( "td" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6415 contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6416 reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6417 if ( reliableHiddenOffsetsVal ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6418 contents[ 0 ].style.display = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6419 contents[ 1 ].style.display = "none";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6420 reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6421 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6422
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6423 body.removeChild( container );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6424 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6425
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6426 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6427
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6428
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6429 // A method for quickly swapping in/out CSS properties to get correct calculations.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6430 jQuery.swap = function( elem, options, callback, args ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6431 var ret, name,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6432 old = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6433
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6434 // Remember the old values, and insert the new ones
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6435 for ( name in options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6436 old[ name ] = elem.style[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6437 elem.style[ name ] = options[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6438 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6439
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6440 ret = callback.apply( elem, args || [] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6441
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6442 // Revert the old values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6443 for ( name in options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6444 elem.style[ name ] = old[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6445 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6446
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6447 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6448 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6449
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6450
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6451 var
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6452 ralpha = /alpha\([^)]*\)/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6453 ropacity = /opacity\s*=\s*([^)]*)/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6454
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6455 // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6456 // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6457 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6458 rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6459 rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6460
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6461 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6462 cssNormalTransform = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6463 letterSpacing: "0",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6464 fontWeight: "400"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6465 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6466
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6467 cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6468
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6469
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6470 // return a css property mapped to a potentially vendor prefixed property
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6471 function vendorPropName( style, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6472
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6473 // shortcut for names that are not vendor prefixed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6474 if ( name in style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6475 return name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6476 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6477
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6478 // check for vendor prefixed names
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6479 var capName = name.charAt(0).toUpperCase() + name.slice(1),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6480 origName = name,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6481 i = cssPrefixes.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6482
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6483 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6484 name = cssPrefixes[ i ] + capName;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6485 if ( name in style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6486 return name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6487 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6488 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6489
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6490 return origName;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6491 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6492
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6493 function showHide( elements, show ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6494 var display, elem, hidden,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6495 values = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6496 index = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6497 length = elements.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6498
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6499 for ( ; index < length; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6500 elem = elements[ index ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6501 if ( !elem.style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6502 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6503 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6504
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6505 values[ index ] = jQuery._data( elem, "olddisplay" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6506 display = elem.style.display;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6507 if ( show ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6508 // Reset the inline display of this element to learn if it is
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6509 // being hidden by cascaded rules or not
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6510 if ( !values[ index ] && display === "none" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6511 elem.style.display = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6512 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6513
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6514 // Set elements which have been overridden with display: none
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6515 // in a stylesheet to whatever the default browser style is
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6516 // for such an element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6517 if ( elem.style.display === "" && isHidden( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6518 values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6519 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6520 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6521 hidden = isHidden( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6522
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6523 if ( display && display !== "none" || !hidden ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6524 jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6525 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6526 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6527 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6528
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6529 // Set the display of most of the elements in a second loop
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6530 // to avoid the constant reflow
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6531 for ( index = 0; index < length; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6532 elem = elements[ index ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6533 if ( !elem.style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6534 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6535 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6536 if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6537 elem.style.display = show ? values[ index ] || "" : "none";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6538 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6539 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6540
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6541 return elements;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6542 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6543
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6544 function setPositiveNumber( elem, value, subtract ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6545 var matches = rnumsplit.exec( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6546 return matches ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6547 // Guard against undefined "subtract", e.g., when used as in cssHooks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6548 Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6549 value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6550 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6551
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6552 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6553 var i = extra === ( isBorderBox ? "border" : "content" ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6554 // If we already have the right measurement, avoid augmentation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6555 4 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6556 // Otherwise initialize for horizontal or vertical properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6557 name === "width" ? 1 : 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6558
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6559 val = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6560
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6561 for ( ; i < 4; i += 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6562 // both box models exclude margin, so add it if we want it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6563 if ( extra === "margin" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6564 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6565 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6566
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6567 if ( isBorderBox ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6568 // border-box includes padding, so remove it if we want content
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6569 if ( extra === "content" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6570 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6571 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6572
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6573 // at this point, extra isn't border nor margin, so remove border
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6574 if ( extra !== "margin" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6575 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6576 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6577 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6578 // at this point, extra isn't content, so add padding
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6579 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6580
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6581 // at this point, extra isn't content nor padding, so add border
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6582 if ( extra !== "padding" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6583 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6584 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6585 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6586 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6587
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6588 return val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6589 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6590
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6591 function getWidthOrHeight( elem, name, extra ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6592
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6593 // Start with offset property, which is equivalent to the border-box value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6594 var valueIsBorderBox = true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6595 val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6596 styles = getStyles( elem ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6597 isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6598
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6599 // some non-html elements return undefined for offsetWidth, so check for null/undefined
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6600 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6601 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6602 if ( val <= 0 || val == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6603 // Fall back to computed then uncomputed css if necessary
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6604 val = curCSS( elem, name, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6605 if ( val < 0 || val == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6606 val = elem.style[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6607 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6608
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6609 // Computed unit is not pixels. Stop here and return.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6610 if ( rnumnonpx.test(val) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6611 return val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6612 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6613
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6614 // we need the check for style in case a browser which returns unreliable values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6615 // for getComputedStyle silently falls back to the reliable elem.style
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6616 valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6617
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6618 // Normalize "", auto, and prepare for extra
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6619 val = parseFloat( val ) || 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6620 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6621
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6622 // use the active box-sizing model to add/subtract irrelevant styles
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6623 return ( val +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6624 augmentWidthOrHeight(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6625 elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6626 name,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6627 extra || ( isBorderBox ? "border" : "content" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6628 valueIsBorderBox,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6629 styles
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6630 )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6631 ) + "px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6632 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6633
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6634 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6635 // Add in style property hooks for overriding the default
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6636 // behavior of getting and setting a style property
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6637 cssHooks: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6638 opacity: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6639 get: function( elem, computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6640 if ( computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6641 // We should always get a number back from opacity
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6642 var ret = curCSS( elem, "opacity" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6643 return ret === "" ? "1" : ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6644 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6645 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6646 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6647 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6648
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6649 // Don't automatically add "px" to these possibly-unitless properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6650 cssNumber: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6651 "columnCount": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6652 "fillOpacity": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6653 "flexGrow": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6654 "flexShrink": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6655 "fontWeight": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6656 "lineHeight": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6657 "opacity": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6658 "order": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6659 "orphans": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6660 "widows": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6661 "zIndex": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6662 "zoom": true
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6663 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6664
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6665 // Add in properties whose names you wish to fix before
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6666 // setting or getting the value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6667 cssProps: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6668 // normalize float css property
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6669 "float": support.cssFloat ? "cssFloat" : "styleFloat"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6670 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6671
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6672 // Get and set the style property on a DOM Node
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6673 style: function( elem, name, value, extra ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6674 // Don't set styles on text and comment nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6675 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6676 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6677 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6678
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6679 // Make sure that we're working with the right name
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6680 var ret, type, hooks,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6681 origName = jQuery.camelCase( name ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6682 style = elem.style;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6683
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6684 name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6685
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6686 // gets hook for the prefixed version
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6687 // followed by the unprefixed version
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6688 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6689
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6690 // Check if we're setting a value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6691 if ( value !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6692 type = typeof value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6693
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6694 // convert relative number strings (+= or -=) to relative numbers. #7345
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6695 if ( type === "string" && (ret = rrelNum.exec( value )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6696 value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6697 // Fixes bug #9237
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6698 type = "number";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6699 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6700
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6701 // Make sure that null and NaN values aren't set. See: #7116
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6702 if ( value == null || value !== value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6703 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6704 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6705
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6706 // If a number was passed in, add 'px' to the (except for certain CSS properties)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6707 if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6708 value += "px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6709 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6710
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6711 // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6712 // but it would mean to define eight (for every problematic property) identical functions
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6713 if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6714 style[ name ] = "inherit";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6715 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6716
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6717 // If a hook was provided, use that value, otherwise just set the specified value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6718 if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6719
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6720 // Support: IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6721 // Swallow errors from 'invalid' CSS values (#5509)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6722 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6723 style[ name ] = value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6724 } catch(e) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6725 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6726
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6727 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6728 // If a hook was provided get the non-computed value from there
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6729 if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6730 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6731 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6732
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6733 // Otherwise just get the value from the style object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6734 return style[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6735 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6736 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6737
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6738 css: function( elem, name, extra, styles ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6739 var num, val, hooks,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6740 origName = jQuery.camelCase( name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6741
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6742 // Make sure that we're working with the right name
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6743 name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6744
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6745 // gets hook for the prefixed version
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6746 // followed by the unprefixed version
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6747 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6748
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6749 // If a hook was provided get the computed value from there
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6750 if ( hooks && "get" in hooks ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6751 val = hooks.get( elem, true, extra );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6752 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6753
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6754 // Otherwise, if a way to get the computed value exists, use that
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6755 if ( val === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6756 val = curCSS( elem, name, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6757 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6758
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6759 //convert "normal" to computed value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6760 if ( val === "normal" && name in cssNormalTransform ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6761 val = cssNormalTransform[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6762 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6763
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6764 // Return, converting to number if forced or a qualifier was provided and val looks numeric
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6765 if ( extra === "" || extra ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6766 num = parseFloat( val );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6767 return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6768 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6769 return val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6770 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6771 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6772
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6773 jQuery.each([ "height", "width" ], function( i, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6774 jQuery.cssHooks[ name ] = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6775 get: function( elem, computed, extra ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6776 if ( computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6777 // certain elements can have dimension info if we invisibly show them
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6778 // however, it must have a current display style that would benefit from this
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6779 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6780 jQuery.swap( elem, cssShow, function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6781 return getWidthOrHeight( elem, name, extra );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6782 }) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6783 getWidthOrHeight( elem, name, extra );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6784 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6785 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6786
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6787 set: function( elem, value, extra ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6788 var styles = extra && getStyles( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6789 return setPositiveNumber( elem, value, extra ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6790 augmentWidthOrHeight(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6791 elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6792 name,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6793 extra,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6794 support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6795 styles
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6796 ) : 0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6797 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6798 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6799 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6800 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6801
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6802 if ( !support.opacity ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6803 jQuery.cssHooks.opacity = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6804 get: function( elem, computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6805 // IE uses filters for opacity
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6806 return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6807 ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6808 computed ? "1" : "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6809 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6810
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6811 set: function( elem, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6812 var style = elem.style,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6813 currentStyle = elem.currentStyle,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6814 opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6815 filter = currentStyle && currentStyle.filter || style.filter || "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6816
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6817 // IE has trouble with opacity if it does not have layout
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6818 // Force it by setting the zoom level
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6819 style.zoom = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6820
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6821 // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6822 // if value === "", then remove inline opacity #12685
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6823 if ( ( value >= 1 || value === "" ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6824 jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6825 style.removeAttribute ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6826
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6827 // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6828 // if "filter:" is present at all, clearType is disabled, we want to avoid this
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6829 // style.removeAttribute is IE Only, but so apparently is this code path...
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6830 style.removeAttribute( "filter" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6831
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6832 // if there is no filter style applied in a css rule or unset inline opacity, we are done
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6833 if ( value === "" || currentStyle && !currentStyle.filter ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6834 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6835 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6836 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6837
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6838 // otherwise, set new filter values
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6839 style.filter = ralpha.test( filter ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6840 filter.replace( ralpha, opacity ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6841 filter + " " + opacity;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6842 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6843 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6844 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6845
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6846 jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6847 function( elem, computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6848 if ( computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6849 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6850 // Work around by temporarily setting element display to inline-block
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6851 return jQuery.swap( elem, { "display": "inline-block" },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6852 curCSS, [ elem, "marginRight" ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6853 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6854 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6855 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6856
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6857 // These hooks are used by animate to expand properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6858 jQuery.each({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6859 margin: "",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6860 padding: "",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6861 border: "Width"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6862 }, function( prefix, suffix ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6863 jQuery.cssHooks[ prefix + suffix ] = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6864 expand: function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6865 var i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6866 expanded = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6867
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6868 // assumes a single number if not a string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6869 parts = typeof value === "string" ? value.split(" ") : [ value ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6870
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6871 for ( ; i < 4; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6872 expanded[ prefix + cssExpand[ i ] + suffix ] =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6873 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6874 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6875
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6876 return expanded;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6877 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6878 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6879
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6880 if ( !rmargin.test( prefix ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6881 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6882 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6883 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6884
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6885 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6886 css: function( name, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6887 return access( this, function( elem, name, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6888 var styles, len,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6889 map = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6890 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6891
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6892 if ( jQuery.isArray( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6893 styles = getStyles( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6894 len = name.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6895
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6896 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6897 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6898 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6899
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6900 return map;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6901 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6902
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6903 return value !== undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6904 jQuery.style( elem, name, value ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6905 jQuery.css( elem, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6906 }, name, value, arguments.length > 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6907 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6908 show: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6909 return showHide( this, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6910 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6911 hide: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6912 return showHide( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6913 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6914 toggle: function( state ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6915 if ( typeof state === "boolean" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6916 return state ? this.show() : this.hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6917 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6918
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6919 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6920 if ( isHidden( this ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6921 jQuery( this ).show();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6922 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6923 jQuery( this ).hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6924 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6925 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6926 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6927 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6928
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6929
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6930 function Tween( elem, options, prop, end, easing ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6931 return new Tween.prototype.init( elem, options, prop, end, easing );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6932 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6933 jQuery.Tween = Tween;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6934
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6935 Tween.prototype = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6936 constructor: Tween,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6937 init: function( elem, options, prop, end, easing, unit ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6938 this.elem = elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6939 this.prop = prop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6940 this.easing = easing || "swing";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6941 this.options = options;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6942 this.start = this.now = this.cur();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6943 this.end = end;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6944 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6945 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6946 cur: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6947 var hooks = Tween.propHooks[ this.prop ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6948
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6949 return hooks && hooks.get ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6950 hooks.get( this ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6951 Tween.propHooks._default.get( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6952 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6953 run: function( percent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6954 var eased,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6955 hooks = Tween.propHooks[ this.prop ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6956
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6957 if ( this.options.duration ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6958 this.pos = eased = jQuery.easing[ this.easing ](
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6959 percent, this.options.duration * percent, 0, 1, this.options.duration
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6960 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6961 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6962 this.pos = eased = percent;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6963 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6964 this.now = ( this.end - this.start ) * eased + this.start;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6965
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6966 if ( this.options.step ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6967 this.options.step.call( this.elem, this.now, this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6968 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6969
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6970 if ( hooks && hooks.set ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6971 hooks.set( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6972 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6973 Tween.propHooks._default.set( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6974 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6975 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6976 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6977 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6978
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6979 Tween.prototype.init.prototype = Tween.prototype;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6980
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6981 Tween.propHooks = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6982 _default: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6983 get: function( tween ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6984 var result;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6985
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6986 if ( tween.elem[ tween.prop ] != null &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6987 (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6988 return tween.elem[ tween.prop ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6989 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6990
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6991 // passing an empty string as a 3rd parameter to .css will automatically
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6992 // attempt a parseFloat and fallback to a string if the parse fails
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6993 // so, simple values such as "10px" are parsed to Float.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6994 // complex values such as "rotate(1rad)" are returned as is.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6995 result = jQuery.css( tween.elem, tween.prop, "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6996 // Empty strings, null, undefined and "auto" are converted to 0.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6997 return !result || result === "auto" ? 0 : result;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6998 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
6999 set: function( tween ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7000 // use step hook for back compat - use cssHook if its there - use .style if its
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7001 // available and use plain properties where available
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7002 if ( jQuery.fx.step[ tween.prop ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7003 jQuery.fx.step[ tween.prop ]( tween );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7004 } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7005 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7006 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7007 tween.elem[ tween.prop ] = tween.now;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7008 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7009 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7010 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7011 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7012
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7013 // Support: IE <=9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7014 // Panic based approach to setting things on disconnected nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7015
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7016 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7017 set: function( tween ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7018 if ( tween.elem.nodeType && tween.elem.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7019 tween.elem[ tween.prop ] = tween.now;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7020 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7021 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7022 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7023
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7024 jQuery.easing = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7025 linear: function( p ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7026 return p;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7027 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7028 swing: function( p ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7029 return 0.5 - Math.cos( p * Math.PI ) / 2;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7030 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7031 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7032
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7033 jQuery.fx = Tween.prototype.init;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7034
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7035 // Back Compat <1.8 extension point
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7036 jQuery.fx.step = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7037
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7038
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7039
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7040
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7041 var
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7042 fxNow, timerId,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7043 rfxtypes = /^(?:toggle|show|hide)$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7044 rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7045 rrun = /queueHooks$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7046 animationPrefilters = [ defaultPrefilter ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7047 tweeners = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7048 "*": [ function( prop, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7049 var tween = this.createTween( prop, value ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7050 target = tween.cur(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7051 parts = rfxnum.exec( value ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7052 unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7053
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7054 // Starting value computation is required for potential unit mismatches
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7055 start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7056 rfxnum.exec( jQuery.css( tween.elem, prop ) ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7057 scale = 1,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7058 maxIterations = 20;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7059
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7060 if ( start && start[ 3 ] !== unit ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7061 // Trust units reported by jQuery.css
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7062 unit = unit || start[ 3 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7063
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7064 // Make sure we update the tween properties later on
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7065 parts = parts || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7066
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7067 // Iteratively approximate from a nonzero starting point
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7068 start = +target || 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7069
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7070 do {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7071 // If previous iteration zeroed out, double until we get *something*
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7072 // Use a string for doubling factor so we don't accidentally see scale as unchanged below
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7073 scale = scale || ".5";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7074
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7075 // Adjust and apply
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7076 start = start / scale;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7077 jQuery.style( tween.elem, prop, start + unit );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7078
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7079 // Update scale, tolerating zero or NaN from tween.cur()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7080 // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7081 } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7082 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7083
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7084 // Update tween properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7085 if ( parts ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7086 start = tween.start = +start || +target || 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7087 tween.unit = unit;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7088 // If a +=/-= token was provided, we're doing a relative animation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7089 tween.end = parts[ 1 ] ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7090 start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7091 +parts[ 2 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7092 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7093
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7094 return tween;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7095 } ]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7096 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7097
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7098 // Animations created synchronously will run synchronously
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7099 function createFxNow() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7100 setTimeout(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7101 fxNow = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7102 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7103 return ( fxNow = jQuery.now() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7104 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7105
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7106 // Generate parameters to create a standard animation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7107 function genFx( type, includeWidth ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7108 var which,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7109 attrs = { height: type },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7110 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7111
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7112 // if we include width, step value is 1 to do all cssExpand values,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7113 // if we don't include width, step value is 2 to skip over Left and Right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7114 includeWidth = includeWidth ? 1 : 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7115 for ( ; i < 4 ; i += 2 - includeWidth ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7116 which = cssExpand[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7117 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7118 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7119
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7120 if ( includeWidth ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7121 attrs.opacity = attrs.width = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7122 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7123
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7124 return attrs;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7125 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7126
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7127 function createTween( value, prop, animation ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7128 var tween,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7129 collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7130 index = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7131 length = collection.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7132 for ( ; index < length; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7133 if ( (tween = collection[ index ].call( animation, prop, value )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7134
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7135 // we're done with this property
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7136 return tween;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7137 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7138 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7139 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7140
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7141 function defaultPrefilter( elem, props, opts ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7142 /* jshint validthis: true */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7143 var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7144 anim = this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7145 orig = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7146 style = elem.style,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7147 hidden = elem.nodeType && isHidden( elem ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7148 dataShow = jQuery._data( elem, "fxshow" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7149
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7150 // handle queue: false promises
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7151 if ( !opts.queue ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7152 hooks = jQuery._queueHooks( elem, "fx" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7153 if ( hooks.unqueued == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7154 hooks.unqueued = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7155 oldfire = hooks.empty.fire;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7156 hooks.empty.fire = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7157 if ( !hooks.unqueued ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7158 oldfire();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7159 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7160 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7161 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7162 hooks.unqueued++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7163
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7164 anim.always(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7165 // doing this makes sure that the complete handler will be called
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7166 // before this completes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7167 anim.always(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7168 hooks.unqueued--;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7169 if ( !jQuery.queue( elem, "fx" ).length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7170 hooks.empty.fire();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7171 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7172 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7173 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7174 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7175
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7176 // height/width overflow pass
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7177 if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7178 // Make sure that nothing sneaks out
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7179 // Record all 3 overflow attributes because IE does not
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7180 // change the overflow attribute when overflowX and
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7181 // overflowY are set to the same value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7182 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7183
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7184 // Set display property to inline-block for height/width
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7185 // animations on inline elements that are having width/height animated
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7186 display = jQuery.css( elem, "display" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7187
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7188 // Test default display if display is currently "none"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7189 checkDisplay = display === "none" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7190 jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7191
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7192 if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7193
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7194 // inline-level elements accept inline-block;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7195 // block-level elements need to be inline with layout
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7196 if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7197 style.display = "inline-block";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7198 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7199 style.zoom = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7200 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7201 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7202 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7203
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7204 if ( opts.overflow ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7205 style.overflow = "hidden";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7206 if ( !support.shrinkWrapBlocks() ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7207 anim.always(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7208 style.overflow = opts.overflow[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7209 style.overflowX = opts.overflow[ 1 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7210 style.overflowY = opts.overflow[ 2 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7211 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7212 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7213 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7214
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7215 // show/hide pass
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7216 for ( prop in props ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7217 value = props[ prop ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7218 if ( rfxtypes.exec( value ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7219 delete props[ prop ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7220 toggle = toggle || value === "toggle";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7221 if ( value === ( hidden ? "hide" : "show" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7222
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7223 // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7224 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7225 hidden = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7226 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7227 continue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7228 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7229 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7230 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7231
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7232 // Any non-fx value stops us from restoring the original display value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7233 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7234 display = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7235 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7236 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7237
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7238 if ( !jQuery.isEmptyObject( orig ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7239 if ( dataShow ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7240 if ( "hidden" in dataShow ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7241 hidden = dataShow.hidden;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7242 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7243 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7244 dataShow = jQuery._data( elem, "fxshow", {} );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7245 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7246
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7247 // store state if its toggle - enables .stop().toggle() to "reverse"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7248 if ( toggle ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7249 dataShow.hidden = !hidden;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7250 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7251 if ( hidden ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7252 jQuery( elem ).show();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7253 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7254 anim.done(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7255 jQuery( elem ).hide();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7256 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7257 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7258 anim.done(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7259 var prop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7260 jQuery._removeData( elem, "fxshow" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7261 for ( prop in orig ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7262 jQuery.style( elem, prop, orig[ prop ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7263 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7264 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7265 for ( prop in orig ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7266 tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7267
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7268 if ( !( prop in dataShow ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7269 dataShow[ prop ] = tween.start;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7270 if ( hidden ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7271 tween.end = tween.start;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7272 tween.start = prop === "width" || prop === "height" ? 1 : 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7273 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7274 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7275 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7276
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7277 // If this is a noop like .hide().hide(), restore an overwritten display value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7278 } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7279 style.display = display;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7280 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7281 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7282
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7283 function propFilter( props, specialEasing ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7284 var index, name, easing, value, hooks;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7285
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7286 // camelCase, specialEasing and expand cssHook pass
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7287 for ( index in props ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7288 name = jQuery.camelCase( index );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7289 easing = specialEasing[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7290 value = props[ index ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7291 if ( jQuery.isArray( value ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7292 easing = value[ 1 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7293 value = props[ index ] = value[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7294 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7295
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7296 if ( index !== name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7297 props[ name ] = value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7298 delete props[ index ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7299 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7300
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7301 hooks = jQuery.cssHooks[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7302 if ( hooks && "expand" in hooks ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7303 value = hooks.expand( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7304 delete props[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7305
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7306 // not quite $.extend, this wont overwrite keys already present.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7307 // also - reusing 'index' from above because we have the correct "name"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7308 for ( index in value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7309 if ( !( index in props ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7310 props[ index ] = value[ index ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7311 specialEasing[ index ] = easing;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7312 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7313 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7314 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7315 specialEasing[ name ] = easing;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7316 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7317 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7318 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7319
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7320 function Animation( elem, properties, options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7321 var result,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7322 stopped,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7323 index = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7324 length = animationPrefilters.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7325 deferred = jQuery.Deferred().always( function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7326 // don't match elem in the :animated selector
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7327 delete tick.elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7328 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7329 tick = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7330 if ( stopped ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7331 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7332 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7333 var currentTime = fxNow || createFxNow(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7334 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7335 // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7336 temp = remaining / animation.duration || 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7337 percent = 1 - temp,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7338 index = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7339 length = animation.tweens.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7340
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7341 for ( ; index < length ; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7342 animation.tweens[ index ].run( percent );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7343 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7344
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7345 deferred.notifyWith( elem, [ animation, percent, remaining ]);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7346
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7347 if ( percent < 1 && length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7348 return remaining;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7349 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7350 deferred.resolveWith( elem, [ animation ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7351 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7352 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7353 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7354 animation = deferred.promise({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7355 elem: elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7356 props: jQuery.extend( {}, properties ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7357 opts: jQuery.extend( true, { specialEasing: {} }, options ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7358 originalProperties: properties,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7359 originalOptions: options,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7360 startTime: fxNow || createFxNow(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7361 duration: options.duration,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7362 tweens: [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7363 createTween: function( prop, end ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7364 var tween = jQuery.Tween( elem, animation.opts, prop, end,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7365 animation.opts.specialEasing[ prop ] || animation.opts.easing );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7366 animation.tweens.push( tween );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7367 return tween;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7368 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7369 stop: function( gotoEnd ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7370 var index = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7371 // if we are going to the end, we want to run all the tweens
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7372 // otherwise we skip this part
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7373 length = gotoEnd ? animation.tweens.length : 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7374 if ( stopped ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7375 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7376 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7377 stopped = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7378 for ( ; index < length ; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7379 animation.tweens[ index ].run( 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7380 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7381
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7382 // resolve when we played the last frame
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7383 // otherwise, reject
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7384 if ( gotoEnd ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7385 deferred.resolveWith( elem, [ animation, gotoEnd ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7386 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7387 deferred.rejectWith( elem, [ animation, gotoEnd ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7388 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7389 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7390 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7391 }),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7392 props = animation.props;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7393
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7394 propFilter( props, animation.opts.specialEasing );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7395
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7396 for ( ; index < length ; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7397 result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7398 if ( result ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7399 return result;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7400 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7401 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7402
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7403 jQuery.map( props, createTween, animation );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7404
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7405 if ( jQuery.isFunction( animation.opts.start ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7406 animation.opts.start.call( elem, animation );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7407 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7408
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7409 jQuery.fx.timer(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7410 jQuery.extend( tick, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7411 elem: elem,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7412 anim: animation,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7413 queue: animation.opts.queue
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7414 })
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7415 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7416
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7417 // attach callbacks from options
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7418 return animation.progress( animation.opts.progress )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7419 .done( animation.opts.done, animation.opts.complete )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7420 .fail( animation.opts.fail )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7421 .always( animation.opts.always );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7422 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7423
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7424 jQuery.Animation = jQuery.extend( Animation, {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7425 tweener: function( props, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7426 if ( jQuery.isFunction( props ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7427 callback = props;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7428 props = [ "*" ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7429 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7430 props = props.split(" ");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7431 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7432
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7433 var prop,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7434 index = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7435 length = props.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7436
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7437 for ( ; index < length ; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7438 prop = props[ index ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7439 tweeners[ prop ] = tweeners[ prop ] || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7440 tweeners[ prop ].unshift( callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7441 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7442 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7443
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7444 prefilter: function( callback, prepend ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7445 if ( prepend ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7446 animationPrefilters.unshift( callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7447 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7448 animationPrefilters.push( callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7449 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7450 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7451 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7452
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7453 jQuery.speed = function( speed, easing, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7454 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7455 complete: fn || !fn && easing ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7456 jQuery.isFunction( speed ) && speed,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7457 duration: speed,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7458 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7459 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7460
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7461 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7462 opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7463
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7464 // normalize opt.queue - true/undefined/null -> "fx"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7465 if ( opt.queue == null || opt.queue === true ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7466 opt.queue = "fx";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7467 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7468
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7469 // Queueing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7470 opt.old = opt.complete;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7471
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7472 opt.complete = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7473 if ( jQuery.isFunction( opt.old ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7474 opt.old.call( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7475 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7476
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7477 if ( opt.queue ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7478 jQuery.dequeue( this, opt.queue );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7479 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7480 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7481
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7482 return opt;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7483 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7484
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7485 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7486 fadeTo: function( speed, to, easing, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7487
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7488 // show any hidden elements after setting opacity to 0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7489 return this.filter( isHidden ).css( "opacity", 0 ).show()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7490
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7491 // animate to the value specified
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7492 .end().animate({ opacity: to }, speed, easing, callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7493 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7494 animate: function( prop, speed, easing, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7495 var empty = jQuery.isEmptyObject( prop ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7496 optall = jQuery.speed( speed, easing, callback ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7497 doAnimation = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7498 // Operate on a copy of prop so per-property easing won't be lost
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7499 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7500
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7501 // Empty animations, or finishing resolves immediately
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7502 if ( empty || jQuery._data( this, "finish" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7503 anim.stop( true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7504 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7505 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7506 doAnimation.finish = doAnimation;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7507
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7508 return empty || optall.queue === false ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7509 this.each( doAnimation ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7510 this.queue( optall.queue, doAnimation );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7511 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7512 stop: function( type, clearQueue, gotoEnd ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7513 var stopQueue = function( hooks ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7514 var stop = hooks.stop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7515 delete hooks.stop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7516 stop( gotoEnd );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7517 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7518
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7519 if ( typeof type !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7520 gotoEnd = clearQueue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7521 clearQueue = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7522 type = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7523 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7524 if ( clearQueue && type !== false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7525 this.queue( type || "fx", [] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7526 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7527
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7528 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7529 var dequeue = true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7530 index = type != null && type + "queueHooks",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7531 timers = jQuery.timers,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7532 data = jQuery._data( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7533
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7534 if ( index ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7535 if ( data[ index ] && data[ index ].stop ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7536 stopQueue( data[ index ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7537 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7538 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7539 for ( index in data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7540 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7541 stopQueue( data[ index ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7542 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7543 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7544 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7545
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7546 for ( index = timers.length; index--; ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7547 if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7548 timers[ index ].anim.stop( gotoEnd );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7549 dequeue = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7550 timers.splice( index, 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7551 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7552 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7553
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7554 // start the next in the queue if the last step wasn't forced
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7555 // timers currently will call their complete callbacks, which will dequeue
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7556 // but only if they were gotoEnd
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7557 if ( dequeue || !gotoEnd ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7558 jQuery.dequeue( this, type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7559 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7560 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7561 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7562 finish: function( type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7563 if ( type !== false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7564 type = type || "fx";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7565 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7566 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7567 var index,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7568 data = jQuery._data( this ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7569 queue = data[ type + "queue" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7570 hooks = data[ type + "queueHooks" ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7571 timers = jQuery.timers,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7572 length = queue ? queue.length : 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7573
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7574 // enable finishing flag on private data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7575 data.finish = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7576
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7577 // empty the queue first
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7578 jQuery.queue( this, type, [] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7579
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7580 if ( hooks && hooks.stop ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7581 hooks.stop.call( this, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7582 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7583
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7584 // look for any active animations, and finish them
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7585 for ( index = timers.length; index--; ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7586 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7587 timers[ index ].anim.stop( true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7588 timers.splice( index, 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7589 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7590 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7591
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7592 // look for any animations in the old queue and finish them
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7593 for ( index = 0; index < length; index++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7594 if ( queue[ index ] && queue[ index ].finish ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7595 queue[ index ].finish.call( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7596 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7597 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7598
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7599 // turn off finishing flag
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7600 delete data.finish;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7601 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7602 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7603 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7604
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7605 jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7606 var cssFn = jQuery.fn[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7607 jQuery.fn[ name ] = function( speed, easing, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7608 return speed == null || typeof speed === "boolean" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7609 cssFn.apply( this, arguments ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7610 this.animate( genFx( name, true ), speed, easing, callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7611 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7612 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7613
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7614 // Generate shortcuts for custom animations
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7615 jQuery.each({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7616 slideDown: genFx("show"),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7617 slideUp: genFx("hide"),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7618 slideToggle: genFx("toggle"),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7619 fadeIn: { opacity: "show" },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7620 fadeOut: { opacity: "hide" },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7621 fadeToggle: { opacity: "toggle" }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7622 }, function( name, props ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7623 jQuery.fn[ name ] = function( speed, easing, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7624 return this.animate( props, speed, easing, callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7625 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7626 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7627
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7628 jQuery.timers = [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7629 jQuery.fx.tick = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7630 var timer,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7631 timers = jQuery.timers,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7632 i = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7633
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7634 fxNow = jQuery.now();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7635
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7636 for ( ; i < timers.length; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7637 timer = timers[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7638 // Checks the timer has not already been removed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7639 if ( !timer() && timers[ i ] === timer ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7640 timers.splice( i--, 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7641 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7642 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7643
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7644 if ( !timers.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7645 jQuery.fx.stop();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7646 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7647 fxNow = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7648 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7649
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7650 jQuery.fx.timer = function( timer ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7651 jQuery.timers.push( timer );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7652 if ( timer() ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7653 jQuery.fx.start();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7654 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7655 jQuery.timers.pop();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7656 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7657 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7658
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7659 jQuery.fx.interval = 13;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7660
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7661 jQuery.fx.start = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7662 if ( !timerId ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7663 timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7664 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7665 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7666
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7667 jQuery.fx.stop = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7668 clearInterval( timerId );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7669 timerId = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7670 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7671
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7672 jQuery.fx.speeds = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7673 slow: 600,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7674 fast: 200,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7675 // Default speed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7676 _default: 400
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7677 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7678
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7679
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7680 // Based off of the plugin by Clint Helfers, with permission.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7681 // http://blindsignals.com/index.php/2009/07/jquery-delay/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7682 jQuery.fn.delay = function( time, type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7683 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7684 type = type || "fx";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7685
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7686 return this.queue( type, function( next, hooks ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7687 var timeout = setTimeout( next, time );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7688 hooks.stop = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7689 clearTimeout( timeout );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7690 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7691 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7692 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7693
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7694
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7695 (function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7696 // Minified: var a,b,c,d,e
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7697 var input, div, select, a, opt;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7698
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7699 // Setup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7700 div = document.createElement( "div" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7701 div.setAttribute( "className", "t" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7702 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7703 a = div.getElementsByTagName("a")[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7704
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7705 // First batch of tests.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7706 select = document.createElement("select");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7707 opt = select.appendChild( document.createElement("option") );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7708 input = div.getElementsByTagName("input")[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7709
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7710 a.style.cssText = "top:1px";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7711
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7712 // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7713 support.getSetAttribute = div.className !== "t";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7714
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7715 // Get the style information from getAttribute
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7716 // (IE uses .cssText instead)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7717 support.style = /top/.test( a.getAttribute("style") );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7718
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7719 // Make sure that URLs aren't manipulated
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7720 // (IE normalizes it by default)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7721 support.hrefNormalized = a.getAttribute("href") === "/a";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7722
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7723 // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7724 support.checkOn = !!input.value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7725
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7726 // Make sure that a selected-by-default option has a working selected property.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7727 // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7728 support.optSelected = opt.selected;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7729
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7730 // Tests for enctype support on a form (#6743)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7731 support.enctype = !!document.createElement("form").enctype;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7732
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7733 // Make sure that the options inside disabled selects aren't marked as disabled
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7734 // (WebKit marks them as disabled)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7735 select.disabled = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7736 support.optDisabled = !opt.disabled;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7737
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7738 // Support: IE8 only
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7739 // Check if we can trust getAttribute("value")
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7740 input = document.createElement( "input" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7741 input.setAttribute( "value", "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7742 support.input = input.getAttribute( "value" ) === "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7743
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7744 // Check if an input maintains its value after becoming a radio
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7745 input.value = "t";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7746 input.setAttribute( "type", "radio" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7747 support.radioValue = input.value === "t";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7748 })();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7749
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7750
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7751 var rreturn = /\r/g;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7752
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7753 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7754 val: function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7755 var hooks, ret, isFunction,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7756 elem = this[0];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7757
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7758 if ( !arguments.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7759 if ( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7760 hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7761
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7762 if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7763 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7764 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7765
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7766 ret = elem.value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7767
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7768 return typeof ret === "string" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7769 // handle most common string cases
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7770 ret.replace(rreturn, "") :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7771 // handle cases where value is null/undef or number
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7772 ret == null ? "" : ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7773 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7774
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7775 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7776 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7777
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7778 isFunction = jQuery.isFunction( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7779
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7780 return this.each(function( i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7781 var val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7782
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7783 if ( this.nodeType !== 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7784 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7785 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7786
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7787 if ( isFunction ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7788 val = value.call( this, i, jQuery( this ).val() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7789 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7790 val = value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7791 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7792
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7793 // Treat null/undefined as ""; convert numbers to string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7794 if ( val == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7795 val = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7796 } else if ( typeof val === "number" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7797 val += "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7798 } else if ( jQuery.isArray( val ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7799 val = jQuery.map( val, function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7800 return value == null ? "" : value + "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7801 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7802 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7803
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7804 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7805
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7806 // If set returns undefined, fall back to normal setting
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7807 if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7808 this.value = val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7809 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7810 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7811 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7812 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7813
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7814 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7815 valHooks: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7816 option: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7817 get: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7818 var val = jQuery.find.attr( elem, "value" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7819 return val != null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7820 val :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7821 // Support: IE10-11+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7822 // option.text throws exceptions (#14686, #14858)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7823 jQuery.trim( jQuery.text( elem ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7824 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7825 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7826 select: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7827 get: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7828 var value, option,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7829 options = elem.options,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7830 index = elem.selectedIndex,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7831 one = elem.type === "select-one" || index < 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7832 values = one ? null : [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7833 max = one ? index + 1 : options.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7834 i = index < 0 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7835 max :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7836 one ? index : 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7837
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7838 // Loop through all the selected options
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7839 for ( ; i < max; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7840 option = options[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7841
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7842 // oldIE doesn't update selected after form reset (#2551)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7843 if ( ( option.selected || i === index ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7844 // Don't return options that are disabled or in a disabled optgroup
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7845 ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7846 ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7847
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7848 // Get the specific value for the option
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7849 value = jQuery( option ).val();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7850
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7851 // We don't need an array for one selects
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7852 if ( one ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7853 return value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7854 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7855
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7856 // Multi-Selects return an array
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7857 values.push( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7858 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7859 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7860
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7861 return values;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7862 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7863
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7864 set: function( elem, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7865 var optionSet, option,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7866 options = elem.options,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7867 values = jQuery.makeArray( value ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7868 i = options.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7869
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7870 while ( i-- ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7871 option = options[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7872
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7873 if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7874
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7875 // Support: IE6
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7876 // When new option element is added to select box we need to
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7877 // force reflow of newly added node in order to workaround delay
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7878 // of initialization properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7879 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7880 option.selected = optionSet = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7881
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7882 } catch ( _ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7883
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7884 // Will be executed only in IE6
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7885 option.scrollHeight;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7886 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7887
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7888 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7889 option.selected = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7890 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7891 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7892
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7893 // Force browsers to behave consistently when non-matching value is set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7894 if ( !optionSet ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7895 elem.selectedIndex = -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7896 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7897
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7898 return options;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7899 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7900 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7901 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7902 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7903
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7904 // Radios and checkboxes getter/setter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7905 jQuery.each([ "radio", "checkbox" ], function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7906 jQuery.valHooks[ this ] = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7907 set: function( elem, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7908 if ( jQuery.isArray( value ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7909 return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7910 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7911 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7912 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7913 if ( !support.checkOn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7914 jQuery.valHooks[ this ].get = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7915 // Support: Webkit
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7916 // "" is returned instead of "on" if a value isn't specified
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7917 return elem.getAttribute("value") === null ? "on" : elem.value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7918 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7919 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7920 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7921
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7922
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7923
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7924
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7925 var nodeHook, boolHook,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7926 attrHandle = jQuery.expr.attrHandle,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7927 ruseDefault = /^(?:checked|selected)$/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7928 getSetAttribute = support.getSetAttribute,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7929 getSetInput = support.input;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7930
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7931 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7932 attr: function( name, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7933 return access( this, jQuery.attr, name, value, arguments.length > 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7934 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7935
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7936 removeAttr: function( name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7937 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7938 jQuery.removeAttr( this, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7939 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7940 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7941 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7942
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7943 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7944 attr: function( elem, name, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7945 var hooks, ret,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7946 nType = elem.nodeType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7947
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7948 // don't get/set attributes on text, comment and attribute nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7949 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7950 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7951 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7952
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7953 // Fallback to prop when attributes are not supported
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7954 if ( typeof elem.getAttribute === strundefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7955 return jQuery.prop( elem, name, value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7956 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7957
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7958 // All attributes are lowercase
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7959 // Grab necessary hook if one is defined
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7960 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7961 name = name.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7962 hooks = jQuery.attrHooks[ name ] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7963 ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7964 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7965
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7966 if ( value !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7967
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7968 if ( value === null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7969 jQuery.removeAttr( elem, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7970
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7971 } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7972 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7973
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7974 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7975 elem.setAttribute( name, value + "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7976 return value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7977 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7978
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7979 } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7980 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7981
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7982 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7983 ret = jQuery.find.attr( elem, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7984
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7985 // Non-existent attributes return null, we normalize to undefined
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7986 return ret == null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7987 undefined :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7988 ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7989 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7990 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7991
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7992 removeAttr: function( elem, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7993 var name, propName,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7994 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7995 attrNames = value && value.match( rnotwhite );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7996
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7997 if ( attrNames && elem.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7998 while ( (name = attrNames[i++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
7999 propName = jQuery.propFix[ name ] || name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8000
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8001 // Boolean attributes get special treatment (#10870)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8002 if ( jQuery.expr.match.bool.test( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8003 // Set corresponding property to false
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8004 if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8005 elem[ propName ] = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8006 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8007 // Also clear defaultChecked/defaultSelected (if appropriate)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8008 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8009 elem[ jQuery.camelCase( "default-" + name ) ] =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8010 elem[ propName ] = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8011 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8012
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8013 // See #9699 for explanation of this approach (setting first, then removal)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8014 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8015 jQuery.attr( elem, name, "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8016 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8017
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8018 elem.removeAttribute( getSetAttribute ? name : propName );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8019 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8020 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8021 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8022
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8023 attrHooks: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8024 type: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8025 set: function( elem, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8026 if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8027 // Setting the type on a radio button after the value resets the value in IE6-9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8028 // Reset value to default in case type is set after value during creation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8029 var val = elem.value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8030 elem.setAttribute( "type", value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8031 if ( val ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8032 elem.value = val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8033 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8034 return value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8035 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8036 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8037 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8038 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8039 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8040
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8041 // Hook for boolean attributes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8042 boolHook = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8043 set: function( elem, value, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8044 if ( value === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8045 // Remove boolean attributes when set to false
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8046 jQuery.removeAttr( elem, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8047 } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8048 // IE<8 needs the *property* name
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8049 elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8050
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8051 // Use defaultChecked and defaultSelected for oldIE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8052 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8053 elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8054 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8055
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8056 return name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8057 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8058 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8059
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8060 // Retrieve booleans specially
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8061 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8062
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8063 var getter = attrHandle[ name ] || jQuery.find.attr;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8064
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8065 attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8066 function( elem, name, isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8067 var ret, handle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8068 if ( !isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8069 // Avoid an infinite loop by temporarily removing this function from the getter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8070 handle = attrHandle[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8071 attrHandle[ name ] = ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8072 ret = getter( elem, name, isXML ) != null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8073 name.toLowerCase() :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8074 null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8075 attrHandle[ name ] = handle;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8076 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8077 return ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8078 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8079 function( elem, name, isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8080 if ( !isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8081 return elem[ jQuery.camelCase( "default-" + name ) ] ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8082 name.toLowerCase() :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8083 null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8084 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8085 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8086 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8087
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8088 // fix oldIE attroperties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8089 if ( !getSetInput || !getSetAttribute ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8090 jQuery.attrHooks.value = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8091 set: function( elem, value, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8092 if ( jQuery.nodeName( elem, "input" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8093 // Does not return so that setAttribute is also used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8094 elem.defaultValue = value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8095 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8096 // Use nodeHook if defined (#1954); otherwise setAttribute is fine
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8097 return nodeHook && nodeHook.set( elem, value, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8098 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8099 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8100 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8101 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8102
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8103 // IE6/7 do not support getting/setting some attributes with get/setAttribute
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8104 if ( !getSetAttribute ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8105
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8106 // Use this for any attribute in IE6/7
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8107 // This fixes almost every IE6/7 issue
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8108 nodeHook = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8109 set: function( elem, value, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8110 // Set the existing or create a new attribute node
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8111 var ret = elem.getAttributeNode( name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8112 if ( !ret ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8113 elem.setAttributeNode(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8114 (ret = elem.ownerDocument.createAttribute( name ))
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8115 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8116 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8117
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8118 ret.value = value += "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8119
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8120 // Break association with cloned elements by also using setAttribute (#9646)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8121 if ( name === "value" || value === elem.getAttribute( name ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8122 return value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8123 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8124 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8125 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8126
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8127 // Some attributes are constructed with empty-string values when not defined
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8128 attrHandle.id = attrHandle.name = attrHandle.coords =
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8129 function( elem, name, isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8130 var ret;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8131 if ( !isXML ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8132 return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8133 ret.value :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8134 null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8135 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8136 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8137
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8138 // Fixing value retrieval on a button requires this module
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8139 jQuery.valHooks.button = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8140 get: function( elem, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8141 var ret = elem.getAttributeNode( name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8142 if ( ret && ret.specified ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8143 return ret.value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8144 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8145 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8146 set: nodeHook.set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8147 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8148
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8149 // Set contenteditable to false on removals(#10429)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8150 // Setting to empty string throws an error as an invalid value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8151 jQuery.attrHooks.contenteditable = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8152 set: function( elem, value, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8153 nodeHook.set( elem, value === "" ? false : value, name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8154 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8155 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8156
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8157 // Set width and height to auto instead of 0 on empty string( Bug #8150 )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8158 // This is for removals
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8159 jQuery.each([ "width", "height" ], function( i, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8160 jQuery.attrHooks[ name ] = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8161 set: function( elem, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8162 if ( value === "" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8163 elem.setAttribute( name, "auto" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8164 return value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8165 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8166 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8167 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8168 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8169 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8170
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8171 if ( !support.style ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8172 jQuery.attrHooks.style = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8173 get: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8174 // Return undefined in the case of empty string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8175 // Note: IE uppercases css property names, but if we were to .toLowerCase()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8176 // .cssText, that would destroy case senstitivity in URL's, like in "background"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8177 return elem.style.cssText || undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8178 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8179 set: function( elem, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8180 return ( elem.style.cssText = value + "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8181 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8182 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8183 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8184
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8185
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8186
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8187
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8188 var rfocusable = /^(?:input|select|textarea|button|object)$/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8189 rclickable = /^(?:a|area)$/i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8190
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8191 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8192 prop: function( name, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8193 return access( this, jQuery.prop, name, value, arguments.length > 1 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8194 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8195
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8196 removeProp: function( name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8197 name = jQuery.propFix[ name ] || name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8198 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8199 // try/catch handles cases where IE balks (such as removing a property on window)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8200 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8201 this[ name ] = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8202 delete this[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8203 } catch( e ) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8204 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8205 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8206 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8207
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8208 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8209 propFix: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8210 "for": "htmlFor",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8211 "class": "className"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8212 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8213
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8214 prop: function( elem, name, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8215 var ret, hooks, notxml,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8216 nType = elem.nodeType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8217
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8218 // don't get/set properties on text, comment and attribute nodes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8219 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8220 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8221 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8222
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8223 notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8224
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8225 if ( notxml ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8226 // Fix name and attach hooks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8227 name = jQuery.propFix[ name ] || name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8228 hooks = jQuery.propHooks[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8229 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8230
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8231 if ( value !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8232 return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8233 ret :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8234 ( elem[ name ] = value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8235
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8236 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8237 return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8238 ret :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8239 elem[ name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8240 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8241 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8242
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8243 propHooks: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8244 tabIndex: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8245 get: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8246 // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8247 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8248 // Use proper attribute retrieval(#12072)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8249 var tabindex = jQuery.find.attr( elem, "tabindex" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8250
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8251 return tabindex ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8252 parseInt( tabindex, 10 ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8253 rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8254 0 :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8255 -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8256 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8257 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8258 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8259 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8260
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8261 // Some attributes require a special call on IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8262 // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8263 if ( !support.hrefNormalized ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8264 // href/src property should get the full normalized URL (#10299/#12915)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8265 jQuery.each([ "href", "src" ], function( i, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8266 jQuery.propHooks[ name ] = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8267 get: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8268 return elem.getAttribute( name, 4 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8269 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8270 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8271 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8272 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8273
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8274 // Support: Safari, IE9+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8275 // mis-reports the default selected property of an option
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8276 // Accessing the parent's selectedIndex property fixes it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8277 if ( !support.optSelected ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8278 jQuery.propHooks.selected = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8279 get: function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8280 var parent = elem.parentNode;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8281
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8282 if ( parent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8283 parent.selectedIndex;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8284
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8285 // Make sure that it also works with optgroups, see #5701
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8286 if ( parent.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8287 parent.parentNode.selectedIndex;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8288 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8289 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8290 return null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8291 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8292 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8293 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8294
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8295 jQuery.each([
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8296 "tabIndex",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8297 "readOnly",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8298 "maxLength",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8299 "cellSpacing",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8300 "cellPadding",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8301 "rowSpan",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8302 "colSpan",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8303 "useMap",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8304 "frameBorder",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8305 "contentEditable"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8306 ], function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8307 jQuery.propFix[ this.toLowerCase() ] = this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8308 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8309
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8310 // IE6/7 call enctype encoding
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8311 if ( !support.enctype ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8312 jQuery.propFix.enctype = "encoding";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8313 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8314
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8315
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8316
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8317
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8318 var rclass = /[\t\r\n\f]/g;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8319
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8320 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8321 addClass: function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8322 var classes, elem, cur, clazz, j, finalValue,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8323 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8324 len = this.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8325 proceed = typeof value === "string" && value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8326
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8327 if ( jQuery.isFunction( value ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8328 return this.each(function( j ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8329 jQuery( this ).addClass( value.call( this, j, this.className ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8330 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8331 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8332
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8333 if ( proceed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8334 // The disjunction here is for better compressibility (see removeClass)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8335 classes = ( value || "" ).match( rnotwhite ) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8336
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8337 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8338 elem = this[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8339 cur = elem.nodeType === 1 && ( elem.className ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8340 ( " " + elem.className + " " ).replace( rclass, " " ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8341 " "
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8342 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8343
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8344 if ( cur ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8345 j = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8346 while ( (clazz = classes[j++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8347 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8348 cur += clazz + " ";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8349 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8350 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8351
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8352 // only assign if different to avoid unneeded rendering.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8353 finalValue = jQuery.trim( cur );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8354 if ( elem.className !== finalValue ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8355 elem.className = finalValue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8356 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8357 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8358 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8359 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8360
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8361 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8362 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8363
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8364 removeClass: function( value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8365 var classes, elem, cur, clazz, j, finalValue,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8366 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8367 len = this.length,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8368 proceed = arguments.length === 0 || typeof value === "string" && value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8369
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8370 if ( jQuery.isFunction( value ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8371 return this.each(function( j ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8372 jQuery( this ).removeClass( value.call( this, j, this.className ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8373 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8374 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8375 if ( proceed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8376 classes = ( value || "" ).match( rnotwhite ) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8377
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8378 for ( ; i < len; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8379 elem = this[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8380 // This expression is here for better compressibility (see addClass)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8381 cur = elem.nodeType === 1 && ( elem.className ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8382 ( " " + elem.className + " " ).replace( rclass, " " ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8383 ""
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8384 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8385
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8386 if ( cur ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8387 j = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8388 while ( (clazz = classes[j++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8389 // Remove *all* instances
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8390 while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8391 cur = cur.replace( " " + clazz + " ", " " );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8392 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8393 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8394
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8395 // only assign if different to avoid unneeded rendering.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8396 finalValue = value ? jQuery.trim( cur ) : "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8397 if ( elem.className !== finalValue ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8398 elem.className = finalValue;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8399 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8400 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8401 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8402 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8403
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8404 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8405 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8406
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8407 toggleClass: function( value, stateVal ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8408 var type = typeof value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8409
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8410 if ( typeof stateVal === "boolean" && type === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8411 return stateVal ? this.addClass( value ) : this.removeClass( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8412 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8413
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8414 if ( jQuery.isFunction( value ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8415 return this.each(function( i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8416 jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8417 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8418 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8419
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8420 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8421 if ( type === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8422 // toggle individual class names
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8423 var className,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8424 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8425 self = jQuery( this ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8426 classNames = value.match( rnotwhite ) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8427
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8428 while ( (className = classNames[ i++ ]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8429 // check each className given, space separated list
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8430 if ( self.hasClass( className ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8431 self.removeClass( className );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8432 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8433 self.addClass( className );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8434 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8435 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8436
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8437 // Toggle whole class name
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8438 } else if ( type === strundefined || type === "boolean" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8439 if ( this.className ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8440 // store className if set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8441 jQuery._data( this, "__className__", this.className );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8442 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8443
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8444 // If the element has a class name or if we're passed "false",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8445 // then remove the whole classname (if there was one, the above saved it).
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8446 // Otherwise bring back whatever was previously saved (if anything),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8447 // falling back to the empty string if nothing was stored.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8448 this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8449 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8450 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8451 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8452
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8453 hasClass: function( selector ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8454 var className = " " + selector + " ",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8455 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8456 l = this.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8457 for ( ; i < l; i++ ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8458 if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8459 return true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8460 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8461 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8462
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8463 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8464 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8465 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8466
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8467
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8468
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8469
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8470 // Return jQuery for attributes-only inclusion
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8471
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8472
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8473 jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8474 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8475 "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8476
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8477 // Handle event binding
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8478 jQuery.fn[ name ] = function( data, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8479 return arguments.length > 0 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8480 this.on( name, null, data, fn ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8481 this.trigger( name );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8482 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8483 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8484
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8485 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8486 hover: function( fnOver, fnOut ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8487 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8488 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8489
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8490 bind: function( types, data, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8491 return this.on( types, null, data, fn );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8492 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8493 unbind: function( types, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8494 return this.off( types, null, fn );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8495 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8496
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8497 delegate: function( selector, types, data, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8498 return this.on( types, selector, data, fn );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8499 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8500 undelegate: function( selector, types, fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8501 // ( namespace ) or ( selector, types [, fn] )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8502 return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8503 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8504 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8505
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8506
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8507 var nonce = jQuery.now();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8508
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8509 var rquery = (/\?/);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8510
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8511
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8512
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8513 var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8514
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8515 jQuery.parseJSON = function( data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8516 // Attempt to parse using the native JSON parser first
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8517 if ( window.JSON && window.JSON.parse ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8518 // Support: Android 2.3
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8519 // Workaround failure to string-cast null input
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8520 return window.JSON.parse( data + "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8521 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8522
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8523 var requireNonComma,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8524 depth = null,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8525 str = jQuery.trim( data + "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8526
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8527 // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8528 // after removing valid tokens
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8529 return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8530
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8531 // Force termination if we see a misplaced comma
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8532 if ( requireNonComma && comma ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8533 depth = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8534 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8535
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8536 // Perform no more replacements after returning to outermost depth
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8537 if ( depth === 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8538 return token;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8539 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8540
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8541 // Commas must not follow "[", "{", or ","
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8542 requireNonComma = open || comma;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8543
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8544 // Determine new depth
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8545 // array/object open ("[" or "{"): depth += true - false (increment)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8546 // array/object close ("]" or "}"): depth += false - true (decrement)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8547 // other cases ("," or primitive): depth += true - true (numeric cast)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8548 depth += !close - !open;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8549
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8550 // Remove this token
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8551 return "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8552 }) ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8553 ( Function( "return " + str ) )() :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8554 jQuery.error( "Invalid JSON: " + data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8555 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8556
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8557
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8558 // Cross-browser xml parsing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8559 jQuery.parseXML = function( data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8560 var xml, tmp;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8561 if ( !data || typeof data !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8562 return null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8563 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8564 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8565 if ( window.DOMParser ) { // Standard
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8566 tmp = new DOMParser();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8567 xml = tmp.parseFromString( data, "text/xml" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8568 } else { // IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8569 xml = new ActiveXObject( "Microsoft.XMLDOM" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8570 xml.async = "false";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8571 xml.loadXML( data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8572 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8573 } catch( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8574 xml = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8575 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8576 if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8577 jQuery.error( "Invalid XML: " + data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8578 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8579 return xml;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8580 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8581
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8582
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8583 var
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8584 // Document location
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8585 ajaxLocParts,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8586 ajaxLocation,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8587
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8588 rhash = /#.*$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8589 rts = /([?&])_=[^&]*/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8590 rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8591 // #7653, #8125, #8152: local protocol detection
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8592 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8593 rnoContent = /^(?:GET|HEAD)$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8594 rprotocol = /^\/\//,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8595 rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8596
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8597 /* Prefilters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8598 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8599 * 2) These are called:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8600 * - BEFORE asking for a transport
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8601 * - AFTER param serialization (s.data is a string if s.processData is true)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8602 * 3) key is the dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8603 * 4) the catchall symbol "*" can be used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8604 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8605 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8606 prefilters = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8607
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8608 /* Transports bindings
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8609 * 1) key is the dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8610 * 2) the catchall symbol "*" can be used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8611 * 3) selection will start with transport dataType and THEN go to "*" if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8612 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8613 transports = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8614
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8615 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8616 allTypes = "*/".concat("*");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8617
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8618 // #8138, IE may throw an exception when accessing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8619 // a field from window.location if document.domain has been set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8620 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8621 ajaxLocation = location.href;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8622 } catch( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8623 // Use the href attribute of an A element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8624 // since IE will modify it given document.location
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8625 ajaxLocation = document.createElement( "a" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8626 ajaxLocation.href = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8627 ajaxLocation = ajaxLocation.href;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8628 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8629
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8630 // Segment location into parts
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8631 ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8632
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8633 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8634 function addToPrefiltersOrTransports( structure ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8635
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8636 // dataTypeExpression is optional and defaults to "*"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8637 return function( dataTypeExpression, func ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8638
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8639 if ( typeof dataTypeExpression !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8640 func = dataTypeExpression;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8641 dataTypeExpression = "*";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8642 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8643
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8644 var dataType,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8645 i = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8646 dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8647
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8648 if ( jQuery.isFunction( func ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8649 // For each dataType in the dataTypeExpression
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8650 while ( (dataType = dataTypes[i++]) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8651 // Prepend if requested
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8652 if ( dataType.charAt( 0 ) === "+" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8653 dataType = dataType.slice( 1 ) || "*";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8654 (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8655
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8656 // Otherwise append
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8657 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8658 (structure[ dataType ] = structure[ dataType ] || []).push( func );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8659 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8660 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8661 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8662 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8663 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8664
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8665 // Base inspection function for prefilters and transports
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8666 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8667
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8668 var inspected = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8669 seekingTransport = ( structure === transports );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8670
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8671 function inspect( dataType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8672 var selected;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8673 inspected[ dataType ] = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8674 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8675 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8676 if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8677 options.dataTypes.unshift( dataTypeOrTransport );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8678 inspect( dataTypeOrTransport );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8679 return false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8680 } else if ( seekingTransport ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8681 return !( selected = dataTypeOrTransport );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8682 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8683 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8684 return selected;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8685 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8686
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8687 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8688 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8689
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8690 // A special extend for ajax options
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8691 // that takes "flat" options (not to be deep extended)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8692 // Fixes #9887
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8693 function ajaxExtend( target, src ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8694 var deep, key,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8695 flatOptions = jQuery.ajaxSettings.flatOptions || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8696
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8697 for ( key in src ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8698 if ( src[ key ] !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8699 ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8700 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8701 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8702 if ( deep ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8703 jQuery.extend( true, target, deep );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8704 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8705
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8706 return target;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8707 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8708
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8709 /* Handles responses to an ajax request:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8710 * - finds the right dataType (mediates between content-type and expected dataType)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8711 * - returns the corresponding response
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8712 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8713 function ajaxHandleResponses( s, jqXHR, responses ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8714 var firstDataType, ct, finalDataType, type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8715 contents = s.contents,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8716 dataTypes = s.dataTypes;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8717
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8718 // Remove auto dataType and get content-type in the process
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8719 while ( dataTypes[ 0 ] === "*" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8720 dataTypes.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8721 if ( ct === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8722 ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8723 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8724 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8725
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8726 // Check if we're dealing with a known content-type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8727 if ( ct ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8728 for ( type in contents ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8729 if ( contents[ type ] && contents[ type ].test( ct ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8730 dataTypes.unshift( type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8731 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8732 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8733 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8734 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8735
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8736 // Check to see if we have a response for the expected dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8737 if ( dataTypes[ 0 ] in responses ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8738 finalDataType = dataTypes[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8739 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8740 // Try convertible dataTypes
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8741 for ( type in responses ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8742 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8743 finalDataType = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8744 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8745 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8746 if ( !firstDataType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8747 firstDataType = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8748 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8749 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8750 // Or just use first one
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8751 finalDataType = finalDataType || firstDataType;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8752 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8753
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8754 // If we found a dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8755 // We add the dataType to the list if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8756 // and return the corresponding response
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8757 if ( finalDataType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8758 if ( finalDataType !== dataTypes[ 0 ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8759 dataTypes.unshift( finalDataType );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8760 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8761 return responses[ finalDataType ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8762 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8763 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8764
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8765 /* Chain conversions given the request and the original response
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8766 * Also sets the responseXXX fields on the jqXHR instance
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8767 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8768 function ajaxConvert( s, response, jqXHR, isSuccess ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8769 var conv2, current, conv, tmp, prev,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8770 converters = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8771 // Work with a copy of dataTypes in case we need to modify it for conversion
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8772 dataTypes = s.dataTypes.slice();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8773
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8774 // Create converters map with lowercased keys
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8775 if ( dataTypes[ 1 ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8776 for ( conv in s.converters ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8777 converters[ conv.toLowerCase() ] = s.converters[ conv ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8778 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8779 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8780
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8781 current = dataTypes.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8782
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8783 // Convert to each sequential dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8784 while ( current ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8785
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8786 if ( s.responseFields[ current ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8787 jqXHR[ s.responseFields[ current ] ] = response;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8788 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8789
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8790 // Apply the dataFilter if provided
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8791 if ( !prev && isSuccess && s.dataFilter ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8792 response = s.dataFilter( response, s.dataType );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8793 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8794
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8795 prev = current;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8796 current = dataTypes.shift();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8797
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8798 if ( current ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8799
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8800 // There's only work to do if current dataType is non-auto
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8801 if ( current === "*" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8802
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8803 current = prev;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8804
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8805 // Convert response if prev dataType is non-auto and differs from current
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8806 } else if ( prev !== "*" && prev !== current ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8807
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8808 // Seek a direct converter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8809 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8810
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8811 // If none found, seek a pair
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8812 if ( !conv ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8813 for ( conv2 in converters ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8814
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8815 // If conv2 outputs current
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8816 tmp = conv2.split( " " );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8817 if ( tmp[ 1 ] === current ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8818
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8819 // If prev can be converted to accepted input
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8820 conv = converters[ prev + " " + tmp[ 0 ] ] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8821 converters[ "* " + tmp[ 0 ] ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8822 if ( conv ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8823 // Condense equivalence converters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8824 if ( conv === true ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8825 conv = converters[ conv2 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8826
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8827 // Otherwise, insert the intermediate dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8828 } else if ( converters[ conv2 ] !== true ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8829 current = tmp[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8830 dataTypes.unshift( tmp[ 1 ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8831 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8832 break;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8833 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8834 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8835 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8836 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8837
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8838 // Apply converter (if not an equivalence)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8839 if ( conv !== true ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8840
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8841 // Unless errors are allowed to bubble, catch and return them
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8842 if ( conv && s[ "throws" ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8843 response = conv( response );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8844 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8845 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8846 response = conv( response );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8847 } catch ( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8848 return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8849 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8850 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8851 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8852 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8853 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8854 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8855
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8856 return { state: "success", data: response };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8857 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8858
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8859 jQuery.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8860
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8861 // Counter for holding the number of active queries
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8862 active: 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8863
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8864 // Last-Modified header cache for next request
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8865 lastModified: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8866 etag: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8867
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8868 ajaxSettings: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8869 url: ajaxLocation,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8870 type: "GET",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8871 isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8872 global: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8873 processData: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8874 async: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8875 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8876 /*
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8877 timeout: 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8878 data: null,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8879 dataType: null,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8880 username: null,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8881 password: null,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8882 cache: null,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8883 throws: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8884 traditional: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8885 headers: {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8886 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8887
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8888 accepts: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8889 "*": allTypes,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8890 text: "text/plain",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8891 html: "text/html",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8892 xml: "application/xml, text/xml",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8893 json: "application/json, text/javascript"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8894 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8895
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8896 contents: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8897 xml: /xml/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8898 html: /html/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8899 json: /json/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8900 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8901
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8902 responseFields: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8903 xml: "responseXML",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8904 text: "responseText",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8905 json: "responseJSON"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8906 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8907
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8908 // Data converters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8909 // Keys separate source (or catchall "*") and destination types with a single space
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8910 converters: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8911
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8912 // Convert anything to text
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8913 "* text": String,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8914
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8915 // Text to html (true = no transformation)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8916 "text html": true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8917
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8918 // Evaluate text as a json expression
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8919 "text json": jQuery.parseJSON,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8920
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8921 // Parse text as xml
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8922 "text xml": jQuery.parseXML
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8923 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8924
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8925 // For options that shouldn't be deep extended:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8926 // you can add your own custom options here if
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8927 // and when you create one that shouldn't be
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8928 // deep extended (see ajaxExtend)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8929 flatOptions: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8930 url: true,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8931 context: true
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8932 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8933 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8934
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8935 // Creates a full fledged settings object into target
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8936 // with both ajaxSettings and settings fields.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8937 // If target is omitted, writes into ajaxSettings.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8938 ajaxSetup: function( target, settings ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8939 return settings ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8940
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8941 // Building a settings object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8942 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8943
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8944 // Extending ajaxSettings
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8945 ajaxExtend( jQuery.ajaxSettings, target );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8946 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8947
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8948 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8949 ajaxTransport: addToPrefiltersOrTransports( transports ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8950
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8951 // Main method
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8952 ajax: function( url, options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8953
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8954 // If url is an object, simulate pre-1.5 signature
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8955 if ( typeof url === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8956 options = url;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8957 url = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8958 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8959
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8960 // Force options to be an object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8961 options = options || {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8962
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8963 var // Cross-domain detection vars
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8964 parts,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8965 // Loop variable
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8966 i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8967 // URL without anti-cache param
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8968 cacheURL,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8969 // Response headers as string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8970 responseHeadersString,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8971 // timeout handle
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8972 timeoutTimer,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8973
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8974 // To know if global events are to be dispatched
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8975 fireGlobals,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8976
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8977 transport,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8978 // Response headers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8979 responseHeaders,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8980 // Create the final options object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8981 s = jQuery.ajaxSetup( {}, options ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8982 // Callbacks context
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8983 callbackContext = s.context || s,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8984 // Context for global events is callbackContext if it is a DOM node or jQuery collection
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8985 globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8986 jQuery( callbackContext ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8987 jQuery.event,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8988 // Deferreds
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8989 deferred = jQuery.Deferred(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8990 completeDeferred = jQuery.Callbacks("once memory"),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8991 // Status-dependent callbacks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8992 statusCode = s.statusCode || {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8993 // Headers (they are sent all at once)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8994 requestHeaders = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8995 requestHeadersNames = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8996 // The jqXHR state
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8997 state = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8998 // Default abort message
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
8999 strAbort = "canceled",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9000 // Fake xhr
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9001 jqXHR = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9002 readyState: 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9003
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9004 // Builds headers hashtable if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9005 getResponseHeader: function( key ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9006 var match;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9007 if ( state === 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9008 if ( !responseHeaders ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9009 responseHeaders = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9010 while ( (match = rheaders.exec( responseHeadersString )) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9011 responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9012 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9013 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9014 match = responseHeaders[ key.toLowerCase() ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9015 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9016 return match == null ? null : match;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9017 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9018
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9019 // Raw string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9020 getAllResponseHeaders: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9021 return state === 2 ? responseHeadersString : null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9022 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9023
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9024 // Caches the header
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9025 setRequestHeader: function( name, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9026 var lname = name.toLowerCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9027 if ( !state ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9028 name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9029 requestHeaders[ name ] = value;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9030 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9031 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9032 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9033
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9034 // Overrides response content-type header
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9035 overrideMimeType: function( type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9036 if ( !state ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9037 s.mimeType = type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9038 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9039 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9040 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9041
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9042 // Status-dependent callbacks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9043 statusCode: function( map ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9044 var code;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9045 if ( map ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9046 if ( state < 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9047 for ( code in map ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9048 // Lazy-add the new callback in a way that preserves old ones
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9049 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9050 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9051 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9052 // Execute the appropriate callbacks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9053 jqXHR.always( map[ jqXHR.status ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9054 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9055 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9056 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9057 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9058
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9059 // Cancel the request
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9060 abort: function( statusText ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9061 var finalText = statusText || strAbort;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9062 if ( transport ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9063 transport.abort( finalText );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9064 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9065 done( 0, finalText );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9066 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9067 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9068 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9069
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9070 // Attach deferreds
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9071 deferred.promise( jqXHR ).complete = completeDeferred.add;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9072 jqXHR.success = jqXHR.done;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9073 jqXHR.error = jqXHR.fail;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9074
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9075 // Remove hash character (#7531: and string promotion)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9076 // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9077 // Handle falsy url in the settings object (#10093: consistency with old signature)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9078 // We also use the url parameter if available
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9079 s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9080
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9081 // Alias method option to type as per ticket #12004
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9082 s.type = options.method || options.type || s.method || s.type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9083
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9084 // Extract dataTypes list
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9085 s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9086
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9087 // A cross-domain request is in order when we have a protocol:host:port mismatch
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9088 if ( s.crossDomain == null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9089 parts = rurl.exec( s.url.toLowerCase() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9090 s.crossDomain = !!( parts &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9091 ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9092 ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9093 ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9094 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9095 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9096
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9097 // Convert data if not already a string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9098 if ( s.data && s.processData && typeof s.data !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9099 s.data = jQuery.param( s.data, s.traditional );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9100 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9101
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9102 // Apply prefilters
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9103 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9104
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9105 // If request was aborted inside a prefilter, stop there
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9106 if ( state === 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9107 return jqXHR;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9108 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9109
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9110 // We can fire global events as of now if asked to
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9111 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9112 fireGlobals = jQuery.event && s.global;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9113
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9114 // Watch for a new set of requests
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9115 if ( fireGlobals && jQuery.active++ === 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9116 jQuery.event.trigger("ajaxStart");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9117 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9118
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9119 // Uppercase the type
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9120 s.type = s.type.toUpperCase();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9121
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9122 // Determine if request has content
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9123 s.hasContent = !rnoContent.test( s.type );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9124
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9125 // Save the URL in case we're toying with the If-Modified-Since
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9126 // and/or If-None-Match header later on
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9127 cacheURL = s.url;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9128
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9129 // More options handling for requests with no content
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9130 if ( !s.hasContent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9131
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9132 // If data is available, append data to url
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9133 if ( s.data ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9134 cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9135 // #9682: remove data so that it's not used in an eventual retry
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9136 delete s.data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9137 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9138
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9139 // Add anti-cache in url if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9140 if ( s.cache === false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9141 s.url = rts.test( cacheURL ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9142
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9143 // If there is already a '_' parameter, set its value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9144 cacheURL.replace( rts, "$1_=" + nonce++ ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9145
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9146 // Otherwise add one to the end
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9147 cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9148 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9149 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9150
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9151 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9152 if ( s.ifModified ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9153 if ( jQuery.lastModified[ cacheURL ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9154 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9155 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9156 if ( jQuery.etag[ cacheURL ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9157 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9158 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9159 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9160
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9161 // Set the correct header, if data is being sent
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9162 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9163 jqXHR.setRequestHeader( "Content-Type", s.contentType );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9164 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9165
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9166 // Set the Accepts header for the server, depending on the dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9167 jqXHR.setRequestHeader(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9168 "Accept",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9169 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9170 s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9171 s.accepts[ "*" ]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9172 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9173
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9174 // Check for headers option
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9175 for ( i in s.headers ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9176 jqXHR.setRequestHeader( i, s.headers[ i ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9177 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9178
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9179 // Allow custom headers/mimetypes and early abort
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9180 if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9181 // Abort if not done already and return
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9182 return jqXHR.abort();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9183 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9184
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9185 // aborting is no longer a cancellation
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9186 strAbort = "abort";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9187
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9188 // Install callbacks on deferreds
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9189 for ( i in { success: 1, error: 1, complete: 1 } ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9190 jqXHR[ i ]( s[ i ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9191 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9192
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9193 // Get transport
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9194 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9195
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9196 // If no transport, we auto-abort
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9197 if ( !transport ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9198 done( -1, "No Transport" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9199 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9200 jqXHR.readyState = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9201
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9202 // Send global event
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9203 if ( fireGlobals ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9204 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9205 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9206 // Timeout
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9207 if ( s.async && s.timeout > 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9208 timeoutTimer = setTimeout(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9209 jqXHR.abort("timeout");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9210 }, s.timeout );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9211 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9212
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9213 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9214 state = 1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9215 transport.send( requestHeaders, done );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9216 } catch ( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9217 // Propagate exception as error if not done
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9218 if ( state < 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9219 done( -1, e );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9220 // Simply rethrow otherwise
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9221 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9222 throw e;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9223 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9224 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9225 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9226
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9227 // Callback for when everything is done
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9228 function done( status, nativeStatusText, responses, headers ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9229 var isSuccess, success, error, response, modified,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9230 statusText = nativeStatusText;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9231
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9232 // Called once
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9233 if ( state === 2 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9234 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9235 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9236
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9237 // State is "done" now
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9238 state = 2;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9239
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9240 // Clear timeout if it exists
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9241 if ( timeoutTimer ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9242 clearTimeout( timeoutTimer );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9243 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9244
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9245 // Dereference transport for early garbage collection
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9246 // (no matter how long the jqXHR object will be used)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9247 transport = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9248
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9249 // Cache response headers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9250 responseHeadersString = headers || "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9251
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9252 // Set readyState
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9253 jqXHR.readyState = status > 0 ? 4 : 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9254
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9255 // Determine if successful
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9256 isSuccess = status >= 200 && status < 300 || status === 304;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9257
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9258 // Get response data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9259 if ( responses ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9260 response = ajaxHandleResponses( s, jqXHR, responses );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9261 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9262
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9263 // Convert no matter what (that way responseXXX fields are always set)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9264 response = ajaxConvert( s, response, jqXHR, isSuccess );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9265
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9266 // If successful, handle type chaining
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9267 if ( isSuccess ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9268
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9269 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9270 if ( s.ifModified ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9271 modified = jqXHR.getResponseHeader("Last-Modified");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9272 if ( modified ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9273 jQuery.lastModified[ cacheURL ] = modified;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9274 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9275 modified = jqXHR.getResponseHeader("etag");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9276 if ( modified ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9277 jQuery.etag[ cacheURL ] = modified;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9278 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9279 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9280
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9281 // if no content
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9282 if ( status === 204 || s.type === "HEAD" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9283 statusText = "nocontent";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9284
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9285 // if not modified
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9286 } else if ( status === 304 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9287 statusText = "notmodified";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9288
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9289 // If we have data, let's convert it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9290 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9291 statusText = response.state;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9292 success = response.data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9293 error = response.error;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9294 isSuccess = !error;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9295 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9296 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9297 // We extract error from statusText
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9298 // then normalize statusText and status for non-aborts
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9299 error = statusText;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9300 if ( status || !statusText ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9301 statusText = "error";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9302 if ( status < 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9303 status = 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9304 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9305 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9306 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9307
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9308 // Set data for the fake xhr object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9309 jqXHR.status = status;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9310 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9311
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9312 // Success/Error
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9313 if ( isSuccess ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9314 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9315 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9316 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9317 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9318
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9319 // Status-dependent callbacks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9320 jqXHR.statusCode( statusCode );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9321 statusCode = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9322
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9323 if ( fireGlobals ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9324 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9325 [ jqXHR, s, isSuccess ? success : error ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9326 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9327
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9328 // Complete
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9329 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9330
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9331 if ( fireGlobals ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9332 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9333 // Handle the global AJAX counter
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9334 if ( !( --jQuery.active ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9335 jQuery.event.trigger("ajaxStop");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9336 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9337 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9338 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9339
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9340 return jqXHR;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9341 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9342
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9343 getJSON: function( url, data, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9344 return jQuery.get( url, data, callback, "json" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9345 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9346
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9347 getScript: function( url, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9348 return jQuery.get( url, undefined, callback, "script" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9349 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9350 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9351
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9352 jQuery.each( [ "get", "post" ], function( i, method ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9353 jQuery[ method ] = function( url, data, callback, type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9354 // shift arguments if data argument was omitted
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9355 if ( jQuery.isFunction( data ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9356 type = type || callback;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9357 callback = data;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9358 data = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9359 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9360
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9361 return jQuery.ajax({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9362 url: url,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9363 type: method,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9364 dataType: type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9365 data: data,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9366 success: callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9367 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9368 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9369 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9370
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9371
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9372 jQuery._evalUrl = function( url ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9373 return jQuery.ajax({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9374 url: url,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9375 type: "GET",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9376 dataType: "script",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9377 async: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9378 global: false,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9379 "throws": true
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9380 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9381 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9382
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9383
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9384 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9385 wrapAll: function( html ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9386 if ( jQuery.isFunction( html ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9387 return this.each(function(i) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9388 jQuery(this).wrapAll( html.call(this, i) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9389 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9390 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9391
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9392 if ( this[0] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9393 // The elements to wrap the target around
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9394 var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9395
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9396 if ( this[0].parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9397 wrap.insertBefore( this[0] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9398 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9399
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9400 wrap.map(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9401 var elem = this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9402
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9403 while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9404 elem = elem.firstChild;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9405 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9406
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9407 return elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9408 }).append( this );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9409 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9410
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9411 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9412 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9413
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9414 wrapInner: function( html ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9415 if ( jQuery.isFunction( html ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9416 return this.each(function(i) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9417 jQuery(this).wrapInner( html.call(this, i) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9418 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9419 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9420
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9421 return this.each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9422 var self = jQuery( this ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9423 contents = self.contents();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9424
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9425 if ( contents.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9426 contents.wrapAll( html );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9427
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9428 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9429 self.append( html );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9430 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9431 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9432 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9433
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9434 wrap: function( html ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9435 var isFunction = jQuery.isFunction( html );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9436
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9437 return this.each(function(i) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9438 jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9439 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9440 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9441
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9442 unwrap: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9443 return this.parent().each(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9444 if ( !jQuery.nodeName( this, "body" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9445 jQuery( this ).replaceWith( this.childNodes );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9446 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9447 }).end();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9448 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9449 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9450
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9451
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9452 jQuery.expr.filters.hidden = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9453 // Support: Opera <= 12.12
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9454 // Opera reports offsetWidths and offsetHeights less than zero on some elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9455 return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9456 (!support.reliableHiddenOffsets() &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9457 ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9458 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9459
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9460 jQuery.expr.filters.visible = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9461 return !jQuery.expr.filters.hidden( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9462 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9463
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9464
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9465
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9466
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9467 var r20 = /%20/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9468 rbracket = /\[\]$/,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9469 rCRLF = /\r?\n/g,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9470 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9471 rsubmittable = /^(?:input|select|textarea|keygen)/i;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9472
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9473 function buildParams( prefix, obj, traditional, add ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9474 var name;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9475
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9476 if ( jQuery.isArray( obj ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9477 // Serialize array item.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9478 jQuery.each( obj, function( i, v ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9479 if ( traditional || rbracket.test( prefix ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9480 // Treat each array item as a scalar.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9481 add( prefix, v );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9482
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9483 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9484 // Item is non-scalar (array or object), encode its numeric index.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9485 buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9486 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9487 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9488
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9489 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9490 // Serialize object item.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9491 for ( name in obj ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9492 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9493 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9494
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9495 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9496 // Serialize scalar item.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9497 add( prefix, obj );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9498 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9499 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9500
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9501 // Serialize an array of form elements or a set of
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9502 // key/values into a query string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9503 jQuery.param = function( a, traditional ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9504 var prefix,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9505 s = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9506 add = function( key, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9507 // If value is a function, invoke it and return its value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9508 value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9509 s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9510 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9511
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9512 // Set traditional to true for jQuery <= 1.3.2 behavior.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9513 if ( traditional === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9514 traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9515 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9516
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9517 // If an array was passed in, assume that it is an array of form elements.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9518 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9519 // Serialize the form elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9520 jQuery.each( a, function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9521 add( this.name, this.value );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9522 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9523
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9524 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9525 // If traditional, encode the "old" way (the way 1.3.2 or older
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9526 // did it), otherwise encode params recursively.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9527 for ( prefix in a ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9528 buildParams( prefix, a[ prefix ], traditional, add );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9529 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9530 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9531
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9532 // Return the resulting serialization
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9533 return s.join( "&" ).replace( r20, "+" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9534 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9535
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9536 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9537 serialize: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9538 return jQuery.param( this.serializeArray() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9539 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9540 serializeArray: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9541 return this.map(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9542 // Can add propHook for "elements" to filter or add form elements
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9543 var elements = jQuery.prop( this, "elements" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9544 return elements ? jQuery.makeArray( elements ) : this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9545 })
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9546 .filter(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9547 var type = this.type;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9548 // Use .is(":disabled") so that fieldset[disabled] works
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9549 return this.name && !jQuery( this ).is( ":disabled" ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9550 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9551 ( this.checked || !rcheckableType.test( type ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9552 })
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9553 .map(function( i, elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9554 var val = jQuery( this ).val();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9555
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9556 return val == null ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9557 null :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9558 jQuery.isArray( val ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9559 jQuery.map( val, function( val ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9560 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9561 }) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9562 { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9563 }).get();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9564 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9565 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9566
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9567
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9568 // Create the request object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9569 // (This is still attached to ajaxSettings for backward compatibility)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9570 jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9571 // Support: IE6+
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9572 function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9573
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9574 // XHR cannot access local files, always use ActiveX for that case
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9575 return !this.isLocal &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9576
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9577 // Support: IE7-8
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9578 // oldIE XHR does not support non-RFC2616 methods (#13240)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9579 // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9580 // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9581 // Although this check for six methods instead of eight
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9582 // since IE also does not support "trace" and "connect"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9583 /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9584
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9585 createStandardXHR() || createActiveXHR();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9586 } :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9587 // For all other browsers, use the standard XMLHttpRequest object
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9588 createStandardXHR;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9589
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9590 var xhrId = 0,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9591 xhrCallbacks = {},
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9592 xhrSupported = jQuery.ajaxSettings.xhr();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9593
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9594 // Support: IE<10
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9595 // Open requests must be manually aborted on unload (#5280)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9596 // See https://support.microsoft.com/kb/2856746 for more info
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9597 if ( window.attachEvent ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9598 window.attachEvent( "onunload", function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9599 for ( var key in xhrCallbacks ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9600 xhrCallbacks[ key ]( undefined, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9601 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9602 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9603 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9604
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9605 // Determine support properties
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9606 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9607 xhrSupported = support.ajax = !!xhrSupported;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9608
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9609 // Create transport if the browser can provide an xhr
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9610 if ( xhrSupported ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9611
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9612 jQuery.ajaxTransport(function( options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9613 // Cross domain only allowed if supported through XMLHttpRequest
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9614 if ( !options.crossDomain || support.cors ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9615
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9616 var callback;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9617
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9618 return {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9619 send: function( headers, complete ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9620 var i,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9621 xhr = options.xhr(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9622 id = ++xhrId;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9623
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9624 // Open the socket
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9625 xhr.open( options.type, options.url, options.async, options.username, options.password );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9626
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9627 // Apply custom fields if provided
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9628 if ( options.xhrFields ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9629 for ( i in options.xhrFields ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9630 xhr[ i ] = options.xhrFields[ i ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9631 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9632 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9633
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9634 // Override mime type if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9635 if ( options.mimeType && xhr.overrideMimeType ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9636 xhr.overrideMimeType( options.mimeType );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9637 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9638
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9639 // X-Requested-With header
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9640 // For cross-domain requests, seeing as conditions for a preflight are
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9641 // akin to a jigsaw puzzle, we simply never set it to be sure.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9642 // (it can always be set on a per-request basis or even using ajaxSetup)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9643 // For same-domain requests, won't change header if already provided.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9644 if ( !options.crossDomain && !headers["X-Requested-With"] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9645 headers["X-Requested-With"] = "XMLHttpRequest";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9646 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9647
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9648 // Set headers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9649 for ( i in headers ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9650 // Support: IE<9
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9651 // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9652 // request header to a null-value.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9653 //
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9654 // To keep consistent with other XHR implementations, cast the value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9655 // to string and ignore `undefined`.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9656 if ( headers[ i ] !== undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9657 xhr.setRequestHeader( i, headers[ i ] + "" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9658 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9659 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9660
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9661 // Do send the request
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9662 // This may raise an exception which is actually
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9663 // handled in jQuery.ajax (so no try/catch here)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9664 xhr.send( ( options.hasContent && options.data ) || null );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9665
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9666 // Listener
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9667 callback = function( _, isAbort ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9668 var status, statusText, responses;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9669
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9670 // Was never called and is aborted or complete
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9671 if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9672 // Clean up
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9673 delete xhrCallbacks[ id ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9674 callback = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9675 xhr.onreadystatechange = jQuery.noop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9676
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9677 // Abort manually if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9678 if ( isAbort ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9679 if ( xhr.readyState !== 4 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9680 xhr.abort();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9681 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9682 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9683 responses = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9684 status = xhr.status;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9685
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9686 // Support: IE<10
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9687 // Accessing binary-data responseText throws an exception
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9688 // (#11426)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9689 if ( typeof xhr.responseText === "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9690 responses.text = xhr.responseText;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9691 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9692
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9693 // Firefox throws an exception when accessing
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9694 // statusText for faulty cross-domain requests
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9695 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9696 statusText = xhr.statusText;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9697 } catch( e ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9698 // We normalize with Webkit giving an empty statusText
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9699 statusText = "";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9700 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9701
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9702 // Filter status for non standard behaviors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9703
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9704 // If the request is local and we have data: assume a success
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9705 // (success with no data won't get notified, that's the best we
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9706 // can do given current implementations)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9707 if ( !status && options.isLocal && !options.crossDomain ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9708 status = responses.text ? 200 : 404;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9709 // IE - #1450: sometimes returns 1223 when it should be 204
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9710 } else if ( status === 1223 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9711 status = 204;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9712 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9713 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9714 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9715
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9716 // Call complete if needed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9717 if ( responses ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9718 complete( status, statusText, responses, xhr.getAllResponseHeaders() );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9719 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9720 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9721
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9722 if ( !options.async ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9723 // if we're in sync mode we fire the callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9724 callback();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9725 } else if ( xhr.readyState === 4 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9726 // (IE6 & IE7) if it's in cache and has been
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9727 // retrieved directly we need to fire the callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9728 setTimeout( callback );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9729 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9730 // Add to the list of active xhr callbacks
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9731 xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9732 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9733 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9734
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9735 abort: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9736 if ( callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9737 callback( undefined, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9738 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9739 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9740 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9741 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9742 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9743 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9744
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9745 // Functions to create xhrs
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9746 function createStandardXHR() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9747 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9748 return new window.XMLHttpRequest();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9749 } catch( e ) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9750 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9751
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9752 function createActiveXHR() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9753 try {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9754 return new window.ActiveXObject( "Microsoft.XMLHTTP" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9755 } catch( e ) {}
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9756 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9757
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9758
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9759
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9760
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9761 // Install script dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9762 jQuery.ajaxSetup({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9763 accepts: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9764 script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9765 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9766 contents: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9767 script: /(?:java|ecma)script/
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9768 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9769 converters: {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9770 "text script": function( text ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9771 jQuery.globalEval( text );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9772 return text;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9773 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9774 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9775 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9776
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9777 // Handle cache's special case and global
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9778 jQuery.ajaxPrefilter( "script", function( s ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9779 if ( s.cache === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9780 s.cache = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9781 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9782 if ( s.crossDomain ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9783 s.type = "GET";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9784 s.global = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9785 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9786 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9787
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9788 // Bind script tag hack transport
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9789 jQuery.ajaxTransport( "script", function(s) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9790
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9791 // This transport only deals with cross domain requests
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9792 if ( s.crossDomain ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9793
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9794 var script,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9795 head = document.head || jQuery("head")[0] || document.documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9796
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9797 return {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9798
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9799 send: function( _, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9800
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9801 script = document.createElement("script");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9802
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9803 script.async = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9804
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9805 if ( s.scriptCharset ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9806 script.charset = s.scriptCharset;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9807 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9808
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9809 script.src = s.url;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9810
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9811 // Attach handlers for all browsers
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9812 script.onload = script.onreadystatechange = function( _, isAbort ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9813
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9814 if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9815
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9816 // Handle memory leak in IE
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9817 script.onload = script.onreadystatechange = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9818
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9819 // Remove the script
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9820 if ( script.parentNode ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9821 script.parentNode.removeChild( script );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9822 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9823
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9824 // Dereference the script
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9825 script = null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9826
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9827 // Callback if not abort
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9828 if ( !isAbort ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9829 callback( 200, "success" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9830 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9831 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9832 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9833
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9834 // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9835 // Use native DOM manipulation to avoid our domManip AJAX trickery
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9836 head.insertBefore( script, head.firstChild );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9837 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9838
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9839 abort: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9840 if ( script ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9841 script.onload( undefined, true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9842 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9843 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9844 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9845 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9846 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9847
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9848
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9849
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9850
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9851 var oldCallbacks = [],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9852 rjsonp = /(=)\?(?=&|$)|\?\?/;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9853
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9854 // Default jsonp settings
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9855 jQuery.ajaxSetup({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9856 jsonp: "callback",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9857 jsonpCallback: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9858 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9859 this[ callback ] = true;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9860 return callback;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9861 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9862 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9863
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9864 // Detect, normalize options and install callbacks for jsonp requests
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9865 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9866
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9867 var callbackName, overwritten, responseContainer,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9868 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9869 "url" :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9870 typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9871 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9872
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9873 // Handle iff the expected data type is "jsonp" or we have a parameter to set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9874 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9875
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9876 // Get callback name, remembering preexisting value associated with it
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9877 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9878 s.jsonpCallback() :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9879 s.jsonpCallback;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9880
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9881 // Insert callback into url or form data
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9882 if ( jsonProp ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9883 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9884 } else if ( s.jsonp !== false ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9885 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9886 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9887
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9888 // Use data converter to retrieve json after script execution
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9889 s.converters["script json"] = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9890 if ( !responseContainer ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9891 jQuery.error( callbackName + " was not called" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9892 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9893 return responseContainer[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9894 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9895
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9896 // force json dataType
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9897 s.dataTypes[ 0 ] = "json";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9898
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9899 // Install callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9900 overwritten = window[ callbackName ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9901 window[ callbackName ] = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9902 responseContainer = arguments;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9903 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9904
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9905 // Clean-up function (fires after converters)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9906 jqXHR.always(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9907 // Restore preexisting value
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9908 window[ callbackName ] = overwritten;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9909
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9910 // Save back as free
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9911 if ( s[ callbackName ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9912 // make sure that re-using the options doesn't screw things around
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9913 s.jsonpCallback = originalSettings.jsonpCallback;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9914
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9915 // save the callback name for future use
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9916 oldCallbacks.push( callbackName );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9917 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9918
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9919 // Call if it was a function and we have a response
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9920 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9921 overwritten( responseContainer[ 0 ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9922 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9923
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9924 responseContainer = overwritten = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9925 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9926
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9927 // Delegate to script
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9928 return "script";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9929 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9930 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9931
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9932
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9933
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9934
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9935 // data: string of html
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9936 // context (optional): If specified, the fragment will be created in this context, defaults to document
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9937 // keepScripts (optional): If true, will include scripts passed in the html string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9938 jQuery.parseHTML = function( data, context, keepScripts ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9939 if ( !data || typeof data !== "string" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9940 return null;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9941 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9942 if ( typeof context === "boolean" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9943 keepScripts = context;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9944 context = false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9945 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9946 context = context || document;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9947
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9948 var parsed = rsingleTag.exec( data ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9949 scripts = !keepScripts && [];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9950
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9951 // Single tag
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9952 if ( parsed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9953 return [ context.createElement( parsed[1] ) ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9954 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9955
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9956 parsed = jQuery.buildFragment( [ data ], context, scripts );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9957
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9958 if ( scripts && scripts.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9959 jQuery( scripts ).remove();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9960 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9961
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9962 return jQuery.merge( [], parsed.childNodes );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9963 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9964
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9965
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9966 // Keep a copy of the old load method
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9967 var _load = jQuery.fn.load;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9968
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9969 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9970 * Load a url into a page
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9971 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9972 jQuery.fn.load = function( url, params, callback ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9973 if ( typeof url !== "string" && _load ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9974 return _load.apply( this, arguments );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9975 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9976
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9977 var selector, response, type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9978 self = this,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9979 off = url.indexOf(" ");
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9980
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9981 if ( off >= 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9982 selector = jQuery.trim( url.slice( off, url.length ) );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9983 url = url.slice( 0, off );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9984 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9985
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9986 // If it's a function
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9987 if ( jQuery.isFunction( params ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9988
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9989 // We assume that it's the callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9990 callback = params;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9991 params = undefined;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9992
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9993 // Otherwise, build a param string
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9994 } else if ( params && typeof params === "object" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9995 type = "POST";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9996 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9997
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9998 // If we have elements to modify, make the request
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
9999 if ( self.length > 0 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10000 jQuery.ajax({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10001 url: url,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10002
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10003 // if "type" variable is undefined, then "GET" method will be used
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10004 type: type,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10005 dataType: "html",
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10006 data: params
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10007 }).done(function( responseText ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10008
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10009 // Save response for use in complete callback
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10010 response = arguments;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10011
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10012 self.html( selector ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10013
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10014 // If a selector was specified, locate the right elements in a dummy div
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10015 // Exclude scripts to avoid IE 'Permission Denied' errors
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10016 jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10017
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10018 // Otherwise use the full result
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10019 responseText );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10020
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10021 }).complete( callback && function( jqXHR, status ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10022 self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10023 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10024 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10025
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10026 return this;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10027 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10028
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10029
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10030
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10031
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10032 // Attach a bunch of functions for handling common AJAX events
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10033 jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10034 jQuery.fn[ type ] = function( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10035 return this.on( type, fn );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10036 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10037 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10038
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10039
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10040
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10041
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10042 jQuery.expr.filters.animated = function( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10043 return jQuery.grep(jQuery.timers, function( fn ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10044 return elem === fn.elem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10045 }).length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10046 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10047
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10048
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10049
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10050
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10051
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10052 var docElem = window.document.documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10053
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10054 /**
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10055 * Gets a window from an element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10056 */
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10057 function getWindow( elem ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10058 return jQuery.isWindow( elem ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10059 elem :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10060 elem.nodeType === 9 ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10061 elem.defaultView || elem.parentWindow :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10062 false;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10063 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10064
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10065 jQuery.offset = {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10066 setOffset: function( elem, options, i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10067 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10068 position = jQuery.css( elem, "position" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10069 curElem = jQuery( elem ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10070 props = {};
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10071
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10072 // set position first, in-case top/left are set even on static elem
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10073 if ( position === "static" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10074 elem.style.position = "relative";
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10075 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10076
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10077 curOffset = curElem.offset();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10078 curCSSTop = jQuery.css( elem, "top" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10079 curCSSLeft = jQuery.css( elem, "left" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10080 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10081 jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10082
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10083 // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10084 if ( calculatePosition ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10085 curPosition = curElem.position();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10086 curTop = curPosition.top;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10087 curLeft = curPosition.left;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10088 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10089 curTop = parseFloat( curCSSTop ) || 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10090 curLeft = parseFloat( curCSSLeft ) || 0;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10091 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10092
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10093 if ( jQuery.isFunction( options ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10094 options = options.call( elem, i, curOffset );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10095 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10096
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10097 if ( options.top != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10098 props.top = ( options.top - curOffset.top ) + curTop;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10099 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10100 if ( options.left != null ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10101 props.left = ( options.left - curOffset.left ) + curLeft;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10102 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10103
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10104 if ( "using" in options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10105 options.using.call( elem, props );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10106 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10107 curElem.css( props );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10108 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10109 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10110 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10111
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10112 jQuery.fn.extend({
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10113 offset: function( options ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10114 if ( arguments.length ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10115 return options === undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10116 this :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10117 this.each(function( i ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10118 jQuery.offset.setOffset( this, options, i );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10119 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10120 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10121
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10122 var docElem, win,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10123 box = { top: 0, left: 0 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10124 elem = this[ 0 ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10125 doc = elem && elem.ownerDocument;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10126
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10127 if ( !doc ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10128 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10129 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10130
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10131 docElem = doc.documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10132
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10133 // Make sure it's not a disconnected DOM node
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10134 if ( !jQuery.contains( docElem, elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10135 return box;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10136 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10137
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10138 // If we don't have gBCR, just use 0,0 rather than error
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10139 // BlackBerry 5, iOS 3 (original iPhone)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10140 if ( typeof elem.getBoundingClientRect !== strundefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10141 box = elem.getBoundingClientRect();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10142 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10143 win = getWindow( doc );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10144 return {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10145 top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10146 left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10147 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10148 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10149
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10150 position: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10151 if ( !this[ 0 ] ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10152 return;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10153 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10154
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10155 var offsetParent, offset,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10156 parentOffset = { top: 0, left: 0 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10157 elem = this[ 0 ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10158
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10159 // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10160 if ( jQuery.css( elem, "position" ) === "fixed" ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10161 // we assume that getBoundingClientRect is available when computed position is fixed
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10162 offset = elem.getBoundingClientRect();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10163 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10164 // Get *real* offsetParent
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10165 offsetParent = this.offsetParent();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10166
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10167 // Get correct offsets
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10168 offset = this.offset();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10169 if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10170 parentOffset = offsetParent.offset();
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10171 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10172
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10173 // Add offsetParent borders
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10174 parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10175 parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10176 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10177
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10178 // Subtract parent offsets and element margins
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10179 // note: when an element has margin: auto the offsetLeft and marginLeft
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10180 // are the same in Safari causing offset.left to incorrectly be 0
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10181 return {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10182 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10183 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10184 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10185 },
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10186
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10187 offsetParent: function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10188 return this.map(function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10189 var offsetParent = this.offsetParent || docElem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10190
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10191 while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10192 offsetParent = offsetParent.offsetParent;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10193 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10194 return offsetParent || docElem;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10195 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10196 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10197 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10198
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10199 // Create scrollLeft and scrollTop methods
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10200 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10201 var top = /Y/.test( prop );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10202
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10203 jQuery.fn[ method ] = function( val ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10204 return access( this, function( elem, method, val ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10205 var win = getWindow( elem );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10206
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10207 if ( val === undefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10208 return win ? (prop in win) ? win[ prop ] :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10209 win.document.documentElement[ method ] :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10210 elem[ method ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10211 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10212
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10213 if ( win ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10214 win.scrollTo(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10215 !top ? val : jQuery( win ).scrollLeft(),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10216 top ? val : jQuery( win ).scrollTop()
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10217 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10218
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10219 } else {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10220 elem[ method ] = val;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10221 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10222 }, method, val, arguments.length, null );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10223 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10224 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10225
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10226 // Add the top/left cssHooks using jQuery.fn.position
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10227 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10228 // getComputedStyle returns percent when specified for top/left/bottom/right
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10229 // rather than make the css module depend on the offset module, we just check for it here
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10230 jQuery.each( [ "top", "left" ], function( i, prop ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10231 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10232 function( elem, computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10233 if ( computed ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10234 computed = curCSS( elem, prop );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10235 // if curCSS returns percentage, fallback to offset
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10236 return rnumnonpx.test( computed ) ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10237 jQuery( elem ).position()[ prop ] + "px" :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10238 computed;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10239 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10240 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10241 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10242 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10243
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10244
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10245 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10246 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10247 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10248 // margin is only for outerHeight, outerWidth
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10249 jQuery.fn[ funcName ] = function( margin, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10250 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10251 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10252
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10253 return access( this, function( elem, type, value ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10254 var doc;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10255
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10256 if ( jQuery.isWindow( elem ) ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10257 // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10258 // isn't a whole lot we can do. See pull request at this URL for discussion:
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10259 // https://github.com/jquery/jquery/pull/764
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10260 return elem.document.documentElement[ "client" + name ];
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10261 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10262
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10263 // Get document width or height
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10264 if ( elem.nodeType === 9 ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10265 doc = elem.documentElement;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10266
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10267 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10268 // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10269 return Math.max(
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10270 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10271 elem.body[ "offset" + name ], doc[ "offset" + name ],
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10272 doc[ "client" + name ]
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10273 );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10274 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10275
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10276 return value === undefined ?
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10277 // Get width or height on the element, requesting but not forcing parseFloat
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10278 jQuery.css( elem, type, extra ) :
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10279
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10280 // Set width or height on the element
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10281 jQuery.style( elem, type, value, extra );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10282 }, type, chainable ? margin : undefined, chainable, null );
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10283 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10284 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10285 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10286
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10287
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10288 // The number of elements contained in the matched element set
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10289 jQuery.fn.size = function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10290 return this.length;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10291 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10292
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10293 jQuery.fn.andSelf = jQuery.fn.addBack;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10294
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10295
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10296
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10297
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10298 // Register as a named AMD module, since jQuery can be concatenated with other
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10299 // files that may use define, but not via a proper concatenation script that
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10300 // understands anonymous AMD modules. A named AMD is safest and most robust
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10301 // way to register. Lowercase jquery is used because AMD module names are
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10302 // derived from file names, and jQuery is normally delivered in a lowercase
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10303 // file name. Do this after creating the global so that if an AMD module wants
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10304 // to call noConflict to hide this version of jQuery, it will work.
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10305
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10306 // Note that for maximum portability, libraries that are not jQuery should
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10307 // declare themselves as anonymous modules, and avoid setting a global if an
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10308 // AMD loader is present. jQuery is a special case. For more information, see
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10309 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10310
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10311 if ( typeof define === "function" && define.amd ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10312 define( "jquery", [], function() {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10313 return jQuery;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10314 });
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10315 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10316
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10317
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10318
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10319
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10320 var
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10321 // Map over jQuery in case of overwrite
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10322 _jQuery = window.jQuery,
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10323
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10324 // Map over the $ in case of overwrite
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10325 _$ = window.$;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10326
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10327 jQuery.noConflict = function( deep ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10328 if ( window.$ === jQuery ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10329 window.$ = _$;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10330 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10331
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10332 if ( deep && window.jQuery === jQuery ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10333 window.jQuery = _jQuery;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10334 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10335
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10336 return jQuery;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10337 };
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10338
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10339 // Expose jQuery and $ identifiers, even in
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10340 // AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10341 // and CommonJS for browser emulators (#13566)
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10342 if ( typeof noGlobal === strundefined ) {
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10343 window.jQuery = window.$ = jQuery;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10344 }
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10345
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10346
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10347
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10348
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10349 return jQuery;
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10350
f82512502b31 Initial commit for query builder, still need to tailor for ISMI purposes
alistair
parents:
diff changeset
10351 }));