1beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik/*! 24a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * jQuery JavaScript Library v1.8.3 3beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * http://jquery.com/ 4beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 5beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * Includes Sizzle.js 6beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * http://sizzlejs.com/ 7beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 84a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * Copyright 2012 jQuery Foundation and other contributors 94a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * Released under the MIT license 104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * http://jquery.org/license 114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * 124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) 13beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 14beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik(function( window, undefined ) { 154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar 164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A central reference to the root jQuery(document) 174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rootjQuery, 18beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // The deferred used on DOM ready 204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair readyList, 21beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use the correct document accordingly with window argument (sandbox) 234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document = window.document, 244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair location = window.location, 254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair navigator = window.navigator, 26beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 27beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Map over jQuery in case of overwrite 28beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik _jQuery = window.jQuery, 29beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 30beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Map over the $ in case of overwrite 31beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik _$ = window.$, 32beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Save a reference to some core methods 344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_push = Array.prototype.push, 354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_slice = Array.prototype.slice, 364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_indexOf = Array.prototype.indexOf, 374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_toString = Object.prototype.toString, 384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_hasOwn = Object.prototype.hasOwnProperty, 394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_trim = String.prototype.trim, 404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Define a local copy of jQuery 424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery = function( selector, context ) { 434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // The jQuery object is actually just the init constructor 'enhanced' 444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return new jQuery.fn.init( selector, context, rootjQuery ); 454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 46beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Used for matching numbers 484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, 49beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Used for detecting and trimming whitespace 514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_rnotwhite = /\S/, 524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_rspace = /\s+/, 53beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) 554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, 564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A simple way to check for HTML strings 584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, 60beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 61beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Match a standalone tag 624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, 63beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // JSON RegExp 65beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rvalidchars = /^[\],:{}\s]*$/, 66beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, 674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, 684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, 69beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 70beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Matches dashed string for camelizing 71beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rmsPrefix = /^-ms-/, 724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rdashAlpha = /-([\da-z])/gi, 73beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Used by jQuery.camelCase as callback to replace() 75beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fcamelCase = function( all, letter ) { 76beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( letter + "" ).toUpperCase(); 77beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 78beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // The ready event handler and self cleanup method 804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair DOMContentLoaded = function() { 814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( document.addEventListener ) { 824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); 834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.ready(); 844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( document.readyState === "complete" ) { 854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // we're here because readyState === "complete" in oldIE 864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // which is good enough for us to call the dom ready! 874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document.detachEvent( "onreadystatechange", DOMContentLoaded ); 884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.ready(); 894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 91beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // [[Class]] -> type pairs 93beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik class2type = {}; 94beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 95beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn = jQuery.prototype = { 96beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik constructor: jQuery, 97beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik init: function( selector, context, rootjQuery ) { 98beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var match, elem, ret, doc; 99beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Handle $(""), $(null), $(undefined), $(false) 101beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !selector ) { 102beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 103beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 104beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 105beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle $(DOMElement) 106beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( selector.nodeType ) { 107beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.context = this[0] = selector; 108beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.length = 1; 109beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 112beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle HTML strings 113beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof selector === "string" ) { 114beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { 115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Assume that strings that start and end with <> are HTML and skip the regex check 116beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik match = [ null, selector, null ]; 117beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 118beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match = rquickExpr.exec( selector ); 120beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 121beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Match html or make sure no context is specified for #id 123beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( match && (match[1] || !context) ) { 124beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 125beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // HANDLE: $(html) -> $(array) 126beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( match[1] ) { 127beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik context = context instanceof jQuery ? context[0] : context; 1284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair doc = ( context && context.nodeType ? context.ownerDocument || context : document ); 129beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // scripts is true for back-compat 1314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selector = jQuery.parseHTML( match[1], doc, true ); 1324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { 1334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.attr.call( selector, context, true ); 134beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 135beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 136beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.merge( this, selector ); 137beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // HANDLE: $(#id) 139beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = document.getElementById( match[2] ); 141beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 142beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check parentNode to catch when Blackberry 4.6 returns 143beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // nodes that are no longer in the document #6963 144beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem && elem.parentNode ) { 145beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle the case where IE and Opera return items 146beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // by name instead of ID 147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.id !== match[2] ) { 148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return rootjQuery.find( selector ); 149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 150beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 151beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Otherwise, we inject the element directly into the jQuery object 152beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.length = 1; 153beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this[0] = elem; 154beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 155beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 156beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.context = document; 157beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.selector = selector; 158beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 159beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 161beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // HANDLE: $(expr, $(...)) 162beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( !context || context.jquery ) { 163beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( context || rootjQuery ).find( selector ); 164beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 165beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // HANDLE: $(expr, context) 166beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (which is just equivalent to: $(context).find(expr) 167beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 168beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.constructor( context ).find( selector ); 169beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 170beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 171beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // HANDLE: $(function) 172beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Shortcut for document ready 173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( jQuery.isFunction( selector ) ) { 174beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return rootjQuery.ready( selector ); 175beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 176beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 177beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( selector.selector !== undefined ) { 178beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.selector = selector.selector; 179beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.context = selector.context; 180beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 181beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.makeArray( selector, this ); 183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 184beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 185beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Start with an empty selector 186beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selector: "", 187beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The current version of jQuery being used 1894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jquery: "1.8.3", 190beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 191beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The default length of a jQuery object is 0 192beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik length: 0, 193beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 194beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The number of elements contained in the matched element set 195beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik size: function() { 196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.length; 197beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 198beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 199beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik toArray: function() { 2004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return core_slice.call( this ); 201beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 202beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 203beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get the Nth element in the matched element set OR 204beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get the whole matched element set as a clean array 205beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( num ) { 206beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return num == null ? 207beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 208beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Return a 'clean' array 209beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.toArray() : 210beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 211beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Return just the object 212beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( num < 0 ? this[ this.length + num ] : this[ num ] ); 213beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 214beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 215beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Take an array of elements and push it onto the stack 216beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (returning the new matched element set) 217beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik pushStack: function( elems, name, selector ) { 218beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Build a new jQuery matched element set 2204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret = jQuery.merge( this.constructor(), elems ); 221beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 222beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add the old object onto the stack (as a reference) 223beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.prevObject = this; 224beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 225beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.context = this.context; 226beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 227beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( name === "find" ) { 228beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; 229beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( name ) { 230beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.selector = this.selector + "." + name + "(" + selector + ")"; 231beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 232beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 233beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Return the newly-formed element set 234beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 235beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 236beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 237beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Execute a callback for every element in the matched set. 238beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (You can seed the arguments with an array of args, but this is 239beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // only used internally.) 240beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik each: function( callback, args ) { 241beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.each( this, callback, args ); 242beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 243beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 244beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ready: function( fn ) { 245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add the callback 2464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.ready.promise().done( fn ); 247beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 248beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 249beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 250beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 251beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eq: function( i ) { 252beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = +i; 253beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return i === -1 ? 254beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.slice( i ) : 255beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.slice( i, i + 1 ); 256beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 257beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 258beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik first: function() { 259beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.eq( 0 ); 260beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 261beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 262beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik last: function() { 263beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.eq( -1 ); 264beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 265beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 266beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik slice: function() { 2674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.pushStack( core_slice.apply( this, arguments ), 2684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "slice", core_slice.call(arguments).join(",") ); 269beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 270beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 271beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik map: function( callback ) { 272beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.pushStack( jQuery.map(this, function( elem, i ) { 273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return callback.call( elem, i, elem ); 274beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik })); 275beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 276beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik end: function() { 278beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.prevObject || this.constructor(null); 279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 280beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 281beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For internal use only. 282beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Behaves like an Array's method, not like a jQuery method. 2834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push: core_push, 284beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik sort: [].sort, 285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik splice: [].splice 286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Give the init function the jQuery prototype for later instantiation 289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.init.prototype = jQuery.fn; 290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend = jQuery.fn.extend = function() { 292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var options, name, src, copy, copyIsArray, clone, 293beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik target = arguments[0] || {}, 294beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 1, 295beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik length = arguments.length, 296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deep = false; 297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 298beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle a deep copy situation 299beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof target === "boolean" ) { 300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deep = target; 301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik target = arguments[1] || {}; 302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // skip the boolean and the target 303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 2; 304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle case when target is a string or something (possible in deep copy) 307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof target !== "object" && !jQuery.isFunction(target) ) { 308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik target = {}; 309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // extend jQuery itself if only one argument is passed 312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( length === i ) { 313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik target = this; 314beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik --i; 315beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 316beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < length; i++ ) { 318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only deal with non-null/undefined values 319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( (options = arguments[ i ]) != null ) { 320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Extend the base object 321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( name in options ) { 322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik src = target[ name ]; 323beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik copy = options[ name ]; 324beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 325beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Prevent never-ending loop 326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( target === copy ) { 327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik continue; 328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Recurse if we're merging plain objects or arrays 331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { 332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( copyIsArray ) { 333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik copyIsArray = false; 334beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clone = src && jQuery.isArray(src) ? src : []; 335beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 336beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 337beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clone = src && jQuery.isPlainObject(src) ? src : {}; 338beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Never move original objects, clone them 341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik target[ name ] = jQuery.extend( deep, clone, copy ); 342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Don't bring in undefined values 344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( copy !== undefined ) { 345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik target[ name ] = copy; 346beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 347beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 348beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Return the modified object 352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return target; 353beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik noConflict: function( deep ) { 357beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( window.$ === jQuery ) { 358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik window.$ = _$; 359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( deep && window.jQuery === jQuery ) { 362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik window.jQuery = _jQuery; 363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery; 366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 367beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 368beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Is the DOM ready to be used? Set to true once it occurs. 369beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isReady: false, 370beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 371beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // A counter to track how many items to wait for before 372beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // the ready event fires. See #6781 373beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik readyWait: 1, 374beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 375beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Hold (or release) the ready event 376beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik holdReady: function( hold ) { 377beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( hold ) { 378beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.readyWait++; 379beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 380beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.ready( true ); 381beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 382beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 383beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 384beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle when the DOM is ready 385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ready: function( wait ) { 386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Abort if there are pending holds or we're already ready 3884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). 3934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !document.body ) { 394beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return setTimeout( jQuery.ready, 1 ); 395beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remember that the DOM is ready 3984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.isReady = true; 399beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If a normal DOM Ready event fired, decrement, and wait if need be 4014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( wait !== true && --jQuery.readyWait > 0 ) { 4024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return; 4034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 404beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If there are functions bound, to execute 4064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair readyList.resolveWith( document, [ jQuery ] ); 407beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Trigger any bound ready events 4094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.fn.trigger ) { 4104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery( document ).trigger("ready").off("ready"); 411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 413beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // See test/unit/core.js for details concerning isFunction. 415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Since version 1.3, DOM methods and functions like alert 416beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // aren't supported. They return false on IE (#2968). 417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isFunction: function( obj ) { 418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.type(obj) === "function"; 419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 420beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 421beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isArray: Array.isArray || function( obj ) { 422beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.type(obj) === "array"; 423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 424beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 425beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isWindow: function( obj ) { 4264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return obj != null && obj == obj.window; 427beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 428beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 429beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isNumeric: function( obj ) { 430beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return !isNaN( parseFloat(obj) ) && isFinite( obj ); 431beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 432beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type: function( obj ) { 434beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return obj == null ? 435beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik String( obj ) : 4364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair class2type[ core_toString.call(obj) ] || "object"; 437beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 438beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 439beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isPlainObject: function( obj ) { 440beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Must be an Object. 441beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Because of IE, we also have to check the presence of the constructor property. 442beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that DOM nodes and window objects don't pass through, as well 443beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { 444beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 445beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 446beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 447beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 448beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Not own constructor property must be Object 449beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( obj.constructor && 4504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair !core_hasOwn.call(obj, "constructor") && 4514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { 452beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 453beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch ( e ) { 455beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE8,9 Will throw exceptions on certain host objects #9897 456beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 457beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 459beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Own properties are enumerated firstly, so to speed up, 460beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if last one is own, then all properties are own. 461beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 462beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var key; 463beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( key in obj ) {} 464beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return key === undefined || core_hasOwn.call( obj, key ); 466beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 467beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 468beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isEmptyObject: function( obj ) { 4694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name; 4704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( name in obj ) { 471beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 473beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return true; 474beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 475beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 476beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik error: function( msg ) { 477beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik throw new Error( msg ); 478beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 479beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // data: string of html 4814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // context (optional): If specified, the fragment will be created in this context, defaults to document 4824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // scripts (optional): If true, will include scripts passed in the html string 4834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parseHTML: function( data, context, scripts ) { 4844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var parsed; 4854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !data || typeof data !== "string" ) { 4864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return null; 4874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof context === "boolean" ) { 4894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair scripts = context; 4904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = 0; 4914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = context || document; 4934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 4944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Single tag 4954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (parsed = rsingleTag.exec( data )) ) { 4964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return [ context.createElement( parsed[1] ) ]; 4974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 4994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); 5004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.merge( [], 5014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); 5024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 5034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 504beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parseJSON: function( data ) { 5054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !data || typeof data !== "string") { 506beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return null; 507beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 508beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 509beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure leading/trailing whitespace is removed (IE can't handle it) 510beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = jQuery.trim( data ); 511beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Attempt to parse using the native JSON parser first 513beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( window.JSON && window.JSON.parse ) { 514beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return window.JSON.parse( data ); 515beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 516beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 517beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure the incoming data is actual JSON 518beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Logic borrowed from http://json.org/json2.js 519beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( rvalidchars.test( data.replace( rvalidescape, "@" ) 520beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik .replace( rvalidtokens, "]" ) 521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik .replace( rvalidbraces, "")) ) { 522beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 523beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( new Function( "return " + data ) )(); 524beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 525beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 526beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.error( "Invalid JSON: " + data ); 527beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 528beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Cross-browser xml parsing 530beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parseXML: function( data ) { 531beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var xml, tmp; 5324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !data || typeof data !== "string" ) { 5334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return null; 5344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 535beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( window.DOMParser ) { // Standard 537beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tmp = new DOMParser(); 538beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml = tmp.parseFromString( data , "text/xml" ); 539beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { // IE 540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml = new ActiveXObject( "Microsoft.XMLDOM" ); 541beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml.async = "false"; 542beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml.loadXML( data ); 543beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 544beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( e ) { 545beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml = undefined; 546beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 547beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { 548beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.error( "Invalid XML: " + data ); 549beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return xml; 551beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 552beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 553beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik noop: function() {}, 554beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 555beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Evaluates a script in a global context 556beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Workarounds based on findings by Jim Driscoll 557beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context 558beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik globalEval: function( data ) { 5594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( data && core_rnotwhite.test( data ) ) { 560beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We use execScript on Internet Explorer 561beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We use an anonymous function so that context is window 562beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // rather than jQuery in Firefox 563beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( window.execScript || function( data ) { 564beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik window[ "eval" ].call( window, data ); 565beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } )( data ); 566beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 567beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 568beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 569beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Convert dashed to camelCase; used by the css and data modules 570beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Microsoft forgot to hump their vendor prefix (#9572) 571beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik camelCase: function( string ) { 572beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 573beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 574beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 575beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nodeName: function( elem, name ) { 5764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 577beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 578beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 579beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // args is for internal usage only 5804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair each: function( obj, callback, args ) { 5814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name, 5824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 5834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = obj.length, 5844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair isObj = length === undefined || jQuery.isFunction( obj ); 585beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 586beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( args ) { 587beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isObj ) { 5884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( name in obj ) { 5894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( callback.apply( obj[ name ], args ) === false ) { 590beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 591beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 592beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 593beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 594beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < length; ) { 5954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( callback.apply( obj[ i++ ], args ) === false ) { 596beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 597beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 598beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 599beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 600beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 601beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // A special, fast, case for the most common use of each 602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 603beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isObj ) { 6044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( name in obj ) { 6054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { 606beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 607beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 608beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 609beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < length; ) { 6114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { 612beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 613beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 614beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 615beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 616beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 617beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return obj; 619beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 620beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use native String.trim function wherever possible 6224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair trim: core_trim && !core_trim.call("\uFEFF\xA0") ? 623beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik function( text ) { 624beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return text == null ? 625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "" : 6264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_trim.call( text ); 627beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } : 628beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 629beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Otherwise use our own trimming functionality 630beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik function( text ) { 631beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return text == null ? 632beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "" : 6334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( text + "" ).replace( rtrim, "" ); 634beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 635beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 636beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // results is for internal usage only 6374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair makeArray: function( arr, results ) { 6384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var type, 6394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = results || []; 640beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( arr != null ) { 642beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The window, strings (and functions) also have 'length' 643beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 6444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair type = jQuery.type( arr ); 645beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { 6474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair core_push.call( ret, arr ); 648beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 6494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.merge( ret, arr ); 650beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 651beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 652beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 653beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 654beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 655beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair inArray: function( elem, arr, i ) { 657beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var len; 658beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( arr ) { 6604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( core_indexOf ) { 6614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return core_indexOf.call( arr, elem, i ); 662beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 663beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair len = arr.length; 665beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; 666beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 667beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < len; i++ ) { 668beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Skip accessing in sparse arrays 6694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( i in arr && arr[ i ] === elem ) { 670beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return i; 671beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 672beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 673beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 674beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 675beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return -1; 676beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 677beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 678beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik merge: function( first, second ) { 6794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var l = second.length, 6804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = first.length, 681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik j = 0; 682beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof l === "number" ) { 6844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; j < l; j++ ) { 685beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik first[ i++ ] = second[ j ]; 686beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 687beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 688beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 689beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( second[j] !== undefined ) { 690beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik first[ i++ ] = second[ j++ ]; 691beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 692beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 693beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 694beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik first.length = i; 695beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 696beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return first; 697beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 698beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 699beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik grep: function( elems, callback, inv ) { 7004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var retVal, 7014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = [], 7024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 7034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = elems.length; 704beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik inv = !!inv; 705beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 706beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Go through the array, only saving the items 707beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // that pass the validator function 7084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < length; i++ ) { 709beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik retVal = !!callback( elems[ i ], i ); 710beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( inv !== retVal ) { 711beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.push( elems[ i ] ); 712beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 713beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 714beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 715beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 716beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 717beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 718beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // arg is for internal usage only 719beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik map: function( elems, callback, arg ) { 7204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var value, key, 7214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = [], 722beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 0, 723beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik length = elems.length, 724beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // jquery objects are treated as arrays 725beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; 726beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 727beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Go through the array, translating each of the items to their 728beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isArray ) { 729beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < length; i++ ) { 730beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value = callback( elems[ i ], i, arg ); 731beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 732beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value != null ) { 733beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret[ ret.length ] = value; 734beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 735beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 736beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 737beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Go through every key on the object, 738beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 739beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( key in elems ) { 740beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value = callback( elems[ key ], key, arg ); 741beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 742beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value != null ) { 743beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret[ ret.length ] = value; 744beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 745beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 746beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 747beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 748beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Flatten any nested arrays 749beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret.concat.apply( [], ret ); 750beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 751beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 752beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // A global GUID counter for objects 753beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik guid: 1, 754beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 755beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Bind a function to a context, optionally partially applying any 756beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // arguments. 757beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik proxy: function( fn, context ) { 7584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var tmp, args, proxy; 7594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 760beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof context === "string" ) { 7614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tmp = fn[ context ]; 762beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik context = fn; 763beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = tmp; 764beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 765beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 766beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Quick check to determine if target is callable, in the spec 767beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // this throws a TypeError, but we will just return undefined. 768beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.isFunction( fn ) ) { 769beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return undefined; 770beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 771beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 772beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Simulated bind 7734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair args = core_slice.call( arguments, 2 ); 7744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair proxy = function() { 7754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); 7764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 777beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 778beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set the guid of unique handler to the same of original handler, so it can be removed 7794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair proxy.guid = fn.guid = fn.guid || jQuery.guid++; 780beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 781beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return proxy; 782beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 783beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Multifunctional method to get and set values of a collection 785beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The value/s can optionally be executed if it's a function 7864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair access: function( elems, fn, key, value, chainable, emptyGet, pass ) { 7874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var exec, 7884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair bulk = key == null, 7894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 7904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = elems.length; 791beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Sets many values 7934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( key && typeof key === "object" ) { 7944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i in key ) { 7954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); 796beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair chainable = 1; 798beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Sets one value 8004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( value !== undefined ) { 801beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Optionally, function values get executed if exec is true 8024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair exec = pass === undefined && jQuery.isFunction( value ); 8034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 8044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( bulk ) { 8054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Bulk operations only iterate when executing function values 8064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( exec ) { 8074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair exec = fn; 8084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn = function( elem, key, value ) { 8094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return exec.call( jQuery( elem ), value ); 8104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 8114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 8124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Otherwise they run against the entire set 8134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 8144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn.call( elems, value ); 8154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn = null; 8164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 818beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( fn ) { 8204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for (; i < length; i++ ) { 8214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); 8224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 823beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 824beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair chainable = 1; 826beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 827beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return chainable ? 8294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elems : 8304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 8314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Gets 8324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair bulk ? 8334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn.call( elems ) : 8344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length ? fn( elems[0], key ) : emptyGet; 835beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 836beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 837beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik now: function() { 838beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( new Date() ).getTime(); 8394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 841beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.ready.promise = function( obj ) { 8434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !readyList ) { 844beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair readyList = jQuery.Deferred(); 846beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Catch cases where $(document).ready() is called after the browser event has already occurred. 8484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // we once tried to use readyState "interactive" here, but it caused issues like the one 8494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 8504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( document.readyState === "complete" ) { 8514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Handle it asynchronously to allow scripts the opportunity to delay ready 8524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setTimeout( jQuery.ready, 1 ); 853beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Standards-based browsers support DOMContentLoaded 8554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( document.addEventListener ) { 8564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use the handy event callback 8574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); 858beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A fallback to window.onload, that will always work 8604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair window.addEventListener( "load", jQuery.ready, false ); 861beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If IE event model is used 8634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 8644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Ensure firing before onload, maybe late but safe also for iframes 8654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document.attachEvent( "onreadystatechange", DOMContentLoaded ); 866beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A fallback to window.onload, that will always work 8684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair window.attachEvent( "onload", jQuery.ready ); 869beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If IE and not a frame 8714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // continually check to see if the document is ready 8724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var top = false; 873beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 8754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair top = window.frameElement == null && document.documentElement; 8764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch(e) {} 877beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( top && top.doScroll ) { 8794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (function doScrollCheck() { 8804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.isReady ) { 881beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 8834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use the trick by Diego Perini 8844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://javascript.nwbox.com/IEContentLoaded/ 8854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair top.doScroll("left"); 8864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch(e) { 8874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return setTimeout( doScrollCheck, 50 ); 8884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 889beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // and execute any waiting functions 8914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.ready(); 8924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair })(); 8944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 895beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 896beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return readyList.promise( obj ); 8984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 899beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Populate the class2type map 9014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { 9024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair class2type[ "[object " + name + "]" ] = name.toLowerCase(); 9034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 904beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// All jQuery objects should point back to these 9064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairrootjQuery = jQuery(document); 9074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// String to Object options format cache 9084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar optionsCache = {}; 9094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 9104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Convert String-formatted options into Object-formatted ones and store in cache 9114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction createOptions( options ) { 9124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var object = optionsCache[ options ] = {}; 9134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( options.split( core_rspace ), function( _, flag ) { 9144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair object[ flag ] = true; 9154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 916beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return object; 917beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 918beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 919beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik/* 920beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * Create a callback list using the following parameters: 921beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 9224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * options: an optional list of space-separated options that will change how 9234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * the callback list behaves or a more traditional option object 924beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 925beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * By default a callback list will act like an event callback list and can be 926beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * "fired" multiple times. 927beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 9284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * Possible options: 929beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 930beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * once: will ensure the callback list can only be fired once (like a Deferred) 931beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 932beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * memory: will keep track of previous values and will call any callback added 933beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * after the list has been fired right away with the latest "memorized" 934beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * values (like a Deferred) 935beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 936beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * unique: will ensure a callback can only be added once (no duplicate in the list) 937beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 938beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * stopOnFalse: interrupt callings when a callback returns false 939beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 940beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 9414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.Callbacks = function( options ) { 942beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Convert options from String-formatted to Object-formatted if needed 944beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (we check in cache first) 9454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair options = typeof options === "string" ? 9464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( optionsCache[ options ] || createOptions( options ) ) : 9474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.extend( {}, options ); 948beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var // Last fire value (for non-forgettable lists) 950beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik memory, 9514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Flag to know if list was already fired 9524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fired, 953beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Flag to know if list is currently firing 954beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firing, 955beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // First callback to fire (used internally by add and fireWith) 956beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firingStart, 957beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // End of the loop when firing 958beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firingLength, 959beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Index of currently firing callback (modified by remove if needed) 960beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firingIndex, 9614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Actual callback list 9624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair list = [], 9634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Stack of fire calls for repeatable lists 9644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair stack = !options.once && [], 965beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fire callbacks 9664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fire = function( data ) { 9674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair memory = options.memory && data; 9684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fired = true; 969beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firingIndex = firingStart || 0; 970beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firingStart = 0; 971beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firingLength = list.length; 9724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair firing = true; 973beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; list && firingIndex < firingLength; firingIndex++ ) { 9744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { 9754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair memory = false; // To prevent further calls using add 976beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 977beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 978beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 979beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firing = false; 980beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( list ) { 9814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( stack ) { 9824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( stack.length ) { 9834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fire( stack.shift() ); 984beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( memory ) { 986beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik list = []; 9874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 9884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.disable(); 989beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 990beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 991beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 992beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Actual Callbacks object 993beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self = { 994beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add a callback or a collection of callbacks to the list 995beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik add: function() { 996beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( list ) { 9974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // First, we save the current length 9984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var start = list.length; 9994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (function add( args ) { 10004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( args, function( _, arg ) { 10014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var type = jQuery.type( arg ); 10024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( type === "function" ) { 10034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !options.unique || !self.has( arg ) ) { 10044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair list.push( arg ); 10054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 10064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( arg && arg.length && type !== "string" ) { 10074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Inspect recursively 10084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair add( arg ); 10094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 10104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 10114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair })( arguments ); 1012beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Do we need to add the callbacks to the 1013beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // current firing batch? 1014beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( firing ) { 1015beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firingLength = list.length; 1016beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // With memory, if we're not firing then 10174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // we should call right away 10184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( memory ) { 10194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair firingStart = start; 10204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fire( memory ); 1021beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1022beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1023beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1024beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1025beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove a callback from the list 1026beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik remove: function() { 1027beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( list ) { 10284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( arguments, function( _, arg ) { 10294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var index; 10304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 10314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair list.splice( index, 1 ); 10324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Handle firing indexes 10334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( firing ) { 10344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( index <= firingLength ) { 10354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair firingLength--; 1036beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 10374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( index <= firingIndex ) { 10384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair firingIndex--; 1039beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1040beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1041beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 10424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 1043beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1044beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1045beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Control if a given callback is in the list 1047beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik has: function( fn ) { 10484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.inArray( fn, list ) > -1; 1049beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1050beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove all callbacks from the list 1051beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik empty: function() { 1052beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik list = []; 1053beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1054beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1055beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Have the list do nothing anymore 1056beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik disable: function() { 1057beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik list = stack = memory = undefined; 1058beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1060beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Is it disabled? 1061beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik disabled: function() { 1062beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return !list; 1063beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1064beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Lock the list in its current state 1065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik lock: function() { 1066beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik stack = undefined; 10674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !memory ) { 1068beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self.disable(); 1069beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1070beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1071beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1072beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Is it locked? 1073beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik locked: function() { 1074beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return !stack; 1075beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Call all callbacks with the given context and arguments 1077beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fireWith: function( context, args ) { 10784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair args = args || []; 10794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair args = [ context, args.slice ? args.slice() : args ]; 10804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( list && ( !fired || stack ) ) { 1081beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( firing ) { 10824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair stack.push( args ); 10834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 10844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fire( args ); 1085beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1086beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1087beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1088beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1089beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Call all the callbacks with the given arguments 1090beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fire: function() { 1091beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self.fireWith( this, arguments ); 1092beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1093beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1094beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // To know if the callbacks have already been called at least once 1095beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fired: function() { 10964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !!fired; 1097beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1098beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 1099beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1100beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return self; 1101beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 1102beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 1103beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1104beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik Deferred: function( func ) { 11054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var tuples = [ 11064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // action, add listener, listener list, final state 11074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], 11084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], 11094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair [ "notify", "progress", jQuery.Callbacks("memory") ] 11104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ], 1111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik state = "pending", 1112beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik promise = { 1113beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik state: function() { 1114beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return state; 1115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1116beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik always: function() { 11174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.done( arguments ).fail( arguments ); 1118beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 1119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 11204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair then: function( /* fnDone, fnFail, fnProgress */ ) { 11214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var fns = arguments; 1122beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.Deferred(function( newDefer ) { 11234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( tuples, function( i, tuple ) { 11244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var action = tuple[ 0 ], 11254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn = fns[ i ]; 11264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // deferred[ done | fail | progress ] for forwarding actions to newDefer 11274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? 11284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function() { 11294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var returned = fn.apply( this, arguments ); 1130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( returned && jQuery.isFunction( returned.promise ) ) { 11314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair returned.promise() 11324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .done( newDefer.resolve ) 11334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .fail( newDefer.reject ) 11344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .progress( newDefer.notify ); 1135beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1136beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); 1137beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 11384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 11394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newDefer[ action ] 11404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 1141beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 11424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fns = null; 1143beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }).promise(); 1144beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1145beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get a promise for this deferred 1146beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If obj is provided, the promise aspect is added to the object 1147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik promise: function( obj ) { 11484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return obj != null ? jQuery.extend( obj, promise ) : promise; 1149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1150beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 11514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred = {}; 1152beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 11534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Keep pipe for back-compat 11544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair promise.pipe = promise.then; 11554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 11564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Add list-specific methods 11574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( tuples, function( i, tuple ) { 11584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var list = tuple[ 2 ], 11594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair stateString = tuple[ 3 ]; 1160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 11614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // promise[ done | fail | progress ] = list.add 11624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair promise[ tuple[1] ] = list.add; 11634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 11644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Handle state 11654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( stateString ) { 11664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair list.add(function() { 11674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // state = [ resolved | rejected ] 11684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair state = stateString; 11694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 11704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // [ reject_list | resolve_list ].disable; progress_list.lock 11714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); 11724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 11734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 11744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // deferred[ resolve | reject | notify ] = list.fire 11754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred[ tuple[0] ] = list.fire; 11764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred[ tuple[0] + "With" ] = list.fireWith; 11774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 11784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 11794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Make the deferred a promise 11804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair promise.promise( deferred ); 1181beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Call given func if any 1183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( func ) { 1184beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik func.call( deferred, deferred ); 1185beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1186beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1187beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // All done! 1188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return deferred; 1189beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1190beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1191beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Deferred helper 11924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair when: function( subordinate /* , ..., subordinateN */ ) { 11934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i = 0, 11944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair resolveValues = core_slice.call( arguments ), 11954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = resolveValues.length, 11964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 11974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // the count of uncompleted subordinates 11984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, 11994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 12004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // the master Deferred. If resolveValues consist of only a single Deferred, just use that. 12014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred = remaining === 1 ? subordinate : jQuery.Deferred(), 12024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 12034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Update function for both resolve and progress values 12044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair updateFunc = function( i, contexts, values ) { 12054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( value ) { 12064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair contexts[ i ] = this; 12074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; 12084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if( values === progressValues ) { 12094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.notifyWith( contexts, values ); 12104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( !( --remaining ) ) { 12114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.resolveWith( contexts, values ); 12124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 12134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 12144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 12154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 12164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair progressValues, progressContexts, resolveContexts; 12174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 12184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // add listeners to Deferred subordinates; treat others as resolved 1219beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( length > 1 ) { 12204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair progressValues = new Array( length ); 12214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair progressContexts = new Array( length ); 12224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair resolveContexts = new Array( length ); 1223beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < length; i++ ) { 12244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { 12254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair resolveValues[ i ].promise() 12264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .done( updateFunc( i, resolveContexts, resolveValues ) ) 12274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .fail( deferred.reject ) 12284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .progress( updateFunc( i, progressContexts, progressValues ) ); 1229beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 12304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair --remaining; 1231beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1232beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1233beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 12344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 12354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if we're not waiting on anything, resolve the master 12364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !remaining ) { 12374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.resolveWith( resolveContexts, resolveValues ); 12384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 12394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 12404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return deferred.promise(); 1241beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1242beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 12434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.support = (function() { 1244beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var support, 1246beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik all, 1247beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik a, 1248beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik select, 1249beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik opt, 1250beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik input, 1251beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fragment, 1252beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventName, 1253beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i, 1254beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isSupported, 12554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair clickFn, 12564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div = document.createElement("div"); 1257beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 12584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Setup 12594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.setAttribute( "className", "t" ); 12604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; 1261beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 12624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Support tests won't run in some limited or non-browser environments 12634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair all = div.getElementsByTagName("*"); 12644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair a = div.getElementsByTagName("a")[ 0 ]; 12654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !all || !a || !all.length ) { 1266beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return {}; 1267beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1268beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 12694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // First batch of tests 12704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair select = document.createElement("select"); 1271beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik opt = select.appendChild( document.createElement("option") ); 12724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair input = div.getElementsByTagName("input")[ 0 ]; 1273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 12744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair a.style.cssText = "top:1px;float:left;opacity:.5"; 1275beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support = { 1276beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE strips leading whitespace when .innerHTML is used 1277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik leadingWhitespace: ( div.firstChild.nodeType === 3 ), 1278beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that tbody elements aren't automatically inserted 1280beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE will insert them into empty tables 1281beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tbody: !div.getElementsByTagName("tbody").length, 1282beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1283beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that link elements get serialized correctly by innerHTML 1284beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This requires a wrapper element in IE 1285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik htmlSerialize: !!div.getElementsByTagName("link").length, 1286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get the style information from getAttribute 1288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (IE uses .cssText instead) 1289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik style: /top/.test( a.getAttribute("style") ), 1290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that URLs aren't manipulated 1292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (IE normalizes it by default) 1293beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hrefNormalized: ( a.getAttribute("href") === "/a" ), 1294beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1295beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that element opacity exists 1296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (IE uses filter instead) 1297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use a regex to work around a WebKit issue. See #5145 12984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opacity: /^0.5/.test( a.style.opacity ), 1299beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Verify style float existence 1301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (IE uses styleFloat instead of cssFloat) 1302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cssFloat: !!a.style.cssFloat, 1303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that if no value is specified for a checkbox 1305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // that it defaults to "on". 1306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (WebKit defaults to "" instead) 1307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik checkOn: ( input.value === "on" ), 1308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that a selected-by-default option has a working selected property. 1310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) 1311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik optSelected: opt.selected, 1312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) 1314beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik getSetAttribute: div.className !== "t", 1315beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 13164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Tests for enctype support on a form (#6743) 1317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik enctype: !!document.createElement("form").enctype, 1318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Makes sure cloning an html5 element does not cause problems 1320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Where outerHTML is undefined, this still works 1321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>", 1322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 13234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode 13244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair boxModel: ( document.compatMode === "CSS1Compat" ), 13254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Will be defined later 1327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik submitBubbles: true, 1328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik changeBubbles: true, 1329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik focusinBubbles: false, 1330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deleteExpando: true, 1331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik noCloneEvent: true, 1332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik inlineBlockNeedsLayout: false, 1333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik shrinkWrapBlocks: false, 13344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair reliableMarginRight: true, 13354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair boxSizingReliable: true, 13364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair pixelPosition: false 1337beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 1338beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure checked status is properly cloned 1340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik input.checked = true; 1341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.noCloneChecked = input.cloneNode( true ).checked; 1342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that the options inside disabled selects aren't marked as disabled 1344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (WebKit marks them as disabled) 1345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik select.disabled = true; 1346beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.optDisabled = !opt.disabled; 1347beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1348beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Test to see if it's possible to delete an expando from an element 1349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fails in Internet Explorer 1350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 1351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete div.test; 1352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( e ) { 1353beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.deleteExpando = false; 1354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { 13574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.attachEvent( "onclick", clickFn = function() { 1358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Cloning a node shouldn't copy over any 1359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // bound event handlers (IE does this) 1360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.noCloneEvent = false; 1361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 13624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.cloneNode( true ).fireEvent("onclick"); 13634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.detachEvent( "onclick", clickFn ); 1364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if a radio maintains its value 1367beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // after being appended to the DOM 1368beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik input = document.createElement("input"); 1369beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik input.value = "t"; 13704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair input.setAttribute( "type", "radio" ); 1371beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.radioValue = input.value === "t"; 1372beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 13734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair input.setAttribute( "checked", "checked" ); 13744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 13754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // #11217 - WebKit loses check when the name is after the checked attribute 13764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair input.setAttribute( "name", "t" ); 13774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1378beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div.appendChild( input ); 1379beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fragment = document.createDocumentFragment(); 1380beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fragment.appendChild( div.lastChild ); 1381beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1382beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // WebKit doesn't clone checked state correctly in fragments 1383beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; 1384beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if a disconnected checkbox will retain its checked 1386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // value of true after appended to the DOM (IE6/7) 1387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.appendChecked = input.checked; 1388beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fragment.removeChild( input ); 1390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fragment.appendChild( div ); 1391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1392beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Technique from Juriy Zaytsev 1393beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ 1394beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We only care about the case where non-standard event systems 1395beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // are used, namely in IE. Short-circuiting here helps us to 1396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // avoid an eval call (in setAttribute) which can cause CSP 1397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // to go haywire. See: https://developer.mozilla.org/en/Security/CSP 1398beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( div.attachEvent ) { 13994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i in { 14004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair submit: true, 14014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair change: true, 14024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair focusin: true 1403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }) { 1404beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventName = "on" + i; 1405beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isSupported = ( eventName in div ); 1406beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !isSupported ) { 1407beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div.setAttribute( eventName, "return;" ); 1408beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isSupported = ( typeof div[ eventName ] === "function" ); 1409beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support[ i + "Bubbles" ] = isSupported; 1411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1413beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Run tests that need a body at doc ready 1415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery(function() { 14164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var container, div, tds, marginDiv, 14174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", 1418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik body = document.getElementsByTagName("body")[0]; 1419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1420beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !body ) { 1421beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Return for frameset docs that don't have a body 1422beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 1423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1424beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1425beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik container = document.createElement("div"); 14264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; 1427beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik body.insertBefore( container, body.firstChild ); 1428beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1429beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Construct the test element 1430beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div = document.createElement("div"); 1431beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik container.appendChild( div ); 1432beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if table cells still have offsetWidth/Height when they are set 1434beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // to display:none and there are still other visible table cells in a 1435beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // table row; if so, offsetWidth/Height are not reliable for use when 1436beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // determining if an element has been hidden directly using 1437beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // display:none (it is still safe to use offsets if a parent element is 1438beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // hidden; don safety goggles and see bug #4512 for more information). 1439beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (only IE 8 fails this test) 14404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; 14414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tds = div.getElementsByTagName("td"); 14424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; 1443beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isSupported = ( tds[ 0 ].offsetHeight === 0 ); 1444beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1445beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tds[ 0 ].style.display = ""; 1446beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tds[ 1 ].style.display = "none"; 1447beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1448beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if empty table cells still have offsetWidth/Height 1449beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (IE <= 8 fail this test) 1450beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); 1451beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 14524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check box-sizing and margin behavior 1453beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div.innerHTML = ""; 14544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; 14554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair support.boxSizing = ( div.offsetWidth === 4 ); 14564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); 14574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 14584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // NOTE: To any future maintainer, we've window.getComputedStyle 14594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // because jsdom on node.js will break without it. 14604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( window.getComputedStyle ) { 14614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; 14624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; 14634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 14644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if div with explicit width and no margin-right incorrectly 14654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // gets computed margin-right based on width of container. For more 14664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // info see bug #3333 14674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Fails in WebKit before Feb 2011 nightlies 14684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right 14694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair marginDiv = document.createElement("div"); 14704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair marginDiv.style.cssText = div.style.cssText = divReset; 14714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair marginDiv.style.marginRight = marginDiv.style.width = "0"; 14724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.style.width = "1px"; 14734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.appendChild( marginDiv ); 14744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair support.reliableMarginRight = 14754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); 14764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 1477beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1478beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof div.style.zoom !== "undefined" ) { 1479beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if natively block-level elements act like inline-block 1480beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // elements when setting their display to 'inline' and giving 1481beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // them layout 1482beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (IE < 8 does this) 14834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = ""; 14844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; 14854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); 1486beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1487beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if elements with layout shrink-wrap their children 1488beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (IE 6 does this) 14894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.style.display = "block"; 14904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.style.overflow = "visible"; 14914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<div></div>"; 14924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.firstChild.style.width = "5px"; 14934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); 1494beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 14954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair container.style.zoom = 1; 14964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 1497beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 14984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Null elements to avoid leaks in IE 1499beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik body.removeChild( container ); 15004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair container = div = tds = marginDiv = null; 1501beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 1502beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 15034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Null elements to avoid leaks in IE 15044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment.removeChild( div ); 15054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair all = a = select = opt = input = fragment = div = null; 15064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1507beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return support; 1508beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik})(); 15094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, 1510beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rmultiDash = /([A-Z])/g; 1511beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 1513beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache: {}, 1514beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 15154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deletedIds: [], 15164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 15174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remove at next major release (1.9/2.0) 1518beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik uuid: 0, 1519beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1520beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Unique for each copy of jQuery on the page 1521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Non-digits removed to match rinlinejQuery 1522beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), 1523beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1524beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The following elements throw uncatchable exceptions if you 1525beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // attempt to add expando properties to them. 1526beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik noData: { 1527beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "embed": true, 1528beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Ban all objects except for Flash (which handle expandos) 1529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", 1530beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "applet": true 1531beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1532beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1533beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hasData: function( elem ) { 1534beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; 1535beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return !!elem && !isEmptyDataObject( elem ); 1536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1537beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1538beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data: function( elem, name, data, pvt /* Internal Use Only */ ) { 1539beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.acceptData( elem ) ) { 1540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 1541beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1542beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 15434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var thisCache, ret, 1544beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik internalKey = jQuery.expando, 1545beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik getByName = typeof name === "string", 1546beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1547beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We have to handle DOM nodes and JS objects differently because IE6-7 1548beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // can't GC object references properly across the DOM-JS boundary 1549beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isNode = elem.nodeType, 1550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1551beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only DOM nodes need the global jQuery cache; JS object data is 1552beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // attached directly to the object so GC can occur automatically 1553beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache = isNode ? jQuery.cache : elem, 1554beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1555beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only defining an ID for JS objects if its cache already exists allows 1556beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // the code to shortcut on the same path as a DOM node with no cache 15574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; 1558beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1559beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Avoid doing any more work than we need to when trying to get data on an 1560beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // object that has no data at all 15614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { 1562beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 1563beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1564beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1565beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !id ) { 1566beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only DOM nodes need a new unique ID for each element since their data 1567beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ends up in the global cache 1568beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isNode ) { 15694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; 1570beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1571beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik id = internalKey; 1572beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1573beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1574beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1575beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !cache[ id ] ) { 1576beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache[ id ] = {}; 1577beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1578beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Avoids exposing jQuery metadata on plain JS objects when the object 1579beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // is serialized using JSON.stringify 1580beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !isNode ) { 1581beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache[ id ].toJSON = jQuery.noop; 1582beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1583beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1584beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1585beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // An object can be passed to jQuery.data instead of a key/value pair; this gets 1586beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // shallow copied over onto the existing cache 1587beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof name === "object" || typeof name === "function" ) { 1588beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( pvt ) { 1589beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache[ id ] = jQuery.extend( cache[ id ], name ); 1590beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1591beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache[ id ].data = jQuery.extend( cache[ id ].data, name ); 1592beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1593beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1594beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 15954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair thisCache = cache[ id ]; 1596beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1597beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // jQuery data() is stored in a separate object inside the object's internal data 1598beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // cache in order to avoid key collisions between internal data and user-defined 1599beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // data. 1600beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !pvt ) { 1601beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !thisCache.data ) { 1602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik thisCache.data = {}; 1603beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1604beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1605beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik thisCache = thisCache.data; 1606beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1607beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1608beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( data !== undefined ) { 1609beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik thisCache[ jQuery.camelCase( name ) ] = data; 1610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1611beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1612beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check for both converted-to-camel and non-converted data property names 1613beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If a data property was specified 1614beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( getByName ) { 1615beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1616beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // First Try to find as-is property data 1617beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = thisCache[ name ]; 1618beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1619beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Test for null|undefined property data 1620beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ret == null ) { 1621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1622beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Try to find the camelCased property 1623beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = thisCache[ jQuery.camelCase( name ) ]; 1624beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1626beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = thisCache; 1627beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1628beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1629beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 1630beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1631beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1632beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik removeData: function( elem, name, pvt /* Internal Use Only */ ) { 1633beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.acceptData( elem ) ) { 1634beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 1635beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1636beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1637beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var thisCache, i, l, 1638beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1639beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isNode = elem.nodeType, 1640beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1641beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // See jQuery.data for more information 1642beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache = isNode ? jQuery.cache : elem, 16434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair id = isNode ? elem[ jQuery.expando ] : jQuery.expando; 1644beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1645beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If there is already no cache entry for this object, there is no 1646beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // purpose in continuing 1647beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !cache[ id ] ) { 1648beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 1649beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1650beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1651beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( name ) { 1652beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1653beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik thisCache = pvt ? cache[ id ] : cache[ id ].data; 1654beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1655beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( thisCache ) { 1656beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1657beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Support array or space separated string names for data keys 1658beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.isArray( name ) ) { 1659beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1660beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // try the string as a key before any manipulation 1661beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( name in thisCache ) { 1662beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = [ name ]; 1663beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1664beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1665beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // split the camel cased version by spaces unless a key with the spaces exists 1666beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = jQuery.camelCase( name ); 1667beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( name in thisCache ) { 1668beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = [ name ]; 1669beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 16704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name = name.split(" "); 1671beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1672beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1673beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1674beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1675beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0, l = name.length; i < l; i++ ) { 1676beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete thisCache[ name[i] ]; 1677beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1678beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1679beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If there is no data left in the cache, we want to continue 1680beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // and let the cache object itself get destroyed 1681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { 1682beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 1683beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1684beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1685beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1686beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1687beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // See jQuery.data for more information 1688beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !pvt ) { 1689beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete cache[ id ].data; 1690beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1691beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Don't destroy the parent cache unless the internal data object 1692beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // had been the only thing left in it 16934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !isEmptyDataObject( cache[ id ] ) ) { 1694beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 1695beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1696beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1697beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 16984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Destroy the cache 16994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( isNode ) { 17004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.cleanData( [ elem ], true ); 17014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 17024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) 17034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( jQuery.support.deleteExpando || cache != cache.window ) { 1704beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete cache[ id ]; 17054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 17064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // When all else fails, null 1707beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1708beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache[ id ] = null; 1709beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1710beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1711beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1712beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For internal use only. 1713beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik _data: function( elem, name, data ) { 1714beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.data( elem, name, data, true ); 1715beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1716beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1717beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // A method for determining if a DOM node can handle the data expando 1718beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik acceptData: function( elem ) { 17194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; 1720beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // nodes accept data unless otherwise specified; rejection can be conditional 17224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !noData || noData !== true && elem.getAttribute("classid") === noData; 1723beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1724beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 1725beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1726beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.extend({ 1727beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data: function( key, value ) { 17284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var parts, part, attr, name, l, 17294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = this[0], 17304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 1731beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = null; 1732beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Gets all values 17344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( key === undefined ) { 1735beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this.length ) { 17364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data = jQuery.data( elem ); 1737beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { 17394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attr = elem.attributes; 17404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( l = attr.length; i < l; i++ ) { 1741beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = attr[i].name; 1742beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !name.indexOf( "data-" ) ) { 1744beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = jQuery.camelCase( name.substring(5) ); 1745beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataAttr( elem, name, data[ name ] ); 1747beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1748beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 17494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery._data( elem, "parsedAttrs", true ); 1750beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1751beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1752beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1753beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return data; 17544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 1755beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Sets multiple values 17574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof key === "object" ) { 1758beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 1759beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.data( this, key ); 1760beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 1761beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1762beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parts = key.split( ".", 2 ); 1764beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parts[1] = parts[1] ? "." + parts[1] : ""; 17654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair part = parts[1] + "!"; 1766beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, function( value ) { 1768beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( value === undefined ) { 17704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data = this.triggerHandler( "getData" + part, [ parts[0] ] ); 1771beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Try to fetch any internally stored data first 17734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( data === undefined && elem ) { 17744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data = jQuery.data( elem, key ); 17754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data = dataAttr( elem, key, data ); 17764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 1777beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return data === undefined && parts[1] ? 17794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.data( parts[0] ) : 17804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data; 17814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 17824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 17834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parts[1] = value; 17844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.each(function() { 17854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var self = jQuery( this ); 1786beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 17874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.triggerHandler( "setData" + part, parts ); 1788beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.data( this, key, value ); 17894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.triggerHandler( "changeData" + part, parts ); 1790beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 17914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, null, value, arguments.length > 1, null, false ); 1792beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1793beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1794beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik removeData: function( key ) { 1795beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 1796beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.removeData( this, key ); 1797beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 1798beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1799beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 1800beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1801beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction dataAttr( elem, key, data ) { 1802beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If nothing was found internally, try to fetch any 1803beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // data from the HTML5 data-* attribute 1804beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( data === undefined && elem.nodeType === 1 ) { 1805beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1806beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); 1807beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1808beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = elem.getAttribute( name ); 1809beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1810beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof data === "string" ) { 1811beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 1812beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = data === "true" ? true : 1813beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data === "false" ? false : 1814beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data === "null" ? null : 18154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Only convert to a number if it doesn't change the string 18164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair +data + "" === data ? +data : 18174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbrace.test( data ) ? jQuery.parseJSON( data ) : 1818beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data; 1819beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( e ) {} 1820beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1821beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure we set the data so it isn't changed later 1822beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.data( elem, key, data ); 1823beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1824beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 1825beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = undefined; 1826beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1827beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1828beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1829beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return data; 1830beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 1831beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1832beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// checks a cache object for emptiness 1833beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction isEmptyDataObject( obj ) { 18344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name; 18354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( name in obj ) { 1836beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1837beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if the public data object is empty, the private is still empty 1838beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { 1839beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik continue; 1840beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1841beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( name !== "toJSON" ) { 1842beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 1843beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1844beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1845beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1846beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return true; 1847beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 1848beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 1849beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik queue: function( elem, type, data ) { 18504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var queue; 18514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1852beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem ) { 1853beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = ( type || "fx" ) + "queue"; 18544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair queue = jQuery._data( elem, type ); 1855beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1856beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Speed up dequeue by getting out quickly if this is just a lookup 1857beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( data ) { 18584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !queue || jQuery.isArray(data) ) { 18594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair queue = jQuery._data( elem, type, jQuery.makeArray(data) ); 1860beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 18614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair queue.push( data ); 1862beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1863beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 18644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return queue || []; 1865beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1866beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1867beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1868beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dequeue: function( elem, type ) { 1869beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = type || "fx"; 1870beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1871beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var queue = jQuery.queue( elem, type ), 18724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair startLength = queue.length, 1873beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = queue.shift(), 18744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = jQuery._queueHooks( elem, type ), 18754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair next = function() { 18764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.dequeue( elem, type ); 18774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 1878beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1879beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If the fx queue is dequeued, always remove the progress sentinel 1880beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fn === "inprogress" ) { 1881beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = queue.shift(); 18824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair startLength--; 1883beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1884beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1885beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fn ) { 18864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1887beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add a progress sentinel to prevent the fx queue from being 1888beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // automatically dequeued 1889beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( type === "fx" ) { 1890beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik queue.unshift( "inprogress" ); 1891beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1892beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 18934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // clear up the last queue stop function 18944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete hooks.stop; 18954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn.call( elem, next, hooks ); 1896beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1897beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 18984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !startLength && hooks ) { 18994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.empty.fire(); 1900beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 19014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 19024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 19034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // not intended for public consumption - generates a queueHooks object, or returns the current one 19044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair _queueHooks: function( elem, type ) { 19054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var key = type + "queueHooks"; 19064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery._data( elem, key ) || jQuery._data( elem, key, { 19074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair empty: jQuery.Callbacks("once memory").add(function() { 19084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.removeData( elem, type + "queue", true ); 19094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.removeData( elem, key, true ); 19104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) 19114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 1912beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1913beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 1914beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1915beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.extend({ 1916beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik queue: function( type, data ) { 19174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var setter = 2; 19184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1919beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof type !== "string" ) { 1920beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = type; 1921beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = "fx"; 19224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setter--; 1923beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1924beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 19254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( arguments.length < setter ) { 1926beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.queue( this[0], type ); 1927beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1928beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 19294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return data === undefined ? 19304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this : 19314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.each(function() { 19324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var queue = jQuery.queue( this, type, data ); 19334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 19344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // ensure a hooks for this queue 19354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery._queueHooks( this, type ); 19364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 19374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( type === "fx" && queue[0] !== "inprogress" ) { 19384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.dequeue( this, type ); 19394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 19404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 1941beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1942beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dequeue: function( type ) { 1943beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 1944beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.dequeue( this, type ); 1945beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 1946beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1947beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Based off of the plugin by Clint Helfers, with permission. 1948beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // http://blindsignals.com/index.php/2009/07/jquery-delay/ 1949beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delay: function( time, type ) { 1950beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 1951beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = type || "fx"; 1952beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 1953beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.queue( type, function( next, hooks ) { 1954beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var timeout = setTimeout( next, time ); 1955beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hooks.stop = function() { 1956beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clearTimeout( timeout ); 1957beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 1958beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 1959beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1960beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clearQueue: function( type ) { 1961beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.queue( type || "fx", [] ); 1962beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 1963beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get a promise resolved when queues of a certain type 1964beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // are emptied (fx is the type by default) 19654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair promise: function( type, obj ) { 19664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var tmp, 19674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair count = 1, 19684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair defer = jQuery.Deferred(), 19694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elements = this, 19704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = this.length, 19714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair resolve = function() { 19724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !( --count ) ) { 19734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair defer.resolveWith( elements, [ elements ] ); 19744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 19754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 19764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1977beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof type !== "string" ) { 19784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair obj = type; 1979beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = undefined; 1980beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1981beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = type || "fx"; 19824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1983beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while( i-- ) { 19844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tmp = jQuery._data( elements[ i ], type + "queueHooks" ); 19854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( tmp && tmp.empty ) { 1986beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik count++; 19874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tmp.empty.add( resolve ); 1988beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1989beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1990beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik resolve(); 19914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return defer.promise( obj ); 1992beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 1993beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 19944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar nodeHook, boolHook, fixSpecified, 19954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rclass = /[\t\r\n]/g, 1996beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rreturn = /\r/g, 1997beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rtype = /^(?:button|input)$/i, 1998beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rfocusable = /^(?:button|input|object|select|textarea)$/i, 19994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rclickable = /^a(?:rea|)$/i, 2000beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, 20014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair getSetAttribute = jQuery.support.getSetAttribute; 2002beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2003beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.extend({ 2004beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik attr: function( name, value ) { 20054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); 2006beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2007beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2008beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik removeAttr: function( name ) { 2009beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 2010beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.removeAttr( this, name ); 2011beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2012beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2013beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2014beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prop: function( name, value ) { 20154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); 2016beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2017beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2018beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik removeProp: function( name ) { 2019beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = jQuery.propFix[ name ] || name; 2020beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 2021beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // try/catch handles cases where IE balks (such as removing a property on window) 2022beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 2023beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this[ name ] = undefined; 2024beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete this[ name ]; 2025beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( e ) {} 2026beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2027beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2028beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2029beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik addClass: function( value ) { 2030beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var classNames, i, l, elem, 2031beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setClass, c, cl; 2032beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2033beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( value ) ) { 2034beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function( j ) { 2035beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this ).addClass( value.call(this, j, this.className) ); 2036beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2037beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2038beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2039beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value && typeof value === "string" ) { 20404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair classNames = value.split( core_rspace ); 2041beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2042beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0, l = this.length; i < l; i++ ) { 2043beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = this[ i ]; 2044beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2045beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.nodeType === 1 ) { 2046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elem.className && classNames.length === 1 ) { 2047beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.className = value; 2048beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2049beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2050beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setClass = " " + elem.className + " "; 2051beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2052beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( c = 0, cl = classNames.length; c < cl; c++ ) { 20534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { 2054beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setClass += classNames[ c ] + " "; 2055beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2056beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2057beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.className = jQuery.trim( setClass ); 2058beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2060beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2061beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2062beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2063beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 2064beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2066beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik removeClass: function( value ) { 20674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var removes, className, elem, c, cl, i, l; 2068beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2069beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( value ) ) { 2070beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function( j ) { 2071beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this ).removeClass( value.call(this, j, this.className) ); 2072beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2073beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2074beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( (value && typeof value === "string") || value === undefined ) { 20754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair removes = ( value || "" ).split( core_rspace ); 2076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2077beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0, l = this.length; i < l; i++ ) { 2078beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = this[ i ]; 2079beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.nodeType === 1 && elem.className ) { 2080beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 20814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair className = (" " + elem.className + " ").replace( rclass, " " ); 20824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 20834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // loop over each item in the removal list 20844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( c = 0, cl = removes.length; c < cl; c++ ) { 20854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remove until there is nothing to remove, 20864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { 20874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair className = className.replace( " " + removes[ c ] + " " , " " ); 20884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 2089beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 20904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.className = value ? jQuery.trim( className ) : ""; 2091beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2092beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2093beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2094beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2095beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 2096beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2097beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2098beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik toggleClass: function( value, stateVal ) { 2099beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var type = typeof value, 2100beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isBool = typeof stateVal === "boolean"; 2101beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2102beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( value ) ) { 2103beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function( i ) { 2104beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); 2105beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2106beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2107beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2108beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 2109beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( type === "string" ) { 2110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // toggle individual class names 2111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var className, 2112beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 0, 2113beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self = jQuery( this ), 2114beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik state = stateVal, 21154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair classNames = value.split( core_rspace ); 2116beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2117beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( (className = classNames[ i++ ]) ) { 21184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // check each className given, space separated list 2119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik state = isBool ? state : !self.hasClass( className ); 2120beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self[ state ? "addClass" : "removeClass" ]( className ); 2121beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2122beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2123beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( type === "undefined" || type === "boolean" ) { 2124beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this.className ) { 2125beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // store className if set 2126beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery._data( this, "__className__", this.className ); 2127beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2128beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2129beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // toggle whole className 2130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; 2131beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2132beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2133beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2134beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2135beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hasClass: function( selector ) { 2136beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var className = " " + selector + " ", 2137beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 0, 2138beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik l = this.length; 2139beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < l; i++ ) { 21404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { 2141beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return true; 2142beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2143beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2144beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2145beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 2146beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik val: function( value ) { 2149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var hooks, ret, isFunction, 2150beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = this[0]; 2151beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2152beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !arguments.length ) { 2153beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem ) { 21544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 2155beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2156beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { 2157beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 2158beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2159beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = elem.value; 2161beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2162beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return typeof ret === "string" ? 2163beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // handle most common string cases 2164beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.replace(rreturn, "") : 2165beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // handle cases where value is null/undef or number 2166beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret == null ? "" : ret; 2167beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2168beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2169beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2170beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2171beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2172beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isFunction = jQuery.isFunction( value ); 2173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2174beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function( i ) { 21754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var val, 21764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self = jQuery(this); 2177beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2178beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this.nodeType !== 1 ) { 2179beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2180beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2181beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isFunction ) { 2183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik val = value.call( this, i, self.val() ); 2184beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2185beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik val = value; 2186beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2187beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Treat null/undefined as ""; convert numbers to string 2189beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( val == null ) { 2190beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik val = ""; 2191beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( typeof val === "number" ) { 2192beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik val += ""; 2193beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( jQuery.isArray( val ) ) { 2194beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik val = jQuery.map(val, function ( value ) { 2195beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return value == null ? "" : value + ""; 2196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2197beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2198beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 21994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 2200beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2201beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If set returns undefined, fall back to normal setting 2202beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { 2203beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.value = val; 2204beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2205beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2206beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2207beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 2208beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2209beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 2210beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik valHooks: { 2211beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik option: { 2212beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem ) { 2213beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // attributes.value is undefined in Blackberry 4.7 but 2214beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // uses .value. See #6932 2215beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var val = elem.attributes.value; 2216beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return !val || val.specified ? elem.value : elem.text; 2217beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2218beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2219beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik select: { 2220beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem ) { 22214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var value, option, 2222beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik options = elem.options, 22234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair index = elem.selectedIndex, 22244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair one = elem.type === "select-one" || index < 0, 22254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair values = one ? null : [], 22264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair max = one ? index + 1 : options.length, 22274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = index < 0 ? 22284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair max : 22294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair one ? index : 0; 2230beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2231beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Loop through all the selected options 2232beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < max; i++ ) { 2233beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik option = options[ i ]; 2234beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 22354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // oldIE doesn't update selected after form reset (#2551) 22364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( ( option.selected || i === index ) && 22374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Don't return options that are disabled or in a disabled optgroup 22384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && 22394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { 2240beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2241beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get the specific value for the option 2242beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value = jQuery( option ).val(); 2243beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2244beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We don't need an array for one selects 2245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( one ) { 2246beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return value; 2247beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2248beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2249beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Multi-Selects return an array 2250beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik values.push( value ); 2251beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2252beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2253beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2254beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return values; 2255beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2256beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2257beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value ) { 2258beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var values = jQuery.makeArray( value ); 2259beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2260beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery(elem).find("option").each(function() { 2261beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; 2262beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2263beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2264beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !values.length ) { 2265beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.selectedIndex = -1; 2266beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2267beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return values; 2268beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2269beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2270beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2271beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 22724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 22734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attrFn: {}, 2274beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2275beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik attr: function( elem, name, value, pass ) { 2276beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var ret, hooks, notxml, 2277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nType = elem.nodeType; 2278beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // don't get/set attributes on text, comment and attribute nodes 2280beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 2281beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2282beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2283beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 22844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { 2285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery( elem )[ name ]( value ); 2286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fallback to prop when attributes are not supported 2289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof elem.getAttribute === "undefined" ) { 2290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.prop( elem, name, value ); 2291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2293beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 2294beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2295beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // All attributes are lowercase 2296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Grab necessary hook if one is defined 2297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( notxml ) { 2298beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = name.toLowerCase(); 2299beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); 2300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value !== undefined ) { 2303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value === null ) { 2305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.removeAttr( elem, name ); 2306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { 2309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 2310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 23124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.setAttribute( name, value + "" ); 2313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return value; 2314beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2315beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2316beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { 2317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 2318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = elem.getAttribute( name ); 2322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2323beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Non-existent attributes return null, we normalize to undefined 2324beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret === null ? 2325beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik undefined : 2326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret; 2327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik removeAttr: function( elem, value ) { 23314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var propName, attrNames, name, isBool, 2332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 0; 2333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2334beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value && elem.nodeType === 1 ) { 2335beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 23364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attrNames = value.split( core_rspace ); 23374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 23384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < attrNames.length; i++ ) { 2339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = attrNames[ i ]; 2340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( name ) { 2342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik propName = jQuery.propFix[ name ] || name; 23434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair isBool = rboolean.test( name ); 2344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // See #9699 for explanation of this approach (setting first, then removal) 23464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Do not do this for boolean attributes (see #10870) 23474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !isBool ) { 23484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.attr( elem, name, "" ); 23494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 2350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.removeAttribute( getSetAttribute ? name : propName ); 2351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set corresponding property to false for boolean attributes 23534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( isBool && propName in elem ) { 2354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem[ propName ] = false; 2355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2357beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik attrHooks: { 2362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type: { 2363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value ) { 2364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We can't allow the type property to be changed (since it causes problems in IE) 2365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( rtype.test( elem.nodeName ) && elem.parentNode ) { 2366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.error( "type property can't be changed" ); 2367beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { 2368beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Setting the type on a radio button after the value resets the value in IE6-9 2369beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Reset value to it's default in case type is set after value 2370beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This is for element creation 2371beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var val = elem.value; 2372beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.setAttribute( "type", value ); 2373beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( val ) { 2374beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.value = val; 2375beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2376beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return value; 2377beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2378beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2379beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2380beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use the value property for back compat 2381beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use the nodeHook for button elements in IE6/7 (#1954) 2382beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value: { 2383beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem, name ) { 2384beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { 2385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return nodeHook.get( elem, name ); 2386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return name in elem ? 2388beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.value : 2389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik null; 2390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value, name ) { 2392beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { 2393beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return nodeHook.set( elem, value, name ); 2394beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2395beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Does not return so that setAttribute is also used 2396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.value = value; 2397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2398beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2399beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2400beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2401beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik propFix: { 2402beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tabindex: "tabIndex", 2403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik readonly: "readOnly", 2404beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "for": "htmlFor", 2405beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "class": "className", 2406beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik maxlength: "maxLength", 2407beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cellspacing: "cellSpacing", 2408beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cellpadding: "cellPadding", 2409beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rowspan: "rowSpan", 2410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik colspan: "colSpan", 2411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik usemap: "useMap", 2412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik frameborder: "frameBorder", 2413beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik contenteditable: "contentEditable" 2414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2416beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prop: function( elem, name, value ) { 2417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var ret, hooks, notxml, 2418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nType = elem.nodeType; 2419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2420beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // don't get/set properties on text, comment and attribute nodes 2421beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 2422beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2424beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2425beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 2426beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2427beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( notxml ) { 2428beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fix name and attach hooks 2429beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = jQuery.propFix[ name ] || name; 2430beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hooks = jQuery.propHooks[ name ]; 2431beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2432beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value !== undefined ) { 2434beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { 2435beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 2436beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2437beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2438beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( elem[ name ] = value ); 2439beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2440beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2441beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2442beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { 2443beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 2444beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2445beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2446beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem[ name ]; 2447beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2448beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2449beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2450beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2451beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik propHooks: { 2452beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tabIndex: { 2453beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem ) { 2454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set 2455beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 2456beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var attributeNode = elem.getAttributeNode("tabindex"); 2457beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return attributeNode && attributeNode.specified ? 2459beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parseInt( attributeNode.value, 10 ) : 2460beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 2461beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 0 : 2462beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik undefined; 2463beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2464beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2465beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2466beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 2467beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2468beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Hook for boolean attributes 2469beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikboolHook = { 2470beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem, name ) { 2471beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Align boolean attributes with corresponding properties 2472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fall back to attribute presence where some booleans are not supported 2473beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var attrNode, 2474beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik property = jQuery.prop( elem, name ); 2475beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? 2476beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name.toLowerCase() : 2477beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik undefined; 2478beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2479beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value, name ) { 2480beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var propName; 2481beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value === false ) { 2482beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove boolean attributes when set to false 2483beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.removeAttr( elem, name ); 2484beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2485beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // value is true since we know at this point it's type boolean and not false 2486beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set boolean attributes to the same name and set the DOM property 2487beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik propName = jQuery.propFix[ name ] || name; 2488beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( propName in elem ) { 2489beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only set the IDL specifically if it already exists on the element 2490beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem[ propName ] = true; 2491beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2492beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2493beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.setAttribute( name, name.toLowerCase() ); 2494beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2495beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return name; 2496beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2497beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 2498beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2499beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// IE6/7 do not support getting/setting some attributes with get/setAttribute 2500beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !getSetAttribute ) { 2501beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2502beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fixSpecified = { 2503beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name: true, 25044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair id: true, 25054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair coords: true 2506beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 2507beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2508beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use this for any attribute in IE6/7 2509beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This fixes almost every IE6/7 issue 2510beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nodeHook = jQuery.valHooks.button = { 2511beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem, name ) { 2512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var ret; 2513beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = elem.getAttributeNode( name ); 25144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? 25154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret.value : 2516beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik undefined; 2517beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2518beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value, name ) { 2519beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set the existing or create a new attribute node 2520beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var ret = elem.getAttributeNode( name ); 2521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !ret ) { 2522beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = document.createAttribute( name ); 2523beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.setAttributeNode( ret ); 2524beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 25254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( ret.value = value + "" ); 2526beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2527beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 2528beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set width and height to auto instead of 0 on empty string( Bug #8150 ) 2530beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This is for removals 2531beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.each([ "width", "height" ], function( i, name ) { 2532beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { 2533beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value ) { 2534beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value === "" ) { 2535beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.setAttribute( name, "auto" ); 2536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return value; 2537beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2538beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2539beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2541beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2542beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set contenteditable to false on removals(#10429) 2543beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Setting to empty string throws an error as an invalid value 2544beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.attrHooks.contenteditable = { 2545beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: nodeHook.get, 2546beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value, name ) { 2547beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value === "" ) { 2548beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value = "false"; 2549beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nodeHook.set( elem, value, name ); 2551beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2552beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 2553beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 2554beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2555beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2556beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Some attributes require a special call on IE 2557beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.hrefNormalized ) { 2558beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { 2559beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { 2560beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem ) { 2561beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var ret = elem.getAttribute( name, 2 ); 2562beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret === null ? undefined : ret; 2563beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2564beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2565beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2566beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 2567beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2568beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.style ) { 2569beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.attrHooks.style = { 2570beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem ) { 2571beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Return undefined in the case of empty string 2572beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Normalize to lowercase since IE uppercases css property names 2573beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem.style.cssText.toLowerCase() || undefined; 2574beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2575beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value ) { 25764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( elem.style.cssText = value + "" ); 2577beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2578beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 2579beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 2580beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2581beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Safari mis-reports the default selected property of an option 2582beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Accessing the parent's selectedIndex property fixes it 2583beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.optSelected ) { 2584beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { 2585beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem ) { 2586beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var parent = elem.parentNode; 2587beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2588beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( parent ) { 2589beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parent.selectedIndex; 2590beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2591beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that it also works with optgroups, see #5701 2592beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( parent.parentNode ) { 2593beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parent.parentNode.selectedIndex; 2594beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2595beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2596beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return null; 2597beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2598beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2599beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 2600beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2601beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// IE6/7 call enctype encoding 2602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.enctype ) { 2603beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.propFix.enctype = "encoding"; 2604beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 2605beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2606beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Radios and checkboxes getter/setter 2607beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.checkOn ) { 2608beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.each([ "radio", "checkbox" ], function() { 2609beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.valHooks[ this ] = { 2610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem ) { 2611beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified 2612beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem.getAttribute("value") === null ? "on" : elem.value; 2613beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2614beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 2615beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2616beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 2617beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each([ "radio", "checkbox" ], function() { 2618beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { 2619beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value ) { 2620beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isArray( value ) ) { 2621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); 2622beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2623beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2624beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 2625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 2626beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikvar rformElems = /^(?:textarea|input|select)$/i, 26274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, 26284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, 2629beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rkeyEvent = /^key/, 2630beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rmouseEvent = /^(?:mouse|contextmenu)|click/, 2631beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 2632beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hoverHack = function( events ) { 2633beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); 2634beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 2635beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2636beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik/* 2637beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * Helper functions for managing events -- not part of the public interface. 2638beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * Props to Dean Edwards' addEvent library for many of the ideas. 2639beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 2640beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.event = { 2641beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2642beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik add: function( elem, types, handler, data, selector ) { 2643beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2644beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var elemData, eventHandle, events, 2645beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik t, tns, type, namespaces, handleObj, 26464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handleObjIn, handlers, special; 2647beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2648beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Don't attach events to noData or text/comment nodes (allow plain objects tho) 2649beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { 2650beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2651beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2652beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2653beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Caller can pass in an object of custom data in lieu of the handler 2654beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( handler.handler ) { 2655beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObjIn = handler; 2656beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handler = handleObjIn.handler; 26574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selector = handleObjIn.selector; 2658beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2659beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2660beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that the handler has a unique ID, used to find/remove it later 2661beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !handler.guid ) { 2662beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handler.guid = jQuery.guid++; 2663beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2664beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2665beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Init the element's event structure and main handler, if this is the first 2666beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik events = elemData.events; 2667beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !events ) { 2668beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elemData.events = events = {}; 2669beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2670beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventHandle = elemData.handle; 2671beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !eventHandle ) { 2672beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elemData.handle = eventHandle = function( e ) { 2673beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Discard the second event of a jQuery.event.trigger() and 2674beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // when an event is called after a page has unloaded 2675beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? 2676beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : 2677beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik undefined; 2678beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 2679beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events 2680beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventHandle.elem = elem; 2681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2682beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2683beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle multiple events separated by a space 2684beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // jQuery(...).bind("mouseover mouseout", fn); 2685beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik types = jQuery.trim( hoverHack(types) ).split( " " ); 2686beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( t = 0; t < types.length; t++ ) { 2687beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2688beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tns = rtypenamespace.exec( types[t] ) || []; 2689beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = tns[1]; 2690beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik namespaces = ( tns[2] || "" ).split( "." ).sort(); 2691beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2692beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If event changes its type, use the special event handlers for the changed type 2693beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik special = jQuery.event.special[ type ] || {}; 2694beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2695beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If selector defined, determine special event api type, otherwise given type 2696beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = ( selector ? special.delegateType : special.bindType ) || type; 2697beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2698beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Update special based on newly reset type 2699beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik special = jQuery.event.special[ type ] || {}; 2700beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2701beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // handleObj is passed to all event handlers 2702beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObj = jQuery.extend({ 2703beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type: type, 2704beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik origType: tns[1], 2705beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data: data, 2706beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handler: handler, 2707beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik guid: handler.guid, 2708beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selector: selector, 27094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 2710beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik namespace: namespaces.join(".") 2711beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, handleObjIn ); 2712beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2713beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Init the event handler queue if we're the first 2714beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handlers = events[ type ]; 2715beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !handlers ) { 2716beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handlers = events[ type ] = []; 2717beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handlers.delegateCount = 0; 2718beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2719beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only use addEventListener/attachEvent if the special events handler returns false 2720beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 2721beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Bind the global event handler to the element 2722beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.addEventListener ) { 2723beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.addEventListener( type, eventHandle, false ); 2724beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2725beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( elem.attachEvent ) { 2726beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.attachEvent( "on" + type, eventHandle ); 2727beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2728beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2729beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2730beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2731beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( special.add ) { 2732beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik special.add.call( elem, handleObj ); 2733beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2734beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !handleObj.handler.guid ) { 2735beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObj.handler.guid = handler.guid; 2736beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2737beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2738beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2739beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add to the element's handler list, delegates in front 2740beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( selector ) { 2741beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handlers.splice( handlers.delegateCount++, 0, handleObj ); 2742beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 2743beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handlers.push( handleObj ); 2744beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2745beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2746beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Keep track of which events have ever been used, for event optimization 2747beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.global[ type ] = true; 2748beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2749beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2750beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Nullify elem to prevent memory leaks in IE 2751beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = null; 2752beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2753beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2754beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik global: {}, 2755beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2756beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Detach an event or set of events from an element 2757beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik remove: function( elem, types, handler, selector, mappedTypes ) { 2758beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 27594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var t, tns, type, origType, namespaces, origCount, 27604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair j, events, special, eventType, handleObj, 27614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elemData = jQuery.hasData( elem ) && jQuery._data( elem ); 2762beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2763beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elemData || !(events = elemData.events) ) { 2764beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2765beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2766beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2767beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Once for each type.namespace in types; type may be omitted 2768beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik types = jQuery.trim( hoverHack( types || "" ) ).split(" "); 2769beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( t = 0; t < types.length; t++ ) { 2770beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tns = rtypenamespace.exec( types[t] ) || []; 2771beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = origType = tns[1]; 2772beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik namespaces = tns[2]; 2773beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2774beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Unbind all events (on this namespace, if provided) for the element 2775beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !type ) { 2776beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( type in events ) { 2777beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 2778beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2779beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik continue; 2780beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2781beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2782beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik special = jQuery.event.special[ type ] || {}; 2783beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = ( selector? special.delegateType : special.bindType ) || type; 2784beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventType = events[ type ] || []; 2785beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik origCount = eventType.length; 27864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; 2787beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2788beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove matching events 2789beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( j = 0; j < eventType.length; j++ ) { 2790beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObj = eventType[ j ]; 2791beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2792beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ( mappedTypes || origType === handleObj.origType ) && 2793beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( !handler || handler.guid === handleObj.guid ) && 2794beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( !namespaces || namespaces.test( handleObj.namespace ) ) && 2795beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { 2796beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventType.splice( j--, 1 ); 2797beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2798beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( handleObj.selector ) { 2799beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventType.delegateCount--; 2800beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2801beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( special.remove ) { 2802beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik special.remove.call( elem, handleObj ); 2803beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2804beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2805beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2806beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2807beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove generic event handler if we removed something and no more handlers exist 2808beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (avoids potential for endless recursion during removal of special event handlers) 2809beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( eventType.length === 0 && origCount !== eventType.length ) { 28104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 2811beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.removeEvent( elem, type, elemData.handle ); 2812beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2813beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2814beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete events[ type ]; 2815beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2816beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2817beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2818beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove the expando if it's no longer used 2819beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isEmptyObject( events ) ) { 28204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete elemData.handle; 2821beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2822beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // removeData also checks for emptiness and clears the expando if empty 2823beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // so use it instead of delete 28244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.removeData( elem, "events", true ); 2825beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2826beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2827beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2828beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Events that are safe to short-circuit if no handlers are attached. 2829beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Native DOM events should not be added, they may have inline handlers. 2830beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik customEvent: { 2831beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "getData": true, 2832beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "setData": true, 2833beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "changeData": true 2834beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2835beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2836beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik trigger: function( event, data, elem, onlyHandlers ) { 2837beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Don't do events on text and comment nodes 2838beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { 2839beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2840beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2841beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2842beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Event object or event type 28434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, 28444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair type = event.type || event, 28454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair namespaces = []; 2846beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2847beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // focus/blur morphs to focusin/out; ensure we're not firing them right now 2848beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 2849beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2850beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2851beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2852beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( type.indexOf( "!" ) >= 0 ) { 2853beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Exclusive events trigger only for the exact event (no namespaces) 2854beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = type.slice(0, -1); 2855beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik exclusive = true; 2856beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2857beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2858beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( type.indexOf( "." ) >= 0 ) { 2859beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Namespaced trigger; create a regexp to match event type in handle() 2860beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik namespaces = type.split("."); 2861beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = namespaces.shift(); 2862beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik namespaces.sort(); 2863beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2864beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2865beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { 2866beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // No jQuery handlers for this event type, and it can't have inline handlers 2867beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2868beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2869beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2870beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Caller can pass in an Event, Object, or just an event type string 2871beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event = typeof event === "object" ? 2872beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // jQuery.Event object 2873beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event[ jQuery.expando ] ? event : 2874beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Object literal 2875beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik new jQuery.Event( type, event ) : 2876beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Just the event type (string) 2877beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik new jQuery.Event( type ); 2878beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2879beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.type = type; 2880beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.isTrigger = true; 2881beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.exclusive = exclusive; 2882beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.namespace = namespaces.join( "." ); 28834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; 2884beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; 2885beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2886beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle a global trigger 2887beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elem ) { 2888beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2889beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // TODO: Stop taunting the data cache; remove global events and always attach to document 2890beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache = jQuery.cache; 2891beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i in cache ) { 2892beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( cache[ i ].events && cache[ i ].events[ type ] ) { 2893beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); 2894beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2895beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2896beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2897beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2898beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2899beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Clean up the event in case it is being reused 2900beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.result = undefined; 2901beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !event.target ) { 2902beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.target = elem; 2903beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2904beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2905beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Clone any incoming data and prepend the event, creating the handler arg list 2906beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = data != null ? jQuery.makeArray( data ) : []; 2907beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data.unshift( event ); 2908beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2909beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Allow special events to draw outside the lines 2910beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik special = jQuery.event.special[ type ] || {}; 2911beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( special.trigger && special.trigger.apply( elem, data ) === false ) { 2912beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 2913beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2914beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2915beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Determine event propagation path in advance, per W3C events spec (#9951) 2916beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 2917beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventPath = [[ elem, special.bindType || type ]]; 2918beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { 2919beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2920beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bubbleType = special.delegateType || type; 2921beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; 29224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( old = elem; cur; cur = cur.parentNode ) { 2923beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventPath.push([ cur, bubbleType ]); 2924beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik old = cur; 2925beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2926beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2927beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only add window if we got to document (e.g., not plain obj or detached DOM) 29284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( old === (elem.ownerDocument || document) ) { 2929beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); 2930beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2931beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2932beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2933beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fire handlers on the event path 2934beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { 2935beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2936beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = eventPath[i][0]; 2937beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.type = eventPath[i][1]; 2938beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2939beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); 2940beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( handle ) { 2941beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handle.apply( cur, data ); 2942beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2943beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Note that this is a bare JS function and not a jQuery handler 2944beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handle = ontype && cur[ ontype ]; 29454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { 2946beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.preventDefault(); 2947beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2948beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2949beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.type = type; 2950beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2951beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If nobody prevented the default action, do it now 2952beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !onlyHandlers && !event.isDefaultPrevented() ) { 2953beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2954beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && 2955beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { 2956beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2957beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Call a native DOM method on the target with the same name name as the event. 2958beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Can't use an .isFunction() check here because IE6/7 fails that test. 2959beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Don't do default actions on window, that's where global variables be (#6170) 2960beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE<9 dies on focus/blur to hidden element (#1486) 2961beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { 2962beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2963beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Don't re-trigger an onFOO event when we call its FOO() method 2964beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik old = elem[ ontype ]; 2965beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2966beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( old ) { 2967beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem[ ontype ] = null; 2968beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2969beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2970beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Prevent re-triggering of the same event, since we already bubbled it above 2971beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.triggered = type; 2972beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem[ type ](); 2973beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.triggered = undefined; 2974beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2975beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( old ) { 2976beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem[ ontype ] = old; 2977beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2978beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2979beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2980beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 2981beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2982beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return event.result; 2983beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 2984beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2985beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dispatch: function( event ) { 2986beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2987beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make a writable jQuery.Event from the native event object 2988beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event = jQuery.event.fix( event || window.event ); 2989beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 29904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, 29914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), 2992beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delegateCount = handlers.delegateCount, 29934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair args = core_slice.call( arguments ), 2994beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik run_all = !event.exclusive && !event.namespace, 29954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair special = jQuery.event.special[ event.type ] || {}, 29964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handlerQueue = []; 2997beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 2998beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use the fix-ed jQuery.Event rather than the (read-only) native event 2999beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik args[0] = event; 3000beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.delegateTarget = this; 3001beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 30024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Call the preDispatch hook for the mapped type, and let it bail if desired 30034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 30044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return; 30054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 3006beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 30074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Determine handlers that should run if there are delegated events 30084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Avoid non-left-click bubbling in Firefox (#3861) 30094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( delegateCount && !(event.button && event.type === "click") ) { 3010beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3011beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { 30124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 30134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) 30144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( cur.disabled !== true || event.type !== "click" ) { 30154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selMatch = {}; 30164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matches = []; 30174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i = 0; i < delegateCount; i++ ) { 30184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handleObj = handlers[ i ]; 30194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair sel = handleObj.selector; 30204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 30214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( selMatch[ sel ] === undefined ) { 30224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selMatch[ sel ] = handleObj.needsContext ? 30234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery( sel, this ).index( cur ) >= 0 : 30244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.find( sel, this, null, [ cur ] ).length; 30254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 30264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( selMatch[ sel ] ) { 30274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matches.push( handleObj ); 30284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 3029beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 30304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matches.length ) { 30314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handlerQueue.push({ elem: cur, matches: matches }); 3032beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3033beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3034beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3035beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3036beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3037beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add the remaining (directly-bound) handlers 3038beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( handlers.length > delegateCount ) { 3039beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); 3040beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3041beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3042beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Run delegates first; they may want to stop propagation beneath us 3043beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { 3044beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik matched = handlerQueue[ i ]; 3045beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.currentTarget = matched.elem; 3046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3047beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { 3048beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObj = matched.matches[ j ]; 3049beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3050beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Triggered event must either 1) be non-exclusive and have no namespace, or 3051beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). 3052beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { 3053beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3054beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.data = handleObj.data; 3055beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.handleObj = handleObj; 3056beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3057beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) 3058beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik .apply( matched.elem, args ); 3059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3060beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ret !== undefined ) { 3061beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.result = ret; 3062beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ret === false ) { 3063beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.preventDefault(); 3064beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.stopPropagation(); 3065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3066beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3067beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3068beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3069beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3070beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 30714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Call the postDispatch hook for the mapped type 30724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( special.postDispatch ) { 30734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair special.postDispatch.call( this, event ); 30744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 30754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 3076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return event.result; 3077beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3078beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3079beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Includes some event props shared by KeyEvent and MouseEvent 3080beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** 3081beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), 3082beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3083beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fixHooks: {}, 3084beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3085beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik keyHooks: { 3086beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik props: "char charCode key keyCode".split(" "), 3087beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik filter: function( event, original ) { 3088beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3089beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add which for key events 3090beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( event.which == null ) { 3091beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.which = original.charCode != null ? original.charCode : original.keyCode; 3092beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3093beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3094beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return event; 3095beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3096beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3097beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3098beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik mouseHooks: { 3099beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), 3100beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik filter: function( event, original ) { 3101beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var eventDoc, doc, body, 3102beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik button = original.button, 3103beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fromElement = original.fromElement; 3104beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3105beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Calculate pageX/Y if missing and clientX/Y available 3106beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( event.pageX == null && original.clientX != null ) { 3107beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik eventDoc = event.target.ownerDocument || document; 3108beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik doc = eventDoc.documentElement; 3109beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik body = eventDoc.body; 3110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); 3112beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); 3113beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3114beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add relatedTarget, if necessary 3116beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !event.relatedTarget && fromElement ) { 3117beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; 3118beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3120beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add which for click: 1 === left; 2 === middle; 3 === right 3121beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Note: button is not normalized, so don't use it 3122beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !event.which && button !== undefined ) { 3123beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); 3124beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3125beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3126beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return event; 3127beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3128beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3129beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fix: function( event ) { 3131beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( event[ jQuery.expando ] ) { 3132beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return event; 3133beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3134beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3135beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Create a writable copy of the event object and normalize some properties 3136beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var i, prop, 3137beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik originalEvent = event, 3138beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fixHook = jQuery.event.fixHooks[ event.type ] || {}, 3139beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; 3140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3141beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event = jQuery.Event( originalEvent ); 3142beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3143beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = copy.length; i; ) { 3144beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prop = copy[ --i ]; 3145beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event[ prop ] = originalEvent[ prop ]; 3146beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) 3149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !event.target ) { 3150beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.target = originalEvent.srcElement || document; 3151beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3152beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3153beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Target should not be a text node (#504, Safari) 3154beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( event.target.nodeType === 3 ) { 3155beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.target = event.target.parentNode; 3156beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3157beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 31584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) 31594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair event.metaKey = !!event.metaKey; 3160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3161beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return fixHook.filter? fixHook.filter( event, originalEvent ) : event; 3162beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3163beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3164beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik special: { 3165beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik load: { 3166beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Prevent triggered image.load events from bubbling to window.load 3167beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik noBubble: true 3168beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3169beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3170beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik focus: { 3171beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delegateType: "focusin" 3172beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik blur: { 3174beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delegateType: "focusout" 3175beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3176beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3177beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik beforeunload: { 3178beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setup: function( data, namespaces, eventHandle ) { 3179beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We only want to do this special case on windows 3180beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isWindow( this ) ) { 3181beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.onbeforeunload = eventHandle; 3182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3184beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3185beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik teardown: function( namespaces, eventHandle ) { 3186beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this.onbeforeunload === eventHandle ) { 3187beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.onbeforeunload = null; 3188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3189beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3190beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3191beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3192beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3193beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik simulate: function( type, elem, event, bubble ) { 3194beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Piggyback on a donor event to simulate a different one. 3195beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fake originalEvent to avoid donor's stopPropagation, but if the 3196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // simulated event prevents default then we do the same on the donor. 3197beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var e = jQuery.extend( 3198beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik new jQuery.Event(), 3199beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event, 3200beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik { type: type, 3201beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isSimulated: true, 3202beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik originalEvent: {} 3203beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3204beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ); 3205beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( bubble ) { 3206beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.trigger( e, null, elem ); 3207beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 3208beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.dispatch.call( elem, e ); 3209beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3210beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( e.isDefaultPrevented() ) { 3211beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.preventDefault(); 3212beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3213beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3214beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 3215beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3216beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Some plugins are using, but it's undocumented/deprecated and will be removed. 3217beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// The 1.7 special event interface should provide all the hooks needed now. 3218beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.event.handle = jQuery.event.dispatch; 3219beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3220beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.removeEvent = document.removeEventListener ? 3221beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik function( elem, type, handle ) { 3222beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.removeEventListener ) { 3223beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.removeEventListener( type, handle, false ); 3224beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3225beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } : 3226beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik function( elem, type, handle ) { 32274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name = "on" + type; 32284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 3229beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.detachEvent ) { 32304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 32314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // #8545, #7054, preventing memory leaks for custom events in IE6-8 32324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // detachEvent needed property on element, by name of that event, to properly expose it to GC 32334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof elem[ name ] === "undefined" ) { 32344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem[ name ] = null; 32354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 32364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 32374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.detachEvent( name, handle ); 3238beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3239beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3240beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3241beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.Event = function( src, props ) { 3242beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Allow instantiation without the 'new' keyword 3243beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !(this instanceof jQuery.Event) ) { 3244beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return new jQuery.Event( src, props ); 3245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3246beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3247beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Event object 3248beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( src && src.type ) { 3249beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.originalEvent = src; 3250beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.type = src.type; 3251beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3252beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Events bubbling up the document may have been marked as prevented 3253beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // by a handler lower down the tree; reflect the correct value. 3254beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || 3255beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; 3256beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3257beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Event type 3258beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 3259beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.type = src; 3260beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3261beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3262beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Put explicitly provided properties onto the event object 3263beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( props ) { 3264beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.extend( this, props ); 3265beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3266beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3267beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Create a timestamp if incoming event doesn't have one 3268beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.timeStamp = src && src.timeStamp || jQuery.now(); 3269beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3270beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Mark it as fixed 3271beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this[ jQuery.expando ] = true; 3272beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 3273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3274beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction returnFalse() { 3275beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 3276beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 3277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction returnTrue() { 3278beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return true; 3279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 3280beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3281beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 3282beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 3283beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.Event.prototype = { 3284beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik preventDefault: function() { 3285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.isDefaultPrevented = returnTrue; 3286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var e = this.originalEvent; 3288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !e ) { 3289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 3290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if preventDefault exists run it on the original event 3293beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( e.preventDefault ) { 3294beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik e.preventDefault(); 3295beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // otherwise set the returnValue property of the original event to false (IE) 3297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 3298beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik e.returnValue = false; 3299beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik stopPropagation: function() { 3302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.isPropagationStopped = returnTrue; 3303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var e = this.originalEvent; 3305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !e ) { 3306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 3307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if stopPropagation exists run it on the original event 3309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( e.stopPropagation ) { 3310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik e.stopPropagation(); 3311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // otherwise set the cancelBubble property of the original event to true (IE) 3313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik e.cancelBubble = true; 3314beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3315beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik stopImmediatePropagation: function() { 3316beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.isImmediatePropagationStopped = returnTrue; 3317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.stopPropagation(); 3318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isDefaultPrevented: returnFalse, 3320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isPropagationStopped: returnFalse, 3321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isImmediatePropagationStopped: returnFalse 3322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 3323beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3324beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Create mouseenter/leave events using mouseover/out and event-time checks 3325beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each({ 3326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik mouseenter: "mouseover", 3327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik mouseleave: "mouseout" 3328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}, function( orig, fix ) { 3329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.special[ orig ] = { 3330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delegateType: fix, 3331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bindType: fix, 3332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handle: function( event ) { 33344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret, 33354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair target = this, 3336beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik related = event.relatedTarget, 3337beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObj = event.handleObj, 33384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selector = handleObj.selector; 3339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For mousenter/leave call the handler if related is outside the target. 3341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // NB: No relatedTarget if the mouse left/entered the browser window 3342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !related || (related !== target && !jQuery.contains( target, related )) ) { 3343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.type = handleObj.origType; 3344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = handleObj.handler.apply( this, arguments ); 3345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.type = fix; 3346beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3347beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 3348beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 3351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// IE submit delegation 3353beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.submitBubbles ) { 3354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.special.submit = { 3356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setup: function() { 3357beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only need this for delegated form submit events 3358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.nodeName( this, "form" ) ) { 3359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 3360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Lazy-add a submit handler when a descendant form may potentially be submitted 3363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.add( this, "click._submit keypress._submit", function( e ) { 3364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Node name check avoids a VML-related crash in IE (#9807) 3365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var elem = e.target, 3366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; 33674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( form && !jQuery._data( form, "_submit_attached" ) ) { 3368beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.add( form, "submit._submit", function( event ) { 33694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair event._submit_bubble = true; 3370beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 33714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery._data( form, "_submit_attached", true ); 3372beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3373beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3374beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // return undefined since we don't need an event listener 3375beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3376beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 33774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postDispatch: function( event ) { 33784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If form was submitted by the user, bubble the event up the tree 33794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( event._submit_bubble ) { 33804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete event._submit_bubble; 33814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this.parentNode && !event.isTrigger ) { 33824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.event.simulate( "submit", this.parentNode, event, true ); 33834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 33844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 33854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 33864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 3387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik teardown: function() { 3388beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only need this for delegated form submit events 3389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.nodeName( this, "form" ) ) { 3390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 3391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3392beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3393beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove delegated handlers; cleanData eventually reaps submit handlers attached above 3394beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.remove( this, "._submit" ); 3395beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 3398beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3399beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// IE change delegation and checkbox/radio fix 3400beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.changeBubbles ) { 3401beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3402beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.special.change = { 3403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3404beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setup: function() { 3405beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3406beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( rformElems.test( this.nodeName ) ) { 3407beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE doesn't fire change on a check/radio until blur; trigger it on click 3408beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // after a propertychange. Eat the blur-change in special.change.handle. 3409beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This still fires onchange a second time for check/radio after blur. 3410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this.type === "checkbox" || this.type === "radio" ) { 3411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.add( this, "propertychange._change", function( event ) { 3412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( event.originalEvent.propertyName === "checked" ) { 3413beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this._just_changed = true; 3414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3416beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.add( this, "click._change", function( event ) { 3417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this._just_changed && !event.isTrigger ) { 3418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this._just_changed = false; 3419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 34204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Allow triggered, simulated change events (#11500) 34214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.event.simulate( "change", this, event, true ); 3422beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3424beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return false; 3425beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3426beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Delegated event; lazy-add a change handler on descendant inputs 3427beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.add( this, "beforeactivate._change", function( e ) { 3428beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var elem = e.target; 3429beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 34304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { 3431beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.add( elem, "change._change", function( event ) { 3432beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { 3433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.simulate( "change", this.parentNode, event, true ); 3434beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3435beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 34364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery._data( elem, "_change_attached", true ); 3437beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3438beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3439beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3440beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3441beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handle: function( event ) { 3442beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var elem = event.target; 3443beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3444beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Swallow native change events from checkbox/radio, we already triggered them above 3445beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { 3446beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return event.handleObj.handler.apply( this, arguments ); 3447beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3448beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3449beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3450beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik teardown: function() { 3451beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.remove( this, "._change" ); 3452beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 34534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !rformElems.test( this.nodeName ); 3454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3455beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3456beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 3457beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Create "bubbling" focus and blur events 3459beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.focusinBubbles ) { 3460beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { 3461beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3462beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Attach a single capturing handler while someone wants focusin/focusout 3463beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var attaches = 0, 3464beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handler = function( event ) { 3465beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); 3466beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3467beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3468beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.special[ fix ] = { 3469beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setup: function() { 3470beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( attaches++ === 0 ) { 3471beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik document.addEventListener( orig, handler, true ); 3472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3473beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3474beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik teardown: function() { 3475beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( --attaches === 0 ) { 3476beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik document.removeEventListener( orig, handler, true ); 3477beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3478beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3479beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3480beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3481beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 3482beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3483beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.extend({ 3484beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3485beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik on: function( types, selector, data, fn, /*INTERNAL*/ one ) { 3486beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var origFn, type; 3487beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3488beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Types can be a map of types/handlers 3489beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof types === "object" ) { 3490beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( types-Object, selector, data ) 34914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof selector !== "string" ) { // && selector != null 3492beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( types-Object, data ) 34934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data = data || selector; 3494beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selector = undefined; 3495beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3496beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( type in types ) { 3497beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.on( type, selector, data, types[ type ], one ); 3498beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3499beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 3500beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3501beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3502beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( data == null && fn == null ) { 3503beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( types, fn ) 3504beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = selector; 3505beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = selector = undefined; 3506beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( fn == null ) { 3507beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof selector === "string" ) { 3508beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( types, selector, fn ) 3509beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = data; 3510beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = undefined; 3511beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 3512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( types, data, fn ) 3513beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = data; 3514beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = selector; 3515beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selector = undefined; 3516beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3517beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3518beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fn === false ) { 3519beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = returnFalse; 3520beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( !fn ) { 3521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 3522beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3523beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3524beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( one === 1 ) { 3525beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik origFn = fn; 3526beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = function( event ) { 3527beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Can use an empty set, since event contains the info 3528beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery().off( event ); 3529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return origFn.apply( this, arguments ); 3530beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3531beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use same guid so caller can remove using origFn 3532beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 3533beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3534beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each( function() { 3535beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.add( this, types, fn, data, selector ); 3536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3537beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3538beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik one: function( types, selector, data, fn ) { 35394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.on( types, selector, data, fn, 1 ); 3540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3541beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik off: function( types, selector, fn ) { 35424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var handleObj, type; 3543beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( types && types.preventDefault && types.handleObj ) { 3544beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( event ) dispatched jQuery.Event 35454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handleObj = types.handleObj; 3546beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( types.delegateTarget ).off( 35474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, 3548beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObj.selector, 3549beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handleObj.handler 3550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ); 3551beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 3552beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3553beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof types === "object" ) { 3554beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( types-object [, selector] ) 35554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( type in types ) { 3556beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.off( type, selector, types[ type ] ); 3557beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3558beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 3559beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3560beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( selector === false || typeof selector === "function" ) { 3561beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( types [, fn] ) 3562beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = selector; 3563beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selector = undefined; 3564beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3565beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fn === false ) { 3566beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = returnFalse; 3567beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3568beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 3569beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.remove( this, types, fn, selector ); 3570beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3571beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3572beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3573beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bind: function( types, data, fn ) { 3574beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.on( types, null, data, fn ); 3575beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3576beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik unbind: function( types, fn ) { 3577beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.off( types, null, fn ); 3578beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3579beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3580beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik live: function( types, data, fn ) { 3581beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this.context ).on( types, this.selector, data, fn ); 3582beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 3583beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3584beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik die: function( types, fn ) { 3585beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this.context ).off( types, this.selector || "**", fn ); 3586beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 3587beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3588beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3589beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delegate: function( selector, types, data, fn ) { 3590beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.on( types, selector, data, fn ); 3591beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3592beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik undelegate: function( selector, types, fn ) { 3593beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // ( namespace ) or ( selector, types [, fn] ) 35944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); 3595beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3596beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3597beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik trigger: function( type, data ) { 3598beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 3599beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.trigger( type, data, this ); 3600beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 3601beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik triggerHandler: function( type, data ) { 3603beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this[0] ) { 3604beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.event.trigger( type, data, this[0], true ); 3605beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3606beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3607beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3608beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik toggle: function( fn ) { 3609beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Save reference to arguments for access in closure 3610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var args = arguments, 3611beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik guid = fn.guid || jQuery.guid++, 3612beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 0, 3613beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik toggler = function( event ) { 3614beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Figure out which function to execute 3615beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; 3616beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); 3617beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3618beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that clicks stop 3619beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik event.preventDefault(); 3620beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // and execute the function 3622beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return args[ lastToggle ].apply( this, arguments ) || false; 3623beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3624beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // link all the functions, so any of them can unbind this click handler 3626beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik toggler.guid = guid; 3627beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( i < args.length ) { 3628beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik args[ i++ ].guid = guid; 3629beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3630beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3631beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.click( toggler ); 3632beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 3633beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3634beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hover: function( fnOver, fnOut ) { 3635beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 3636beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3637beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 3638beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3639beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + 3640beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 3641beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { 3642beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3643beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle event binding 3644beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.fn[ name ] = function( data, fn ) { 3645beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fn == null ) { 3646beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fn = data; 3647beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = null; 3648beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3649beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3650beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return arguments.length > 0 ? 3651beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.on( name, null, data, fn ) : 3652beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.trigger( name ); 3653beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 3654beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3655beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( rkeyEvent.test( name ) ) { 3656beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; 3657beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3658beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3659beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( rmouseEvent.test( name ) ) { 3660beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; 3661beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3662beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 3663beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik/*! 3664beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * Sizzle CSS Selector Engine 36654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * Copyright 2012 jQuery Foundation and other contributors 36664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * Released under the MIT license 36674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * http://sizzlejs.com/ 3668beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 36694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair(function( window, undefined ) { 3670beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 36714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar cachedruns, 36724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assertGetIdNotName, 36734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Expr, 36744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair getText, 36754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair isXML, 36764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair contains, 36774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair compile, 36784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair sortOrder, 36794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hasDuplicate, 36804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair outermostContext, 3681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 36824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair baseHasDuplicate = true, 36834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair strundefined = "undefined", 3684beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 36854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair expando = ( "sizcache" + Math.random() ).replace( ".", "" ), 3686beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 36874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Token = String, 36884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document = window.document, 36894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem = document.documentElement, 36904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dirruns = 0, 36914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair done = 0, 36924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair pop = [].pop, 36934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push = [].push, 36944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair slice = [].slice, 36954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use a stripped-down indexOf if a native one is unavailable 36964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair indexOf = [].indexOf || function( elem ) { 36974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i = 0, 36984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair len = this.length; 36994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < len; i++ ) { 37004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this[i] === elem ) { 37014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return i; 3702beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3703beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 37044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return -1; 37054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 3706beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Augment a function for special use by Sizzle 37084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair markFunction = function( fn, value ) { 37094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn[ expando ] = value == null || value; 37104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return fn; 37114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 3712beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair createCache = function() { 37144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var cache = {}, 37154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair keys = []; 3716beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return markFunction(function( key, value ) { 37184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Only keep the most recent entries 37194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( keys.push( key ) > Expr.cacheLength ) { 37204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete cache[ keys.shift() ]; 37214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 3722beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157) 37244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return (cache[ key + " " ] = value); 37254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, cache ); 37264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 3727beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair classCache = createCache(), 37294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tokenCache = createCache(), 37304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair compilerCache = createCache(), 3731beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Regex 3733beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace 37354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair whitespace = "[\\x20\\t\\r\\n\\f]", 37364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://www.w3.org/TR/css3-syntax/#characters 37374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", 3738beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Loosely modeled on CSS identifier characters 37404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) 37414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier 37424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair identifier = characterEncoding.replace( "w", "w#" ), 3743beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors 37454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair operators = "([*^$|!~]?=)", 37464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + 37474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", 3748beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Prefer arguments not in parens/brackets, 37504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // then attribute selectors and non-pseudos (denoted by :), 37514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // then anything else 37524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // These preferences are here to reduce the number of selectors 37534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // needing tokenize in the PSEUDO preFilter 37544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", 3755beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // For matchExpr.POS and matchExpr.needsContext 37574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 37584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", 3759beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 37614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), 3762beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 37644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), 37654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rpseudo = new RegExp( pseudos ), 3766beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Easily-parseable/retrievable ID or TAG or CLASS selectors 37684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, 3769beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rnot = /^:not/, 37714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rsibling = /[\x20\t\r\n\f]*[+~]/, 37724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rendsWithNot = /:not\($/, 3773beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rheader = /h\d/i, 37754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rinputs = /input|select|textarea|button/i, 3776beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbackslash = /\\(?!\\)/g, 3778beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchExpr = { 37804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "ID": new RegExp( "^#(" + characterEncoding + ")" ), 37814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), 37824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), 37834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), 37844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "ATTR": new RegExp( "^" + attributes ), 37854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "PSEUDO": new RegExp( "^" + pseudos ), 37864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "POS": new RegExp( pos, "i" ), 37874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + 37884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + 37894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 37904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // For use in libraries implementing .is() 37914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) 37924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 3793beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Support 3795beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 37964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Used for testing something on an element 37974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assert = function( fn ) { 37984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var div = document.createElement("div"); 3799beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 38014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return fn( div ); 38024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch (e) { 38034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 38044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } finally { 38054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // release memory in IE 38064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div = null; 38074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 38084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 38094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 38104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if getElementsByTagName("*") returns only elements 38114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assertTagNameNoComments = assert(function( div ) { 38124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.appendChild( document.createComment("") ); 38134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !div.getElementsByTagName("*").length; 38144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 38154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 38164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if getAttribute returns normalized href attributes 38174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assertHrefNotNormalized = assert(function( div ) { 38184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<a href='#'></a>"; 38194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && 38204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.firstChild.getAttribute("href") === "#"; 38214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 38224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 38234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if attributes should be retrieved by attribute nodes 38244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assertAttributes = assert(function( div ) { 38254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<select></select>"; 38264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var type = typeof div.lastChild.getAttribute("multiple"); 38274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE8 returns a string for some attributes even when not present 38284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return type !== "boolean" && type !== "string"; 38294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 38304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 38314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if getElementsByClassName can be trusted 38324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assertUsableClassName = assert(function( div ) { 38334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Opera can't find a second classname (in 9.6) 38344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>"; 38354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { 38364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 3837beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3838beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Safari 3.2 caches class attributes and doesn't catch changes 38404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.lastChild.className = "e"; 38414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return div.getElementsByClassName("e").length === 2; 38424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 3843beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if getElementById returns elements by name 38454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if getElementsByName privileges form controls or returns elements by ID 38464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assertUsableName = assert(function( div ) { 38474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Inject content 38484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.id = expando + 0; 38494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>"; 38504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem.insertBefore( div, docElem.firstChild ); 3851beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Test 38534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var pass = document.getElementsByName && 38544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // buggy browsers will return fewer than the correct 2 38554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document.getElementsByName( expando ).length === 2 + 38564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // buggy browsers will return more than the correct 0 38574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document.getElementsByName( expando + 0 ).length; 38584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assertGetIdNotName = !document.getElementById( expando ); 3859beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Cleanup 38614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem.removeChild( div ); 3862beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return pass; 38644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 38654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 38664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// If slice is not available, provide a backup 38674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairtry { 38684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair slice.call( docElem.childNodes, 0 )[0].nodeType; 38694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} catch ( e ) { 38704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair slice = function( i ) { 38714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, 38724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results = []; 38734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (elem = this[i]); i++ ) { 38744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results.push( elem ); 3875beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 38764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 38774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 38784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 38794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 38804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction Sizzle( selector, context, results, seed ) { 38814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results = results || []; 38824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = context || document; 38834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var match, elem, xml, m, 38844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair nodeType = context.nodeType; 38854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 38864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !selector || typeof selector !== "string" ) { 38874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 3888beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3889beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( nodeType !== 1 && nodeType !== 9 ) { 38914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return []; 38924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 3893beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair xml = isXML( context ); 3895beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 38964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !xml && !seed ) { 38974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (match = rquickExpr.exec( selector )) ) { 38984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Speed-up: Sizzle("#ID") 38994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (m = match[1]) ) { 39004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( nodeType === 9 ) { 39014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = context.getElementById( m ); 39024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check parentNode to catch when Blackberry 4.6 returns 39034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // nodes that are no longer in the document #6963 39044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem && elem.parentNode ) { 39054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Handle the case where IE, Opera, and Webkit return items 39064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // by name instead of ID 39074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.id === m ) { 39084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results.push( elem ); 39094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 39104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 39114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 39124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 39134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 39144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 39154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Context is not a document 39164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && 39174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair contains( context, elem ) && elem.id === m ) { 39184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results.push( elem ); 39194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 39204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 39214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 3922beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Speed-up: Sizzle("TAG") 39244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( match[2] ) { 39254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); 39264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 3927beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Speed-up: Sizzle(".CLASS") 39294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { 39304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); 39314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 3932beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3933beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3934beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3935beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // All others 39374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); 39384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 3939beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairSizzle.matches = function( expr, elements ) { 39414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return Sizzle( expr, null, null, elements ); 3942beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 3943beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairSizzle.matchesSelector = function( elem, expr ) { 39454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return Sizzle( expr, null, null, [ elem ] ).length > 0; 39464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 3947beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Returns a function to use in pseudos for input types 39494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction createInputPseudo( type ) { 39504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 39514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name = elem.nodeName.toLowerCase(); 39524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return name === "input" && elem.type === type; 39534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 39544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 3955beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Returns a function to use in pseudos for buttons 39574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction createButtonPseudo( type ) { 39584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 39594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name = elem.nodeName.toLowerCase(); 39604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return (name === "input" || name === "button") && elem.type === type; 39614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 39624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 3963beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Returns a function to use in pseudos for positionals 39654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction createPositionalPseudo( fn ) { 39664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return markFunction(function( argument ) { 39674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair argument = +argument; 39684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return markFunction(function( seed, matches ) { 39694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var j, 39704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchIndexes = fn( [], seed.length, argument ), 39714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = matchIndexes.length; 3972beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 39734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Match elements found at the specified indexes 39744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 39754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( seed[ (j = matchIndexes[i]) ] ) { 39764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair seed[j] = !(matches[j] = seed[j]); 3977beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 3978beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 39794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 39804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 39814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 3982beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3983beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik/** 39844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair * Utility function for retrieving the text value of an array of DOM nodes 3985beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * @param {Array|Element} elem 3986beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 39874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairgetText = Sizzle.getText = function( elem ) { 39884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var node, 39894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = "", 39904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 39914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair nodeType = elem.nodeType; 3992beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 3993beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( nodeType ) { 39944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 39954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use textContent for elements 39964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // innerText usage removed for consistency of new lines (see #11153) 39974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof elem.textContent === "string" ) { 3998beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem.textContent; 3999beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 40004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Traverse its children 40014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 4002beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret += getText( elem ); 4003beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4004beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4005beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( nodeType === 3 || nodeType === 4 ) { 4006beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem.nodeValue; 4007beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 40084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Do not include comment or processing instruction nodes 4009beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 4010beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4011beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If no nodeType, this is expected to be an array 40124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (node = elem[i]); i++ ) { 4013beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Do not traverse comment nodes 40144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret += getText( node ); 4015beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4016beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4017beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 4018beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 4019beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairisXML = Sizzle.isXML = function( elem ) { 40214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // documentElement is verified for cases where it doesn't yet exist 40224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // (such as loading iframes in IE - #4833) 40234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var documentElement = elem && (elem.ownerDocument || elem).documentElement; 40244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return documentElement ? documentElement.nodeName !== "HTML" : false; 40254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 4026beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Element contains another 40284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclaircontains = Sizzle.contains = docElem.contains ? 40294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( a, b ) { 40304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var adown = a.nodeType === 9 ? a.documentElement : a, 40314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair bup = b && b.parentNode; 40324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); 40334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 40344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem.compareDocumentPosition ? 40354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( a, b ) { 40364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return b && !!( a.compareDocumentPosition( b ) & 16 ); 40374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 40384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( a, b ) { 40394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( (b = b.parentNode) ) { 40404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( b === a ) { 40414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return true; 40424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 40434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 40444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 40454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 4046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairSizzle.attr = function( elem, name ) { 40484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var val, 40494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair xml = isXML( elem ); 4050beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !xml ) { 40524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name = name.toLowerCase(); 40534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 40544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (val = Expr.attrHandle[ name ]) ) { 40554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return val( elem ); 40564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 40574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( xml || assertAttributes ) { 40584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.getAttribute( name ); 40594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 40604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = elem.getAttributeNode( name ); 40614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return val ? 40624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair typeof elem[ name ] === "boolean" ? 40634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem[ name ] ? name : null : 40644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val.specified ? val.value : null : 40654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair null; 40664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 4067beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairExpr = Sizzle.selectors = { 4069beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Can be adjusted by the user 40714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cacheLength: 50, 4072beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair createPseudo: markFunction, 4074beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match: matchExpr, 4076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE6/7 return a modified href 40784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attrHandle: assertHrefNotNormalized ? 40794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair {} : 40804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair { 40814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "href": function( elem ) { 40824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.getAttribute( "href", 2 ); 40834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 40844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "type": function( elem ) { 40854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.getAttribute("type"); 4086beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4087beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4088beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 40894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair find: { 40904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "ID": assertGetIdNotName ? 40914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( id, context, xml ) { 40924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof context.getElementById !== strundefined && !xml ) { 40934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var m = context.getElementById( id ); 40944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check parentNode to catch when Blackberry 4.6 returns 40954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // nodes that are no longer in the document #6963 40964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return m && m.parentNode ? [m] : []; 40974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 40984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 40994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( id, context, xml ) { 41004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof context.getElementById !== strundefined && !xml ) { 41014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var m = context.getElementById( id ); 4102beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return m ? 41044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? 41054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair [m] : 41064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair undefined : 41074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair []; 41084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 41094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "TAG": assertTagNameNoComments ? 41124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( tag, context ) { 41134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof context.getElementsByTagName !== strundefined ) { 41144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return context.getElementsByTagName( tag ); 4115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 41164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 41174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( tag, context ) { 41184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var results = context.getElementsByTagName( tag ); 4119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Filter out possible comments 41214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( tag === "*" ) { 41224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, 41234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tmp = [], 41244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0; 4125beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (elem = results[i]); i++ ) { 41274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.nodeType === 1 ) { 41284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tmp.push( elem ); 41294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4131beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return tmp; 4133beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 41344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 41354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4136beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "NAME": assertUsableName && function( tag, context ) { 41384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof context.getElementsByName !== strundefined ) { 41394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return context.getElementsByName( name ); 4140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4141beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4142beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "CLASS": assertUsableClassName && function( className, context, xml ) { 41444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof context.getElementsByClassName !== strundefined && !xml ) { 41454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return context.getElementsByClassName( className ); 4146beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair relative: { 41514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ">": { dir: "parentNode", first: true }, 41524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair " ": { dir: "parentNode" }, 41534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "+": { dir: "previousSibling", first: true }, 41544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "~": { dir: "previousSibling" } 4155beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4156beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair preFilter: { 41584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "ATTR": function( match ) { 41594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[1] = match[1].replace( rbackslash, "" ); 4160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Move the given value to match[3] whether quoted or unquoted 41624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); 4163beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( match[2] === "~=" ) { 41654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[3] = " " + match[3] + " "; 4166beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4167beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return match.slice( 0, 4 ); 4169beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4170beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "CHILD": function( match ) { 41724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair /* matches from matchExpr["CHILD"] 41734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 1 type (only|nth|...) 41744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 41754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 3 xn-component of xn+y argument ([+-]?\d*n|) 41764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 4 sign of xn-component 41774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 5 x of xn-component 41784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 6 sign of y-component 41794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 7 y of y-component 41804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair */ 41814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[1] = match[1].toLowerCase(); 4182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( match[1] === "nth" ) { 41844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // nth-child requires argument 4185beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !match[2] ) { 4186beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik Sizzle.error( match[0] ); 4187beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // numeric x and y parameters for Expr.filter.CHILD 41904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // remember that false/true cast respectively to 0/1 41914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); 41924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); 4193beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 41944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // other types prohibit arguments 41954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( match[2] ) { 4196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik Sizzle.error( match[0] ); 4197beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4198beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4199beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return match; 4200beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4201beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "PSEUDO": function( match ) { 42034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var unquoted, excess; 42044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matchExpr["CHILD"].test( match[0] ) ) { 42054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return null; 4206beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4207beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( match[3] ) { 42094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[2] = match[3]; 42104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( (unquoted = match[4]) ) { 42114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Only check arguments that contain a pseudo 42124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rpseudo.test(unquoted) && 42134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Get excess from tokenize (recursively) 42144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (excess = tokenize( unquoted, true )) && 42154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // advance to the next closing parenthesis 42164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { 4217beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // excess is a negative index 42194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair unquoted = unquoted.slice( 0, excess ); 42204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[0] = match[0].slice( 0, excess ); 4221beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 42224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match[2] = unquoted; 4223beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4224beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Return only captures needed by the pseudo filter method (type and argument) 42264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return match.slice( 0, 3 ); 4227beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4228beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4229beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair filter: { 42314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "ID": assertGetIdNotName ? 42324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( id ) { 42334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair id = id.replace( rbackslash, "" ); 42344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 42354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.getAttribute("id") === id; 42364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 42374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 42384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( id ) { 42394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair id = id.replace( rbackslash, "" ); 42404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 42414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); 42424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return node && node.value === id; 42434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 42444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "TAG": function( nodeName ) { 42474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( nodeName === "*" ) { 42484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function() { return true; }; 4249beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 42504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); 4251beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 42534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 42544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 4255beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4256beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "CLASS": function( className ) { 42584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var pattern = classCache[ expando ][ className + " " ]; 4259beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return pattern || 42614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && 42624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair classCache( className, function( elem ) { 42634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); 42644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 4265beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4266beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "ATTR": function( name, operator, check ) { 42684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem, context ) { 42694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var result = Sizzle.attr( elem, name ); 4270beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( result == null ) { 42724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return operator === "!="; 42734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 42744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !operator ) { 42754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return true; 42764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair result += ""; 4279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return operator === "=" ? result === check : 42814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair operator === "!=" ? result !== check : 42824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair operator === "^=" ? check && result.indexOf( check ) === 0 : 42834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair operator === "*=" ? check && result.indexOf( check ) > -1 : 42844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair operator === "$=" ? check && result.substr( result.length - check.length ) === check : 42854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : 42864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : 42874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair false; 42884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 4289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "CHILD": function( type, argument, first, last ) { 4292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( type === "nth" ) { 42944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 42954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var node, diff, 42964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parent = elem.parentNode; 4297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 42984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( first === 1 && last === 0 ) { 42994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return true; 43004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( parent ) { 43034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair diff = 0; 43044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( node = parent.firstChild; node; node = node.nextSibling ) { 43054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( node.nodeType === 1 ) { 43064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair diff++; 43074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem === node ) { 43084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair break; 43094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Incorporate the offset (or cast to NaN), then check against cycle size 43154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair diff -= last; 43164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return diff === first || ( diff % first === 0 && diff / first >= 0 ); 43174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 43184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 43214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var node = elem; 4322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair switch ( type ) { 43244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair case "only": 43254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair case "first": 43264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( (node = node.previousSibling) ) { 43274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( node.nodeType === 1 ) { 43284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 43294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( type === "first" ) { 43334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return true; 43344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4335beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair node = elem; 4337beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair /* falls through */ 43394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair case "last": 43404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( (node = node.nextSibling) ) { 43414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( node.nodeType === 1 ) { 43424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 43434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return true; 43474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 4349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "PSEUDO": function( pseudo, argument ) { 43524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // pseudo-class names are case-insensitive 43534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://www.w3.org/TR/selectors/#pseudo-classes 43544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 43554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remember that setFilters inherits from pseudos 43564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var args, 43574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 43584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Sizzle.error( "unsupported pseudo: " + pseudo ); 43594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 43604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // The user may use createPseudo to indicate that 43614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // arguments are needed to create the filter function 43624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // just as Sizzle does 43634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( fn[ expando ] ) { 43644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return fn( argument ); 43654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 43674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // But maintain support for old signatures 43684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( fn.length > 1 ) { 43694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair args = [ pseudo, pseudo, "", argument ]; 43704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 43714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair markFunction(function( seed, matches ) { 43724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var idx, 43734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matched = fn( seed, argument ), 43744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = matched.length; 43754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 43764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair idx = indexOf.call( seed, matched[i] ); 43774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair seed[ idx ] = !( matches[ idx ] = matched[i] ); 43784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 43794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) : 43804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( elem ) { 43814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return fn( elem, 0, args ); 43824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 43834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4384beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return fn; 4386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4388beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair pseudos: { 43904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "not": markFunction(function( selector ) { 43914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Trim the selector passed to compile 43924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // to avoid treating leading and trailing 43934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // spaces as combinators 43944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var input = [], 43954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results = [], 43964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcher = compile( selector.replace( rtrim, "$1" ) ); 4397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 43984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matcher[ expando ] ? 43994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair markFunction(function( seed, matches, context, xml ) { 44004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, 44014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair unmatched = matcher( seed, null, xml, [] ), 44024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = seed.length; 4403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Match elements unmatched by `matcher` 44054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 44064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (elem = unmatched[i]) ) { 44074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair seed[i] = !(matches[i] = elem); 44084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4409beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 44104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) : 44114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( elem, context, xml ) { 44124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair input[0] = elem; 44134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcher( input, null, xml, results ); 44144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !results.pop(); 44154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 44164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 4417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "has": markFunction(function( selector ) { 44194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 44204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return Sizzle( selector, elem ).length > 0; 44214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 44224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 4423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "contains": markFunction(function( text ) { 44254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return function( elem ) { 44264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; 44274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 44284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 44294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 44304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "enabled": function( elem ) { 44314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.disabled === false; 4432beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "disabled": function( elem ) { 44354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.disabled === true; 44364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4437beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "checked": function( elem ) { 44394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // In CSS3, :checked should return both checked and selected elements 44404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 44414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var nodeName = elem.nodeName.toLowerCase(); 44424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); 44434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4444beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "selected": function( elem ) { 44464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Accessing this property makes selected-by-default 44474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // options in Safari work properly 44484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.parentNode ) { 44494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.parentNode.selectedIndex; 44504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4451beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.selected === true; 44534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "parent": function( elem ) { 44564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !Expr.pseudos["empty"]( elem ); 44574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "empty": function( elem ) { 44604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://www.w3.org/TR/selectors/#empty-pseudo 44614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), 44624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // not comment, processing instructions, or others 44634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Thanks to Diego Perini for the nodeName shortcut 44644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Greater than "@" means alpha characters (specifically not starting with "#" or "?") 44654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var nodeType; 44664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = elem.firstChild; 44674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( elem ) { 44684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { 44694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 44704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 44714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = elem.nextSibling; 44724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 44734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return true; 44744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4475beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "header": function( elem ) { 44774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return rheader.test( elem.nodeName ); 44784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4479beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "text": function( elem ) { 44814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var type, attr; 44824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 44834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // use getAttribute instead to test this case 44844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.nodeName.toLowerCase() === "input" && 44854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (type = elem.type) === "text" && 44864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); 44874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 4488beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Input types 44904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "radio": createInputPseudo("radio"), 44914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "checkbox": createInputPseudo("checkbox"), 44924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "file": createInputPseudo("file"), 44934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "password": createInputPseudo("password"), 44944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "image": createInputPseudo("image"), 4495beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "submit": createButtonPseudo("submit"), 44974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "reset": createButtonPseudo("reset"), 4498beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 44994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "button": function( elem ) { 45004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name = elem.nodeName.toLowerCase(); 45014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return name === "input" && elem.type === "button" || name === "button"; 4502beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4503beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "input": function( elem ) { 45054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return rinputs.test( elem.nodeName ); 4506beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 45074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 45084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "focus": function( elem ) { 45094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var doc = elem.ownerDocument; 45104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); 4511beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "active": function( elem ) { 45144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem === elem.ownerDocument.activeElement; 4515beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 4516beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Positional types 45184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "first": createPositionalPseudo(function() { 45194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return [ 0 ]; 45204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 4521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "last": createPositionalPseudo(function( matchIndexes, length ) { 45234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return [ length - 1 ]; 45244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 4525beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { 45274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return [ argument < 0 ? argument + length : argument ]; 45284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 4529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "even": createPositionalPseudo(function( matchIndexes, length ) { 45314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( var i = 0; i < length; i += 2 ) { 45324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchIndexes.push( i ); 45334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 45344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matchIndexes; 45354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 4536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "odd": createPositionalPseudo(function( matchIndexes, length ) { 45384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( var i = 1; i < length; i += 2 ) { 45394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchIndexes.push( i ); 45404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 45414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matchIndexes; 45424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 4543beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { 45454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { 45464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchIndexes.push( i ); 45474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 45484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matchIndexes; 45494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 45504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 45514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { 45524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { 45534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchIndexes.push( i ); 45544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 45554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matchIndexes; 45564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) 4557beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4558beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 4559beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction siblingCheck( a, b, ret ) { 45614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( a === b ) { 45624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ret; 45634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4564beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var cur = a.nextSibling; 4566beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( cur ) { 45684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( cur === b ) { 45694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return -1; 4570beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4571beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cur = cur.nextSibling; 45734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4574beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return 1; 45764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 4577beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairsortOrder = docElem.compareDocumentPosition ? 45794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( a, b ) { 4580beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( a === b ) { 4581beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hasDuplicate = true; 4582beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return 0; 4583beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4584beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 45854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? 45864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair a.compareDocumentPosition : 45874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair a.compareDocumentPosition(b) & 4 45884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ) ? -1 : 1; 45894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 45904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( a, b ) { 4591beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The nodes are identical, we can exit early 4592beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( a === b ) { 4593beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik hasDuplicate = true; 4594beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return 0; 4595beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4596beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fallback to using sourceIndex (in IE) if it's available on both nodes 4597beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( a.sourceIndex && b.sourceIndex ) { 4598beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return a.sourceIndex - b.sourceIndex; 4599beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4600beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4601beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var al, bl, 4602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ap = [], 4603beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bp = [], 4604beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik aup = a.parentNode, 4605beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bup = b.parentNode, 4606beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = aup; 4607beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4608beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If the nodes are siblings (or identical) we can do a quick check 4609beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( aup === bup ) { 4610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return siblingCheck( a, b ); 4611beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4612beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If no parents were found then the nodes are disconnected 4613beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( !aup ) { 4614beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return -1; 4615beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4616beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( !bup ) { 4617beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return 1; 4618beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4619beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4620beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Otherwise they're somewhere else in the tree so we need 4621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // to build up a full list of the parentNodes for comparison 4622beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( cur ) { 4623beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ap.unshift( cur ); 4624beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = cur.parentNode; 4625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4626beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4627beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = bup; 4628beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4629beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( cur ) { 4630beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bp.unshift( cur ); 4631beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = cur.parentNode; 4632beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4633beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4634beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik al = ap.length; 4635beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bl = bp.length; 4636beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4637beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Start walking down the tree looking for a discrepancy 4638beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( var i = 0; i < al && i < bl; i++ ) { 4639beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ap[i] !== bp[i] ) { 4640beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return siblingCheck( ap[i], bp[i] ); 4641beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4642beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4643beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 4644beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We ended someplace up the tree so do a sibling check 4645beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return i === al ? 4646beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik siblingCheck( a, bp[i], -1 ) : 4647beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik siblingCheck( ap[i], b, 1 ); 4648beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 4649beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 46504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Always assume the presence of duplicates if sort doesn't 46514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// pass them to our comparison function (as in Google Chrome). 46524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair[0, 0].sort( sortOrder ); 46534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairbaseHasDuplicate = !hasDuplicate; 46544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Document sorting and removing duplicates 46564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairSizzle.uniqueSort = function( results ) { 46574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, 46584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair duplicates = [], 46594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 1, 46604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair j = 0; 46614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hasDuplicate = baseHasDuplicate; 46634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results.sort( sortOrder ); 46644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( hasDuplicate ) { 46664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (elem = results[i]); i++ ) { 46674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem === results[ i - 1 ] ) { 46684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair j = duplicates.push( i ); 46694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 46704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 46714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( j-- ) { 46724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results.splice( duplicates[ j ], 1 ); 4673beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 46744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4675beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 46764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 46774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 4678beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 46794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairSizzle.error = function( msg ) { 46804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair throw new Error( "Syntax error, unrecognized expression: " + msg ); 46814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 46824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction tokenize( selector, parseOnly ) { 46844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var matched, match, tokens, type, 46854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair soFar, groups, preFilters, 46864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cached = tokenCache[ expando ][ selector + " " ]; 46874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( cached ) { 46894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return parseOnly ? 0 : cached.slice( 0 ); 46904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 46914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair soFar = selector; 46934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair groups = []; 46944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair preFilters = Expr.preFilter; 46954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( soFar ) { 46974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 46984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Comma and first run 46994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !matched || (match = rcomma.exec( soFar )) ) { 47004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( match ) { 47014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Don't consume trailing commas as valid 47024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair soFar = soFar.slice( match[0].length ) || soFar; 4703beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 47044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair groups.push( tokens = [] ); 47054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matched = false; 47084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Combinators 47104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (match = rcombinators.exec( soFar )) ) { 47114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tokens.push( matched = new Token( match.shift() ) ); 47124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair soFar = soFar.slice( matched.length ); 4713beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 47144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Cast descendant combinators to space 47154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matched.type = match[0].replace( rtrim, " " ); 47164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Filters 47194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( type in Expr.filter ) { 47204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || 47214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (match = preFilters[ type ]( match ))) ) { 47224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tokens.push( matched = new Token( match.shift() ) ); 47244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair soFar = soFar.slice( matched.length ); 47254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matched.type = type; 47264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matched.matches = match; 47274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !matched ) { 47314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair break; 47324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Return the length of the invalid excess 47364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if we're just parsing 47374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Otherwise, throw an error or return tokens 47384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return parseOnly ? 47394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair soFar.length : 47404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair soFar ? 47414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Sizzle.error( selector ) : 47424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Cache the tokens 47434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tokenCache( selector, groups ).slice( 0 ); 47444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 47454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction addCombinator( matcher, combinator, base ) { 47474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var dir = combinator.dir, 47484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair checkNonElements = base && combinator.dir === "parentNode", 47494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair doneName = done++; 47504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return combinator.first ? 47524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check against closest ancestor/preceding element 47534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( elem, context, xml ) { 47544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( (elem = elem[ dir ]) ) { 47554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( checkNonElements || elem.nodeType === 1 ) { 47564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matcher( elem, context, xml ); 47574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 47604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check against all ancestor/preceding elements 47624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( elem, context, xml ) { 47634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching 47644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !xml ) { 47654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var cache, 47664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dirkey = dirruns + " " + doneName + " ", 47674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cachedkey = dirkey + cachedruns; 47684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( (elem = elem[ dir ]) ) { 47694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( checkNonElements || elem.nodeType === 1 ) { 47704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (cache = elem[ expando ]) === cachedkey ) { 47714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.sizset; 47724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { 47734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.sizset ) { 47744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem; 47754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 47774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem[ expando ] = cachedkey; 47784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matcher( elem, context, xml ) ) { 47794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.sizset = true; 47804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem; 47814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.sizset = false; 47834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 47874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( (elem = elem[ dir ]) ) { 47884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( checkNonElements || elem.nodeType === 1 ) { 47894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matcher( elem, context, xml ) ) { 47904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem; 47914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 47954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 47964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 47974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 47984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction elementMatcher( matchers ) { 47994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matchers.length > 1 ? 48004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function( elem, context, xml ) { 48014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i = matchers.length; 48024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 48034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !matchers[i]( elem, context, xml ) ) { 48044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 48054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return true; 48084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } : 48094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchers[0]; 48104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 48114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 48124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction condense( unmatched, map, filter, context, xml ) { 48134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, 48144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newUnmatched = [], 48154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 48164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair len = unmatched.length, 48174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair mapped = map != null; 48184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 48194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < len; i++ ) { 48204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (elem = unmatched[i]) ) { 48214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !filter || filter( elem, context, xml ) ) { 48224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newUnmatched.push( elem ); 48234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( mapped ) { 48244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair map.push( i ); 48254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4827beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 48284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4829beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return newUnmatched; 4831beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 4832beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 48344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( postFilter && !postFilter[ expando ] ) { 48354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postFilter = setMatcher( postFilter ); 48364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( postFinder && !postFinder[ expando ] ) { 48384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postFinder = setMatcher( postFinder, postSelector ); 48394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return markFunction(function( seed, results, context, xml ) { 48414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var temp, i, elem, 48424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair preMap = [], 48434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postMap = [], 48444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair preexisting = results.length, 4845beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Get initial elements from seed or context 48474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), 4848beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Prefilter to get matcher input, preserving a map for seed-results synchronization 48504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherIn = preFilter && ( seed || !selector ) ? 48514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair condense( elems, preMap, preFilter, context, xml ) : 48524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elems, 4853beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherOut = matcher ? 48554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 48564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 4857beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // ...intermediate processing is necessary 48594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair [] : 4860beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // ...otherwise use results directly 48624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results : 48634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherIn; 4864beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Find primary matches 48664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matcher ) { 48674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcher( matcherIn, matcherOut, context, xml ); 48684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4869beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Apply postFilter 48714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( postFilter ) { 48724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair temp = condense( matcherOut, postMap ); 48734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postFilter( temp, [], context, xml ); 4874beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Un-match failing elements by moving them back to matcherIn 48764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = temp.length; 48774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 48784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (elem = temp[i]) ) { 48794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); 48804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4883beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( seed ) { 48854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( postFinder || preFilter ) { 48864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( postFinder ) { 48874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Get the final matcherOut by condensing this intermediate into postFinder contexts 48884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair temp = []; 48894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = matcherOut.length; 48904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 48914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (elem = matcherOut[i]) ) { 48924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Restore matcherIn since elem is not yet a final match 48934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair temp.push( (matcherIn[i] = elem) ); 48944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 48964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postFinder( null, (matcherOut = []), temp, xml ); 48974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4898beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 48994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Move matched elements from seed to results to keep them synchronized 49004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = matcherOut.length; 49014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 49024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (elem = matcherOut[i]) && 49034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { 4904beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 49054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair seed[temp] = !(results[temp] = elem); 4906beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4907beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4908beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4909beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 49104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Add elements to results, through postFinder if defined 49114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 49124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherOut = condense( 49134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherOut === results ? 49144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherOut.splice( preexisting, matcherOut.length ) : 49154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcherOut 49164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 49174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( postFinder ) { 49184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair postFinder( null, results, matcherOut, xml ); 49194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 49204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push.apply( results, matcherOut ); 49214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 49224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 49234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 49244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 4925beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 49264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction matcherFromTokens( tokens ) { 49274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var checkContext, matcher, j, 49284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair len = tokens.length, 49294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair leadingRelative = Expr.relative[ tokens[0].type ], 49304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair implicitRelative = leadingRelative || Expr.relative[" "], 49314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = leadingRelative ? 1 : 0, 49324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 49334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // The foundational matcher ensures that elements are reachable from top-level context(s) 49344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchContext = addCombinator( function( elem ) { 49354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem === checkContext; 49364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, implicitRelative, true ), 49374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchAnyContext = addCombinator( function( elem ) { 49384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return indexOf.call( checkContext, elem ) > -1; 49394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, implicitRelative, true ), 49404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchers = [ function( elem, context, xml ) { 49414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 49424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (checkContext = context).nodeType ? 49434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchContext( elem, context, xml ) : 49444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchAnyContext( elem, context, xml ) ); 49454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } ]; 49464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 49474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < len; i++ ) { 49484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (matcher = Expr.relative[ tokens[i].type ]) ) { 49494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 49504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 49514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); 49524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 49534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Return special upon seeing a positional matcher 49544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matcher[ expando ] ) { 49554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Find the next relative operator (if any) for proper handling 49564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair j = ++i; 49574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; j < len; j++ ) { 49584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( Expr.relative[ tokens[j].type ] ) { 49594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair break; 49604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 49614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 49624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return setMatcher( 49634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i > 1 && elementMatcher( matchers ), 49644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), 49654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcher, 49664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i < j && matcherFromTokens( tokens.slice( i, j ) ), 49674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), 49684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair j < len && tokens.join("") 49694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 49704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 49714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchers.push( matcher ); 49724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 4973beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 4974beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 49754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elementMatcher( matchers ); 49764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 4977beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 49784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) { 49794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var bySet = setMatchers.length > 0, 49804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair byElement = elementMatchers.length > 0, 49814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair superMatcher = function( seed, context, xml, results, expandContext ) { 49824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, j, matcher, 49834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setMatched = [], 49844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchedCount = 0, 49854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = "0", 49864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair unmatched = seed && [], 49874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair outermost = expandContext != null, 49884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair contextBackup = outermostContext, 49894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // We must always have either seed elements or context 49904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), 49914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Nested matchers should use non-integer dirruns 49924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); 49934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 49944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( outermost ) { 49954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair outermostContext = context !== document && context; 49964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cachedruns = superMatcher.el; 49974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 49984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 49994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Add elements passing elementMatchers directly to results 50004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (elem = elems[i]) != null; i++ ) { 50014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( byElement && elem ) { 50024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( j = 0; (matcher = elementMatchers[j]); j++ ) { 50034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matcher( elem, context, xml ) ) { 50044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results.push( elem ); 50054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair break; 5006beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5007beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 50084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( outermost ) { 50094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dirruns = dirrunsUnique; 50104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cachedruns = ++superMatcher.el; 5011beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 50124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5013beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Track unmatched elements for set filters 50154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( bySet ) { 50164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // They will have gone through all possible matchers 50174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (elem = !matcher && elem) ) { 50184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchedCount--; 50194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5020beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Lengthen the array for every element, matched or not 50224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( seed ) { 50234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair unmatched.push( elem ); 5024beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5025beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5026beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5027beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Apply set filters to unmatched elements 50294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matchedCount += i; 50304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( bySet && i !== matchedCount ) { 50314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( j = 0; (matcher = setMatchers[j]); j++ ) { 50324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matcher( unmatched, setMatched, context, xml ); 50334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5034beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( seed ) { 50364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Reintegrate element matches to eliminate the need for sorting 50374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matchedCount > 0 ) { 50384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 50394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !(unmatched[i] || setMatched[i]) ) { 50404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setMatched[i] = pop.call( results ); 50414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 50424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 50434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5044beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Discard index placeholder values to get only actual matches 50464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setMatched = condense( setMatched ); 50474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5048beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Add matches to results 50504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push.apply( results, setMatched ); 5051beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Seedless set matches succeeding multiple successful matchers stipulate sorting 50534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( outermost && !seed && setMatched.length > 0 && 50544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( matchedCount + setMatchers.length ) > 1 ) { 5055beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Sizzle.uniqueSort( results ); 50574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 50584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Override manipulation of globals by nested matchers 50614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( outermost ) { 50624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dirruns = dirrunsUnique; 50634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair outermostContext = contextBackup; 5064beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return unmatched; 5067beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 5068beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair superMatcher.el = 0; 50704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return bySet ? 50714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair markFunction( superMatcher ) : 50724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair superMatcher; 50734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 5074beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclaircompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { 50764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i, 50774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setMatchers = [], 50784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elementMatchers = [], 50794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cached = compilerCache[ expando ][ selector + " " ]; 50804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 50814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !cached ) { 50824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Generate a function of recursive functions that can be used to check each element 50834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !group ) { 50844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair group = tokenize( selector ); 50854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 50864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = group.length; 50874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 50884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cached = matcherFromTokens( group[i] ); 50894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( cached[ expando ] ) { 50904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setMatchers.push( cached ); 50914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 50924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elementMatchers.push( cached ); 50934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 50944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5095beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 50964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Cache the compiled function 50974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 5098beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 50994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return cached; 51004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 5101beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction multipleContexts( selector, contexts, results ) { 51034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i = 0, 51044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair len = contexts.length; 51054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < len; i++ ) { 51064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Sizzle( selector, contexts[i], results ); 5107beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 51084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 51094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 5110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction select( selector, context, results, seed, xml ) { 51124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i, tokens, token, type, find, 51134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair match = tokenize( selector ), 51144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair j = match.length; 5115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !seed ) { 51174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Try to minimize operations if there is only one group 51184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( match.length === 1 ) { 5119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Take a shortcut and set the context if the root selector is an ID 51214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tokens = match[0] = match[0].slice( 0 ); 51224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && 51234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context.nodeType === 9 && !xml && 51244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Expr.relative[ tokens[1].type ] ) { 5125beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; 51274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !context ) { 51284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 5129beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selector = selector.slice( tokens.shift().length ); 51324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 51334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 51344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Fetch a seed set for right-to-left matching 51354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { 51364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair token = tokens[i]; 5137beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Abort if we hit a combinator 51394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( Expr.relative[ (type = token.type) ] ) { 5140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 5141beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 51424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (find = Expr.find[ type ]) ) { 51434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Search, expanding context for leading sibling combinators 51444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (seed = find( 51454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair token.matches[0].replace( rbackslash, "" ), 51464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rsibling.test( tokens[0].type ) && context.parentNode || context, 51474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair xml 51484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair )) ) { 51494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 51504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If seed is empty or no tokens remain, we can return early 51514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tokens.splice( i, 1 ); 51524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selector = seed.length && tokens.join(""); 51534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !selector ) { 51544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push.apply( results, slice.call( seed, 0 ) ); 51554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 51564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5157beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair break; 51594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 51604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5161beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5162beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5163beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 51644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 51654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Compile and execute a filtering function 51664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Provide `match` to avoid retokenization if we modified the selector above 51674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair compile( selector, match )( 51684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair seed, 51694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context, 51704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair xml, 51714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results, 51724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rsibling.test( selector ) 51734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 51744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 5175beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 5176beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 51774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif ( document.querySelectorAll ) { 51784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (function() { 51794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var disconnectedMatch, 51804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair oldSelect = select, 51814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rescape = /'|\\/g, 51824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, 51834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 51844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA 51854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A support test would require too much code (would include document ready) 51864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyQSA = [ ":focus" ], 51874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 51884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 51894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A support test would require too much code (would include document ready) 51904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // just skip matchesSelector for :active 51914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyMatches = [ ":active" ], 51924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matches = docElem.matchesSelector || 51934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem.mozMatchesSelector || 51944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem.webkitMatchesSelector || 51954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem.oMatchesSelector || 51964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem.msMatchesSelector; 51974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 51984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Build QSA regex 51994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Regex strategy adopted from Diego Perini 52004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assert(function( div ) { 52014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Select is set to empty string on purpose 52024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // This is to test IE's treatment of not explictly 52034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // setting a boolean content attribute, 52044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // since its presence should be enough 52054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://bugs.jquery.com/ticket/12359 52064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<select><option selected=''></option></select>"; 52074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 52084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE8 - Some boolean attributes are not treated correctly 52094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !div.querySelectorAll("[selected]").length ) { 52104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); 52114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 52124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 52134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Webkit/Opera - :checked should return selected option elements 52144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 52154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE8 throws error here (do not put tests after this one) 52164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !div.querySelectorAll(":checked").length ) { 52174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyQSA.push(":checked"); 52184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 52194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 5220beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assert(function( div ) { 5222beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Opera 10-12/IE9 - ^= $= *= and empty values 52244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Should not select anything 52254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<p test=''></p>"; 52264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( div.querySelectorAll("[test^='']").length ) { 52274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); 52284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5229beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 52314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE8 throws error here (do not put tests after this one) 52324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.innerHTML = "<input type='hidden'/>"; 52334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !div.querySelectorAll(":enabled").length ) { 52344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyQSA.push(":enabled", ":disabled"); 52354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 52364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 5237beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // rbuggyQSA always contains :focus, so no need for a length check 52394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); 5240beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair select = function( selector, context, results, seed, xml ) { 52424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Only use querySelectorAll when not filtering, 52434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // when this is not xml, 52444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // and when no QSA bugs apply 52454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !seed && !xml && !rbuggyQSA.test( selector ) ) { 52464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var groups, i, 52474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair old = true, 52484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair nid = expando, 52494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newContext = context, 52504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newSelector = context.nodeType === 9 && selector; 52514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 52524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // qSA works strangely on Element-rooted queries 52534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // We can work around this by specifying an extra ID on the root 52544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // and working up from there (Thanks to Andrew Dupont for the technique) 52554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE 8 doesn't work on object elements 52564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { 52574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair groups = tokenize( selector ); 52584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 52594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (old = context.getAttribute("id")) ) { 52604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair nid = old.replace( rescape, "\\$&" ); 52614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 52624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context.setAttribute( "id", nid ); 52634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 52644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair nid = "[id='" + nid + "'] "; 52654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 52664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = groups.length; 52674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 52684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair groups[i] = nid + groups[i].join(""); 5269beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 52704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newContext = rsibling.test( selector ) && context.parentNode || context; 52714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newSelector = groups.join(","); 5272beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( newSelector ) { 52754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 52764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair push.apply( results, slice.call( newContext.querySelectorAll( 52774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair newSelector 52784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ), 0 ) ); 52794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return results; 52804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch(qsaError) { 52814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } finally { 52824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !old ) { 52834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context.removeAttribute("id"); 52844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 52854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 52864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return oldSelect( selector, context, results, seed, xml ); 52904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 5291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( matches ) { 52934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair assert(function( div ) { 52944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check to see if it's possible to do matchesSelector 52954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // on a disconnected node (IE 9) 52964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair disconnectedMatch = matches.call( div, "div" ); 5297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 52984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // This should fail with an exception 52994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Gecko does not error, returns false instead 53004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 53014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair matches.call( div, "[test!='']:sizzle" ); 53024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyMatches.push( "!=", pseudos ); 53034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch ( e ) {} 53044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 5305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // rbuggyMatches always contains :active and :focus, so no need for a length check 53074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); 5308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Sizzle.matchesSelector = function( elem, expr ) { 53104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Make sure that attribute selectors are quoted 53114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair expr = expr.replace( rattributeQuotes, "='$1']" ); 5312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // rbuggyMatches always contains :active, so no need for an existence check 53144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) { 53154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 53164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret = matches.call( elem, expr ); 5317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE 9's matchesSelector returns false on disconnected nodes 53194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( ret || disconnectedMatch || 53204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // As well, disconnected nodes are said to be in a document 53214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // fragment in IE 9 53224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.document && elem.document.nodeType !== 11 ) { 53234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ret; 53244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 53254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch(e) {} 53264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return Sizzle( expr, null, null, [ elem ] ).length > 0; 53294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 53304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 53314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair })(); 53324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 5333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Deprecated 53354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairExpr.pseudos["nth"] = Expr.pseudos["eq"]; 5336beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Back-compat 53384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction setFilters() {} 53394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairExpr.filters = setFilters.prototype = Expr.pseudos; 53404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairExpr.setFilters = new setFilters(); 5341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Override sizzle attribute retrieval 5343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikSizzle.attr = jQuery.attr; 5344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.find = Sizzle; 5345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.expr = Sizzle.selectors; 53464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.expr[":"] = jQuery.expr.pseudos; 5347beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.unique = Sizzle.uniqueSort; 5348beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.text = Sizzle.getText; 5349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.isXMLDoc = Sizzle.isXML; 5350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.contains = Sizzle.contains; 5351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair})( window ); 5354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikvar runtil = /Until$/, 53554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rparentsprev = /^(?:parents|prev(?:Until|All))/, 5356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isSimple = /^.[^:#\[\.,]*$/, 53574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rneedsContext = jQuery.expr.match.needsContext, 5358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // methods guaranteed to produce a unique set when starting from a unique set 5359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik guaranteedUnique = { 5360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik children: true, 5361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik contents: true, 5362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik next: true, 5363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prev: true 5364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 5365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.extend({ 5367beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik find: function( selector ) { 53684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i, l, length, n, r, ret, 53694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self = this; 5370beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5371beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof selector !== "string" ) { 5372beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery( selector ).filter(function() { 5373beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0, l = self.length; i < l; i++ ) { 5374beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.contains( self[ i ], this ) ) { 5375beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return true; 5376beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5377beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5378beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5379beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5380beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 53814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = this.pushStack( "", "find", selector ); 5382beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5383beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0, l = this.length; i < l; i++ ) { 5384beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik length = ret.length; 5385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.find( selector, this[i], ret ); 5386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( i > 0 ) { 5388beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that the results are unique 5389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( n = length; n < ret.length; n++ ) { 5390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( r = 0; r < length; r++ ) { 5391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ret[r] === ret[n] ) { 5392beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.splice(n--, 1); 5393beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 5394beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5395beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5398beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5399beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5400beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 5401beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5402beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik has: function( target ) { 54044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i, 54054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair targets = jQuery( target, this ), 54064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair len = targets.length; 54074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 5408beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.filter(function() { 54094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i = 0; i < len; i++ ) { 5410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.contains( this, targets[i] ) ) { 5411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return true; 5412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5413beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5416beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik not: function( selector ) { 5418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.pushStack( winnow(this, selector, false), "not", selector); 5419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5420beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5421beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik filter: function( selector ) { 5422beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.pushStack( winnow(this, selector, true), "filter", selector ); 5423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5424beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5425beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik is: function( selector ) { 54264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !!selector && ( 5427beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik typeof selector === "string" ? 54284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If this is a positional/relative selector, check membership in the returned set 5429beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // so $("p:first").is("p:last") won't return true for a doc with two "p". 54304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rneedsContext.test( selector ) ? 5431beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( selector, this.context ).index( this[0] ) >= 0 : 5432beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.filter( selector, this ).length > 0 : 5433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.filter( selector ).length > 0 ); 5434beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5435beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5436beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik closest: function( selectors, context ) { 54374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var cur, 54384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 54394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair l = this.length, 54404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = [], 54414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? 5442beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( selectors, context || this.context ) : 5443beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 0; 5444beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 54454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < l; i++ ) { 5446beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = this[i]; 5447beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 54484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { 5449beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { 5450beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.push( cur ); 5451beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 5452beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 54534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cur = cur.parentNode; 5454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5455beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5456beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5457beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = ret.length > 1 ? jQuery.unique( ret ) : ret; 5458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5459beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.pushStack( ret, "closest", selectors ); 5460beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5461beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5462beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Determine the position of an element within 5463beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // the matched set of elements 5464beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik index: function( elem ) { 5465beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5466beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // No argument, return index in parent 5467beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elem ) { 5468beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; 5469beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5470beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5471beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // index in selector 5472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof elem === "string" ) { 5473beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.inArray( this[0], jQuery( elem ) ); 5474beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5475beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5476beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Locate the position of the desired element 5477beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.inArray( 5478beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If it receives a jQuery object, the first element is used 5479beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.jquery ? elem[0] : elem, this ); 5480beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5481beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5482beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik add: function( selector, context ) { 5483beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var set = typeof selector === "string" ? 5484beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( selector, context ) : 5485beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), 5486beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik all = jQuery.merge( this.get(), set ); 5487beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5488beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? 5489beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik all : 5490beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.unique( all ) ); 5491beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5492beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 54934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair addBack: function( selector ) { 54944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.add( selector == null ? 54954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.prevObject : this.prevObject.filter(selector) 54964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 5497beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5498beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 5499beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 55004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fn.andSelf = jQuery.fn.addBack; 55014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 5502beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// A painfully simple check to see if an element is disconnected 5503beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// from a document (should be improved, where feasible). 5504beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction isDisconnected( node ) { 5505beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return !node || !node.parentNode || node.parentNode.nodeType === 11; 5506beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 5507beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 55084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction sibling( cur, dir ) { 55094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair do { 55104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cur = cur[ dir ]; 55114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } while ( cur && cur.nodeType !== 1 ); 55124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 55134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return cur; 55144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 55154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 5516beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each({ 5517beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parent: function( elem ) { 5518beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var parent = elem.parentNode; 5519beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return parent && parent.nodeType !== 11 ? parent : null; 5520beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parents: function( elem ) { 5522beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.dir( elem, "parentNode" ); 5523beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5524beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parentsUntil: function( elem, i, until ) { 5525beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.dir( elem, "parentNode", until ); 5526beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5527beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik next: function( elem ) { 55284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return sibling( elem, "nextSibling" ); 5529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5530beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prev: function( elem ) { 55314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return sibling( elem, "previousSibling" ); 5532beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5533beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nextAll: function( elem ) { 5534beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.dir( elem, "nextSibling" ); 5535beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prevAll: function( elem ) { 5537beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.dir( elem, "previousSibling" ); 5538beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5539beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nextUntil: function( elem, i, until ) { 5540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.dir( elem, "nextSibling", until ); 5541beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5542beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prevUntil: function( elem, i, until ) { 5543beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.dir( elem, "previousSibling", until ); 5544beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5545beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik siblings: function( elem ) { 55464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); 5547beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5548beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik children: function( elem ) { 5549beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.sibling( elem.firstChild ); 5550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5551beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik contents: function( elem ) { 5552beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.nodeName( elem, "iframe" ) ? 5553beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.contentDocument || elem.contentWindow.document : 55544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.merge( [], elem.childNodes ); 5555beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5556beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}, function( name, fn ) { 5557beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.fn[ name ] = function( until, selector ) { 5558beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var ret = jQuery.map( this, fn, until ); 5559beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5560beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !runtil.test( name ) ) { 5561beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selector = until; 5562beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5563beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5564beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( selector && typeof selector === "string" ) { 5565beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = jQuery.filter( selector, ret ); 5566beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5567beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5568beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; 5569beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 55704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this.length > 1 && rparentsprev.test( name ) ) { 5571beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = ret.reverse(); 5572beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5573beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 55744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); 5575beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 5576beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 5577beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5578beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 5579beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik filter: function( expr, elems, not ) { 5580beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( not ) { 5581beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik expr = ":not(" + expr + ")"; 5582beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5583beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5584beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elems.length === 1 ? 5585beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : 5586beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.find.matches(expr, elems); 5587beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5588beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5589beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dir: function( elem, dir, until ) { 5590beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var matched = [], 5591beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = elem[ dir ]; 5592beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5593beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { 5594beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( cur.nodeType === 1 ) { 5595beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik matched.push( cur ); 5596beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5597beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cur = cur[dir]; 5598beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5599beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return matched; 5600beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5601beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik sibling: function( n, elem ) { 5603beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var r = []; 5604beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5605beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; n; n = n.nextSibling ) { 5606beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( n.nodeType === 1 && n !== elem ) { 5607beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik r.push( n ); 5608beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5609beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5611beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return r; 5612beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5613beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 5614beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5615beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Implement the identical functionality for filter and not 5616beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction winnow( elements, qualifier, keep ) { 5617beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5618beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Can't pass null or undefined to indexOf in Firefox 4 5619beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set to 0 to skip string check 5620beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik qualifier = qualifier || 0; 5621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5622beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( qualifier ) ) { 5623beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.grep(elements, function( elem, i ) { 5624beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var retVal = !!qualifier.call( elem, i, elem ); 5625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return retVal === keep; 5626beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5627beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5628beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( qualifier.nodeType ) { 5629beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.grep(elements, function( elem, i ) { 5630beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( elem === qualifier ) === keep; 5631beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5632beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5633beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( typeof qualifier === "string" ) { 5634beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var filtered = jQuery.grep(elements, function( elem ) { 5635beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem.nodeType === 1; 5636beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5637beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5638beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isSimple.test( qualifier ) ) { 5639beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.filter(qualifier, filtered, !keep); 5640beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 5641beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik qualifier = jQuery.filter( qualifier, filtered ); 5642beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5643beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5644beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5645beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.grep(elements, function( elem, i ) { 5646beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; 5647beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5648beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 5649beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction createSafeFragment( document ) { 5650beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var list = nodeNames.split( "|" ), 5651beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik safeFrag = document.createDocumentFragment(); 5652beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5653beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( safeFrag.createElement ) { 5654beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( list.length ) { 5655beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik safeFrag.createElement( 5656beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik list.pop() 5657beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ); 5658beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5659beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5660beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return safeFrag; 5661beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 5662beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 56634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + 5664beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", 56654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, 5666beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rleadingWhitespace = /^\s+/, 56674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, 5668beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rtagName = /<([\w:]+)/, 5669beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rtbody = /<tbody/i, 5670beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rhtml = /<|&#?\w+;/, 56714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rnoInnerhtml = /<(?:script|style|link)/i, 5672beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rnocache = /<(?:script|object|embed|option|style)/i, 56734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), 56744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rcheckableType = /^(?:checkbox|radio)$/, 5675beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // checked="checked" or checked 5676beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 5677beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rscriptType = /\/(java|ecma)script/i, 56784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g, 5679beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik wrapMap = { 5680beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik option: [ 1, "<select multiple='multiple'>", "</select>" ], 5681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik legend: [ 1, "<fieldset>", "</fieldset>" ], 5682beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik thead: [ 1, "<table>", "</table>" ], 5683beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tr: [ 2, "<table><tbody>", "</tbody></table>" ], 5684beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 5685beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], 5686beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik area: [ 1, "<map>", "</map>" ], 5687beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik _default: [ 0, "", "" ] 5688beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 56894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair safeFragment = createSafeFragment( document ), 56904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragmentDiv = safeFragment.appendChild( document.createElement("div") ); 5691beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5692beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikwrapMap.optgroup = wrapMap.option; 5693beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 5694beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikwrapMap.th = wrapMap.td; 5695beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 56964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, 56974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// unless wrapped in a div with non-breaking characters in front of it. 5698beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.htmlSerialize ) { 56994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair wrapMap._default = [ 1, "X<div>", "</div>" ]; 5700beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 5701beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5702beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.extend({ 57034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair text: function( value ) { 57044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, function( value ) { 57054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return value === undefined ? 57064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.text( this ) : 57074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); 57084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, null, value, arguments.length ); 5709beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5710beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5711beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik wrapAll: function( html ) { 5712beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( html ) ) { 5713beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function(i) { 5714beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery(this).wrapAll( html.call(this, i) ); 5715beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5716beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5717beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5718beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this[0] ) { 5719beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The elements to wrap the target around 5720beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); 5721beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5722beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this[0].parentNode ) { 5723beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik wrap.insertBefore( this[0] ); 5724beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5725beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5726beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik wrap.map(function() { 5727beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var elem = this; 5728beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5729beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { 5730beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = elem.firstChild; 5731beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5732beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5733beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem; 5734beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }).append( this ); 5735beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5736beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5737beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 5738beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5739beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5740beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik wrapInner: function( html ) { 5741beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( html ) ) { 5742beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function(i) { 5743beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery(this).wrapInner( html.call(this, i) ); 5744beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5745beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5746beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5747beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 5748beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var self = jQuery( this ), 5749beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik contents = self.contents(); 5750beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5751beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( contents.length ) { 5752beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik contents.wrapAll( html ); 5753beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5754beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 5755beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self.append( html ); 5756beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5757beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5758beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5759beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5760beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik wrap: function( html ) { 5761beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var isFunction = jQuery.isFunction( html ); 5762beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5763beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function(i) { 5764beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); 5765beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5766beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5767beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5768beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik unwrap: function() { 5769beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.parent().each(function() { 5770beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.nodeName( this, "body" ) ) { 5771beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this ).replaceWith( this.childNodes ); 5772beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5773beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }).end(); 5774beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5775beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5776beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik append: function() { 5777beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.domManip(arguments, true, function( elem ) { 57784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this.nodeType === 1 || this.nodeType === 11 ) { 5779beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.appendChild( elem ); 5780beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5781beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5782beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5783beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5784beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prepend: function() { 5785beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.domManip(arguments, true, function( elem ) { 57864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this.nodeType === 1 || this.nodeType === 11 ) { 5787beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.insertBefore( elem, this.firstChild ); 5788beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5789beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5790beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5791beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5792beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik before: function() { 57934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !isDisconnected( this[0] ) ) { 5794beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.domManip(arguments, false, function( elem ) { 5795beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.parentNode.insertBefore( elem, this ); 5796beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 57974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 57984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 57994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( arguments.length ) { 5800beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var set = jQuery.clean( arguments ); 58014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); 5802beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5803beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5804beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5805beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik after: function() { 58064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !isDisconnected( this[0] ) ) { 5807beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.domManip(arguments, false, function( elem ) { 5808beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.parentNode.insertBefore( elem, this.nextSibling ); 5809beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 58104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 58114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 58124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( arguments.length ) { 58134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var set = jQuery.clean( arguments ); 58144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); 5815beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5816beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5817beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5818beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // keepData is for internal use only--do not document 5819beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik remove: function( selector, keepData ) { 58204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, 58214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0; 58224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 58234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (elem = this[i]) != null; i++ ) { 5824beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { 5825beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !keepData && elem.nodeType === 1 ) { 5826beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.cleanData( elem.getElementsByTagName("*") ); 5827beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.cleanData( [ elem ] ); 5828beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5829beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5830beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.parentNode ) { 5831beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.parentNode.removeChild( elem ); 5832beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5833beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5834beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5835beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5836beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 5837beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5838beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5839beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik empty: function() { 58404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, 58414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0; 58424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 58434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (elem = this[i]) != null; i++ ) { 5844beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove element nodes and prevent memory leaks 5845beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.nodeType === 1 ) { 5846beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.cleanData( elem.getElementsByTagName("*") ); 5847beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5848beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5849beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove any remaining nodes 5850beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( elem.firstChild ) { 5851beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.removeChild( elem.firstChild ); 5852beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5853beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5854beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5855beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 5856beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5857beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5858beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clone: function( dataAndEvents, deepDataAndEvents ) { 5859beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 5860beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 5861beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5862beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.map( function () { 5863beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 5864beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5865beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5866beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5867beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik html: function( value ) { 58684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, function( value ) { 58694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem = this[0] || {}, 58704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 58714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair l = this.length; 5872beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 58734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( value === undefined ) { 58744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.nodeType === 1 ? 58754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.innerHTML.replace( rinlinejQuery, "" ) : 58764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair undefined; 58774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5878beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 58794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // See if we can take a shortcut and just use innerHTML 58804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 58814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && 58824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && 58834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { 5884beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 58854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value = value.replace( rxhtmlTag, "<$1></$2>" ); 5886beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 58874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 58884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for (; i < l; i++ ) { 58894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remove element nodes and prevent memory leaks 58904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = this[i] || {}; 58914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.nodeType === 1 ) { 58924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.cleanData( elem.getElementsByTagName( "*" ) ); 58934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.innerHTML = value; 58944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 58954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5896beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 58974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = 0; 5898beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 58994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If using innerHTML throws an exception, use the fallback method 59004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch(e) {} 59014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 5902beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 59034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem ) { 59044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.empty().append( value ); 59054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 59064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, null, value, arguments.length ); 5907beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5908beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5909beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik replaceWith: function( value ) { 59104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !isDisconnected( this[0] ) ) { 5911beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that the elements are removed from the DOM before they are inserted 5912beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // this can help fix replacing a parent with child elements 5913beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( value ) ) { 5914beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function(i) { 5915beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var self = jQuery(this), old = self.html(); 5916beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self.replaceWith( value.call( this, i, old ) ); 5917beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5918beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5919beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5920beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof value !== "string" ) { 5921beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value = jQuery( value ).detach(); 5922beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5923beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5924beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 5925beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var next = this.nextSibling, 5926beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parent = this.parentNode; 5927beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5928beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( this ).remove(); 5929beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5930beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( next ) { 5931beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery(next).before( value ); 5932beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 5933beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery(parent).append( value ); 5934beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5935beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5936beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 59374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 59384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.length ? 59394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : 59404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this; 5941beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5942beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5943beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik detach: function( selector ) { 5944beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.remove( selector, true ); 5945beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 5946beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5947beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik domManip: function( args, table, callback ) { 59484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 59494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Flatten any nested arrays 59504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair args = [].concat.apply( [], args ); 59514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 59524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var results, first, fragment, iNoClone, 59534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 5954beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value = args[0], 59554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair scripts = [], 59564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair l = this.length; 5957beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5958beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We can't cloneNode fragments that contain checked, in WebKit 59594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { 5960beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 59614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery(this).domManip( args, table, callback ); 5962beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5963beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5964beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5965beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction(value) ) { 5966beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function(i) { 5967beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var self = jQuery(this); 59684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair args[0] = value.call( this, i, table ? self.html() : undefined ); 5969beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik self.domManip( args, table, callback ); 5970beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 5971beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5972beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5973beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( this[0] ) { 59744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair results = jQuery.buildFragment( args, this, scripts ); 5975beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fragment = results.fragment; 59764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair first = fragment.firstChild; 5977beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5978beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fragment.childNodes.length === 1 ) { 59794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment = first; 5980beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5981beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 5982beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( first ) { 5983beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik table = table && jQuery.nodeName( first, "tr" ); 5984beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 59854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use the original fragment for the last item instead of the first because it can end up 59864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // being emptied incorrectly in certain situations (#8070). 59874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Fragments from the fragment cache must always be cloned and never used in place. 59884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { 5989beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callback.call( 59904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair table && jQuery.nodeName( this[i], "table" ) ? 59914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair findOrAppend( this[i], "tbody" ) : 5992beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this[i], 59934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i === iNoClone ? 59944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment : 59954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.clone( fragment, true, true ) 5996beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ); 5997beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5998beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 5999beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 60004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Fix #11809: Avoid leaking memory 60014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment = first = null; 60024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 6003beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( scripts.length ) { 60044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( scripts, function( i, elem ) { 60054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.src ) { 60064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.ajax ) { 60074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.ajax({ 60084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair url: elem.src, 60094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair type: "GET", 60104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataType: "script", 60114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair async: false, 60124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair global: false, 60134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "throws": true 60144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 60154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 60164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.error("no ajax"); 60174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 60184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 60194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); 60204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 60214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 60224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.parentNode ) { 60234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.parentNode.removeChild( elem ); 60244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 60254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 6026beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6027beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6028beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6029beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 6030beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6031beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 6032beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 60334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction findOrAppend( elem, tag ) { 60344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); 6035beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 6036beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6037beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction cloneCopyEvent( src, dest ) { 6038beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6039beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { 6040beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 6041beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6042beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6043beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var type, i, l, 6044beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik oldData = jQuery._data( src ), 6045beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curData = jQuery._data( dest, oldData ), 6046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik events = oldData.events; 6047beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6048beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( events ) { 6049beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete curData.handle; 6050beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curData.events = {}; 6051beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6052beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( type in events ) { 6053beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0, l = events[ type ].length; i < l; i++ ) { 60544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.event.add( dest, type, events[ type ][ i ] ); 6055beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6056beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6057beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6058beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // make the cloned public data object a copy from the original 6060beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( curData.data ) { 6061beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curData.data = jQuery.extend( {}, curData.data ); 6062beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6063beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 6064beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction cloneFixAttributes( src, dest ) { 6066beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var nodeName; 6067beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6068beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We do not need to do anything for non-Elements 6069beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( dest.nodeType !== 1 ) { 6070beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 6071beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6072beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6073beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // clearAttributes removes the attributes, which we don't want, 6074beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // but also removes the attachEvent events, which we *do* want 6075beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( dest.clearAttributes ) { 6076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dest.clearAttributes(); 6077beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6078beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6079beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // mergeAttributes, in contrast, only merges back on the 6080beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // original attributes, not the events 6081beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( dest.mergeAttributes ) { 6082beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dest.mergeAttributes( src ); 6083beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6084beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6085beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik nodeName = dest.nodeName.toLowerCase(); 6086beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6087beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( nodeName === "object" ) { 60884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE6-10 improperly clones children of object elements using classid. 60894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE10 throws NoModificationAllowedError if parent is null, #12132. 60904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( dest.parentNode ) { 60914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dest.outerHTML = src.outerHTML; 60924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6093beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 60944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // This path appears unavoidable for IE9. When cloning an object 60954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // element in IE9, the outerHTML strategy above is not sufficient. 60964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If the src has innerHTML and the destination does not, 60974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // copy the src.innerHTML into the dest.innerHTML. #10324 60984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { 60994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dest.innerHTML = src.innerHTML; 61004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 61014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 61024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 6103beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE6-8 fails to persist the checked state of a cloned checkbox 6104beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // or radio button. Worse, IE6-7 fail to give the cloned element 6105beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // a checked appearance if the defaultChecked value isn't also set 61064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 61074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dest.defaultChecked = dest.checked = src.checked; 6108beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6109beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE6-7 get confused and end up setting the value of a cloned 6110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // checkbox/radio button to an empty string instead of "on" 6111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( dest.value !== src.value ) { 6112beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dest.value = src.value; 6113beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6114beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE6-8 fails to return the selected option to the default selected 6116beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // state when cloning options 6117beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( nodeName === "option" ) { 6118beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dest.selected = src.defaultSelected; 6119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6120beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE6-8 fails to set the defaultValue to the correct value when 6121beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // cloning other types of input fields 6122beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( nodeName === "input" || nodeName === "textarea" ) { 6123beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dest.defaultValue = src.defaultValue; 61244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 61254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE blanks contents when cloning scripts 61264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( nodeName === "script" && dest.text !== src.text ) { 61274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dest.text = src.text; 6128beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6129beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Event data gets referenced instead of copied if the expando 6131beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // gets copied too 6132beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dest.removeAttribute( jQuery.expando ); 6133beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 6134beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 61354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.buildFragment = function( args, context, scripts ) { 61364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var fragment, cacheable, cachehit, 61374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair first = args[ 0 ]; 6138beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 61394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Set context from what may come in as undefined or a jQuery collection or a node 61404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & 61414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception 61424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = context || document; 61434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = !context.nodeType && context[0] || context; 61444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = context.ownerDocument || context; 6145beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6146beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only cache "small" (1/2 KB) HTML strings that are associated with the main document 6147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Cloning options loses the selected state, so don't cache them 6148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment 6149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache 6150beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 61514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && 6152beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik first.charAt(0) === "<" && !rnocache.test( first ) && 6153beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik (jQuery.support.checkClone || !rchecked.test( first )) && 6154beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { 6155beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 61564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Mark cacheable and look for a hit 6157beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cacheable = true; 61584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment = jQuery.fragments[ first ]; 61594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cachehit = fragment !== undefined; 6160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6161beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6162beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !fragment ) { 61634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment = context.createDocumentFragment(); 61644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.clean( args, context, fragment, scripts ); 6165beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 61664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Update the cache, but only store false 61674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // unless this is a second parsing of the same content 61684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( cacheable ) { 61694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.fragments[ first ] = cachehit && fragment; 61704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6171beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6172beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return { fragment: fragment, cacheable: cacheable }; 6174beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 6175beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6176beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fragments = {}; 6177beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6178beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each({ 6179beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik appendTo: "append", 6180beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prependTo: "prepend", 6181beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik insertBefore: "before", 6182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik insertAfter: "after", 6183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik replaceAll: "replaceWith" 6184beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}, function( name, original ) { 6185beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.fn[ name ] = function( selector ) { 61864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elems, 61874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 61884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = [], 6189beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik insert = jQuery( selector ), 61904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair l = insert.length, 6191beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parent = this.length === 1 && this[0].parentNode; 6192beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 61934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { 6194beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik insert[ original ]( this[0] ); 6195beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 6196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 61974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < l; i++ ) { 61984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elems = ( i > 0 ? this.clone(true) : this ).get(); 6199beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( insert[i] )[ original ]( elems ); 6200beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = ret.concat( elems ); 6201beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6202beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6203beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.pushStack( ret, name, insert.selector ); 6204beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6205beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 6206beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 6207beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6208beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction getAll( elem ) { 6209beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof elem.getElementsByTagName !== "undefined" ) { 6210beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem.getElementsByTagName( "*" ); 6211beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6212beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( typeof elem.querySelectorAll !== "undefined" ) { 6213beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem.querySelectorAll( "*" ); 6214beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6215beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 6216beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return []; 6217beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6218beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 6219beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6220beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Used in clean, fixes the defaultChecked property 6221beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction fixDefaultChecked( elem ) { 62224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rcheckableType.test( elem.type ) ) { 6223beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.defaultChecked = elem.checked; 6224beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6225beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 6226beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6227beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 6228beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clone: function( elem, dataAndEvents, deepDataAndEvents ) { 6229beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var srcElements, 6230beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik destElements, 6231beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i, 62324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair clone; 62334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 62344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { 62354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair clone = elem.cloneNode( true ); 62364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 62374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE<=8 does not properly clone detached, unknown element nodes 62384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 62394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragmentDiv.innerHTML = elem.outerHTML; 62404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); 62414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6242beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6243beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && 6244beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { 6245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE copies events bound via attachEvent when using cloneNode. 6246beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Calling detachEvent on the clone will also remove the events 6247beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // from the original. In order to get around this, we use some 6248beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // proprietary methods to clear the events. Thanks to MooTools 6249beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // guys for this hotness. 6250beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6251beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cloneFixAttributes( elem, clone ); 6252beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6253beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Using Sizzle here is crazy slow, so we use getElementsByTagName instead 6254beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik srcElements = getAll( elem ); 6255beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik destElements = getAll( clone ); 6256beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6257beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Weird iteration because IE will replace the length property 6258beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // with an element if you are cloning the body and one of the 6259beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // elements on the page has a name or id of "length" 6260beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0; srcElements[i]; ++i ) { 6261beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Ensure that the destination node is not null; Fixes #9587 6262beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( destElements[i] ) { 6263beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cloneFixAttributes( srcElements[i], destElements[i] ); 6264beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6265beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6266beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6267beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6268beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Copy the events from the original to the clone 6269beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( dataAndEvents ) { 6270beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cloneCopyEvent( elem, clone ); 6271beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6272beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( deepDataAndEvents ) { 6273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik srcElements = getAll( elem ); 6274beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik destElements = getAll( clone ); 6275beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6276beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i = 0; srcElements[i]; ++i ) { 6277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cloneCopyEvent( srcElements[i], destElements[i] ); 6278beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6280beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6281beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6282beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik srcElements = destElements = null; 6283beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6284beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Return the cloned set 6285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return clone; 6286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 6287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clean: function( elems, context, fragment, scripts ) { 62894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, 62904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair safe = context === document && safeFragment, 62914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = []; 6292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 62934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Ensure that context is a document 62944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !context || typeof context.createDocumentFragment === "undefined" ) { 62954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = document; 6296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 62984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use the already-created safe fragment if context permits 62994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i = 0; (elem = elems[i]) != null; i++ ) { 6300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof elem === "number" ) { 6301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem += ""; 6302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elem ) { 6305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik continue; 6306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Convert html string into DOM nodes 6309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof elem === "string" ) { 6310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !rhtml.test( elem ) ) { 6311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = context.createTextNode( elem ); 6312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 63134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Ensure a safe container in which to render the html 63144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair safe = safe || createSafeFragment( context ); 63154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div = context.createElement("div"); 63164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair safe.appendChild( div ); 63174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 6318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fix "XHTML"-style tags in all browsers 6319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = elem.replace(rxhtmlTag, "<$1></$2>"); 6320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Go to html and back, then peel off extra wrappers 63224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); 63234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair wrap = wrapMap[ tag ] || wrapMap._default; 63244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair depth = wrap[0]; 6325beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div.innerHTML = wrap[1] + elem + wrap[2]; 6326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Move to the right depth 6328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( depth-- ) { 6329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div = div.lastChild; 6330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove IE's autoinserted <tbody> from table fragments 6333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.support.tbody ) { 6334beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6335beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // String was a <table>, *may* have spurious <tbody> 63364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hasBody = rtbody.test(elem); 6337beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tbody = tag === "table" && !hasBody ? 6338beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div.firstChild && div.firstChild.childNodes : 6339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // String was a bare <thead> or <tfoot> 6341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik wrap[1] === "<table>" && !hasBody ? 6342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div.childNodes : 6343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik []; 6344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( j = tbody.length - 1; j >= 0 ; --j ) { 6346beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { 6347beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tbody[ j ].parentNode.removeChild( tbody[ j ] ); 6348beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE completely kills leading whitespace when innerHTML is used 6353beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { 6354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); 6355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6357beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem = div.childNodes; 6358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 63594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Take out of fragment container (we need a fresh div each time) 63604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair div.parentNode.removeChild( div ); 6361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( elem.nodeType ) { 6365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.push( elem ); 6366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 63674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.merge( ret, elem ); 63684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 63694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 63704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 63714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Fix #11356: Clear elements from safeFragment 63724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( div ) { 63734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = div = safe = null; 63744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 63754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 63764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Reset defaultChecked for any radios and checkboxes 63774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // about to be appended to the DOM in IE 6/7 (#8060) 63784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.support.appendChecked ) { 63794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i = 0; (elem = ret[i]) != null; i++ ) { 63804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.nodeName( elem, "input" ) ) { 63814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fixDefaultChecked( elem ); 63824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( typeof elem.getElementsByTagName !== "undefined" ) { 63834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); 63844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 63884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Append elements to a provided document fragment 6389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fragment ) { 63904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Special handling of each script element 63914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handleScript = function( elem ) { 63924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if we consider it executable 63934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !elem.type || rscriptType.test( elem.type ) ) { 63944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Detach the script and store it in the scripts array (if provided) or the fragment 63954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Return truthy to indicate that it has been handled 63964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return scripts ? 63974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : 63984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment.appendChild( elem ); 63994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6400beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 6401beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i = 0; (elem = ret[i]) != null; i++ ) { 64034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Check if we're done after handling an executable script 64044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { 64054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Append to fragment and handle embedded scripts 64064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fragment.appendChild( elem ); 64074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof elem.getElementsByTagName !== "undefined" ) { 64084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration 64094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); 6410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Splice the scripts into ret after their former ancestor and advance our index beyond them 6412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); 64134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i += jsTags.length; 6414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6416beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 6420beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 6421beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cleanData: function( elems, /* internal */ acceptData ) { 64234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var data, id, elem, type, 64244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 64254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair internalKey = jQuery.expando, 6426beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache = jQuery.cache, 64274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deleteExpando = jQuery.support.deleteExpando, 64284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair special = jQuery.event.special; 6429beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (elem = elems[i]) != null; i++ ) { 6431beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( acceptData || jQuery.acceptData( elem ) ) { 6433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair id = elem[ internalKey ]; 64354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data = id && cache[ id ]; 6436beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( data ) { 64384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( data.events ) { 64394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( type in data.events ) { 64404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( special[ type ] ) { 64414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.event.remove( elem, type ); 6442beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // This is a shortcut to avoid jQuery.event.remove's overhead 64444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 64454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.removeEvent( elem, type, data.handle ); 64464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6447beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6448beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6449beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remove cache only if it was not already removed by jQuery.event.remove 64514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( cache[ id ] ) { 6452beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete cache[ id ]; 6454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE does not allow us to delete expando properties from nodes, 64564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // nor does it have a removeAttribute function on Document nodes; 64574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // we must handle all of these cases 64584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( deleteExpando ) { 64594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete elem[ internalKey ]; 64604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 64614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( elem.removeAttribute ) { 64624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.removeAttribute( internalKey ); 6463beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 64654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem[ internalKey ] = null; 64664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 64674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 64684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.deletedIds.push( id ); 64694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 64704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6471beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6473beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6474beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 64754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Limit scope pollution from any deprecated API 64764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair(function() { 64774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 64784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar matched, browser; 64794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 64804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Use of jQuery.browser is frowned upon. 64814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// More details: http://api.jquery.com/jQuery.browser 64824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// jQuery.uaMatch maintained for back-compat 64834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.uaMatch = function( ua ) { 64844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ua = ua.toLowerCase(); 64854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 64864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || 64874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair /(webkit)[ \/]([\w.]+)/.exec( ua ) || 64884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || 64894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair /(msie) ([\w.]+)/.exec( ua ) || 64904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || 64914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair []; 64924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 64934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return { 64944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair browser: match[ 1 ] || "", 64954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair version: match[ 2 ] || "0" 64964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 64974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 6498beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 64994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairmatched = jQuery.uaMatch( navigator.userAgent ); 65004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairbrowser = {}; 6501beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif ( matched.browser ) { 65034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair browser[ matched.browser ] = true; 65044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair browser.version = matched.version; 65054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 65064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Chrome is Webkit, but Webkit is also Safari. 65084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif ( browser.chrome ) { 65094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair browser.webkit = true; 65104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} else if ( browser.webkit ) { 65114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair browser.safari = true; 6512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 6513beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.browser = browser; 6515beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.sub = function() { 65174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair function jQuerySub( selector, context ) { 65184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return new jQuerySub.fn.init( selector, context ); 65194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 65204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.extend( true, jQuerySub, this ); 65214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuerySub.superclass = this; 65224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuerySub.fn = jQuerySub.prototype = this(); 65234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuerySub.fn.constructor = jQuerySub; 65244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuerySub.sub = this.sub; 65254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuerySub.fn.init = function init( selector, context ) { 65264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { 65274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair context = jQuerySub( context ); 65284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); 65314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 65324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuerySub.fn.init.prototype = jQuerySub.fn; 65334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var rootjQuerySub = jQuerySub(document); 65344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuerySub; 65354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 6536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair})(); 65384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar curCSS, iframe, iframeDoc, 65394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ralpha = /alpha\([^)]*\)/i, 6540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ropacity = /opacity=([^)]*)/, 65414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rposition = /^(top|right|bottom|left)$/, 65424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" 65434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 65444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rdisplayswap = /^(none|table(?!-c[ea]).+)/, 65454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rmargin = /^margin/, 65464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), 65474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), 65484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), 65494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elemdisplay = { BODY: "block" }, 6550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6551beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 65524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cssNormalTransform = { 65534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair letterSpacing: 0, 65544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fontWeight: 400 65554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 6556beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cssExpand = [ "Top", "Right", "Bottom", "Left" ], 65584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], 6559beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair eventsToggle = jQuery.fn.toggle; 65614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// return a css property mapped to a potentially vendor prefixed property 65634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction vendorPropName( style, name ) { 65644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // shortcut for names that are not vendor prefixed 65664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( name in style ) { 65674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return name; 6568beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6569beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 65704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // check for vendor prefixed names 65714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var capName = name.charAt(0).toUpperCase() + name.slice(1), 65724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair origName = name, 65734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = cssPrefixes.length; 65744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair while ( i-- ) { 65764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name = cssPrefixes[ i ] + capName; 65774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( name in style ) { 65784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return name; 65794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 65804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 65814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return origName; 65834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 65844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction isHidden( elem, el ) { 65864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = el || elem; 65874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); 65884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 65894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction showHide( elements, show ) { 65914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem, display, 65924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair values = [], 65934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair index = 0, 65944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = elements.length; 65954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 65964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; index < length; index++ ) { 65974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = elements[ index ]; 65984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !elem.style ) { 65994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair continue; 66004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair values[ index ] = jQuery._data( elem, "olddisplay" ); 66024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( show ) { 66034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Reset the inline display of this element to learn if it is 66044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // being hidden by cascaded rules or not 66054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !values[ index ] && elem.style.display === "none" ) { 66064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.style.display = ""; 66074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 66094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Set elements which have been overridden with display: none 66104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // in a stylesheet to whatever the default browser style is 66114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // for such an element 66124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.style.display === "" && isHidden( elem ) ) { 66134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); 66144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 66164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair display = curCSS( elem, "display" ); 66174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 66184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !values[ index ] && display !== "none" ) { 66194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery._data( elem, "olddisplay", display ); 66204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 66244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Set the display of most of the elements in a second loop 66254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // to avoid the constant reflow 66264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( index = 0; index < length; index++ ) { 66274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = elements[ index ]; 66284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !elem.style ) { 66294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair continue; 66304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !show || elem.style.display === "none" || elem.style.display === "" ) { 66324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.style.display = show ? values[ index ] || "" : "none"; 66334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 66364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elements; 66374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 66384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 66394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fn.extend({ 66404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair css: function( name, value ) { 66414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, function( elem, name, value ) { 66424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return value !== undefined ? 66434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.style( elem, name, value ) : 66444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.css( elem, name ); 66454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, name, value, arguments.length > 1 ); 66464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 66474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair show: function() { 66484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return showHide( this, true ); 66494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 66504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hide: function() { 66514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return showHide( this ); 66524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 66534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair toggle: function( state, fn2 ) { 66544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var bool = typeof state === "boolean"; 66554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 66564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { 66574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return eventsToggle.apply( this, arguments ); 66584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 66604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.each(function() { 66614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( bool ? state : isHidden( this ) ) { 66624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery( this ).show(); 66634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 66644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery( this ).hide(); 66654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 66674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 66684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 6669beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6670beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 6671beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add in style property hooks for overriding the default 6672beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // behavior of getting and setting a style property 6673beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cssHooks: { 6674beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik opacity: { 6675beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem, computed ) { 6676beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( computed ) { 6677beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We should always get a number back from opacity 66784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret = curCSS( elem, "opacity" ); 6679beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret === "" ? "1" : ret; 6680beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6682beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6683beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6684beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 6685beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6686beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Exclude the following css properties to add px 6687beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cssNumber: { 6688beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "fillOpacity": true, 6689beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "fontWeight": true, 6690beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "lineHeight": true, 6691beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "opacity": true, 6692beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "orphans": true, 6693beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "widows": true, 6694beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "zIndex": true, 6695beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "zoom": true 6696beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 6697beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6698beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add in properties whose names you wish to fix before 6699beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // setting or getting the value 6700beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cssProps: { 6701beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // normalize float css property 6702beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" 6703beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 6704beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6705beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get and set the style property on a DOM Node 6706beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik style: function( elem, name, value, extra ) { 6707beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Don't set styles on text and comment nodes 6708beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 6709beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 6710beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6711beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6712beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that we're working with the right name 67134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret, type, hooks, 67144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair origName = jQuery.camelCase( name ), 67154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style = elem.style; 67164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 67174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); 6718beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 67194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // gets hook for the prefixed version 67204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // followed by the unprefixed version 67214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6722beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6723beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if we're setting a value 6724beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value !== undefined ) { 6725beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = typeof value; 6726beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6727beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // convert relative number strings (+= or -=) to relative numbers. #7345 6728beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( type === "string" && (ret = rrelNum.exec( value )) ) { 67294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); 6730beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fixes bug #9237 6731beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = "number"; 6732beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6733beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6734beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that NaN and null values aren't set. See: #7116 6735beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( value == null || type === "number" && isNaN( value ) ) { 6736beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 6737beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6738beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6739beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If a number was passed in, add 'px' to the (except for certain CSS properties) 6740beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( type === "number" && !jQuery.cssNumber[ origName ] ) { 6741beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik value += "px"; 6742beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6743beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6744beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If a hook was provided, use that value, otherwise just set the specified value 67454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { 6746beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Wrapped to prevent IE from throwing errors when 'invalid' values are provided 6747beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fixes bug #5509 6748beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 6749beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik style[ name ] = value; 6750beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch(e) {} 6751beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6752beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6753beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 6754beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If a hook was provided get the non-computed value from there 6755beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { 6756beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ret; 6757beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6758beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6759beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Otherwise just get the value from the style object 6760beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return style[ name ]; 6761beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 6762beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 6763beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 67644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair css: function( elem, name, numeric, extra ) { 67654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var val, num, hooks, 67664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair origName = jQuery.camelCase( name ); 6767beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6768beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Make sure that we're working with the right name 67694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); 6770beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 67714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // gets hook for the prefixed version 67724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // followed by the unprefixed version 67734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6774beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6775beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If a hook was provided get the computed value from there 67764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( hooks && "get" in hooks ) { 67774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = hooks.get( elem, true, extra ); 67784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 67794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 67804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Otherwise, if a way to get the computed value exists, use that 67814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( val === undefined ) { 67824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = curCSS( elem, name ); 67834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 67844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 67854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair //convert "normal" to computed value 67864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( val === "normal" && name in cssNormalTransform ) { 67874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = cssNormalTransform[ name ]; 67884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 67894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 67904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Return, converting to number if forced or a qualifier was provided and val looks numeric 67914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( numeric || extra !== undefined ) { 67924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair num = parseFloat( val ); 67934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return numeric || jQuery.isNumeric( num ) ? num || 0 : val; 67944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 67954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return val; 67964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 67974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 67984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A method for quickly swapping in/out CSS properties to get correct calculations 67994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair swap: function( elem, options, callback ) { 68004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret, name, 68014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair old = {}; 68024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remember the old values, and insert the new ones 68044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( name in options ) { 68054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair old[ name ] = elem.style[ name ]; 68064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.style[ name ] = options[ name ]; 68074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = callback.call( elem ); 68104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Revert the old values 68124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( name in options ) { 68134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.style[ name ] = old[ name ]; 68144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ret; 68174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 68194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// NOTE: To any future maintainer, we've window.getComputedStyle 68214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// because jsdom on node.js will break without it. 68224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif ( window.getComputedStyle ) { 68234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair curCSS = function( elem, name ) { 68244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret, width, minWidth, maxWidth, 68254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair computed = window.getComputedStyle( elem, null ), 68264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style = elem.style; 68274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( computed ) { 68294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // getPropertyValue is only needed for .css('filter') in IE9, see #12537 68314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = computed.getPropertyValue( name ) || computed[ name ]; 68324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { 68344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = jQuery.style( elem, name ); 68354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A tribute to the "awesome hack by Dean Edwards" 68384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right 68394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels 68404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values 68414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { 68424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair width = style.width; 68434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair minWidth = style.minWidth; 68444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair maxWidth = style.maxWidth; 68454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.minWidth = style.maxWidth = style.width = ret; 68474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = computed.width; 68484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.width = width; 68504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.minWidth = minWidth; 68514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.maxWidth = maxWidth; 68524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ret; 68564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 68574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} else if ( document.documentElement.currentStyle ) { 68584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair curCSS = function( elem, name ) { 68594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var left, rsLeft, 68604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = elem.currentStyle && elem.currentStyle[ name ], 68614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style = elem.style; 68624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Avoid setting ret to empty string here 68644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // so we don't default to auto 68654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( ret == null && style && style[ name ] ) { 68664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = style[ name ]; 68674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // From the awesome hack by Dean Edwards 68704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 68714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If we're not dealing with a regular pixel number 68734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // but a number that has a weird ending, we need to convert it to pixels 68744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // but not position css attributes, as those are proportional to the parent element instead 68754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // and we can't measure the parent instead because it might trigger a "stacking dolls" problem 68764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { 68774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Remember the original values 68794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair left = style.left; 68804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; 68814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Put in the new values to get a computed value out 68834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rsLeft ) { 68844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.runtimeStyle.left = elem.currentStyle.left; 68854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.left = name === "fontSize" ? "1em" : ret; 68874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ret = style.pixelLeft + "px"; 68884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Revert the changed values 68904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.left = left; 68914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rsLeft ) { 68924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.runtimeStyle.left = rsLeft; 68934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 68954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 68964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ret === "" ? "auto" : ret; 68974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 68984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 68994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction setPositiveNumber( elem, value, subtract ) { 69014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var matches = rnumsplit.exec( value ); 69024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return matches ? 69034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : 69044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value; 69054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 69064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction augmentWidthOrHeight( elem, name, extra, isBorderBox ) { 69084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i = extra === ( isBorderBox ? "border" : "content" ) ? 69094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If we already have the right measurement, avoid augmentation 69104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 4 : 69114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Otherwise initialize for horizontal or vertical properties 69124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name === "width" ? 1 : 0, 69134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = 0; 69154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < 4; i += 2 ) { 69174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // both box models exclude margin, so add it if we want it 69184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( extra === "margin" ) { 69194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // we use jQuery.css instead of curCSS here 69204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // because of the reliableMarginRight CSS hook! 69214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val += jQuery.css( elem, extra + cssExpand[ i ], true ); 69224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // From this point on we use curCSS for maximum performance (relevant in animations) 69254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( isBorderBox ) { 69264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // border-box includes padding, so remove it if we want content 69274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( extra === "content" ) { 69284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; 69294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // at this point, extra isn't border nor margin, so remove border 69324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( extra !== "margin" ) { 69334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; 69344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 69364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // at this point, extra isn't content, so add padding 69374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; 69384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // at this point, extra isn't content nor padding, so add border 69404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( extra !== "padding" ) { 69414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; 69424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return val; 69474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 69484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction getWidthOrHeight( elem, name, extra ) { 69504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Start with offset property, which is equivalent to the border-box value 69524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, 69534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair valueIsBorderBox = true, 69544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; 69554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // some non-html elements return undefined for offsetWidth, so check for null/undefined 69574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 69584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 69594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( val <= 0 || val == null ) { 69604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Fall back to computed then uncomputed css if necessary 69614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = curCSS( elem, name ); 69624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( val < 0 || val == null ) { 69634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = elem.style[ name ]; 69644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Computed unit is not pixels. Stop here and return. 69674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rnumnonpx.test(val) ) { 69684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return val; 69694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // we need the check for style in case a browser which returns unreliable values 69724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // for getComputedStyle silently falls back to the reliable elem.style 69734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); 69744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Normalize "", auto, and prepare for extra 69764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair val = parseFloat( val ) || 0; 69774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 69784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 69794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // use the active box-sizing model to add/subtract irrelevant styles 69804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( val + 69814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair augmentWidthOrHeight( 69824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem, 69834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name, 69844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair extra || ( isBorderBox ? "border" : "content" ), 69854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair valueIsBorderBox 69864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ) 69874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ) + "px"; 69884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 6989beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 6990beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 69914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Try to determine the default display value of an element 69924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction css_defaultDisplay( nodeName ) { 69934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elemdisplay[ nodeName ] ) { 69944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elemdisplay[ nodeName ]; 69954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 6996beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 69974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), 69984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair display = elem.css("display"); 69994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.remove(); 70004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 70014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If the simple way fails, 70024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // get element's real default display by attaching it to a temp iframe 70034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( display === "none" || display === "" ) { 70044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use the already-created iframe if possible 70054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair iframe = document.body.appendChild( 70064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair iframe || jQuery.extend( document.createElement("iframe"), { 70074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair frameBorder: 0, 70084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair width: 0, 70094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair height: 0 70104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) 70114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 70124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 70134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Create a cacheable copy of the iframe document on first call. 70144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML 70154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // document to it; WebKit & Firefox won't allow reusing the iframe document. 70164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !iframeDoc || !iframe.createElement ) { 70174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; 70184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair iframeDoc.write("<!doctype html><html><body>"); 70194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair iframeDoc.close(); 7020beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7021beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 70224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); 7023beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 70244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair display = curCSS( elem, "display" ); 70254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair document.body.removeChild( iframe ); 7026beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7027beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 70284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Store the correct default display 70294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elemdisplay[ nodeName ] = display; 7030beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 70314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return display; 70324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 70334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 70344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.each([ "height", "width" ], function( i, name ) { 7035beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.cssHooks[ name ] = { 7036beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem, computed, extra ) { 7037beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( computed ) { 70384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // certain elements can have dimension info if we invisibly show them 70394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // however, it must have a current display style that would benefit from this 70404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { 70414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.swap( elem, cssShow, function() { 70424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return getWidthOrHeight( elem, name, extra ); 7043beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 70444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 70454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return getWidthOrHeight( elem, name, extra ); 7046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7047beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7048beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7049beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 70504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair set: function( elem, value, extra ) { 70514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return setPositiveNumber( elem, value, extra ? 70524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair augmentWidthOrHeight( 70534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem, 70544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name, 70554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair extra, 70564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" 70574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ) : 0 70584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 7059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7060beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7061beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 7062beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7063beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( !jQuery.support.opacity ) { 7064beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.cssHooks.opacity = { 7065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem, computed ) { 7066beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE uses filters for opacity 7067beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? 70684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : 7069beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik computed ? "1" : ""; 7070beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7071beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7072beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik set: function( elem, value ) { 7073beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var style = elem.style, 7074beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik currentStyle = elem.currentStyle, 7075beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", 7076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik filter = currentStyle && currentStyle.filter || style.filter || ""; 7077beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7078beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE has trouble with opacity if it does not have layout 7079beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Force it by setting the zoom level 7080beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik style.zoom = 1; 7081beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7082beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 70834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && 70844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.removeAttribute ) { 7085beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7086beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Setting style.filter to null, "" & " " still leave "filter:" in the cssText 7087beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if "filter:" is present at all, clearType is disabled, we want to avoid this 7088beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // style.removeAttribute is IE Only, but so apparently is this code path... 7089beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik style.removeAttribute( "filter" ); 7090beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7091beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if there there is no filter style applied in a css rule, we are done 7092beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( currentStyle && !currentStyle.filter ) { 7093beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 7094beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7095beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7096beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7097beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // otherwise, set new filter values 7098beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik style.filter = ralpha.test( filter ) ? 7099beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik filter.replace( ralpha, opacity ) : 7100beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik filter + " " + opacity; 7101beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7102beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7103beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 7104beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// These hooks cannot be added until DOM ready because the support test 71064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// for it is not run until after DOM ready 7107beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery(function() { 7108beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !jQuery.support.reliableMarginRight ) { 7109beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.cssHooks.marginRight = { 7110beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik get: function( elem, computed ) { 7111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right 7112beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Work around by temporarily setting element display to inline-block 71134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.swap( elem, { "display": "inline-block" }, function() { 7114beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( computed ) { 71154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return curCSS( elem, "marginRight" ); 7116beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7117beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 7118beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7120beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7121beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 71234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // getComputedStyle returns percent when specified for top/left/bottom/right 71244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // rather than make the css module depend on the offset module, we just check for it here 71254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { 71264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( [ "top", "left" ], function( i, prop ) { 71274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.cssHooks[ prop ] = { 71284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair get: function( elem, computed ) { 71294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( computed ) { 71304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ret = curCSS( elem, prop ); 71314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if curCSS returns percentage, fallback to offset 71324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; 71334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 71344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 71354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 71364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 71374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 7138beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 7140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif ( jQuery.expr && jQuery.expr.filters ) { 71424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.expr.filters.hidden = function( elem ) { 71434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); 71444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 7145beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.expr.filters.visible = function( elem ) { 71474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !jQuery.expr.filters.hidden( elem ); 7148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7149beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 7150beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// These hooks are used by animate to expand properties 71524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.each({ 71534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair margin: "", 71544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair padding: "", 71554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair border: "Width" 71564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}, function( prefix, suffix ) { 71574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.cssHooks[ prefix + suffix ] = { 71584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair expand: function( value ) { 71594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var i, 7160beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // assumes a single number if not a string 71624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parts = typeof value === "string" ? value.split(" ") : [ value ], 71634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair expanded = {}; 7164beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( i = 0; i < 4; i++ ) { 71664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair expanded[ prefix + cssExpand[ i ] + suffix ] = 71674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 7168beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7169beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return expanded; 7171beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7172beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !rmargin.test( prefix ) ) { 71754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 71764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 71774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 71784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar r20 = /%20/g, 71794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rbracket = /\[\]$/, 71804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rCRLF = /\r?\n/g, 71814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, 71824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rselectTextarea = /^(?:select|textarea)/i; 7183beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 71844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fn.extend({ 71854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair serialize: function() { 71864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.param( this.serializeArray() ); 71874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 71884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair serializeArray: function() { 71894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.map(function(){ 71904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.elements ? jQuery.makeArray( this.elements ) : this; 71914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) 71924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .filter(function(){ 71934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.name && !this.disabled && 71944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( this.checked || rselectTextarea.test( this.nodeName ) || 71954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rinput.test( this.type ) ); 71964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) 71974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .map(function( i, elem ){ 71984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var val = jQuery( this ).val(); 7199beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return val == null ? 72014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair null : 72024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.isArray( val ) ? 72034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.map( val, function( val, i ){ 72044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 72054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) : 72064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 72074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }).get(); 72084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 72094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 7210beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair//Serialize an array of form elements or a set of 72124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair//key/values into a query string 72134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.param = function( a, traditional ) { 72144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var prefix, 72154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s = [], 72164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair add = function( key, value ) { 72174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If value is a function, invoke it and return its value 72184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); 72194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); 72204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 7221beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Set traditional to true for jQuery <= 1.3.2 behavior. 72234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( traditional === undefined ) { 72244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; 7225beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7226beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If an array was passed in, assume that it is an array of form elements. 72284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 72294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Serialize the form elements 72304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( a, function() { 72314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair add( this.name, this.value ); 72324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 7233beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 72354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If traditional, encode the "old" way (the way 1.3.2 or older 72364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // did it), otherwise encode params recursively. 72374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( prefix in a ) { 72384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair buildParams( prefix, a[ prefix ], traditional, add ); 7239beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7240beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7241beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Return the resulting serialization 72434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return s.join( "&" ).replace( r20, "+" ); 72444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 7245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction buildParams( prefix, obj, traditional, add ) { 72474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var name; 7248beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isArray( obj ) ) { 72504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Serialize array item. 72514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( obj, function( i, v ) { 72524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( traditional || rbracket.test( prefix ) ) { 72534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Treat each array item as a scalar. 72544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair add( prefix, v ); 7255beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 72574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If array item is non-scalar (array or object), encode its 72584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // numeric index to resolve deserialization ambiguity issues. 72594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Note that rack (as of 1.0.0) can't currently deserialize 72604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // nested arrays properly, and attempting to do so may cause 72614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // a server error. Possible fixes are to modify rack's 72624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // deserialization algorithm or to provide an option or flag 72634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // to force array serialization to be shallow. 72644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); 72654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 72664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 7267beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( !traditional && jQuery.type( obj ) === "object" ) { 72694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Serialize object item. 72704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( name in obj ) { 72714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 72724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 7273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 72744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 72754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Serialize scalar item. 72764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair add( prefix, obj ); 72774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 72784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 72794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar 72804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Document location 72814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ajaxLocParts, 72824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ajaxLocation, 7283beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7284beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rhash = /#.*$/, 7285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL 7286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // #7653, #8125, #8152: local protocol detection 7287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, 7288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rnoContent = /^(?:GET|HEAD)$/, 7289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rprotocol = /^\/\//, 7290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rquery = /\?/, 7291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, 7292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rts = /([?&])_=[^&]*/, 72934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, 7294beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7295beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Keep a copy of the old load method 7296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik _load = jQuery.fn.load, 7297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7298beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik /* Prefilters 7299beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 7300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 2) These are called: 7301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * - BEFORE asking for a transport 7302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * - AFTER param serialization (s.data is a string if s.processData is true) 7303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 3) key is the dataType 7304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 4) the catchall symbol "*" can be used 7305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 5) execution will start with transport dataType and THEN continue down to "*" if needed 7306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 7307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik prefilters = {}, 7308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik /* Transports bindings 7310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 1) key is the dataType 7311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 2) the catchall symbol "*" can be used 7312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * 3) selection will start with transport dataType and THEN go to "*" if needed 7313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 7314beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik transports = {}, 7315beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7316beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 7317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik allTypes = ["*/"] + ["*"]; 7318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// #8138, IE may throw an exception when accessing 7320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// a field from window.location if document.domain has been set 7321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craiktry { 7322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxLocation = location.href; 7323beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} catch( e ) { 7324beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use the href attribute of an A element 7325beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // since IE will modify it given document.location 7326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxLocation = document.createElement( "a" ); 7327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxLocation.href = ""; 7328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxLocation = ajaxLocation.href; 7329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 7330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Segment location into parts 7332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; 7333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7334beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 7335beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction addToPrefiltersOrTransports( structure ) { 7336beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7337beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // dataTypeExpression is optional and defaults to "*" 7338beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return function( dataTypeExpression, func ) { 7339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof dataTypeExpression !== "string" ) { 7341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik func = dataTypeExpression; 7342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataTypeExpression = "*"; 7343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 73454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var dataType, list, placeBefore, 73464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), 73474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0, 73484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = dataTypes.length; 7349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 73504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isFunction( func ) ) { 7351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For each dataType in the dataTypeExpression 7352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < length; i++ ) { 7353beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataType = dataTypes[ i ]; 7354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We control if we're asked to add before 7355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // any existing element 7356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik placeBefore = /^\+/.test( dataType ); 7357beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( placeBefore ) { 7358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataType = dataType.substr( 1 ) || "*"; 7359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik list = structure[ dataType ] = structure[ dataType ] || []; 7361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // then we add to the structure accordingly 7362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik list[ placeBefore ? "unshift" : "push" ]( func ); 7363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 7367beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7368beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Base inspection function for prefilters and transports 7369beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, 7370beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataType /* internal */, inspected /* internal */ ) { 7371beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7372beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataType = dataType || options.dataTypes[ 0 ]; 7373beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik inspected = inspected || {}; 7374beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7375beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik inspected[ dataType ] = true; 7376beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 73774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var selection, 73784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair list = structure[ dataType ], 7379beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik i = 0, 7380beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik length = list ? list.length : 0, 73814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair executeOnly = ( structure === prefilters ); 7382beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7383beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( ; i < length && ( executeOnly || !selection ); i++ ) { 7384beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selection = list[ i ]( options, originalOptions, jqXHR ); 7385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If we got redirected to another dataType 7386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // we try there if executing only and not done already 7387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof selection === "string" ) { 7388beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !executeOnly || inspected[ selection ] ) { 7389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selection = undefined; 7390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik options.dataTypes.unshift( selection ); 7392beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selection = inspectPrefiltersOrTransports( 7393beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik structure, options, originalOptions, jqXHR, selection, inspected ); 7394beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7395beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If we're only executing or nothing was selected 7398beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // we try the catchall dataType if not done already 7399beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { 7400beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik selection = inspectPrefiltersOrTransports( 7401beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik structure, options, originalOptions, jqXHR, "*", inspected ); 7402beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // unnecessary when only executing (prefilters) 7404beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // but it'll be ignored by the caller in that case 7405beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return selection; 7406beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 7407beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7408beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// A special extend for ajax options 7409beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// that takes "flat" options (not to be deep extended) 7410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Fixes #9887 7411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction ajaxExtend( target, src ) { 7412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var key, deep, 7413beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik flatOptions = jQuery.ajaxSettings.flatOptions || {}; 7414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( key in src ) { 7415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( src[ key ] !== undefined ) { 7416beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 7417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( deep ) { 7420beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.extend( true, target, deep ); 7421beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7422beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 7423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fn.load = function( url, params, callback ) { 74254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof url !== "string" && _load ) { 74264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return _load.apply( this, arguments ); 74274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 7428beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Don't do a request if no elements are being requested 74304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !this.length ) { 74314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this; 74324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 7433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var selector, type, response, 74354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self = this, 74364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair off = url.indexOf(" "); 74374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 74384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( off >= 0 ) { 74394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair selector = url.slice( off, url.length ); 74404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair url = url.slice( 0, off ); 74414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 74424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 74434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If it's a function 74444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isFunction( params ) ) { 7445beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // We assume that it's the callback 74474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair callback = params; 74484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair params = undefined; 74494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 74504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Otherwise, build a param string 74514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( params && typeof params === "object" ) { 74524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair type = "POST"; 74534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 7454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Request the remote document 74564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.ajax({ 74574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair url: url, 7458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if "type" variable is undefined, then "GET" method will be used 74604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair type: type, 74614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataType: "html", 74624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data: params, 74634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair complete: function( jqXHR, status ) { 74644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( callback ) { 74654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); 7466beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7467beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 74684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }).done(function( responseText ) { 7469beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Save response for use in complete callback 74714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair response = arguments; 7472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // See if a selector was specified 74744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair self.html( selector ? 7475beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Create a dummy div to hold the results 74774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery("<div>") 7478beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // inject the contents of the document in, removing the scripts 74804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // to avoid any 'Permission Denied' errors in IE 74814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .append( responseText.replace( rscript, "" ) ) 7482beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Locate the specified elements 74844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .find( selector ) : 7485beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If not, just inject the full result 74874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair responseText ); 7488beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 7490beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 74914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this; 74924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 7493beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7494beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Attach a bunch of functions for handling common AJAX events 7495beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ 7496beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.fn[ o ] = function( f ){ 7497beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.on( o, f ); 7498beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7499beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 7500beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7501beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each( [ "get", "post" ], function( i, method ) { 7502beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery[ method ] = function( url, data, callback, type ) { 7503beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // shift arguments if data argument was omitted 7504beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( data ) ) { 7505beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = type || callback; 7506beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callback = data; 7507beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = undefined; 7508beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7509beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7510beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.ajax({ 7511beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type: method, 7512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik url: url, 7513beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data: data, 7514beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik success: callback, 7515beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataType: type 7516beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 7517beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7518beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 7519beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7520beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.extend({ 7521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7522beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik getScript: function( url, callback ) { 7523beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.get( url, undefined, callback, "script" ); 7524beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7525beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7526beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik getJSON: function( url, data, callback ) { 7527beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.get( url, data, callback, "json" ); 7528beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7530beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Creates a full fledged settings object into target 7531beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // with both ajaxSettings and settings fields. 7532beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If target is omitted, writes into ajaxSettings. 7533beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxSetup: function( target, settings ) { 7534beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( settings ) { 7535beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Building a settings object 7536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxExtend( target, jQuery.ajaxSettings ); 7537beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7538beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Extending ajaxSettings 7539beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik settings = target; 7540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik target = jQuery.ajaxSettings; 7541beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7542beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxExtend( target, settings ); 7543beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return target; 7544beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7545beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7546beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxSettings: { 7547beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik url: ajaxLocation, 7548beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), 7549beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik global: true, 7550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type: "GET", 75514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair contentType: "application/x-www-form-urlencoded; charset=UTF-8", 7552beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik processData: true, 7553beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik async: true, 7554beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik /* 7555beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik timeout: 0, 7556beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data: null, 7557beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataType: null, 7558beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik username: null, 7559beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik password: null, 7560beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cache: null, 75614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair throws: false, 7562beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik traditional: false, 7563beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik headers: {}, 7564beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 7565beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7566beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik accepts: { 7567beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml: "application/xml, text/xml", 7568beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik html: "text/html", 7569beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik text: "text/plain", 7570beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik json: "application/json, text/javascript", 7571beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "*": allTypes 7572beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7573beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7574beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik contents: { 7575beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml: /xml/, 7576beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik html: /html/, 7577beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik json: /json/ 7578beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7579beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7580beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responseFields: { 7581beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml: "responseXML", 7582beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik text: "responseText" 7583beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7584beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7585beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // List of data converters 7586beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // 1) key format is "source_type destination_type" (a single space in-between) 7587beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // 2) the catchall symbol "*" can be used for source_type 7588beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik converters: { 7589beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7590beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Convert anything to text 7591beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "* text": window.String, 7592beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7593beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Text to html (true = no transformation) 7594beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "text html": true, 7595beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7596beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Evaluate text as a json expression 7597beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "text json": jQuery.parseJSON, 7598beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7599beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Parse text as xml 7600beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "text xml": jQuery.parseXML 7601beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7603beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For options that shouldn't be deep extended: 7604beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // you can add your own custom options here if 7605beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // and when you create one that shouldn't be 7606beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // deep extended (see ajaxExtend) 7607beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik flatOptions: { 7608beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik context: true, 7609beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik url: true 7610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7611beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7612beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7613beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 7614beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajaxTransport: addToPrefiltersOrTransports( transports ), 7615beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7616beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Main method 7617beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajax: function( url, options ) { 7618beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7619beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If url is an object, simulate pre-1.5 signature 7620beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof url === "object" ) { 7621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik options = url; 7622beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik url = undefined; 7623beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7624beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Force options to be an object 7626beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik options = options || {}; 7627beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 76284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var // ifModified key 76294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ifModifiedKey, 76304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Response headers 76314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair responseHeadersString, 76324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair responseHeaders, 76334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // transport 76344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair transport, 76354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // timeout handle 76364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair timeoutTimer, 76374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Cross-domain detection vars 76384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parts, 76394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // To know if global events are to be dispatched 76404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fireGlobals, 76414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Loop variable 76424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i, 76434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Create the final options object 7644beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s = jQuery.ajaxSetup( {}, options ), 7645beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Callbacks context 7646beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callbackContext = s.context || s, 7647beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Context for global events 7648beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // It's the callbackContext if one was provided in the options 7649beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // and if it's a DOM node or a jQuery collection 7650beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik globalEventContext = callbackContext !== s && 7651beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? 7652beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( callbackContext ) : jQuery.event, 7653beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Deferreds 7654beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deferred = jQuery.Deferred(), 7655beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik completeDeferred = jQuery.Callbacks( "once memory" ), 7656beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Status-dependent callbacks 7657beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusCode = s.statusCode || {}, 7658beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Headers (they are sent all at once) 7659beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik requestHeaders = {}, 7660beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik requestHeadersNames = {}, 7661beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // The jqXHR state 7662beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik state = 0, 76634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Default abort message 76644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair strAbort = "canceled", 7665beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fake xhr 7666beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR = { 7667beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7668beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik readyState: 0, 7669beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7670beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Caches the header 7671beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setRequestHeader: function( name, value ) { 7672beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !state ) { 7673beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var lname = name.toLowerCase(); 7674beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; 7675beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik requestHeaders[ name ] = value; 7676beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7677beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 7678beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7679beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7680beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Raw string 7681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik getAllResponseHeaders: function() { 7682beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return state === 2 ? responseHeadersString : null; 7683beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7684beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7685beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Builds headers hashtable if needed 7686beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik getResponseHeader: function( key ) { 7687beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var match; 7688beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( state === 2 ) { 7689beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !responseHeaders ) { 7690beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responseHeaders = {}; 7691beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while( ( match = rheaders.exec( responseHeadersString ) ) ) { 7692beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; 7693beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7694beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7695beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik match = responseHeaders[ key.toLowerCase() ]; 7696beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7697beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return match === undefined ? null : match; 7698beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7699beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7700beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Overrides response content-type header 7701beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik overrideMimeType: function( type ) { 7702beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !state ) { 7703beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.mimeType = type; 7704beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7705beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 7706beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 7707beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7708beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Cancel the request 7709beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik abort: function( statusText ) { 77104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair statusText = statusText || strAbort; 7711beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( transport ) { 7712beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik transport.abort( statusText ); 7713beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7714beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik done( 0, statusText ); 7715beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 7716beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7717beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7718beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7719beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Callback for when everything is done 7720beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // It is defined here because jslint complains if it is declared 7721beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // at the end of the function (which would be more logical and readable) 7722beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik function done( status, nativeStatusText, responses, headers ) { 77234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var isSuccess, success, error, response, modified, 77244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair statusText = nativeStatusText; 7725beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7726beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Called once 7727beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( state === 2 ) { 7728beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return; 7729beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7730beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7731beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // State is "done" now 7732beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik state = 2; 7733beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7734beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Clear timeout if it exists 7735beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( timeoutTimer ) { 7736beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clearTimeout( timeoutTimer ); 7737beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7738beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7739beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Dereference transport for early garbage collection 7740beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (no matter how long the jqXHR object will be used) 7741beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik transport = undefined; 7742beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7743beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Cache response headers 7744beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responseHeadersString = headers || ""; 7745beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7746beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set readyState 7747beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.readyState = status > 0 ? 4 : 0; 7748beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 77494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Get response data 77504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( responses ) { 77514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair response = ajaxHandleResponses( s, jqXHR, responses ); 77524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 7753beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7754beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If successful, handle type chaining 7755beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( status >= 200 && status < 300 || status === 304 ) { 7756beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7757beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 7758beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.ifModified ) { 7759beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 77604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair modified = jqXHR.getResponseHeader("Last-Modified"); 77614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( modified ) { 77624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.lastModified[ ifModifiedKey ] = modified; 7763beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 77644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair modified = jqXHR.getResponseHeader("Etag"); 77654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( modified ) { 77664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.etag[ ifModifiedKey ] = modified; 7767beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7768beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7769beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7770beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If not modified 7771beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( status === 304 ) { 7772beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7773beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusText = "notmodified"; 7774beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik isSuccess = true; 7775beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7776beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If we have data 7777beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7778beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 77794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair isSuccess = ajaxConvert( s, response ); 77804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair statusText = isSuccess.state; 77814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair success = isSuccess.data; 77824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair error = isSuccess.error; 77834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair isSuccess = !error; 7784beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7785beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7786beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We extract error from statusText 7787beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // then normalize statusText and status for non-aborts 7788beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik error = statusText; 7789beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !statusText || status ) { 7790beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusText = "error"; 7791beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( status < 0 ) { 7792beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik status = 0; 7793beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7794beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7795beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7796beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7797beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set data for the fake xhr object 7798beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.status = status; 77994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 7800beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7801beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Success/Error 7802beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isSuccess ) { 7803beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 7804beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7805beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 7806beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7807beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7808beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Status-dependent callbacks 7809beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.statusCode( statusCode ); 7810beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusCode = undefined; 7811beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7812beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fireGlobals ) { 7813beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), 7814beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik [ jqXHR, s, isSuccess ? success : error ] ); 7815beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7816beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7817beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Complete 7818beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 7819beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7820beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fireGlobals ) { 7821beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 7822beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle the global AJAX counter 7823beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !( --jQuery.active ) ) { 7824beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.trigger( "ajaxStop" ); 7825beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7826beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7827beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7828beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7829beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Attach deferreds 7830beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik deferred.promise( jqXHR ); 7831beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.success = jqXHR.done; 7832beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.error = jqXHR.fail; 7833beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.complete = completeDeferred.add; 7834beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7835beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Status-dependent callbacks 7836beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.statusCode = function( map ) { 7837beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( map ) { 7838beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var tmp; 7839beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( state < 2 ) { 7840beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( tmp in map ) { 7841beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; 7842beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7843beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7844beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik tmp = map[ jqXHR.status ]; 78454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jqXHR.always( tmp ); 7846beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7847beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7848beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this; 7849beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 7850beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7851beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove hash character (#7531: and string promotion) 7852beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) 7853beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We also use the url parameter if available 7854beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); 7855beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7856beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Extract dataTypes list 78574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); 7858beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 78594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // A cross-domain request is in order when we have a protocol:host:port mismatch 7860beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.crossDomain == null ) { 7861beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parts = rurl.exec( s.url.toLowerCase() ); 7862beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.crossDomain = !!( parts && 78634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || 7864beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != 7865beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) 7866beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ); 7867beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7868beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7869beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Convert data if not already a string 7870beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.data && s.processData && typeof s.data !== "string" ) { 7871beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.data = jQuery.param( s.data, s.traditional ); 7872beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7873beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7874beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Apply prefilters 7875beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 7876beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 78774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If request was aborted inside a prefilter, stop there 7878beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( state === 2 ) { 78794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jqXHR; 7880beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7881beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7882beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We can fire global events as of now if asked to 7883beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fireGlobals = s.global; 7884beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7885beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Uppercase the type 7886beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.type = s.type.toUpperCase(); 7887beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7888beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Determine if request has content 7889beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.hasContent = !rnoContent.test( s.type ); 7890beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7891beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Watch for a new set of requests 7892beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fireGlobals && jQuery.active++ === 0 ) { 7893beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.event.trigger( "ajaxStart" ); 7894beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7895beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7896beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // More options handling for requests with no content 7897beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !s.hasContent ) { 7898beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7899beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If data is available, append data to url 7900beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.data ) { 7901beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; 7902beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // #9682: remove data so that it's not used in an eventual retry 7903beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete s.data; 7904beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7905beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7906beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get ifModifiedKey before adding the anti-cache parameter 7907beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ifModifiedKey = s.url; 7908beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7909beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add anti-cache in url if needed 7910beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.cache === false ) { 7911beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7912beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var ts = jQuery.now(), 7913beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // try replacing _= if it is there 7914beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ret = s.url.replace( rts, "$1_=" + ts ); 7915beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7916beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // if nothing was replaced, add timestamp to the end 7917beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); 7918beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7919beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7920beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7921beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set the correct header, if data is being sent 7922beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 7923beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.setRequestHeader( "Content-Type", s.contentType ); 7924beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7925beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7926beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 7927beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.ifModified ) { 7928beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ifModifiedKey = ifModifiedKey || s.url; 7929beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.lastModified[ ifModifiedKey ] ) { 7930beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); 7931beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7932beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.etag[ ifModifiedKey ] ) { 7933beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); 7934beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7935beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7936beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7937beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Set the Accepts header for the server, depending on the dataType 7938beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.setRequestHeader( 7939beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "Accept", 7940beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? 7941beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 7942beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.accepts[ "*" ] 7943beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ); 7944beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7945beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check for headers option 7946beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i in s.headers ) { 7947beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.setRequestHeader( i, s.headers[ i ] ); 7948beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7949beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7950beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Allow custom headers/mimetypes and early abort 7951beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { 79524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Abort if not done already and return 79534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jqXHR.abort(); 7954beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7955beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7956beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 79574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // aborting is no longer a cancellation 79584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair strAbort = "abort"; 79594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 7960beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Install callbacks on deferreds 7961beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i in { success: 1, error: 1, complete: 1 } ) { 7962beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR[ i ]( s[ i ] ); 7963beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7964beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7965beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get transport 7966beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 7967beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7968beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If no transport, we auto-abort 7969beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !transport ) { 7970beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik done( -1, "No Transport" ); 7971beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7972beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.readyState = 1; 7973beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Send global event 7974beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( fireGlobals ) { 7975beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 7976beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7977beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Timeout 7978beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.async && s.timeout > 0 ) { 7979beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik timeoutTimer = setTimeout( function(){ 7980beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.abort( "timeout" ); 7981beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, s.timeout ); 7982beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7983beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7984beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 7985beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik state = 1; 7986beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik transport.send( requestHeaders, done ); 7987beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch (e) { 7988beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Propagate exception as error if not done 7989beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( state < 2 ) { 7990beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik done( -1, e ); 7991beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Simply rethrow otherwise 7992beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 7993beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik throw e; 7994beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7995beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7996beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 7997beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 7998beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jqXHR; 7999beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 8000beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8001beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Counter for holding the number of active queries 8002beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik active: 0, 8003beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8004beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Last-Modified header cache for next request 8005beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik lastModified: {}, 8006beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik etag: {} 8007beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8008beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 8009beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8010beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik/* Handles responses to an ajax request: 8011beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * - sets all responseXXX fields accordingly 8012beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * - finds the right dataType (mediates between content-type and expected dataType) 8013beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * - returns the corresponding response 8014beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 8015beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction ajaxHandleResponses( s, jqXHR, responses ) { 8016beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 80174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var ct, type, finalDataType, firstDataType, 80184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair contents = s.contents, 8019beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataTypes = s.dataTypes, 80204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair responseFields = s.responseFields; 8021beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8022beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Fill responseXXX fields 8023beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( type in responseFields ) { 8024beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( type in responses ) { 8025beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR[ responseFields[type] ] = responses[ type ]; 8026beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8027beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8028beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8029beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove auto dataType and get content-type in the process 8030beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while( dataTypes[ 0 ] === "*" ) { 8031beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataTypes.shift(); 8032beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ct === undefined ) { 8033beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); 8034beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8035beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8036beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8037beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check if we're dealing with a known content-type 8038beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( ct ) { 8039beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( type in contents ) { 8040beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( contents[ type ] && contents[ type ].test( ct ) ) { 8041beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataTypes.unshift( type ); 8042beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 8043beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8044beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8045beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8047beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Check to see if we have a response for the expected dataType 8048beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( dataTypes[ 0 ] in responses ) { 8049beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik finalDataType = dataTypes[ 0 ]; 8050beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 8051beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Try convertible dataTypes 8052beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( type in responses ) { 8053beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { 8054beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik finalDataType = type; 8055beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik break; 8056beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8057beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !firstDataType ) { 8058beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik firstDataType = type; 8059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8060beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8061beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Or just use first one 8062beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik finalDataType = finalDataType || firstDataType; 8063beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8064beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If we found a dataType 8066beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We add the dataType to the list if needed 8067beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // and return the corresponding response 8068beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( finalDataType ) { 8069beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( finalDataType !== dataTypes[ 0 ] ) { 8070beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik dataTypes.unshift( finalDataType ); 8071beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8072beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return responses[ finalDataType ]; 8073beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8074beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 8075beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Chain conversions given the request and the original response 8077beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction ajaxConvert( s, response ) { 8078beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 80794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var conv, conv2, current, tmp, 80804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Work with a copy of dataTypes in case we need to modify it for conversion 80814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataTypes = s.dataTypes.slice(), 80824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair prev = dataTypes[ 0 ], 80834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair converters = {}, 80844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0; 80854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 8086beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Apply the dataFilter if provided 8087beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.dataFilter ) { 8088beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik response = s.dataFilter( response, s.dataType ); 8089beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8090beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 80914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Create converters map with lowercased keys 80924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( dataTypes[ 1 ] ) { 80934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( conv in s.converters ) { 80944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair converters[ conv.toLowerCase() ] = s.converters[ conv ]; 80954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 80964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 80974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 80984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Convert to each sequential dataType, tolerating list modification 80994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; (current = dataTypes[++i]); ) { 81004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // There's only work to do if current dataType is non-auto 81024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( current !== "*" ) { 81034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Convert response if prev dataType is non-auto and differs from current 81054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( prev !== "*" && prev !== current ) { 81064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Seek a direct converter 81084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 81094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If none found, seek a pair 81114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !conv ) { 81124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( conv2 in converters ) { 81134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If conv2 outputs current 81154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tmp = conv2.split(" "); 81164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( tmp[ 1 ] === current ) { 81174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If prev can be converted to accepted input 81194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair conv = converters[ prev + " " + tmp[ 0 ] ] || 81204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair converters[ "* " + tmp[ 0 ] ]; 81214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( conv ) { 81224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Condense equivalence converters 81234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( conv === true ) { 81244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair conv = converters[ conv2 ]; 81254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Otherwise, insert the intermediate dataType 81274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( converters[ conv2 ] !== true ) { 81284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair current = tmp[ 0 ]; 81294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataTypes.splice( i--, 0, current ); 81304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 81314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair break; 8133beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8134beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8135beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8136beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8137beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 81384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Apply converter (if not an equivalence) 81394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( conv !== true ) { 8140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 81414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Unless errors are allowed to bubble, catch and return them 81424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( conv && s["throws"] ) { 81434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair response = conv( response ); 81444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 81454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 81464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair response = conv( response ); 81474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch ( e ) { 81484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; 81494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 81504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 81514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 81524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8153beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 81544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Update prev for next iteration 81554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair prev = current; 81564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 81574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8158beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 81594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return { state: "success", data: response }; 81604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 81614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar oldCallbacks = [], 81624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rquestion = /\?/, 81634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rjsonp = /(=)\?(?=&|$)|\?\?/, 81644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair nonce = jQuery.now(); 8165beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8166beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Default jsonp settings 8167beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.ajaxSetup({ 8168beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jsonp: "callback", 8169beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jsonpCallback: function() { 81704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); 81714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this[ callback ] = true; 81724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return callback; 8173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8174beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 8175beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8176beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Detect, normalize options and install callbacks for jsonp requests 8177beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 8178beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 81794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var callbackName, overwritten, responseContainer, 81804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair data = s.data, 81814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair url = s.url, 81824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hasCallback = s.jsonp !== false, 81834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair replaceInUrl = hasCallback && rjsonp.test( url ), 81844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && 81854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && 81864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rjsonp.test( data ); 81874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Handle iff the expected data type is "jsonp" or we have a parameter to set 81894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { 81904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Get callback name, remembering preexisting value associated with it 81924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? 81934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.jsonpCallback() : 81944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.jsonpCallback; 81954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair overwritten = window[ callbackName ]; 81964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 81974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Insert callback into url or form data 81984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( replaceInUrl ) { 81994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.url = url.replace( rjsonp, "$1" + callbackName ); 82004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( replaceInData ) { 82014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.data = data.replace( rjsonp, "$1" + callbackName ); 82024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( hasCallback ) { 82034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 82044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8205beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 82064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use data converter to retrieve json after script execution 82074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.converters["script json"] = function() { 82084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !responseContainer ) { 82094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.error( callbackName + " was not called" ); 8210beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 82114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return responseContainer[ 0 ]; 82124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 8213beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 82144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // force json dataType 82154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.dataTypes[ 0 ] = "json"; 8216beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8217beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Install callback 82184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair window[ callbackName ] = function() { 82194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair responseContainer = arguments; 8220beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 8221beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 82224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Clean-up function (fires after converters) 8223beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jqXHR.always(function() { 82244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Restore preexisting value 82254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair window[ callbackName ] = overwritten; 82264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 82274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Save back as free 82284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( s[ callbackName ] ) { 82294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // make sure that re-using the options doesn't screw things around 82304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair s.jsonpCallback = originalSettings.jsonpCallback; 82314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 82324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // save the callback name for future use 82334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair oldCallbacks.push( callbackName ); 8234beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8235beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 82364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Call if it was a function and we have a response 82374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( responseContainer && jQuery.isFunction( overwritten ) ) { 82384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair overwritten( responseContainer[ 0 ] ); 8239beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8240beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 82414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair responseContainer = overwritten = undefined; 82424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 8243beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8244beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Delegate to script 8245beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return "script"; 8246beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8247beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 8248beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Install script dataType 8249beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.ajaxSetup({ 8250beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik accepts: { 8251beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" 8252beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 8253beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik contents: { 8254beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script: /javascript|ecmascript/ 8255beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 8256beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik converters: { 8257beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik "text script": function( text ) { 8258beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.globalEval( text ); 8259beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return text; 8260beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8261beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8262beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 8263beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8264beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Handle cache's special case and global 8265beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.ajaxPrefilter( "script", function( s ) { 8266beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.cache === undefined ) { 8267beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.cache = false; 8268beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8269beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.crossDomain ) { 8270beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.type = "GET"; 8271beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik s.global = false; 8272beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 8274beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8275beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Bind script tag hack transport 8276beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.ajaxTransport( "script", function(s) { 8277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8278beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This transport only deals with cross domain requests 8279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.crossDomain ) { 8280beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8281beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var script, 8282beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; 8283beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8284beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return { 8285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik send: function( _, callback ) { 8287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script = document.createElement( "script" ); 8289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script.async = "async"; 8291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.scriptCharset ) { 8293beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script.charset = s.scriptCharset; 8294beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8295beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script.src = s.url; 8297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8298beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Attach handlers for all browsers 8299beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script.onload = script.onreadystatechange = function( _, isAbort ) { 8300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { 8302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Handle memory leak in IE 8304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script.onload = script.onreadystatechange = null; 8305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Remove the script 8307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( head && script.parentNode ) { 8308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik head.removeChild( script ); 8309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Dereference the script 8312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script = undefined; 8313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8314beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Callback if not abort 8315beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !isAbort ) { 8316beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callback( 200, "success" ); 8317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 8320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Use insertBefore instead of appendChild to circumvent an IE6 bug. 8321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This arises when a base node is used (#2709 and #4378). 8322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik head.insertBefore( script, head.firstChild ); 8323beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 8324beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8325beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik abort: function() { 8326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( script ) { 8327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik script.onload( 0, 1 ); 8328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 8331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 83334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar xhrCallbacks, 83344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // #5280: Internet Explorer will keep connections alive if we don't abort on unload 8335beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhrOnUnloadAbort = window.ActiveXObject ? function() { 8336beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Abort all pending requests 8337beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( var key in xhrCallbacks ) { 8338beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhrCallbacks[ key ]( 0, 1 ); 8339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } : false, 83414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair xhrId = 0; 8342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Functions to create xhrs 8344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction createStandardXHR() { 8345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 8346beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return new window.XMLHttpRequest(); 8347beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( e ) {} 8348beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 8349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction createActiveXHR() { 8351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 8352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return new window.ActiveXObject( "Microsoft.XMLHTTP" ); 8353beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( e ) {} 8354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 8355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Create the request object 8357beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// (This is still attached to ajaxSettings for backward compatibility) 8358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.ajaxSettings.xhr = window.ActiveXObject ? 8359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik /* Microsoft failed to properly 8360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * implement the XMLHttpRequest in IE7 (can't request local files), 8361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * so we use the ActiveXObject when it is available 8362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * Additionally XMLHttpRequest can be disabled in IE7/IE8 so 8363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik * we need a fallback. 8364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik */ 8365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik function() { 8366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return !this.isLocal && createStandardXHR() || createActiveXHR(); 8367beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } : 8368beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For all other browsers, use the standard XMLHttpRequest object 8369beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik createStandardXHR; 8370beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8371beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Determine support properties 8372beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik(function( xhr ) { 8373beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.extend( jQuery.support, { 8374beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ajax: !!xhr, 8375beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik cors: !!xhr && ( "withCredentials" in xhr ) 8376beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 8377beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik})( jQuery.ajaxSettings.xhr() ); 8378beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8379beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Create transport if the browser can provide an xhr 8380beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( jQuery.support.ajax ) { 8381beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8382beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.ajaxTransport(function( s ) { 8383beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Cross domain only allowed if supported through XMLHttpRequest 8384beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !s.crossDomain || jQuery.support.cors ) { 8385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8386beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var callback; 8387beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8388beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return { 8389beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik send: function( headers, complete ) { 8390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get a new xhr 83924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var handle, i, 83934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair xhr = s.xhr(); 8394beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8395beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Open the socket 8396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Passing null username, generates a login popup on Opera (#2865) 8397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.username ) { 8398beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.open( s.type, s.url, s.async, s.username, s.password ); 8399beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 8400beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.open( s.type, s.url, s.async ); 8401beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8402beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Apply custom fields if provided 8404beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.xhrFields ) { 8405beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i in s.xhrFields ) { 8406beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr[ i ] = s.xhrFields[ i ]; 8407beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8408beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8409beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Override mime type if needed 8411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( s.mimeType && xhr.overrideMimeType ) { 8412beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.overrideMimeType( s.mimeType ); 8413beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8414beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8415beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // X-Requested-With header 8416beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For cross-domain requests, seeing as conditions for a preflight are 8417beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // akin to a jigsaw puzzle, we simply never set it to be sure. 8418beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (it can always be set on a per-request basis or even using ajaxSetup) 8419beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // For same-domain requests, won't change header if already provided. 8420beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !s.crossDomain && !headers["X-Requested-With"] ) { 8421beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik headers[ "X-Requested-With" ] = "XMLHttpRequest"; 8422beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8423beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8424beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Need an extra try/catch for cross domain requests in Firefox 3 8425beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 8426beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( i in headers ) { 8427beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.setRequestHeader( i, headers[ i ] ); 8428beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8429beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( _ ) {} 8430beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8431beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Do send the request 8432beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // This may raise an exception which is actually 8433beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // handled in jQuery.ajax (so no try/catch here) 8434beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.send( ( s.hasContent && s.data ) || null ); 8435beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8436beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Listener 8437beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callback = function( _, isAbort ) { 8438beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8439beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var status, 8440beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusText, 8441beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responseHeaders, 8442beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responses, 8443beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml; 8444beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8445beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Firefox throws exceptions when accessing properties 84464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // of an xhr when a network error occurred 8447beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) 8448beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 8449beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8450beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Was never called and is aborted or complete 8451beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( callback && ( isAbort || xhr.readyState === 4 ) ) { 8452beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8453beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Only called once 8454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callback = undefined; 8455beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8456beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Do not keep as active anymore 8457beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( handle ) { 8458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.onreadystatechange = jQuery.noop; 8459beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( xhrOnUnloadAbort ) { 8460beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik delete xhrCallbacks[ handle ]; 8461beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8462beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8463beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8464beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If it's an abort 8465beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( isAbort ) { 8466beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Abort it manually if needed 8467beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( xhr.readyState !== 4 ) { 8468beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.abort(); 8469beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8470beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 8471beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik status = xhr.status; 8472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responseHeaders = xhr.getAllResponseHeaders(); 8473beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responses = {}; 8474beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xml = xhr.responseXML; 8475beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8476beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Construct response list 8477beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( xml && xml.documentElement /* #4958 */ ) { 8478beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik responses.xml = xml; 8479beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 84804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 84814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // When requesting binary data, IE6-9 will throw an exception 84824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // on any attempt to access responseText (#11426) 84834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair try { 84844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair responses.text = xhr.responseText; 84854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } catch( e ) { 84864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8487beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8488beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Firefox throws an exception when accessing 8489beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // statusText for faulty cross-domain requests 8490beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik try { 8491beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusText = xhr.statusText; 8492beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( e ) { 8493beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // We normalize with Webkit giving an empty statusText 8494beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik statusText = ""; 8495beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8496beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8497beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Filter status for non standard behaviors 8498beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8499beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // If the request is local and we have data: assume a success 8500beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // (success with no data won't get notified, that's the best we 8501beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // can do given current implementations) 8502beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !status && s.isLocal && !s.crossDomain ) { 8503beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik status = responses.text ? 200 : 404; 8504beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // IE - #1450: sometimes returns 1223 when it should be 204 8505beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else if ( status === 1223 ) { 8506beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik status = 204; 8507beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8508beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8509beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8510beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } catch( firefoxAccessException ) { 8511beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !isAbort ) { 8512beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik complete( -1, firefoxAccessException ); 8513beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8514beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8515beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8516beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Call complete if needed 8517beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( responses ) { 8518beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik complete( status, statusText, responses, responseHeaders ); 8519beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8520beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 8521beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 85224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !s.async ) { 85234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if we're in sync mode we fire the callback 8524beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callback(); 85254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( xhr.readyState === 4 ) { 85264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // (IE6 & IE7) if it's in cache and has been 85274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // retrieved directly we need to fire the callback 85284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setTimeout( callback, 0 ); 8529beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 8530beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik handle = ++xhrId; 8531beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( xhrOnUnloadAbort ) { 8532beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Create the active xhrs callbacks list if needed 8533beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // and attach the unload handler 8534beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !xhrCallbacks ) { 8535beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhrCallbacks = {}; 8536beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery( window ).unload( xhrOnUnloadAbort ); 8537beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8538beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add to list of active xhrs callbacks 8539beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhrCallbacks[ handle ] = callback; 8540beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8541beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik xhr.onreadystatechange = callback; 8542beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8543beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 8544beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8545beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik abort: function() { 8546beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( callback ) { 8547beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik callback(0,1); 8548beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8549beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8550beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 8551beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8552beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 8553beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 85544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar fxNow, timerId, 8555beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik rfxtypes = /^(?:toggle|show|hide)$/, 85564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), 85574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair rrun = /queueHooks$/, 85584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animationPrefilters = [ defaultPrefilter ], 85594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tweeners = { 85604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair "*": [function( prop, value ) { 85614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var end, unit, 85624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween = this.createTween( prop, value ), 85634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair parts = rfxnum.exec( value ), 85644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair target = tween.cur(), 85654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair start = +target || 0, 85664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair scale = 1, 85674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair maxIterations = 20; 85684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 85694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( parts ) { 85704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair end = +parts[2]; 85714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 85724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 85734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // We need to compute starting value 85744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( unit !== "px" && start ) { 85754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Iteratively approximate from a nonzero starting point 85764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Prefer the current property, because this process will be trivial if it uses the same units 85774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Fallback to end or a simple constant 85784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair start = jQuery.css( tween.elem, prop, true ) || end || 1; 85794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 85804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair do { 85814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If previous iteration zeroed out, double until we get *something* 85824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Use a string for doubling factor so we don't accidentally see scale as unchanged below 85834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair scale = scale || ".5"; 85844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 85854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Adjust and apply 85864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair start = start / scale; 85874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.style( tween.elem, prop, start + unit ); 85884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 85894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Update scale, tolerating zero or NaN from tween.cur() 85904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // And breaking the loop if scale is unchanged or perfect, or if we've just had enough 85914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); 85924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 85934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 85944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween.unit = unit; 85954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween.start = start; 85964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If a +=/-= token was provided, we're doing a relative animation 85974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; 85984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 85994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return tween; 86004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }] 86014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 8602beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 86034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Animations created synchronously will run synchronously 86044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction createFxNow() { 86054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair setTimeout(function() { 86064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fxNow = undefined; 86074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 0 ); 86084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return ( fxNow = jQuery.now() ); 86094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 8610beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 86114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction createTweens( animation, props ) { 86124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( props, function( prop, value ) { 86134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), 86144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair index = 0, 86154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = collection.length; 86164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; index < length; index++ ) { 86174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( collection[ index ].call( animation, prop, value ) ) { 8618beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 86194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // we're done with this property 86204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return; 8621beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 86224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 86234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 86244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 8625beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 86264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction Animation( elem, properties, options ) { 86274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var result, 86284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair index = 0, 86294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tweenerIndex = 0, 86304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = animationPrefilters.length, 86314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred = jQuery.Deferred().always( function() { 86324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // don't match elem in the :animated selector 86334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete tick.elem; 86344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 86354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tick = function() { 86364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var currentTime = fxNow || createFxNow(), 86374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 86384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) 86394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair temp = remaining / animation.duration || 0, 86404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair percent = 1 - temp, 86414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair index = 0, 86424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = animation.tweens.length; 86434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 86444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; index < length ; index++ ) { 86454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animation.tweens[ index ].run( percent ); 86464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 86474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 86484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.notifyWith( elem, [ animation, percent, remaining ]); 86494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 86504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( percent < 1 && length ) { 86514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return remaining; 86524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 86534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.resolveWith( elem, [ animation ] ); 86544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return false; 86554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 86564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 86574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animation = deferred.promise({ 86584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem: elem, 86594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair props: jQuery.extend( {}, properties ), 86604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opts: jQuery.extend( true, { specialEasing: {} }, options ), 86614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair originalProperties: properties, 86624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair originalOptions: options, 86634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair startTime: fxNow || createFxNow(), 86644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair duration: options.duration, 86654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tweens: [], 86664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair createTween: function( prop, end, easing ) { 86674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var tween = jQuery.Tween( elem, animation.opts, prop, end, 86684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animation.opts.specialEasing[ prop ] || animation.opts.easing ); 86694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animation.tweens.push( tween ); 86704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return tween; 86714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 86724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair stop: function( gotoEnd ) { 86734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var index = 0, 86744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if we are going to the end, we want to run all the tweens 86754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // otherwise we skip this part 86764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = gotoEnd ? animation.tweens.length : 0; 8677beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 86784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; index < length ; index++ ) { 86794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animation.tweens[ index ].run( 1 ); 86804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8681beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 86824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // resolve when we played the last frame 86834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // otherwise, reject 86844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( gotoEnd ) { 86854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.resolveWith( elem, [ animation, gotoEnd ] ); 86864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 86874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair deferred.rejectWith( elem, [ animation, gotoEnd ] ); 8688beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 86894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this; 8690beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 86914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }), 86924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair props = animation.props; 8693beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 86944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair propFilter( props, animation.opts.specialEasing ); 86954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 86964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; index < length ; index++ ) { 86974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); 86984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( result ) { 86994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return result; 8700beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 87014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8702beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair createTweens( animation, props ); 8704beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isFunction( animation.opts.start ) ) { 87064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animation.opts.start.call( elem, animation ); 87074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8708beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.fx.timer( 87104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.extend( tick, { 87114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim: animation, 87124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair queue: animation.opts.queue, 87134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem: elem 87144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }) 87154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 8716beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // attach callbacks from options 87184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return animation.progress( animation.opts.progress ) 87194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .done( animation.opts.done, animation.opts.complete ) 87204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .fail( animation.opts.fail ) 87214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .always( animation.opts.always ); 87224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 8723beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction propFilter( props, specialEasing ) { 87254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var index, name, easing, value, hooks; 8726beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // camelCase, specialEasing and expand cssHook pass 87284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( index in props ) { 87294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair name = jQuery.camelCase( index ); 87304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair easing = specialEasing[ name ]; 87314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value = props[ index ]; 87324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isArray( value ) ) { 87334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair easing = value[ 1 ]; 87344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value = props[ index ] = value[ 0 ]; 8735beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8736beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( index !== name ) { 87384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair props[ name ] = value; 87394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete props[ index ]; 87404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8741beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = jQuery.cssHooks[ name ]; 87434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( hooks && "expand" in hooks ) { 87444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value = hooks.expand( value ); 87454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete props[ name ]; 8746beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // not quite $.extend, this wont overwrite keys already present. 87484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // also - reusing 'index' from above because we have the correct "name" 87494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( index in value ) { 87504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !( index in props ) ) { 87514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair props[ index ] = value[ index ]; 87524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair specialEasing[ index ] = easing; 87534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 87544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 87554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 87564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair specialEasing[ name ] = easing; 87574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 87584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 87594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 8760beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.Animation = jQuery.extend( Animation, { 8762beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tweener: function( props, callback ) { 87644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isFunction( props ) ) { 87654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair callback = props; 87664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair props = [ "*" ]; 8767beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 87684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair props = props.split(" "); 8769beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8770beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var prop, 87724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair index = 0, 87734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = props.length; 8774beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; index < length ; index++ ) { 87764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair prop = props[ index ]; 87774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tweeners[ prop ] = tweeners[ prop ] || []; 87784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tweeners[ prop ].unshift( callback ); 87794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8780beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 8781beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair prefilter: function( callback, prepend ) { 87834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( prepend ) { 87844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animationPrefilters.unshift( callback ); 87854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 87864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animationPrefilters.push( callback ); 87874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 87884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 87894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 8790beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 87914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction defaultPrefilter( elem, props, opts ) { 87924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire, 87934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim = this, 87944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style = elem.style, 87954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair orig = {}, 87964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handled = [], 87974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hidden = elem.nodeType && isHidden( elem ); 87984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 87994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // handle queue: false promises 88004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !opts.queue ) { 88014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = jQuery._queueHooks( elem, "fx" ); 88024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( hooks.unqueued == null ) { 88034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.unqueued = 0; 88044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair oldfire = hooks.empty.fire; 88054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.empty.fire = function() { 88064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !hooks.unqueued ) { 88074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair oldfire(); 88084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 8810beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 88114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.unqueued++; 8812beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 88134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim.always(function() { 88144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // doing this makes sure that the complete handler will be called 88154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // before this completes 88164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim.always(function() { 88174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.unqueued--; 88184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.queue( elem, "fx" ).length ) { 88194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.empty.fire(); 88204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 88224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 88234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8824beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 88254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // height/width overflow pass 88264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { 88274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Make sure that nothing sneaks out 88284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Record all 3 overflow attributes because IE does not 88294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // change the overflow attribute when overflowX and 88304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // overflowY are set to the same value 88314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 8832beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 88334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Set display property to inline-block for height/width 88344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // animations on inline elements that are having width/height animated 88354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.css( elem, "display" ) === "inline" && 88364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.css( elem, "float" ) === "none" ) { 88374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 88384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // inline-level elements accept inline-block; 88394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // block-level elements need to be inline with layout 88404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { 88414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.display = "inline-block"; 88424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 88434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 88444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.zoom = 1; 8845beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 88464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8848beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 88494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( opts.overflow ) { 88504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.overflow = "hidden"; 88514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.support.shrinkWrapBlocks ) { 88524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim.done(function() { 88534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.overflow = opts.overflow[ 0 ]; 88544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.overflowX = opts.overflow[ 1 ]; 88554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair style.overflowY = opts.overflow[ 2 ]; 88564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 88574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8859beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 8860beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 88614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // show/hide pass 88624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( index in props ) { 88634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair value = props[ index ]; 88644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( rfxtypes.exec( value ) ) { 88654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete props[ index ]; 88664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair toggle = toggle || value === "toggle"; 88674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( value === ( hidden ? "hide" : "show" ) ) { 88684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair continue; 88694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair handled.push( index ); 88714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8873beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 88744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair length = handled.length; 88754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( length ) { 88764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); 88774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( "hidden" in dataShow ) { 88784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hidden = dataShow.hidden; 88794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8880beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 88814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // store state if its toggle - enables .stop().toggle() to "reverse" 88824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( toggle ) { 88834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataShow.hidden = !hidden; 88844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( hidden ) { 88864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery( elem ).show(); 88874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 88884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim.done(function() { 88894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery( elem ).hide(); 88904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 88914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim.done(function() { 88934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var prop; 88944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.removeData( elem, "fxshow", true ); 88954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( prop in orig ) { 88964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.style( elem, prop, orig[ prop ] ); 88974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 88984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 88994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( index = 0 ; index < length ; index++ ) { 89004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair prop = handled[ index ]; 89014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); 89024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); 8903beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !( prop in dataShow ) ) { 89054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dataShow[ prop ] = tween.start; 89064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( hidden ) { 89074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween.end = tween.start; 89084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween.start = prop === "width" || prop === "height" ? 1 : 0; 8909beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 89104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 8914beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction Tween( elem, options, prop, end, easing ) { 89164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return new Tween.prototype.init( elem, options, prop, end, easing ); 89174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair} 89184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.Tween = Tween; 89194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 89204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairTween.prototype = { 89214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair constructor: Tween, 89224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair init: function( elem, options, prop, end, easing, unit ) { 89234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.elem = elem; 89244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.prop = prop; 89254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.easing = easing || "swing"; 89264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.options = options; 89274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.start = this.now = this.cur(); 89284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.end = end; 89294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 89304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 89314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cur: function() { 89324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var hooks = Tween.propHooks[ this.prop ]; 89334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 89344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return hooks && hooks.get ? 89354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.get( this ) : 89364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Tween.propHooks._default.get( this ); 89374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 89384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair run: function( percent ) { 89394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var eased, 89404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks = Tween.propHooks[ this.prop ]; 89414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 89424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this.options.duration ) { 89434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.pos = eased = jQuery.easing[ this.easing ]( 89444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair percent, this.options.duration * percent, 0, 1, this.options.duration 89454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 89464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 89474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.pos = eased = percent; 89484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.now = ( this.end - this.start ) * eased + this.start; 8950beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( this.options.step ) { 89524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.options.step.call( this.elem, this.now, this ); 89534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 8954beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( hooks && hooks.set ) { 89564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair hooks.set( this ); 89574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 89584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair Tween.propHooks._default.set( this ); 89594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this; 89614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 8963beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairTween.prototype.init.prototype = Tween.prototype; 8965beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairTween.propHooks = { 89674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair _default: { 89684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair get: function( tween ) { 89694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var result; 8970beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( tween.elem[ tween.prop ] != null && 89724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { 89734a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return tween.elem[ tween.prop ]; 8974beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 8975beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // passing any value as a 4th parameter to .css will automatically 89774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // attempt a parseFloat and fallback to a string if the parse fails 89784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // so, simple values such as "10px" are parsed to Float. 89794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // complex values such as "rotate(1rad)" are returned as is. 89804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair result = jQuery.css( tween.elem, tween.prop, false, "" ); 89814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Empty strings, null, undefined and "auto" are converted to 0. 89824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return !result || result === "auto" ? 0 : result; 89834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 89844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair set: function( tween ) { 89854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // use step hook for back compat - use cssHook if its there - use .style if its 89864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // available and use plain properties where available 89874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.fx.step[ tween.prop ] ) { 89884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.fx.step[ tween.prop ]( tween ); 89894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { 89904a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 89914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 89924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween.elem[ tween.prop ] = tween.now; 89934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 89964a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 8997beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 89984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Remove in 2.0 - this supports IE8's panic based approach 89994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// to setting things on disconnected nodes 9000beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 90024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair set: function( tween ) { 90034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( tween.elem.nodeType && tween.elem.parentNode ) { 90044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair tween.elem[ tween.prop ] = tween.now; 90054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 90064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 90074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 9008beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.each([ "toggle", "show", "hide" ], function( i, name ) { 90104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var cssFn = jQuery.fn[ name ]; 90114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.fn[ name ] = function( speed, easing, callback ) { 90124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return speed == null || typeof speed === "boolean" || 90134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // special check for .toggle( handler, handler, ... ) 90144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? 90154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair cssFn.apply( this, arguments ) : 90164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.animate( genFx( name, true ), speed, easing, callback ); 90174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 90184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}); 9019beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fn.extend({ 90214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fadeTo: function( speed, to, easing, callback ) { 9022beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // show any hidden elements after setting opacity to 0 90244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return this.filter( isHidden ).css( "opacity", 0 ).show() 9025beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // animate to the value specified 90274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair .end().animate({ opacity: to }, speed, easing, callback ); 90284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, 90294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair animate: function( prop, speed, easing, callback ) { 90304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var empty = jQuery.isEmptyObject( prop ), 90314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair optall = jQuery.speed( speed, easing, callback ), 90324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair doAnimation = function() { 90334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Operate on a copy of prop so per-property easing won't be lost 90344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 9035beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Empty animations resolve immediately 90374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( empty ) { 90384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair anim.stop( true ); 90394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 90404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 9041beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return empty || optall.queue === false ? 9043beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.each( doAnimation ) : 9044beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.queue( optall.queue, doAnimation ); 9045beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 9046beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik stop: function( type, clearQueue, gotoEnd ) { 90474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var stopQueue = function( hooks ) { 90484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var stop = hooks.stop; 90494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair delete hooks.stop; 90504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair stop( gotoEnd ); 90514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 90524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 9053beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( typeof type !== "string" ) { 9054beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik gotoEnd = clearQueue; 9055beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik clearQueue = type; 9056beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik type = undefined; 9057beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9058beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( clearQueue && type !== false ) { 9059beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik this.queue( type || "fx", [] ); 9060beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9061beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9062beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.each(function() { 90634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var dequeue = true, 90644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair index = type != null && type + "queueHooks", 9065beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik timers = jQuery.timers, 9066beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik data = jQuery._data( this ); 9067beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 90684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( index ) { 90694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( data[ index ] && data[ index ].stop ) { 90704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair stopQueue( data[ index ] ); 90714a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 90724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } else { 9073beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( index in data ) { 90744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 90754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair stopQueue( data[ index ] ); 9076beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9077beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9078beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9079beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9080beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik for ( index = timers.length; index--; ) { 9081beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { 90824a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair timers[ index ].anim.stop( gotoEnd ); 90834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair dequeue = false; 9084beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik timers.splice( index, 1 ); 9085beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9086beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9087beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9088beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // start the next in the queue if the last step wasn't forced 9089beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // timers currently will call their complete callbacks, which will dequeue 9090beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // but only if they were gotoEnd 90914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( dequeue || !gotoEnd ) { 9092beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.dequeue( this, type ); 9093beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9094beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 9095beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9096beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 9097beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9098beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Generate parameters to create a standard animation 90994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfunction genFx( type, includeWidth ) { 91004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var which, 91014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attrs = { height: type }, 91024a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0; 91034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 91044a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if we include width, step value is 1 to do all cssExpand values, 91054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // if we don't include width, step value is 2 to skip over Left and Right 91064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair includeWidth = includeWidth? 1 : 0; 91074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for( ; i < 4 ; i += 2 - includeWidth ) { 91084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair which = cssExpand[ i ]; 91094a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 91104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9111beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( includeWidth ) { 91134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair attrs.opacity = attrs.width = type; 91144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9115beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return attrs; 9117beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 9118beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9119beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Generate shortcuts for custom animations 9120beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.each({ 91214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair slideDown: genFx("show"), 91224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair slideUp: genFx("hide"), 91234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair slideToggle: genFx("toggle"), 9124beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fadeIn: { opacity: "show" }, 9125beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fadeOut: { opacity: "hide" }, 9126beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik fadeToggle: { opacity: "toggle" } 9127beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}, function( name, props ) { 9128beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.fn[ name ] = function( speed, easing, callback ) { 9129beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.animate( props, speed, easing, callback ); 9130beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 9131beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 9132beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.speed = function( speed, easing, fn ) { 91344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 91354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair complete: fn || !fn && easing || 91364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.isFunction( speed ) && speed, 91374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair duration: speed, 91384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing 91394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 9140beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : 91424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; 9143beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // normalize opt.queue - true/undefined/null -> "fx" 91454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( opt.queue == null || opt.queue === true ) { 91464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opt.queue = "fx"; 9147beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9148beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Queueing 91504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opt.old = opt.complete; 9151beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opt.complete = function() { 91534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isFunction( opt.old ) ) { 91544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair opt.old.call( this ); 9155beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9156beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( opt.queue ) { 91584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.dequeue( this, opt.queue ); 9159beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 91604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 9161beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return opt; 91634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 9164beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.easing = { 91664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair linear: function( p ) { 91674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return p; 9168beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 91694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair swing: function( p ) { 91704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return 0.5 - Math.cos( p*Math.PI ) / 2; 9171beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9172beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 9173beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91744a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.timers = []; 91754a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fx = Tween.prototype.init; 91764a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fx.tick = function() { 91774a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var timer, 91784a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair timers = jQuery.timers, 91794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair i = 0; 9180beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91814a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fxNow = jQuery.now(); 9182beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair for ( ; i < timers.length; i++ ) { 91844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair timer = timers[ i ]; 91854a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Checks the timer has not already been removed 91864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !timer() && timers[ i ] === timer ) { 91874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair timers.splice( i--, 1 ); 9188beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 91894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9190beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91914a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !timers.length ) { 91924a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.fx.stop(); 91934a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 91944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fxNow = undefined; 91954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 9196beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 91974a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fx.timer = function( timer ) { 91984a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( timer() && jQuery.timers.push( timer ) && !timerId ) { 91994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); 92004a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 92014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 9202beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92034a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fx.interval = 13; 9204beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92054a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fx.stop = function() { 92064a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair clearInterval( timerId ); 92074a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair timerId = null; 92084a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 9209beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fx.speeds = { 92114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair slow: 600, 92124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair fast: 200, 92134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Default speed 92144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair _default: 400 92154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 9216beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Back Compat <1.8 extension point 92184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fx.step = {}; 9219beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9220beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( jQuery.expr && jQuery.expr.filters ) { 9221beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.expr.filters.animated = function( elem ) { 9222beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.grep(jQuery.timers, function( fn ) { 9223beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return elem === fn.elem; 9224beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }).length; 9225beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 9226beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 92274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairvar rroot = /^(?:body|html)$/i; 9228beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.fn.offset = function( options ) { 92304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( arguments.length ) { 92314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return options === undefined ? 92324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this : 92334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair this.each(function( i ) { 9234beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.offset.setOffset( this, options, i ); 9235beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 92364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9237beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, 92394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair box = { top: 0, left: 0 }, 92404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem = this[ 0 ], 92414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair doc = elem && elem.ownerDocument; 9242beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !doc ) { 92444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return; 92454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9246beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( (body = doc.body) === elem ) { 92484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.offset.bodyOffset( elem ); 92494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9250beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair docElem = doc.documentElement; 9252beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Make sure it's not a disconnected DOM node 92544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( !jQuery.contains( docElem, elem ) ) { 92554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return box; 92564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9257beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 92584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // If we don't have gBCR, just use 0,0 rather than error 92594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // BlackBerry 5, iOS 3 (original iPhone) 92604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( typeof elem.getBoundingClientRect !== "undefined" ) { 92614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair box = elem.getBoundingClientRect(); 92624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 92634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair win = getWindow( doc ); 92644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair clientTop = docElem.clientTop || body.clientTop || 0; 92654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair clientLeft = docElem.clientLeft || body.clientLeft || 0; 92664a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair scrollTop = win.pageYOffset || docElem.scrollTop; 92674a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair scrollLeft = win.pageXOffset || docElem.scrollLeft; 92684a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return { 92694a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair top: box.top + scrollTop - clientTop, 92704a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair left: box.left + scrollLeft - clientLeft 9271beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 92724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair}; 9273beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9274beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.offset = { 9275beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9276beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik bodyOffset: function( body ) { 9277beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var top = body.offsetTop, 9278beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik left = body.offsetLeft; 9279beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9280beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { 9281beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik top += parseFloat( jQuery.css(body, "marginTop") ) || 0; 9282beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; 9283beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9284beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9285beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return { top: top, left: left }; 9286beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 9287beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9288beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik setOffset: function( elem, options, i ) { 9289beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var position = jQuery.css( elem, "position" ); 9290beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9291beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // set position first, in-case top/left are set even on static elem 9292beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( position === "static" ) { 9293beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.style.position = "relative"; 9294beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9295beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9296beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var curElem = jQuery( elem ), 9297beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curOffset = curElem.offset(), 9298beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curCSSTop = jQuery.css( elem, "top" ), 9299beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curCSSLeft = jQuery.css( elem, "left" ), 9300beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, 9301beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik props = {}, curPosition = {}, curTop, curLeft; 9302beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9303beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // need to be able to calculate position if either top or left is auto and position is either absolute or fixed 9304beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( calculatePosition ) { 9305beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curPosition = curElem.position(); 9306beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curTop = curPosition.top; 9307beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curLeft = curPosition.left; 9308beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 9309beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curTop = parseFloat( curCSSTop ) || 0; 9310beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curLeft = parseFloat( curCSSLeft ) || 0; 9311beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9312beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9313beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( jQuery.isFunction( options ) ) { 9314beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik options = options.call( elem, i, curOffset ); 9315beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9316beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9317beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( options.top != null ) { 9318beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik props.top = ( options.top - curOffset.top ) + curTop; 9319beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9320beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( options.left != null ) { 9321beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik props.left = ( options.left - curOffset.left ) + curLeft; 9322beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9323beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9324beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( "using" in options ) { 9325beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik options.using.call( elem, props ); 9326beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 9327beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik curElem.css( props ); 9328beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9329beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9330beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}; 9331beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9332beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9333beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris CraikjQuery.fn.extend({ 9334beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9335beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik position: function() { 9336beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( !this[0] ) { 93374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return; 9338beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9339beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9340beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var elem = this[0], 9341beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9342beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get *real* offsetParent 9343beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik offsetParent = this.offsetParent(), 9344beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9345beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Get correct offsets 9346beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik offset = this.offset(), 9347beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); 9348beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9349beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Subtract element margins 9350beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // note: when an element has margin: auto the offsetLeft and marginLeft 9351beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // are the same in Safari causing offset.left to incorrectly be 0 9352beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; 9353beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; 9354beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9355beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Add offsetParent borders 9356beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; 9357beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; 9358beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9359beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik // Subtract the two offsets 9360beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return { 9361beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik top: offset.top - parentOffset.top, 9362beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik left: offset.left - parentOffset.left 9363beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 9364beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }, 9365beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9366beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik offsetParent: function() { 9367beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return this.map(function() { 9368beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik var offsetParent = this.offsetParent || document.body; 9369beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { 9370beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik offsetParent = offsetParent.offsetParent; 9371beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 93724a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return offsetParent || document.body; 9373beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }); 9374beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9375beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 9376beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9377beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9378beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Create scrollLeft and scrollTop methods 93794a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { 93804a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var top = /Y/.test( prop ); 9381beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9382beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik jQuery.fn[ method ] = function( val ) { 93834a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, function( elem, method, val ) { 93844a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var win = getWindow( elem ); 9385beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 93864a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( val === undefined ) { 93874a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return win ? (prop in win) ? win[ prop ] : 93884a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair win.document.documentElement[ method ] : 93894a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem[ method ]; 9390beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 9391beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9392beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik if ( win ) { 9393beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik win.scrollTo( 93944a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair !top ? val : jQuery( win ).scrollLeft(), 93954a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair top ? val : jQuery( win ).scrollTop() 9396beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik ); 9397beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9398beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } else { 93994a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem[ method ] = val; 9400beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik } 94014a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, method, val, arguments.length, null ); 9402beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik }; 9403beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 9404beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9405beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikfunction getWindow( elem ) { 9406beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik return jQuery.isWindow( elem ) ? 9407beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem : 9408beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.nodeType === 9 ? 9409beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik elem.defaultView || elem.parentWindow : 9410beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik false; 9411beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 94124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 94134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan SinclairjQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 94144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { 94154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // margin is only for outerHeight, outerWidth 94164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.fn[ funcName ] = function( margin, value ) { 94174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 94184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 94194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 94204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return jQuery.access( this, function( elem, type, value ) { 94214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair var doc; 94224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 94234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( jQuery.isWindow( elem ) ) { 94244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there 94254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // isn't a whole lot we can do. See pull request at this URL for discussion: 94264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // https://github.com/jquery/jquery/pull/764 94274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return elem.document.documentElement[ "client" + name ]; 94284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 94294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 94304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Get document width or height 94314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair if ( elem.nodeType === 9 ) { 94324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair doc = elem.documentElement; 94334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair 94344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest 94354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. 94364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return Math.max( 94374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.body[ "scroll" + name ], doc[ "scroll" + name ], 94384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair elem.body[ "offset" + name ], doc[ "offset" + name ], 94394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair doc[ "client" + name ] 94404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair ); 94414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair } 9442beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 94434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair return value === undefined ? 94444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Get width or height on the element, requesting but not forcing parseFloat 94454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.css( elem, type, value, extra ) : 9446beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 94474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair // Set width or height on the element 94484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair jQuery.style( elem, type, value, extra ); 94494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }, type, chainable ? margin : undefined, chainable, null ); 94504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }; 94514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair }); 9452beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik}); 9453beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Expose jQuery to the global object 9454beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikwindow.jQuery = window.$ = jQuery; 9455beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9456beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Expose jQuery as an AMD module, but only for AMD loaders that 9457beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// understand the issues with loading multiple versions of jQuery 9458beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// in a page that all might call define(). The loader will indicate 9459beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// they have special allowances for multiple jQuery versions by 9460beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// specifying define.amd.jQuery = true. Register as a named module, 9461beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// since jQuery can be concatenated with other files that may use define, 9462beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// but not use a proper concatenation script that understands anonymous 9463beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// AMD modules. A named AMD is safest and most robust way to register. 9464beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Lowercase jquery is used because AMD module names are derived from 9465beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// file names, and jQuery is normally delivered in a lowercase file name. 9466beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// Do this after creating the global so that if an AMD module wants to call 9467beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik// noConflict to hide this version of jQuery, it will work. 9468beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craikif ( typeof define === "function" && define.amd && define.amd.jQuery ) { 9469beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik define( "jquery", [], function () { return jQuery; } ); 9470beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik} 9471beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik 9472beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik})( window ); 9473