diff --git a/README.md b/README.md
index ca076e0a..48f6f7ee 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,11 @@
# jquery-rails
+## Customize
+1. **customize this gem with downversion jquery 1.12.4 to 1.11.1 for incompability of upgrading rails 4.2.11.1**
+2. **emberjs 1.6.1(jquery1.11.1) & activeadmin1.4.3(jquery3)**
+3. **please check file: VERSIONS.md**
+
+
jQuery! For Rails! So great.
This gem provides:
diff --git a/VERSIONS.md b/VERSIONS.md
index 7768a85f..f1ae24eb 100644
--- a/VERSIONS.md
+++ b/VERSIONS.md
@@ -1,5 +1,9 @@
# Bundled Versions
+
+customize 4.3.5 with downversion jquery1.12.4 to 1.11.1
+
+
| Gem | jQuery | jQuery UJS | jQuery UI |
|--------|--------|------------| ----------|
| 4.3.5 | 1.12.4 & 2.2.4 & 3.4.1 | 1.2.2 | - |
diff --git a/lib/jquery/rails/version.rb b/lib/jquery/rails/version.rb
index 0310e7fa..2dec7bed 100644
--- a/lib/jquery/rails/version.rb
+++ b/lib/jquery/rails/version.rb
@@ -1,9 +1,11 @@
module Jquery
module Rails
VERSION = "4.3.5"
- JQUERY_VERSION = "1.12.4"
+ # JQUERY_VERSION = "1.12.4"
+ JQUERY_VERSION = "1.11.1"
JQUERY_2_VERSION = "2.2.4"
JQUERY_3_VERSION = "3.4.1"
JQUERY_UJS_VERSION = "1.2.2"
+ # JQUERY_UJS_VERSION = "1.0.4"
end
end
diff --git a/vendor/assets/javascripts/jquery.js b/vendor/assets/javascripts/jquery.js
old mode 100644
new mode 100755
index 7fc60fca..d4b67f7e
--- a/vendor/assets/javascripts/jquery.js
+++ b/vendor/assets/javascripts/jquery.js
@@ -1,27 +1,27 @@
/*!
- * jQuery JavaScript Library v1.12.4
+ * jQuery JavaScript Library v1.11.1
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
*
- * Copyright jQuery Foundation and other contributors
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
- * Date: 2016-05-20T17:17Z
+ * Date: 2014-05-01T17:42Z
*/
(function( global, factory ) {
if ( typeof module === "object" && typeof module.exports === "object" ) {
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
+ // For CommonJS and CommonJS-like environments where a proper window is present,
+ // execute the factory and get jQuery
+ // For environments that do not inherently posses a window with a document
+ // (such as Node.js), expose a jQuery-making factory as module.exports
+ // This accentuates the need for the creation of a real window
// e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
+ // See ticket #14549 for more info
module.exports = global.document ?
factory( global, true ) :
function( w ) {
@@ -37,14 +37,13 @@
// Pass this if window is not defined yet
}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-// Support: Firefox 18+
-// Can't be in strict mode, several libs including ASP.NET trace
+// Can't do this because several apps including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
// you try to trace through "use strict" call chains. (#13335)
-//"use strict";
-var deletedIds = [];
+// Support: Firefox 18+
+//
-var document = window.document;
+var deletedIds = [];
var slice = deletedIds.slice;
@@ -65,11 +64,10 @@ var support = {};
var
- version = "1.12.4",
+ version = "1.11.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
-
// The jQuery object is actually just the init constructor 'enhanced'
// Need init if jQuery is called (just allow error to be thrown if not included)
return new jQuery.fn.init( selector, context );
@@ -89,7 +87,6 @@ var
};
jQuery.fn = jQuery.prototype = {
-
// The current version of jQuery being used
jquery: version,
@@ -133,14 +130,16 @@ jQuery.fn = jQuery.prototype = {
},
// Execute a callback for every element in the matched set.
- each: function( callback ) {
- return jQuery.each( this, callback );
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
},
map: function( callback ) {
- return this.pushStack( jQuery.map( this, function( elem, i ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
return callback.call( elem, i, elem );
- } ) );
+ }));
},
slice: function() {
@@ -158,11 +157,11 @@ jQuery.fn = jQuery.prototype = {
eq: function( i ) {
var len = this.length,
j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+ return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
},
end: function() {
- return this.prevObject || this.constructor();
+ return this.prevObject || this.constructor(null);
},
// For internal use only.
@@ -174,7 +173,7 @@ jQuery.fn = jQuery.prototype = {
jQuery.extend = jQuery.fn.extend = function() {
var src, copyIsArray, copy, name, options, clone,
- target = arguments[ 0 ] || {},
+ target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
@@ -189,7 +188,7 @@ jQuery.extend = jQuery.fn.extend = function() {
}
// Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
@@ -200,10 +199,8 @@ jQuery.extend = jQuery.fn.extend = function() {
}
for ( ; i < length; i++ ) {
-
// Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
-
+ if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
@@ -215,15 +212,13 @@ jQuery.extend = jQuery.fn.extend = function() {
}
// Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
- ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
-
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
- clone = src && jQuery.isArray( src ) ? src : [];
+ clone = src && jQuery.isArray(src) ? src : [];
} else {
- clone = src && jQuery.isPlainObject( src ) ? src : {};
+ clone = src && jQuery.isPlainObject(src) ? src : {};
}
// Never move original objects, clone them
@@ -241,8 +236,7 @@ jQuery.extend = jQuery.fn.extend = function() {
return target;
};
-jQuery.extend( {
-
+jQuery.extend({
// Unique for each copy of jQuery on the page
expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
@@ -259,11 +253,11 @@ jQuery.extend( {
// Since version 1.3, DOM methods and functions like alert
// aren't supported. They return false on IE (#2968).
isFunction: function( obj ) {
- return jQuery.type( obj ) === "function";
+ return jQuery.type(obj) === "function";
},
isArray: Array.isArray || function( obj ) {
- return jQuery.type( obj ) === "array";
+ return jQuery.type(obj) === "array";
},
isWindow: function( obj ) {
@@ -272,13 +266,10 @@ jQuery.extend( {
},
isNumeric: function( obj ) {
-
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
- // adding 1 corrects loss of precision from parseFloat (#15100)
- var realStringObj = obj && obj.toString();
- return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
+ return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
},
isEmptyObject: function( obj ) {
@@ -295,27 +286,25 @@ jQuery.extend( {
// Must be an Object.
// Because of IE, we also have to check the presence of the constructor property.
// Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
try {
-
// Not own constructor property must be Object
if ( obj.constructor &&
- !hasOwn.call( obj, "constructor" ) &&
- !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+ !hasOwn.call(obj, "constructor") &&
+ !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
} catch ( e ) {
-
// IE8,9 Will throw exceptions on certain host objects #9897
return false;
}
// Support: IE<9
// Handle iteration over inherited properties before own properties.
- if ( !support.ownFirst ) {
+ if ( support.ownLast ) {
for ( key in obj ) {
return hasOwn.call( obj, key );
}
@@ -333,20 +322,20 @@ jQuery.extend( {
return obj + "";
}
return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call( obj ) ] || "object" :
+ class2type[ toString.call(obj) ] || "object" :
typeof obj;
},
+ // Evaluates a script in a global context
// Workarounds based on findings by Jim Driscoll
// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
globalEval: function( data ) {
if ( data && jQuery.trim( data ) ) {
-
// We use execScript on Internet Explorer
// We use an anonymous function so that context is window
// rather than jQuery in Firefox
( window.execScript || function( data ) {
- window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation
+ window[ "eval" ].call( window, data );
} )( data );
}
},
@@ -361,20 +350,49 @@ jQuery.extend( {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
},
- each: function( obj, callback ) {
- var length, i = 0;
+ // args is for internal usage only
+ each: function( obj, callback, args ) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike( obj );
+
+ if ( args ) {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.apply( obj[ i ], args );
- if ( isArrayLike( obj ) ) {
- length = obj.length;
- for ( ; i < length; i++ ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
}
}
+
+ // A special, fast, case for the most common use of each
} else {
- for ( i in obj ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
}
}
}
@@ -394,7 +412,7 @@ jQuery.extend( {
var ret = results || [];
if ( arr != null ) {
- if ( isArrayLike( Object( arr ) ) ) {
+ if ( isArraylike( Object(arr) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
@@ -419,7 +437,6 @@ jQuery.extend( {
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
for ( ; i < len; i++ ) {
-
// Skip accessing in sparse arrays
if ( i in arr && arr[ i ] === elem ) {
return i;
@@ -442,7 +459,7 @@ jQuery.extend( {
// Support: IE<9
// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
if ( len !== len ) {
- while ( second[ j ] !== undefined ) {
+ while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}
@@ -473,13 +490,14 @@ jQuery.extend( {
// arg is for internal usage only
map: function( elems, callback, arg ) {
- var length, value,
+ var value,
i = 0,
+ length = elems.length,
+ isArray = isArraylike( elems ),
ret = [];
// Go through the array, translating each of the items to their new values
- if ( isArrayLike( elems ) ) {
- length = elems.length;
+ if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
@@ -542,50 +560,38 @@ jQuery.extend( {
// jQuery.support is not used in Core but other projects attach their
// properties to it so it needs to exist.
support: support
-} );
-
-// JSHint would error on this code due to the Symbol not being defined in ES5.
-// Defining this global in .jshintrc would create a danger of using the global
-// unguarded in another place, it seems safer to just disable JSHint for these
-// three lines.
-/* jshint ignore: start */
-if ( typeof Symbol === "function" ) {
- jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];
-}
-/* jshint ignore: end */
+});
// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
+});
- // Support: iOS 8.2 (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = !!obj && "length" in obj && obj.length,
+function isArraylike( obj ) {
+ var length = obj.length,
type = jQuery.type( obj );
if ( type === "function" || jQuery.isWindow( obj ) ) {
return false;
}
+ if ( obj.nodeType === 1 && length ) {
+ return true;
+ }
+
return type === "array" || length === 0 ||
typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}
var Sizzle =
/*!
- * Sizzle CSS Selector Engine v2.2.1
+ * Sizzle CSS Selector Engine v1.10.19
* http://sizzlejs.com/
*
- * Copyright jQuery Foundation and other contributors
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
- * Date: 2015-10-17
+ * Date: 2014-04-18
*/
(function( window ) {
@@ -612,7 +618,7 @@ var i,
contains,
// Instance-specific data
- expando = "sizzle" + 1 * new Date(),
+ expando = "sizzle" + -(new Date()),
preferredDoc = window.document,
dirruns = 0,
done = 0,
@@ -627,6 +633,7 @@ var i,
},
// General-purpose constants
+ strundefined = typeof undefined,
MAX_NEGATIVE = 1 << 31,
// Instance methods
@@ -636,13 +643,12 @@ var i,
push_native = arr.push,
push = arr.push,
slice = arr.slice,
- // Use a stripped-down indexOf as it's faster than native
- // http://jsperf.com/thor-indexof-vs-for/5
- indexOf = function( list, elem ) {
+ // Use a stripped-down indexOf if we can't use a native one
+ indexOf = arr.indexOf || function( elem ) {
var i = 0,
- len = list.length;
+ len = this.length;
for ( ; i < len; i++ ) {
- if ( list[i] === elem ) {
+ if ( this[i] === elem ) {
return i;
}
}
@@ -653,21 +659,25 @@ var i,
// Regular expressions
- // http://www.w3.org/TR/css3-selectors/#whitespace
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
- // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace( "w", "w#" ),
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
// Operator (capture 2)
"*([*^$|!~]?=)" + whitespace +
// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
"*\\]",
- pseudos = ":(" + identifier + ")(?:\\((" +
+ pseudos = ":(" + characterEncoding + ")(?:\\((" +
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
// 1. quoted (capture 3; capture 4 or capture 5)
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
@@ -678,7 +688,6 @@ var i,
")\\)|)",
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp( whitespace + "+", "g" ),
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
@@ -690,9 +699,9 @@ var i,
ridentifier = new RegExp( "^" + identifier + "$" ),
matchExpr = {
- "ID": new RegExp( "^#(" + identifier + ")" ),
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+ "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+ "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+ "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
"ATTR": new RegExp( "^" + attributes ),
"PSEUDO": new RegExp( "^" + pseudos ),
"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
@@ -730,14 +739,6 @@ var i,
String.fromCharCode( high + 0x10000 ) :
// Supplemental Plane codepoint (surrogate pair)
String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- },
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function() {
- setDocument();
};
// Optimize for push.apply( _, NodeList )
@@ -770,129 +771,104 @@ try {
}
function Sizzle( selector, context, results, seed ) {
- var m, i, elem, nid, nidselect, match, groups, newSelector,
- newContext = context && context.ownerDocument,
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
- // nodeType defaults to 9, since context defaults to document
- nodeType = context ? context.nodeType : 9;
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+ context = context || document;
results = results || [];
- // Return early from calls with invalid selector or context
- if ( typeof selector !== "string" || !selector ||
- nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
+ if ( !selector || typeof selector !== "string" ) {
return results;
}
- // Try to shortcut find operations (as opposed to filters) in HTML documents
- if ( !seed ) {
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
- context = context || document;
-
- if ( documentIsHTML ) {
-
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
- // (excepting DocumentFragment context, where the methods don't exist)
- if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
- // ID selector
- if ( (m = match[1]) ) {
-
- // Document context
- if ( nodeType === 9 ) {
- if ( (elem = context.getElementById( m )) ) {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
-
- // Element context
- } else {
+ if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+ return [];
+ }
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( newContext && (elem = newContext.getElementById( m )) &&
- contains( context, elem ) &&
- elem.id === m ) {
+ if ( documentIsHTML && !seed ) {
+ // Shortcuts
+ if ( (match = rquickExpr.exec( selector )) ) {
+ // Speed-up: Sizzle("#ID")
+ if ( (m = match[1]) ) {
+ if ( nodeType === 9 ) {
+ elem = context.getElementById( m );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document (jQuery #6963)
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if ( elem.id === m ) {
results.push( elem );
return results;
}
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+ contains( context, elem ) && elem.id === m ) {
+ results.push( elem );
+ return results;
}
-
- // Type selector
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Class selector
- } else if ( (m = match[3]) && support.getElementsByClassName &&
- context.getElementsByClassName ) {
-
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
}
- }
- // Take advantage of querySelectorAll
- if ( support.qsa &&
- !compilerCache[ selector + " " ] &&
- (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+ // Speed-up: Sizzle("TAG")
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
- if ( nodeType !== 1 ) {
- newContext = context;
- newSelector = selector;
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
- // qSA looks outside Element context, which is not what we want
- // Thanks to Andrew Dupont for this workaround technique
- // Support: IE <=8
- // Exclude object elements
- } else if ( context.nodeName.toLowerCase() !== "object" ) {
+ // QSA path
+ if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType === 9 && selector;
- // Capture the context ID, setting it first if necessary
- if ( (nid = context.getAttribute( "id" )) ) {
- nid = nid.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", (nid = expando) );
- }
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
- // Prefix every selector in the list
- groups = tokenize( selector );
- i = groups.length;
- nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
- while ( i-- ) {
- groups[i] = nidselect + " " + toSelector( groups[i] );
- }
- newSelector = groups.join( "," );
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
+ } else {
+ context.setAttribute( "id", nid );
+ }
+ nid = "[id='" + nid + "'] ";
- // Expand context for sibling selectors
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
- context;
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + toSelector( groups[i] );
}
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
+ newSelector = groups.join(",");
+ }
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch ( qsaError ) {
- } finally {
- if ( nid === expando ) {
- context.removeAttribute( "id" );
- }
+ if ( newSelector ) {
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch(qsaError) {
+ } finally {
+ if ( !old ) {
+ context.removeAttribute("id");
}
}
}
@@ -905,7 +881,7 @@ function Sizzle( selector, context, results, seed ) {
/**
* Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
* property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
* deleting the oldest entry
*/
@@ -960,7 +936,7 @@ function assert( fn ) {
*/
function addHandle( attrs, handler ) {
var arr = attrs.split("|"),
- i = arr.length;
+ i = attrs.length;
while ( i-- ) {
Expr.attrHandle[ arr[i] ] = handler;
@@ -1046,7 +1022,7 @@ function createPositionalPseudo( fn ) {
* @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
*/
function testContext( context ) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
+ return context && typeof context.getElementsByTagName !== strundefined && context;
}
// Expose support vars for convenience
@@ -1070,29 +1046,36 @@ isXML = Sizzle.isXML = function( elem ) {
* @returns {Object} Returns the current document
*/
setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare, parent,
- doc = node ? node.ownerDocument || node : preferredDoc;
+ var hasCompare,
+ doc = node ? node.ownerDocument || node : preferredDoc,
+ parent = doc.defaultView;
- // Return early if doc is invalid or already selected
+ // If no document and documentElement is available, return
if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
return document;
}
- // Update global variables
+ // Set our document
document = doc;
- docElem = document.documentElement;
- documentIsHTML = !isXML( document );
+ docElem = doc.documentElement;
- // Support: IE 9-11, Edge
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
- if ( (parent = document.defaultView) && parent.top !== parent ) {
- // Support: IE 11
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", unloadHandler, false );
+ // Support tests
+ documentIsHTML = !isXML( doc );
- // Support: IE 9 - 10 only
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if ( parent && parent !== parent.top ) {
+ // IE11 does not have attachEvent, so all must suffer
+ if ( parent.addEventListener ) {
+ parent.addEventListener( "unload", function() {
+ setDocument();
+ }, false );
} else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", unloadHandler );
+ parent.attachEvent( "onunload", function() {
+ setDocument();
+ });
}
}
@@ -1100,8 +1083,7 @@ setDocument = Sizzle.setDocument = function( node ) {
---------------------------------------------------------------------- */
// Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
+ // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
support.attributes = assert(function( div ) {
div.className = "i";
return !div.getAttribute("className");
@@ -1112,12 +1094,21 @@ setDocument = Sizzle.setDocument = function( node ) {
// Check if getElementsByTagName("*") returns only elements
support.getElementsByTagName = assert(function( div ) {
- div.appendChild( document.createComment("") );
+ div.appendChild( doc.createComment("") );
return !div.getElementsByTagName("*").length;
});
- // Support: IE<9
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+ // Check if getElementsByClassName can be trusted
+ support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
+ div.innerHTML = "
";
+
+ // Support: Safari<4
+ // Catch class over-caching
+ div.firstChild.className = "i";
+ // Support: Opera<10
+ // Catch gEBCN failure to find non-leading classes
+ return div.getElementsByClassName("i").length === 2;
+ });
// Support: IE<10
// Check if getElementById returns elements by name
@@ -1125,15 +1116,17 @@ setDocument = Sizzle.setDocument = function( node ) {
// so use a roundabout getElementsByName test
support.getById = assert(function( div ) {
docElem.appendChild( div ).id = expando;
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
+ return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
});
// ID find and filter
if ( support.getById ) {
Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
var m = context.getElementById( id );
- return m ? [ m ] : [];
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [ m ] : [];
}
};
Expr.filter["ID"] = function( id ) {
@@ -1150,8 +1143,7 @@ setDocument = Sizzle.setDocument = function( node ) {
Expr.filter["ID"] = function( id ) {
var attrId = id.replace( runescape, funescape );
return function( elem ) {
- var node = typeof elem.getAttributeNode !== "undefined" &&
- elem.getAttributeNode("id");
+ var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
return node && node.value === attrId;
};
};
@@ -1160,20 +1152,14 @@ setDocument = Sizzle.setDocument = function( node ) {
// Tag
Expr.find["TAG"] = support.getElementsByTagName ?
function( tag, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
+ if ( typeof context.getElementsByTagName !== strundefined ) {
return context.getElementsByTagName( tag );
-
- // DocumentFragment nodes don't have gEBTN
- } else if ( support.qsa ) {
- return context.querySelectorAll( tag );
}
} :
-
function( tag, context ) {
var elem,
tmp = [],
i = 0,
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
results = context.getElementsByTagName( tag );
// Filter out possible comments
@@ -1191,7 +1177,7 @@ setDocument = Sizzle.setDocument = function( node ) {
// Class
Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+ if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
return context.getElementsByClassName( className );
}
};
@@ -1211,7 +1197,7 @@ setDocument = Sizzle.setDocument = function( node ) {
// See http://bugs.jquery.com/ticket/13378
rbuggyQSA = [];
- if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+ if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
// Build QSA regex
// Regex strategy adopted from Diego Perini
assert(function( div ) {
@@ -1220,15 +1206,13 @@ setDocument = Sizzle.setDocument = function( node ) {
// setting a boolean content attribute,
// since its presence should be enough
// http://bugs.jquery.com/ticket/12359
- docElem.appendChild( div ).innerHTML = "" +
- "";
+ div.innerHTML = "";
// Support: IE8, Opera 11-12.16
// Nothing should be selected when empty strings follow ^= or $= or *=
// The test attribute must be unknown in Opera but "safe" for WinRT
// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+ if ( div.querySelectorAll("[msallowclip^='']").length ) {
rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
}
@@ -1238,30 +1222,18 @@ setDocument = Sizzle.setDocument = function( node ) {
rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
}
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
- if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
- rbuggyQSA.push("~=");
- }
-
// Webkit/Opera - :checked should return selected option elements
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
// IE8 throws error here and will not see later tests
if ( !div.querySelectorAll(":checked").length ) {
rbuggyQSA.push(":checked");
}
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibing-combinator selector` fails
- if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
- rbuggyQSA.push(".#.+[+~]");
- }
});
assert(function( div ) {
// Support: Windows 8 Native Apps
// The type and name attributes are restricted during .innerHTML assignment
- var input = document.createElement("input");
+ var input = doc.createElement("input");
input.setAttribute( "type", "hidden" );
div.appendChild( input ).setAttribute( "name", "D" );
@@ -1309,7 +1281,7 @@ setDocument = Sizzle.setDocument = function( node ) {
hasCompare = rnative.test( docElem.compareDocumentPosition );
// Element contains another
- // Purposefully self-exclusive
+ // Purposefully does not implement inclusive descendent
// As in, an element does not contain itself
contains = hasCompare || rnative.test( docElem.contains ) ?
function( a, b ) {
@@ -1363,16 +1335,16 @@ setDocument = Sizzle.setDocument = function( node ) {
(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
// Choose the first element that is related to our preferred document
- if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+ if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
return -1;
}
- if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+ if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
return 1;
}
// Maintain original order
return sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
0;
}
@@ -1394,12 +1366,12 @@ setDocument = Sizzle.setDocument = function( node ) {
// Parentless nodes are either documents or disconnected
if ( !aup || !bup ) {
- return a === document ? -1 :
- b === document ? 1 :
+ return a === doc ? -1 :
+ b === doc ? 1 :
aup ? -1 :
bup ? 1 :
sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
0;
// If the nodes are siblings, we can do a quick check
@@ -1432,7 +1404,7 @@ setDocument = Sizzle.setDocument = function( node ) {
0;
};
- return document;
+ return doc;
};
Sizzle.matches = function( expr, elements ) {
@@ -1449,7 +1421,6 @@ Sizzle.matchesSelector = function( elem, expr ) {
expr = expr.replace( rattributeQuotes, "='$1']" );
if ( support.matchesSelector && documentIsHTML &&
- !compilerCache[ expr + " " ] &&
( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
@@ -1463,7 +1434,7 @@ Sizzle.matchesSelector = function( elem, expr ) {
elem.document && elem.document.nodeType !== 11 ) {
return ret;
}
- } catch (e) {}
+ } catch(e) {}
}
return Sizzle( expr, document, null, [ elem ] ).length > 0;
@@ -1682,7 +1653,7 @@ Expr = Sizzle.selectors = {
return pattern ||
(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
});
},
@@ -1704,7 +1675,7 @@ Expr = Sizzle.selectors = {
operator === "^=" ? check && result.indexOf( check ) === 0 :
operator === "*=" ? check && result.indexOf( check ) > -1 :
operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+ operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
false;
};
@@ -1723,12 +1694,11 @@ Expr = Sizzle.selectors = {
} :
function( elem, context, xml ) {
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
+ var cache, outerCache, node, diff, nodeIndex, start,
dir = simple !== forward ? "nextSibling" : "previousSibling",
parent = elem.parentNode,
name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType,
- diff = false;
+ useCache = !xml && !ofType;
if ( parent ) {
@@ -1737,10 +1707,7 @@ Expr = Sizzle.selectors = {
while ( dir ) {
node = elem;
while ( (node = node[ dir ]) ) {
- if ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) {
-
+ if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
return false;
}
}
@@ -1754,21 +1721,11 @@ Expr = Sizzle.selectors = {
// non-xml :nth-child(...) stores cache data on `parent`
if ( forward && useCache ) {
-
// Seek `elem` from a previously-cached index
-
- // ...in a gzip-friendly way
- node = parent;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex && cache[ 2 ];
+ outerCache = parent[ expando ] || (parent[ expando ] = {});
+ cache = outerCache[ type ] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
node = nodeIndex && parent.childNodes[ nodeIndex ];
while ( (node = ++nodeIndex && node && node[ dir ] ||
@@ -1778,55 +1735,29 @@ Expr = Sizzle.selectors = {
// When found, cache indexes on `parent` and break
if ( node.nodeType === 1 && ++diff && node === elem ) {
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+ outerCache[ type ] = [ dirruns, nodeIndex, diff ];
break;
}
}
- } else {
- // Use previously-cached element index if available
- if ( useCache ) {
- // ...in a gzip-friendly way
- node = elem;
- outerCache = node[ expando ] || (node[ expando ] = {});
+ // Use previously-cached element index if available
+ } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+ diff = cache[1];
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // Use the same loop as above to seek `elem` from the start
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+ (diff = nodeIndex = 0) || start.pop()) ) {
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex;
- }
+ if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+ }
- // xml :nth-child(...)
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
- if ( diff === false ) {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) &&
- ++diff ) {
-
- // Cache the index of each encountered element
- if ( useCache ) {
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- uniqueCache[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
+ if ( node === elem ) {
+ break;
}
}
}
@@ -1864,7 +1795,7 @@ Expr = Sizzle.selectors = {
matched = fn( seed, argument ),
i = matched.length;
while ( i-- ) {
- idx = indexOf( seed, matched[i] );
+ idx = indexOf.call( seed, matched[i] );
seed[ idx ] = !( matches[ idx ] = matched[i] );
}
}) :
@@ -1903,8 +1834,6 @@ Expr = Sizzle.selectors = {
function( elem, context, xml ) {
input[0] = elem;
matcher( input, null, xml, results );
- // Don't keep the element (issue #299)
- input[0] = null;
return !results.pop();
};
}),
@@ -1916,7 +1845,6 @@ Expr = Sizzle.selectors = {
}),
"contains": markFunction(function( text ) {
- text = text.replace( runescape, funescape );
return function( elem ) {
return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
};
@@ -2188,10 +2116,10 @@ function addCombinator( matcher, combinator, base ) {
// Check against all ancestor/preceding elements
function( elem, context, xml ) {
- var oldCache, uniqueCache, outerCache,
+ var oldCache, outerCache,
newCache = [ dirruns, doneName ];
- // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
if ( xml ) {
while ( (elem = elem[ dir ]) ) {
if ( elem.nodeType === 1 || checkNonElements ) {
@@ -2204,19 +2132,14 @@ function addCombinator( matcher, combinator, base ) {
while ( (elem = elem[ dir ]) ) {
if ( elem.nodeType === 1 || checkNonElements ) {
outerCache = elem[ expando ] || (elem[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
- if ( (oldCache = uniqueCache[ dir ]) &&
+ if ( (oldCache = outerCache[ dir ]) &&
oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
// Assign to newCache so results back-propagate to previous elements
return (newCache[ 2 ] = oldCache[ 2 ]);
} else {
// Reuse newcache so results back-propagate to previous elements
- uniqueCache[ dir ] = newCache;
+ outerCache[ dir ] = newCache;
// A match means we're done; a fail means we have to keep checking
if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
@@ -2343,7 +2266,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
i = matcherOut.length;
while ( i-- ) {
if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+ (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
seed[temp] = !(results[temp] = elem);
}
@@ -2378,16 +2301,13 @@ function matcherFromTokens( tokens ) {
return elem === checkContext;
}, implicitRelative, true ),
matchAnyContext = addCombinator( function( elem ) {
- return indexOf( checkContext, elem ) > -1;
+ return indexOf.call( checkContext, elem ) > -1;
}, implicitRelative, true ),
matchers = [ function( elem, context, xml ) {
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
(checkContext = context).nodeType ?
matchContext( elem, context, xml ) :
matchAnyContext( elem, context, xml ) );
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
} ];
for ( ; i < len; i++ ) {
@@ -2441,21 +2361,18 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
len = elems.length;
if ( outermost ) {
- outermostContext = context === document || context || outermost;
+ outermostContext = context !== document && context;
}
// Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
// Support: IE<9, Safari
// Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id
for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
if ( byElement && elem ) {
j = 0;
- if ( !context && elem.ownerDocument !== document ) {
- setDocument( elem );
- xml = !documentIsHTML;
- }
while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context || document, xml) ) {
+ if ( matcher( elem, context, xml ) ) {
results.push( elem );
break;
}
@@ -2479,17 +2396,8 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
}
}
- // `i` is now the count of elements visited above, and adding it to `matchedCount`
- // makes the latter nonnegative.
- matchedCount += i;
-
// Apply set filters to unmatched elements
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
- // no element matchers and no seed.
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
- // numerically zero.
+ matchedCount += i;
if ( bySet && i !== matchedCount ) {
j = 0;
while ( (matcher = setMatchers[j++]) ) {
@@ -2581,11 +2489,10 @@ select = Sizzle.select = function( selector, context, results, seed ) {
results = results || [];
- // Try to minimize operations if there is only one selector in the list and no seed
- // (the latter of which guarantees us context)
+ // Try to minimize operations if there is no seed and only one group
if ( match.length === 1 ) {
- // Reduce context if the leading compound selector is an ID
+ // Take a shortcut and set the context if the root selector is an ID
tokens = match[0] = match[0].slice( 0 );
if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
support.getById && context.nodeType === 9 && documentIsHTML &&
@@ -2640,7 +2547,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
context,
!documentIsHTML,
results,
- !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+ rsibling.test( selector ) && testContext( context.parentNode ) || context
);
return results;
};
@@ -2650,7 +2557,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
// Sort stability
support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-// Support: Chrome 14-35+
+// Support: Chrome<14
// Always assume duplicates if they aren't passed to the comparison function
support.detectDuplicates = !!hasDuplicate;
@@ -2716,46 +2623,17 @@ return Sizzle;
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;
-var dir = function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
-};
-
-
-var siblings = function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
-};
-
-
var rneedsContext = jQuery.expr.match.needsContext;
-var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
+var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
@@ -2767,14 +2645,14 @@ function winnow( elements, qualifier, not ) {
return jQuery.grep( elements, function( elem, i ) {
/* jshint -W018 */
return !!qualifier.call( elem, i, elem ) !== not;
- } );
+ });
}
if ( qualifier.nodeType ) {
return jQuery.grep( elements, function( elem ) {
return ( elem === qualifier ) !== not;
- } );
+ });
}
@@ -2787,8 +2665,8 @@ function winnow( elements, qualifier, not ) {
}
return jQuery.grep( elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;
- } );
+ return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
+ });
}
jQuery.filter = function( expr, elems, not ) {
@@ -2802,10 +2680,10 @@ jQuery.filter = function( expr, elems, not ) {
jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
return elem.nodeType === 1;
- } ) );
+ }));
};
-jQuery.fn.extend( {
+jQuery.fn.extend({
find: function( selector ) {
var i,
ret = [],
@@ -2813,13 +2691,13 @@ jQuery.fn.extend( {
len = self.length;
if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter( function() {
+ return this.pushStack( jQuery( selector ).filter(function() {
for ( i = 0; i < len; i++ ) {
if ( jQuery.contains( self[ i ], this ) ) {
return true;
}
}
- } ) );
+ }) );
}
for ( i = 0; i < len; i++ ) {
@@ -2832,10 +2710,10 @@ jQuery.fn.extend( {
return ret;
},
filter: function( selector ) {
- return this.pushStack( winnow( this, selector || [], false ) );
+ return this.pushStack( winnow(this, selector || [], false) );
},
not: function( selector ) {
- return this.pushStack( winnow( this, selector || [], true ) );
+ return this.pushStack( winnow(this, selector || [], true) );
},
is: function( selector ) {
return !!winnow(
@@ -2849,7 +2727,7 @@ jQuery.fn.extend( {
false
).length;
}
-} );
+});
// Initialize a jQuery object
@@ -2858,12 +2736,15 @@ jQuery.fn.extend( {
// A central reference to the root jQuery(document)
var rootjQuery,
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
// A simple way to check for HTML strings
// Prioritize #id over to avoid XSS via location.hash (#9521)
// Strict HTML recognition (#11290: must start with <)
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
- init = jQuery.fn.init = function( selector, context, root ) {
+ init = jQuery.fn.init = function( selector, context ) {
var match, elem;
// HANDLE: $(""), $(null), $(undefined), $(false)
@@ -2871,16 +2752,9 @@ var rootjQuery,
return this;
}
- // init accepts an alternate rootjQuery
- // so migrate can support jQuery.sub (gh-2101)
- root = root || rootjQuery;
-
// Handle HTML strings
if ( typeof selector === "string" ) {
- if ( selector.charAt( 0 ) === "<" &&
- selector.charAt( selector.length - 1 ) === ">" &&
- selector.length >= 3 ) {
-
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
// Assume that strings that start and end with <> are HTML and skip the regex check
match = [ null, selector, null ];
@@ -2889,24 +2763,23 @@ var rootjQuery,
}
// Match html or make sure no context is specified for #id
- if ( match && ( match[ 1 ] || !context ) ) {
+ if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
- if ( match[ 1 ] ) {
- context = context instanceof jQuery ? context[ 0 ] : context;
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
// scripts is true for back-compat
// Intentionally let the error be thrown if parseHTML is not present
jQuery.merge( this, jQuery.parseHTML(
- match[ 1 ],
+ match[1],
context && context.nodeType ? context.ownerDocument || context : document,
true
) );
// HANDLE: $(html, props)
- if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+ if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
for ( match in context ) {
-
// Properties of context are called as methods if possible
if ( jQuery.isFunction( this[ match ] ) ) {
this[ match ]( context[ match ] );
@@ -2922,21 +2795,20 @@ var rootjQuery,
// HANDLE: $(#id)
} else {
- elem = document.getElementById( match[ 2 ] );
+ elem = document.getElementById( match[2] );
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if ( elem && elem.parentNode ) {
-
// Handle the case where IE and Opera return items
// by name instead of ID
- if ( elem.id !== match[ 2 ] ) {
+ if ( elem.id !== match[2] ) {
return rootjQuery.find( selector );
}
// Otherwise, we inject the element directly into the jQuery object
this.length = 1;
- this[ 0 ] = elem;
+ this[0] = elem;
}
this.context = document;
@@ -2946,7 +2818,7 @@ var rootjQuery,
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
- return ( context || root ).find( selector );
+ return ( context || rootjQuery ).find( selector );
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
@@ -2956,16 +2828,15 @@ var rootjQuery,
// HANDLE: $(DOMElement)
} else if ( selector.nodeType ) {
- this.context = this[ 0 ] = selector;
+ this.context = this[0] = selector;
this.length = 1;
return this;
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
- return typeof root.ready !== "undefined" ?
- root.ready( selector ) :
-
+ return typeof rootjQuery.ready !== "undefined" ?
+ rootjQuery.ready( selector ) :
// Execute immediately if ready is not present
selector( jQuery );
}
@@ -2986,7 +2857,6 @@ rootjQuery = jQuery( document );
var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
// methods guaranteed to produce a unique set when starting from a unique set
guaranteedUnique = {
children: true,
@@ -2995,19 +2865,46 @@ var rparentsprev = /^(?:parents|prev(?:Until|All))/,
prev: true
};
-jQuery.fn.extend( {
+jQuery.extend({
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+jQuery.fn.extend({
has: function( target ) {
var i,
targets = jQuery( target, this ),
len = targets.length;
- return this.filter( function() {
+ return this.filter(function() {
for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[ i ] ) ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
return true;
}
}
- } );
+ });
},
closest: function( selectors, context ) {
@@ -3020,15 +2917,14 @@ jQuery.fn.extend( {
0;
for ( ; i < l; i++ ) {
- for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
+ for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
// Always skip document fragments
- if ( cur.nodeType < 11 && ( pos ?
- pos.index( cur ) > -1 :
+ if ( cur.nodeType < 11 && (pos ?
+ pos.index(cur) > -1 :
// Don't pass non-elements to Sizzle
cur.nodeType === 1 &&
- jQuery.find.matchesSelector( cur, selectors ) ) ) {
+ jQuery.find.matchesSelector(cur, selectors)) ) {
matched.push( cur );
break;
@@ -3036,7 +2932,7 @@ jQuery.fn.extend( {
}
}
- return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+ return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
},
// Determine the position of an element within
@@ -3045,24 +2941,23 @@ jQuery.fn.extend( {
// No argument, return index in parent
if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
}
// index in selector
if ( typeof elem === "string" ) {
- return jQuery.inArray( this[ 0 ], jQuery( elem ) );
+ return jQuery.inArray( this[0], jQuery( elem ) );
}
// Locate the position of the desired element
return jQuery.inArray(
-
// If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem, this );
+ elem.jquery ? elem[0] : elem, this );
},
add: function( selector, context ) {
return this.pushStack(
- jQuery.uniqueSort(
+ jQuery.unique(
jQuery.merge( this.get(), jQuery( selector, context ) )
)
);
@@ -3070,10 +2965,10 @@ jQuery.fn.extend( {
addBack: function( selector ) {
return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
+ this.prevObject : this.prevObject.filter(selector)
);
}
-} );
+});
function sibling( cur, dir ) {
do {
@@ -3083,16 +2978,16 @@ function sibling( cur, dir ) {
return cur;
}
-jQuery.each( {
+jQuery.each({
parent: function( elem ) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function( elem ) {
- return dir( elem, "parentNode" );
+ return jQuery.dir( elem, "parentNode" );
},
parentsUntil: function( elem, i, until ) {
- return dir( elem, "parentNode", until );
+ return jQuery.dir( elem, "parentNode", until );
},
next: function( elem ) {
return sibling( elem, "nextSibling" );
@@ -3101,22 +2996,22 @@ jQuery.each( {
return sibling( elem, "previousSibling" );
},
nextAll: function( elem ) {
- return dir( elem, "nextSibling" );
+ return jQuery.dir( elem, "nextSibling" );
},
prevAll: function( elem ) {
- return dir( elem, "previousSibling" );
+ return jQuery.dir( elem, "previousSibling" );
},
nextUntil: function( elem, i, until ) {
- return dir( elem, "nextSibling", until );
+ return jQuery.dir( elem, "nextSibling", until );
},
prevUntil: function( elem, i, until ) {
- return dir( elem, "previousSibling", until );
+ return jQuery.dir( elem, "previousSibling", until );
},
siblings: function( elem ) {
- return siblings( ( elem.parentNode || {} ).firstChild, elem );
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
},
children: function( elem ) {
- return siblings( elem.firstChild );
+ return jQuery.sibling( elem.firstChild );
},
contents: function( elem ) {
return jQuery.nodeName( elem, "iframe" ) ?
@@ -3136,10 +3031,9 @@ jQuery.each( {
}
if ( this.length > 1 ) {
-
// Remove duplicates
if ( !guaranteedUnique[ name ] ) {
- ret = jQuery.uniqueSort( ret );
+ ret = jQuery.unique( ret );
}
// Reverse order for parents* and prev-derivatives
@@ -3150,17 +3044,20 @@ jQuery.each( {
return this.pushStack( ret );
};
-} );
-var rnotwhite = ( /\S+/g );
+});
+var rnotwhite = (/\S+/g);
+
+// String to Object options format cache
+var optionsCache = {};
-// Convert String-formatted options into Object-formatted ones
+// Convert String-formatted options into Object-formatted ones and store in cache
function createOptions( options ) {
- var object = {};
+ var object = optionsCache[ options ] = {};
jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
object[ flag ] = true;
- } );
+ });
return object;
}
@@ -3191,186 +3088,156 @@ jQuery.Callbacks = function( options ) {
// Convert options from String-formatted to Object-formatted if needed
// (we check in cache first)
options = typeof options === "string" ?
- createOptions( options ) :
+ ( optionsCache[ options ] || createOptions( options ) ) :
jQuery.extend( {}, options );
var // Flag to know if list is currently firing
firing,
-
- // Last fire value for non-forgettable lists
+ // Last fire value (for non-forgettable lists)
memory,
-
// Flag to know if list was already fired
fired,
-
- // Flag to prevent firing
- locked,
-
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
// Actual callback list
list = [],
-
- // Queue of execution data for repeatable lists
- queue = [],
-
- // Index of currently firing callback (modified by add/remove as needed)
- firingIndex = -1,
-
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
// Fire callbacks
- fire = function() {
-
- // Enforce single-firing
- locked = options.once;
-
- // Execute callbacks for all pending executions,
- // respecting firingIndex overrides and runtime changes
- fired = firing = true;
- for ( ; queue.length; firingIndex = -1 ) {
- memory = queue.shift();
- while ( ++firingIndex < list.length ) {
-
- // Run callback and check for early termination
- if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
- options.stopOnFalse ) {
-
- // Jump to end and forget the data so .add doesn't re-fire
- firingIndex = list.length;
- memory = false;
- }
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
}
}
-
- // Forget the data if we're done with it
- if ( !options.memory ) {
- memory = false;
- }
-
firing = false;
-
- // Clean up if we're done firing for good
- if ( locked ) {
-
- // Keep an empty list if we have data for future add calls
- if ( memory ) {
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
list = [];
-
- // Otherwise, this object is spent
} else {
- list = "";
+ self.disable();
}
}
},
-
// Actual Callbacks object
self = {
-
// Add a callback or a collection of callbacks to the list
add: function() {
if ( list ) {
-
- // If we have memory from a past run, we should fire after adding
- if ( memory && !firing ) {
- firingIndex = list.length - 1;
- queue.push( memory );
- }
-
- ( function add( args ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
jQuery.each( args, function( _, arg ) {
- if ( jQuery.isFunction( arg ) ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
if ( !options.unique || !self.has( arg ) ) {
list.push( arg );
}
- } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
-
+ } else if ( arg && arg.length && type !== "string" ) {
// Inspect recursively
add( arg );
}
- } );
- } )( arguments );
-
- if ( memory && !firing ) {
- fire();
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
}
}
return this;
},
-
// Remove a callback from the list
remove: function() {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
-
- // Handle firing indexes
- if ( index <= firingIndex ) {
- firingIndex--;
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
}
- }
- } );
+ });
+ }
return this;
},
-
// Check if a given callback is in the list.
// If no argument is given, return whether or not list has callbacks attached.
has: function( fn ) {
- return fn ?
- jQuery.inArray( fn, list ) > -1 :
- list.length > 0;
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
},
-
// Remove all callbacks from the list
empty: function() {
- if ( list ) {
- list = [];
- }
+ list = [];
+ firingLength = 0;
return this;
},
-
- // Disable .fire and .add
- // Abort any current/pending executions
- // Clear all callbacks and values
+ // Have the list do nothing anymore
disable: function() {
- locked = queue = [];
- list = memory = "";
+ list = stack = memory = undefined;
return this;
},
+ // Is it disabled?
disabled: function() {
return !list;
},
-
- // Disable .fire
- // Also disable .add unless we have memory (since it would have no effect)
- // Abort any pending executions
+ // Lock the list in its current state
lock: function() {
- locked = true;
+ stack = undefined;
if ( !memory ) {
self.disable();
}
return this;
},
+ // Is it locked?
locked: function() {
- return !!locked;
+ return !stack;
},
-
// Call all callbacks with the given context and arguments
fireWith: function( context, args ) {
- if ( !locked ) {
+ if ( list && ( !fired || stack ) ) {
args = args || [];
args = [ context, args.slice ? args.slice() : args ];
- queue.push( args );
- if ( !firing ) {
- fire();
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
}
}
return this;
},
-
// Call all the callbacks with the given arguments
fire: function() {
self.fireWith( this, arguments );
return this;
},
-
// To know if the callbacks have already been called at least once
fired: function() {
return !!fired;
@@ -3381,15 +3248,14 @@ jQuery.Callbacks = function( options ) {
};
-jQuery.extend( {
+jQuery.extend({
Deferred: function( func ) {
var tuples = [
-
// action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks( "memory" ) ]
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
],
state = "pending",
promise = {
@@ -3402,30 +3268,25 @@ jQuery.extend( {
},
then: function( /* fnDone, fnFail, fnProgress */ ) {
var fns = arguments;
- return jQuery.Deferred( function( newDefer ) {
+ return jQuery.Deferred(function( newDefer ) {
jQuery.each( tuples, function( i, tuple ) {
var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-
// deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[ 1 ] ]( function() {
+ deferred[ tuple[1] ](function() {
var returned = fn && fn.apply( this, arguments );
if ( returned && jQuery.isFunction( returned.promise ) ) {
returned.promise()
- .progress( newDefer.notify )
.done( newDefer.resolve )
- .fail( newDefer.reject );
+ .fail( newDefer.reject )
+ .progress( newDefer.notify );
} else {
- newDefer[ tuple[ 0 ] + "With" ](
- this === promise ? newDefer.promise() : this,
- fn ? [ returned ] : arguments
- );
+ newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
}
- } );
- } );
+ });
+ });
fns = null;
- } ).promise();
+ }).promise();
},
-
// Get a promise for this deferred
// If obj is provided, the promise aspect is added to the object
promise: function( obj ) {
@@ -3443,12 +3304,11 @@ jQuery.extend( {
stateString = tuple[ 3 ];
// promise[ done | fail | progress ] = list.add
- promise[ tuple[ 1 ] ] = list.add;
+ promise[ tuple[1] ] = list.add;
// Handle state
if ( stateString ) {
- list.add( function() {
-
+ list.add(function() {
// state = [ resolved | rejected ]
state = stateString;
@@ -3457,12 +3317,12 @@ jQuery.extend( {
}
// deferred[ resolve | reject | notify ]
- deferred[ tuple[ 0 ] ] = function() {
- deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
+ deferred[ tuple[0] ] = function() {
+ deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
return this;
};
- deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
- } );
+ deferred[ tuple[0] + "With" ] = list.fireWith;
+ });
// Make the deferred a promise
promise.promise( deferred );
@@ -3483,11 +3343,9 @@ jQuery.extend( {
length = resolveValues.length,
// the count of uncompleted subordinates
- remaining = length !== 1 ||
- ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
- // the master Deferred.
- // If resolveValues consist of only a single Deferred, just use that.
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
// Update function for both resolve and progress values
@@ -3498,7 +3356,7 @@ jQuery.extend( {
if ( values === progressValues ) {
deferred.notifyWith( contexts, values );
- } else if ( !( --remaining ) ) {
+ } else if ( !(--remaining) ) {
deferred.resolveWith( contexts, values );
}
};
@@ -3514,9 +3372,9 @@ jQuery.extend( {
for ( ; i < length; i++ ) {
if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
resolveValues[ i ].promise()
- .progress( updateFunc( i, progressContexts, progressValues ) )
.done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject );
+ .fail( deferred.reject )
+ .progress( updateFunc( i, progressContexts, progressValues ) );
} else {
--remaining;
}
@@ -3530,22 +3388,20 @@ jQuery.extend( {
return deferred.promise();
}
-} );
+});
// The deferred used on DOM ready
var readyList;
jQuery.fn.ready = function( fn ) {
-
// Add the callback
jQuery.ready.promise().done( fn );
return this;
};
-jQuery.extend( {
-
+jQuery.extend({
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
@@ -3570,6 +3426,11 @@ jQuery.extend( {
return;
}
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready );
+ }
+
// Remember that the DOM is ready
jQuery.isReady = true;
@@ -3587,15 +3448,15 @@ jQuery.extend( {
jQuery( document ).off( "ready" );
}
}
-} );
+});
/**
* Clean-up method for dom ready events
*/
function detach() {
if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed );
- window.removeEventListener( "load", completed );
+ document.removeEventListener( "DOMContentLoaded", completed, false );
+ window.removeEventListener( "load", completed, false );
} else {
document.detachEvent( "onreadystatechange", completed );
@@ -3607,12 +3468,8 @@ function detach() {
* The ready event handler and self cleanup method
*/
function completed() {
-
// readyState === "complete" is good enough for us to call the dom ready in oldIE
- if ( document.addEventListener ||
- window.event.type === "load" ||
- document.readyState === "complete" ) {
-
+ if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
detach();
jQuery.ready();
}
@@ -3623,28 +3480,23 @@ jQuery.ready.promise = function( obj ) {
readyList = jQuery.Deferred();
- // Catch cases where $(document).ready() is called
- // after the browser event has already occurred.
- // Support: IE6-10
- // Older IE sometimes signals "interactive" too soon
- if ( document.readyState === "complete" ||
- ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if ( document.readyState === "complete" ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
- window.setTimeout( jQuery.ready );
+ setTimeout( jQuery.ready );
// Standards-based browsers support DOMContentLoaded
} else if ( document.addEventListener ) {
-
// Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed );
+ document.addEventListener( "DOMContentLoaded", completed, false );
// A fallback to window.onload, that will always work
- window.addEventListener( "load", completed );
+ window.addEventListener( "load", completed, false );
// If IE event model is used
} else {
-
// Ensure firing before onload, maybe late but safe also for iframes
document.attachEvent( "onreadystatechange", completed );
@@ -3657,19 +3509,18 @@ jQuery.ready.promise = function( obj ) {
try {
top = window.frameElement == null && document.documentElement;
- } catch ( e ) {}
+ } catch(e) {}
if ( top && top.doScroll ) {
- ( function doScrollCheck() {
+ (function doScrollCheck() {
if ( !jQuery.isReady ) {
try {
-
// Use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll( "left" );
- } catch ( e ) {
- return window.setTimeout( doScrollCheck, 50 );
+ top.doScroll("left");
+ } catch(e) {
+ return setTimeout( doScrollCheck, 50 );
}
// detach all dom ready events
@@ -3678,16 +3529,15 @@ jQuery.ready.promise = function( obj ) {
// and execute any waiting functions
jQuery.ready();
}
- } )();
+ })();
}
}
}
return readyList.promise( obj );
};
-// Kick off the DOM ready check even if the user does not
-jQuery.ready.promise();
+var strundefined = typeof undefined;
@@ -3697,21 +3547,19 @@ var i;
for ( i in jQuery( support ) ) {
break;
}
-support.ownFirst = i === "0";
+support.ownLast = i !== "0";
// Note: most support tests are defined in their respective modules.
// false until the test is run
support.inlineBlockNeedsLayout = false;
// Execute ASAP in case we need to set body.style.zoom
-jQuery( function() {
-
+jQuery(function() {
// Minified: var a,b,c,d
var val, div, body, container;
body = document.getElementsByTagName( "body" )[ 0 ];
if ( !body || !body.style ) {
-
// Return for frameset docs that don't have a body
return;
}
@@ -3722,8 +3570,7 @@ jQuery( function() {
container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
body.appendChild( container ).appendChild( div );
- if ( typeof div.style.zoom !== "undefined" ) {
-
+ if ( typeof div.style.zoom !== strundefined ) {
// Support: IE<8
// Check if natively block-level elements act like inline-block
// elements when setting their display to 'inline' and giving
@@ -3732,7 +3579,6 @@ jQuery( function() {
support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
if ( val ) {
-
// Prevent IE 6 from affecting layout for positioned elements #11048
// Prevent IE from shrinking the body in IE 7 mode #12869
// Support: IE<8
@@ -3741,25 +3587,35 @@ jQuery( function() {
}
body.removeChild( container );
-} );
+});
-( function() {
+
+
+(function() {
var div = document.createElement( "div" );
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch ( e ) {
- support.deleteExpando = false;
+ // Execute the test only if not already executed in another module.
+ if (support.deleteExpando == null) {
+ // Support: IE<9
+ support.deleteExpando = true;
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
}
// Null elements to avoid leaks in IE.
div = null;
-} )();
-var acceptData = function( elem ) {
- var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ],
+})();
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( elem ) {
+ var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
nodeType = +elem.nodeType || 1;
// Do not set data on non-element DOM nodes because it will not be cleared (#8335).
@@ -3767,17 +3623,14 @@ var acceptData = function( elem ) {
false :
// Nodes accept data unless otherwise specified; rejection can be conditional
- !noData || noData !== true && elem.getAttribute( "classid" ) === noData;
+ !noData || noData !== true && elem.getAttribute("classid") === noData;
};
-
-
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
rmultiDash = /([A-Z])/g;
function dataAttr( elem, key, data ) {
-
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
@@ -3791,12 +3644,11 @@ function dataAttr( elem, key, data ) {
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
-
// Only convert to a number if it doesn't change the string
+data + "" === data ? +data :
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
- } catch ( e ) {}
+ } catch( e ) {}
// Make sure we set the data so it isn't changed later
jQuery.data( elem, key, data );
@@ -3815,7 +3667,7 @@ function isEmptyDataObject( obj ) {
for ( name in obj ) {
// if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) {
+ if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
continue;
}
if ( name !== "toJSON" ) {
@@ -3827,7 +3679,7 @@ function isEmptyDataObject( obj ) {
}
function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !acceptData( elem ) ) {
+ if ( !jQuery.acceptData( elem ) ) {
return;
}
@@ -3848,13 +3700,11 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
// Avoid doing any more work than we need to when trying to get data on an
// object that has no data at all
- if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&
- data === undefined && typeof name === "string" ) {
+ if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
return;
}
if ( !id ) {
-
// Only DOM nodes need a new unique ID for each element since their data
// ends up in the global cache
if ( isNode ) {
@@ -3865,7 +3715,6 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
}
if ( !cache[ id ] ) {
-
// Avoid exposing jQuery metadata on plain JS objects when the object
// is serialized using JSON.stringify
cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
@@ -3919,7 +3768,7 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
}
function internalRemoveData( elem, name, pvt ) {
- if ( !acceptData( elem ) ) {
+ if ( !jQuery.acceptData( elem ) ) {
return;
}
@@ -3955,11 +3804,10 @@ function internalRemoveData( elem, name, pvt ) {
if ( name in thisCache ) {
name = [ name ];
} else {
- name = name.split( " " );
+ name = name.split(" ");
}
}
} else {
-
// If "name" is an array of keys...
// When data is initially created, via ("key", "val") signature,
// keys will be converted to camelCase.
@@ -3971,12 +3819,12 @@ function internalRemoveData( elem, name, pvt ) {
i = name.length;
while ( i-- ) {
- delete thisCache[ name[ i ] ];
+ delete thisCache[ name[i] ];
}
// If there is no data left in the cache, we want to continue
// and let the cache object itself get destroyed
- if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {
+ if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
return;
}
}
@@ -4003,13 +3851,13 @@ function internalRemoveData( elem, name, pvt ) {
/* jshint eqeqeq: true */
delete cache[ id ];
- // When all else fails, undefined
+ // When all else fails, null
} else {
- cache[ id ] = undefined;
+ cache[ id ] = null;
}
}
-jQuery.extend( {
+jQuery.extend({
cache: {},
// The following elements (space-suffixed to avoid Object.prototype collisions)
@@ -4017,13 +3865,12 @@ jQuery.extend( {
noData: {
"applet ": true,
"embed ": true,
-
// ...but Flash objects (which have this classid) *can* handle expandos
"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
},
hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
return !!elem && !isEmptyDataObject( elem );
},
@@ -4043,12 +3890,12 @@ jQuery.extend( {
_removeData: function( elem, name ) {
return internalRemoveData( elem, name, true );
}
-} );
+});
-jQuery.fn.extend( {
+jQuery.fn.extend({
data: function( key, value ) {
var i, name, data,
- elem = this[ 0 ],
+ elem = this[0],
attrs = elem && elem.attributes;
// Special expections of .data basically thwart jQuery.access,
@@ -4068,7 +3915,7 @@ jQuery.fn.extend( {
if ( attrs[ i ] ) {
name = attrs[ i ].name;
if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice( 5 ) );
+ name = jQuery.camelCase( name.slice(5) );
dataAttr( elem, name, data[ name ] );
}
}
@@ -4082,17 +3929,17 @@ jQuery.fn.extend( {
// Sets multiple values
if ( typeof key === "object" ) {
- return this.each( function() {
+ return this.each(function() {
jQuery.data( this, key );
- } );
+ });
}
return arguments.length > 1 ?
// Sets one value
- this.each( function() {
+ this.each(function() {
jQuery.data( this, key, value );
- } ) :
+ }) :
// Gets one value
// Try to fetch any internally stored data first
@@ -4100,14 +3947,14 @@ jQuery.fn.extend( {
},
removeData: function( key ) {
- return this.each( function() {
+ return this.each(function() {
jQuery.removeData( this, key );
- } );
+ });
}
-} );
+});
-jQuery.extend( {
+jQuery.extend({
queue: function( elem, type, data ) {
var queue;
@@ -4117,8 +3964,8 @@ jQuery.extend( {
// Speed up dequeue by getting out quickly if this is just a lookup
if ( data ) {
- if ( !queue || jQuery.isArray( data ) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray( data ) );
+ if ( !queue || jQuery.isArray(data) ) {
+ queue = jQuery._data( elem, type, jQuery.makeArray(data) );
} else {
queue.push( data );
}
@@ -4162,20 +4009,19 @@ jQuery.extend( {
}
},
- // not intended for public consumption - generates a queueHooks object,
- // or returns the current one
+ // not intended for public consumption - generates a queueHooks object, or returns the current one
_queueHooks: function( elem, type ) {
var key = type + "queueHooks";
return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks( "once memory" ).add( function() {
+ empty: jQuery.Callbacks("once memory").add(function() {
jQuery._removeData( elem, type + "queue" );
jQuery._removeData( elem, key );
- } )
- } );
+ })
+ });
}
-} );
+});
-jQuery.fn.extend( {
+jQuery.fn.extend({
queue: function( type, data ) {
var setter = 2;
@@ -4186,31 +4032,30 @@ jQuery.fn.extend( {
}
if ( arguments.length < setter ) {
- return jQuery.queue( this[ 0 ], type );
+ return jQuery.queue( this[0], type );
}
return data === undefined ?
this :
- this.each( function() {
+ this.each(function() {
var queue = jQuery.queue( this, type, data );
// ensure a hooks for this queue
jQuery._queueHooks( this, type );
- if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
jQuery.dequeue( this, type );
}
- } );
+ });
},
dequeue: function( type ) {
- return this.each( function() {
+ return this.each(function() {
jQuery.dequeue( this, type );
- } );
+ });
},
clearQueue: function( type ) {
return this.queue( type || "fx", [] );
},
-
// Get a promise resolved when queues of a certain type
// are emptied (fx is the type by default)
promise: function( type, obj ) {
@@ -4241,138 +4086,23 @@ jQuery.fn.extend( {
resolve();
return defer.promise( obj );
}
-} );
-
-
-( function() {
- var shrinkWrapBlocksVal;
-
- support.shrinkWrapBlocks = function() {
- if ( shrinkWrapBlocksVal != null ) {
- return shrinkWrapBlocksVal;
- }
-
- // Will be changed later if needed.
- shrinkWrapBlocksVal = false;
-
- // Minified: var b,c,d
- var div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
-
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- // Support: IE6
- // Check if elements with layout shrink-wrap their children
- if ( typeof div.style.zoom !== "undefined" ) {
-
- // Reset CSS: box-sizing; display; margin; border
- div.style.cssText =
-
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;" +
- "padding:1px;width:1px;zoom:1";
- div.appendChild( document.createElement( "div" ) ).style.width = "5px";
- shrinkWrapBlocksVal = div.offsetWidth !== 3;
- }
-
- body.removeChild( container );
-
- return shrinkWrapBlocksVal;
- };
-
-} )();
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
+});
+var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
var isHidden = function( elem, el ) {
-
// isHidden might be called from jQuery#filter function;
// in that case, element will be second argument
elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" ||
- !jQuery.contains( elem.ownerDocument, elem );
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
};
-function adjustCSS( elem, prop, valueParts, tween ) {
- var adjusted,
- scale = 1,
- maxIterations = 20,
- currentValue = tween ?
- function() { return tween.cur(); } :
- function() { return jQuery.css( elem, prop, "" ); },
- initial = currentValue(),
- unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
- rcssNum.exec( jQuery.css( elem, prop ) );
-
- if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
- // Trust units reported by jQuery.css
- unit = unit || initialInUnit[ 3 ];
-
- // Make sure we update the tween properties later on
- valueParts = valueParts || [];
-
- // Iteratively approximate from a nonzero starting point
- initialInUnit = +initial || 1;
-
- do {
-
- // If previous iteration zeroed out, double until we get *something*.
- // Use string for doubling so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- initialInUnit = initialInUnit / scale;
- jQuery.style( elem, prop, initialInUnit + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // Break the loop if scale is unchanged or perfect, or if we've just had enough.
- } while (
- scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
- );
- }
-
- if ( valueParts ) {
- initialInUnit = +initialInUnit || +initial || 0;
-
- // Apply relative offset (+=/-=) if specified
- adjusted = valueParts[ 1 ] ?
- initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
- +valueParts[ 2 ];
- if ( tween ) {
- tween.unit = unit;
- tween.start = initialInUnit;
- tween.end = adjusted;
- }
- }
- return adjusted;
-}
-
-
// Multifunctional method to get and set values of a collection
// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
var i = 0,
length = elems.length,
bulk = key == null;
@@ -4381,7 +4111,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
if ( jQuery.type( key ) === "object" ) {
chainable = true;
for ( i in key ) {
- access( elems, fn, i, key[ i ], true, emptyGet, raw );
+ jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
}
// Sets one value
@@ -4393,7 +4123,6 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
}
if ( bulk ) {
-
// Bulk operations run against the entire set
if ( raw ) {
fn.call( elems, value );
@@ -4410,11 +4139,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
if ( fn ) {
for ( ; i < length; i++ ) {
- fn(
- elems[ i ],
- key,
- raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )
- );
+ fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
}
}
}
@@ -4425,41 +4150,17 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
// Gets
bulk ?
fn.call( elems ) :
- length ? fn( elems[ 0 ], key ) : emptyGet;
+ length ? fn( elems[0], key ) : emptyGet;
};
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([\w:-]+)/ );
-
-var rscriptType = ( /^$|\/(?:java|ecma)script/i );
-
-var rleadingWhitespace = ( /^\s+/ );
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" +
- "details|dialog|figcaption|figure|footer|header|hgroup|main|" +
- "mark|meter|nav|output|picture|progress|section|summary|template|time|video";
-
+var rcheckableType = (/^(?:checkbox|radio)$/i);
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-( function() {
- var div = document.createElement( "div" ),
- fragment = document.createDocumentFragment(),
- input = document.createElement( "input" );
+(function() {
+ // Minified: var a,b,c
+ var input = document.createElement( "input" ),
+ div = document.createElement( "div" ),
+ fragment = document.createDocumentFragment();
// Setup
div.innerHTML = "
a";
@@ -4494,267 +4195,62 @@ function createSafeFragment( document ) {
// #11217 - WebKit loses check when the name is after the checked attribute
fragment.appendChild( div );
-
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input = document.createElement( "input" );
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
+ div.innerHTML = "";
// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
// old WebKit doesn't clone checked state correctly in fragments
support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
// Support: IE<9
- // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+
- support.noCloneEvent = !!div.addEventListener;
-
- // Support: IE<9
- // Since attributes and properties are the same in IE,
- // cleanData must set properties to undefined rather than use removeAttribute
- div[ jQuery.expando ] = 1;
- support.attributes = !div.getAttribute( jQuery.expando );
-} )();
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
- option: [ 1, "" ],
- legend: [ 1, "" ],
- area: [ 1, "" ],
-
- // Support: IE8
- param: [ 1, "" ],
- thead: [ 1, "
", "
" ],
- tr: [ 2, "
", "
" ],
- col: [ 2, "
", "
" ],
- td: [ 3, "
", "
" ],
-
- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
- // unless wrapped in a div with non-breaking characters in front of it.
- _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ]
-};
-
-// Support: IE8-IE9
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== "undefined" ?
- context.querySelectorAll( tag || "*" ) :
- undefined;
-
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context;
- ( elem = elems[ i ] ) != null;
- i++
- ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; ( elem = elems[ i ] ) != null; i++ ) {
- jQuery._data(
- elem,
- "globalEval",
- !refElements || jQuery._data( refElements[ i ], "globalEval" )
- );
- }
-}
-
-
-var rhtml = /<|?\w+;/,
- rtbody = /< l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || safe.appendChild( context.createElement( "div" ) );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
-
- tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
- // Descend through wrappers to the right content
- j = wrap[ 0 ];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Manually add leading whitespace removed by IE
- if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );
- }
-
- // Remove IE's autoinserted from table fragments
- if ( !support.tbody ) {
-
- // String was a
, *may* have spurious
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- // String was a bare or
- wrap[ 1 ] === "
" && !rtbody.test( elem ) ?
- tmp :
- 0;
-
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) &&
- !tbody.childNodes.length ) {
-
- elem.removeChild( tbody );
- }
- }
- }
-
- jQuery.merge( nodes, tmp.childNodes );
-
- // Fix #12392 for WebKit and IE > 9
- tmp.textContent = "";
-
- // Fix #12392 for oldIE
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- // Remember the top-level container for proper cleanup
- tmp = safe.lastChild;
- }
- }
- }
-
- // Fix #11356: Clear elements from fragment
- if ( tmp ) {
- safe.removeChild( tmp );
- }
+ // Opera does not clone events (and typeof div.attachEvent === undefined).
+ // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+ support.noCloneEvent = true;
+ if ( div.attachEvent ) {
+ div.attachEvent( "onclick", function() {
+ support.noCloneEvent = false;
+ });
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+ div.cloneNode( true ).click();
}
- i = 0;
- while ( ( elem = nodes[ i++ ] ) ) {
-
- // Skip elements already in the context collection (trac-4087)
- if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
- if ( ignored ) {
- ignored.push( elem );
- }
-
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( ( elem = tmp[ j++ ] ) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
+ // Execute the test only if not already executed in another module.
+ if (support.deleteExpando == null) {
+ // Support: IE<9
+ support.deleteExpando = true;
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
}
}
+})();
- tmp = null;
- return safe;
-}
-
-
-( function() {
+(function() {
var i, eventName,
div = document.createElement( "div" );
- // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)
- for ( i in { submit: true, change: true, focusin: true } ) {
+ // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
+ for ( i in { submit: true, change: true, focusin: true }) {
eventName = "on" + i;
- if ( !( support[ i ] = eventName in window ) ) {
-
+ if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
div.setAttribute( eventName, "t" );
- support[ i ] = div.attributes[ eventName ].expando === false;
+ support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
}
}
// Null elements to avoid leaks in IE.
div = null;
-} )();
+})();
var rformElems = /^(?:input|select|textarea)$/i,
rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
function returnTrue() {
return true;
@@ -4764,75 +4260,12 @@ function returnFalse() {
return false;
}
-// Support: IE9
-// See #13393 for more info
function safeActiveElement() {
try {
return document.activeElement;
} catch ( err ) { }
}
-function on( elem, types, selector, data, fn, one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
-
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
-
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- on( elem, type, selector, data, types[ type ], one );
- }
- return elem;
- }
-
- if ( data == null && fn == null ) {
-
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
-
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
-
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return elem;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
-
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
-
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return elem.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- } );
-}
-
/*
* Helper functions for managing events -- not part of the public interface.
* Props to Dean Edwards' addEvent library for many of the ideas.
@@ -4865,22 +4298,18 @@ jQuery.event = {
}
// Init the element's event structure and main handler, if this is the first
- if ( !( events = elemData.events ) ) {
+ if ( !(events = elemData.events) ) {
events = elemData.events = {};
}
- if ( !( eventHandle = elemData.handle ) ) {
+ if ( !(eventHandle = elemData.handle) ) {
eventHandle = elemData.handle = function( e ) {
-
// Discard the second event of a jQuery.event.trigger() and
// when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" &&
- ( !e || jQuery.event.triggered !== e.type ) ?
+ return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
undefined;
};
-
- // Add elem as a property of the handle fn to prevent a memory leak
- // with IE non-native events
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
eventHandle.elem = elem;
}
@@ -4888,9 +4317,9 @@ jQuery.event = {
types = ( types || "" ).match( rnotwhite ) || [ "" ];
t = types.length;
while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
// There *must* be a type, no attaching namespace-only handlers
if ( !type ) {
@@ -4907,7 +4336,7 @@ jQuery.event = {
special = jQuery.event.special[ type ] || {};
// handleObj is passed to all event handlers
- handleObj = jQuery.extend( {
+ handleObj = jQuery.extend({
type: type,
origType: origType,
data: data,
@@ -4915,18 +4344,16 @@ jQuery.event = {
guid: handler.guid,
selector: selector,
needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join( "." )
+ namespace: namespaces.join(".")
}, handleObjIn );
// Init the event handler queue if we're the first
- if ( !( handlers = events[ type ] ) ) {
+ if ( !(handlers = events[ type ]) ) {
handlers = events[ type ] = [];
handlers.delegateCount = 0;
// Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup ||
- special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
// Bind the global event handler to the element
if ( elem.addEventListener ) {
elem.addEventListener( type, eventHandle, false );
@@ -4968,7 +4395,7 @@ jQuery.event = {
namespaces, origType,
elemData = jQuery.hasData( elem ) && jQuery._data( elem );
- if ( !elemData || !( events = elemData.events ) ) {
+ if ( !elemData || !(events = elemData.events) ) {
return;
}
@@ -4976,9 +4403,9 @@ jQuery.event = {
types = ( types || "" ).match( rnotwhite ) || [ "" ];
t = types.length;
while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
// Unbind all events (on this namespace, if provided) for the element
if ( !type ) {
@@ -4991,8 +4418,7 @@ jQuery.event = {
special = jQuery.event.special[ type ] || {};
type = ( selector ? special.delegateType : special.bindType ) || type;
handlers = events[ type ] || [];
- tmp = tmp[ 2 ] &&
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+ tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
// Remove matching events
origCount = j = handlers.length;
@@ -5002,8 +4428,7 @@ jQuery.event = {
if ( ( mappedTypes || origType === handleObj.origType ) &&
( !handler || handler.guid === handleObj.guid ) &&
( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector ||
- selector === "**" && handleObj.selector ) ) {
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
handlers.splice( j, 1 );
if ( handleObj.selector ) {
@@ -5018,9 +4443,7 @@ jQuery.event = {
// Remove generic event handler if we removed something and no more handlers exist
// (avoids potential for endless recursion during removal of special event handlers)
if ( origCount && !handlers.length ) {
- if ( !special.teardown ||
- special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
+ if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
jQuery.removeEvent( elem, type, elemData.handle );
}
@@ -5043,7 +4466,7 @@ jQuery.event = {
bubbleType, special, tmp, i,
eventPath = [ elem || document ],
type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+ namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
cur = tmp = elem = elem || document;
@@ -5057,14 +4480,13 @@ jQuery.event = {
return;
}
- if ( type.indexOf( "." ) > -1 ) {
-
+ if ( type.indexOf(".") >= 0 ) {
// Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split( "." );
+ namespaces = type.split(".");
type = namespaces.shift();
namespaces.sort();
}
- ontype = type.indexOf( ":" ) < 0 && "on" + type;
+ ontype = type.indexOf(":") < 0 && "on" + type;
// Caller can pass in a jQuery.Event object, Object, or just an event type string
event = event[ jQuery.expando ] ?
@@ -5073,9 +4495,9 @@ jQuery.event = {
// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join( "." );
- event.rnamespace = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+ event.namespace = namespaces.join(".");
+ event.namespace_re = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
null;
// Clean up the event in case it is being reused
@@ -5109,30 +4531,28 @@ jQuery.event = {
}
// Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === ( elem.ownerDocument || document ) ) {
+ if ( tmp === (elem.ownerDocument || document) ) {
eventPath.push( tmp.defaultView || tmp.parentWindow || window );
}
}
// Fire handlers on the event path
i = 0;
- while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+ while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
event.type = i > 1 ?
bubbleType :
special.bindType || type;
// jQuery handler
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] &&
- jQuery._data( cur, "handle" );
-
+ handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
if ( handle ) {
handle.apply( cur, data );
}
// Native handler
handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && acceptData( cur ) ) {
+ if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
event.result = handle.apply( cur, data );
if ( event.result === false ) {
event.preventDefault();
@@ -5144,11 +4564,8 @@ jQuery.event = {
// If nobody prevented the default action, do it now
if ( !onlyHandlers && !event.isDefaultPrevented() ) {
- if (
- ( !special._default ||
- special._default.apply( eventPath.pop(), data ) === false
- ) && acceptData( elem )
- ) {
+ if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
+ jQuery.acceptData( elem ) ) {
// Call a native DOM method on the target with the same name name as the event.
// Can't use an .isFunction() check here because IE6/7 fails that test.
@@ -5167,7 +4584,6 @@ jQuery.event = {
try {
elem[ type ]();
} catch ( e ) {
-
// IE<9 dies on focus/blur to hidden element (#1486,#12518)
// only reproducible on winXP IE8 native, not IE9 in IE8 mode
}
@@ -5188,14 +4604,14 @@ jQuery.event = {
// Make a writable jQuery.Event from the native event object
event = jQuery.event.fix( event );
- var i, j, ret, matched, handleObj,
+ var i, ret, handleObj, matched, j,
handlerQueue = [],
args = slice.call( arguments ),
handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
special = jQuery.event.special[ event.type ] || {};
// Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[ 0 ] = event;
+ args[0] = event;
event.delegateTarget = this;
// Call the preDispatch hook for the mapped type, and let it bail if desired
@@ -5208,25 +4624,24 @@ jQuery.event = {
// Run delegates first; they may want to stop propagation beneath us
i = 0;
- while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+ while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
event.currentTarget = matched.elem;
j = 0;
- while ( ( handleObj = matched.handlers[ j++ ] ) &&
- !event.isImmediatePropagationStopped() ) {
+ while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
- // Triggered event must either 1) have no namespace, or 2) have namespace(s)
- // a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+ // Triggered event must either 1) have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
event.handleObj = handleObj;
event.data = handleObj.data;
- ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
- handleObj.handler ).apply( matched.elem, args );
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
if ( ret !== undefined ) {
- if ( ( event.result = ret ) === false ) {
+ if ( (event.result = ret) === false ) {
event.preventDefault();
event.stopPropagation();
}
@@ -5244,19 +4659,15 @@ jQuery.event = {
},
handlers: function( event, handlers ) {
- var i, matches, sel, handleObj,
+ var sel, handleObj, matches, i,
handlerQueue = [],
delegateCount = handlers.delegateCount,
cur = event.target;
- // Support (at least): Chrome, IE9
// Find delegate handlers
// Black-hole SVG