summaryrefslogtreecommitdiff
path: root/lib/scripts/jquery/jquery-migrate.js
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2013-03-24 10:17:24 +0100
committerAndreas Gohr <andi@splitbrain.org>2013-03-24 10:18:51 +0100
commit64a19076f0888270102a3ae01cfa2bc5824ce03e (patch)
tree079267df9907c0e5a3495a6281e8a7e1d1076204 /lib/scripts/jquery/jquery-migrate.js
parent2ab296805f9b647d3fe46cad4a7f275c45f171a8 (diff)
downloadrpg-64a19076f0888270102a3ae01cfa2bc5824ce03e.tar.gz
rpg-64a19076f0888270102a3ae01cfa2bc5824ce03e.tar.bz2
upgrade jQuery scripts
jQuery 1.9.0 had a bug in replaceWith() that got fixed in 1.9.1 - to ensure compatibility I upgraded the whole suite to their current releases.
Diffstat (limited to 'lib/scripts/jquery/jquery-migrate.js')
-rw-r--r--lib/scripts/jquery/jquery-migrate.js139
1 files changed, 76 insertions, 63 deletions
diff --git a/lib/scripts/jquery/jquery-migrate.js b/lib/scripts/jquery/jquery-migrate.js
index 27111d80f..e99f954e6 100644
--- a/lib/scripts/jquery/jquery-migrate.js
+++ b/lib/scripts/jquery/jquery-migrate.js
@@ -1,10 +1,11 @@
/*!
- * jQuery Migrate - v1.0.0 - 2013-01-14
+ * jQuery Migrate - v1.1.1 - 2013-02-16
* https://github.com/jquery/jquery-migrate
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
*/
(function( jQuery, window, undefined ) {
-"use strict";
+// See http://bugs.jquery.com/ticket/13335
+// "use strict";
var warnedAbout = {};
@@ -15,6 +16,16 @@ jQuery.migrateWarnings = [];
// Set to true to prevent console output; migrateWarnings still maintained
// jQuery.migrateMute = false;
+// Show a message on the console so devs know we're active
+if ( !jQuery.migrateMute && window.console && console.log ) {
+ console.log("JQMIGRATE: Logging is active");
+}
+
+// Set to false to disable traces that appear with warnings
+if ( jQuery.migrateTrace === undefined ) {
+ jQuery.migrateTrace = true;
+}
+
// Forget any warnings we've already given; public
jQuery.migrateReset = function() {
warnedAbout = {};
@@ -27,6 +38,9 @@ function migrateWarn( msg) {
jQuery.migrateWarnings.push( msg );
if ( window.console && console.warn && !jQuery.migrateMute ) {
console.warn( "JQMIGRATE: " + msg );
+ if ( jQuery.migrateTrace && console.trace ) {
+ console.trace();
+ }
}
}
}
@@ -65,8 +79,8 @@ if ( document.compatMode === "BackCompat" ) {
}
-var attrFn = {},
- attr = jQuery.attr,
+var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
+ oldAttr = jQuery.attr,
valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
function() { return null; },
valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
@@ -77,21 +91,27 @@ var attrFn = {},
ruseDefault = /^(?:checked|selected)$/i;
// jQuery.attrFn
-migrateWarnProp( jQuery, "attrFn", attrFn, "jQuery.attrFn is deprecated" );
+migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
jQuery.attr = function( elem, name, value, pass ) {
var lowerName = name.toLowerCase(),
nType = elem && elem.nodeType;
if ( pass ) {
- migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
- if ( elem && !rnoAttrNodeType.test( nType ) && jQuery.isFunction( jQuery.fn[ name ] ) ) {
+ // Since pass is used internally, we only warn for new jQuery
+ // versions where there isn't a pass arg in the formal params
+ if ( oldAttr.length < 4 ) {
+ migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
+ }
+ if ( elem && !rnoAttrNodeType.test( nType ) &&
+ (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
return jQuery( elem )[ name ]( value );
}
}
- // Warn if user tries to set `type` since it breaks on IE 6/7/8
- if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) ) {
+ // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
+ // for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
+ if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
}
@@ -131,11 +151,11 @@ jQuery.attr = function( elem, name, value, pass ) {
// Warn only for attributes that can remain distinct from their properties post-1.9
if ( ruseDefault.test( lowerName ) ) {
- migrateWarn( "jQuery.fn.attr(" + lowerName + ") may use property instead of attribute" );
+ migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute" );
}
}
- return attr.call( jQuery, elem, name, value );
+ return oldAttr.call( jQuery, elem, name, value );
};
// attrHooks: value
@@ -146,7 +166,7 @@ jQuery.attrHooks.value = {
return valueAttrGet.apply( this, arguments );
}
if ( nodeName !== "input" && nodeName !== "option" ) {
- migrateWarn("property-based jQuery.fn.attr('value') is deprecated");
+ migrateWarn("jQuery.fn.attr('value') no longer gets properties");
}
return name in elem ?
elem.value :
@@ -158,7 +178,7 @@ jQuery.attrHooks.value = {
return valueAttrSet.apply( this, arguments );
}
if ( nodeName !== "input" && nodeName !== "option" ) {
- migrateWarn("property-based jQuery.fn.attr('value', val) is deprecated");
+ migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
}
// Does not return so that setAttribute is also used
elem.value = value;
@@ -168,8 +188,9 @@ jQuery.attrHooks.value = {
var matched, browser,
oldInit = jQuery.fn.init,
- // Note this does NOT include the # XSS fix from 1.7!
- rquickExpr = /^(?:.*(<[\w\W]+>)[^>]*|#([\w\-]*))$/;
+ oldParseJSON = jQuery.parseJSON,
+ // Note this does NOT include the #9521 XSS fix from 1.7!
+ rquickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*|#([\w\-]*))$/;
// $(html) "looks like html" rule change
jQuery.fn.init = function( selector, context, rootjQuery ) {
@@ -195,6 +216,15 @@ jQuery.fn.init = function( selector, context, rootjQuery ) {
};
jQuery.fn.init.prototype = jQuery.fn;
+// Let $.parseJSON(falsy_value) return null
+jQuery.parseJSON = function( json ) {
+ if ( !json && json !== null ) {
+ migrateWarn("jQuery.parseJSON requires a valid JSON string");
+ return null;
+ }
+ return oldParseJSON.apply( this, arguments );
+};
+
jQuery.uaMatch = function( ua ) {
ua = ua.toLowerCase();
@@ -211,25 +241,28 @@ jQuery.uaMatch = function( ua ) {
};
};
-matched = jQuery.uaMatch( navigator.userAgent );
-browser = {};
+// Don't clobber any existing jQuery.browser in case it's different
+if ( !jQuery.browser ) {
+ matched = jQuery.uaMatch( navigator.userAgent );
+ browser = {};
-if ( matched.browser ) {
- browser[ matched.browser ] = true;
- browser.version = matched.version;
-}
+ if ( matched.browser ) {
+ browser[ matched.browser ] = true;
+ browser.version = matched.version;
+ }
-// Chrome is Webkit, but Webkit is also Safari.
-if ( browser.chrome ) {
- browser.webkit = true;
-} else if ( browser.webkit ) {
- browser.safari = true;
-}
+ // Chrome is Webkit, but Webkit is also Safari.
+ if ( browser.chrome ) {
+ browser.webkit = true;
+ } else if ( browser.webkit ) {
+ browser.safari = true;
+ }
-jQuery.browser = browser;
+ jQuery.browser = browser;
+}
// Warn if the code tries to get jQuery.browser
-migrateWarnProp( jQuery, "browser", browser, "jQuery.browser is deprecated" );
+migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
jQuery.sub = function() {
function jQuerySub( selector, context ) {
@@ -254,6 +287,14 @@ jQuery.sub = function() {
};
+// Ensure that $.ajax gets the new parseJSON defined in core.js
+jQuery.ajaxSetup({
+ converters: {
+ "text json": jQuery.parseJSON
+ }
+});
+
+
var oldFnData = jQuery.fn.data;
jQuery.fn.data = function( name ) {
@@ -274,8 +315,7 @@ jQuery.fn.data = function( name ) {
var rscriptType = /\/(java|ecma)script/i,
- oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack,
- oldFragment = jQuery.buildFragment;
+ oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
jQuery.fn.andSelf = function() {
migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
@@ -332,35 +372,6 @@ if ( !jQuery.clean ) {
};
}
-jQuery.buildFragment = function( elems, context, scripts, selection ) {
- var ret,
- warning = "jQuery.buildFragment() is deprecated";
-
- // Set context per 1.8 logic
- context = context || document;
- context = !context.nodeType && context[0] || context;
- context = context.ownerDocument || context;
-
- try {
- ret = oldFragment.call( jQuery, elems, context, scripts, selection );
-
- // jQuery < 1.8 required arrayish context; jQuery 1.9 fails on it
- } catch( x ) {
- ret = oldFragment.call( jQuery, elems, context.nodeType ? [ context ] : context[ 0 ], scripts, selection );
-
- // Success from tweaking context means buildFragment was called by the user
- migrateWarn( warning );
- }
-
- // jQuery < 1.9 returned an object instead of the fragment itself
- if ( !ret.fragment ) {
- migrateWarnProp( ret, "fragment", ret, warning );
- migrateWarnProp( ret, "cacheable", false, warning );
- }
-
- return ret;
-};
-
var eventAdd = jQuery.event.add,
eventRemove = jQuery.event.remove,
eventTrigger = jQuery.event.trigger,
@@ -371,7 +382,7 @@ var eventAdd = jQuery.event.add,
rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
hoverHack = function( events ) {
- if ( typeof( events ) != "string" || jQuery.event.special.hover ) {
+ if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
return events;
}
if ( rhoverHack.test( events ) ) {
@@ -386,7 +397,9 @@ if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
}
// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
-migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
+if ( jQuery.event.dispatch ) {
+ migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
+}
// Support for 'hover' pseudo-event and ajax event warnings
jQuery.event.add = function( elem, types, handler, data, selector ){
@@ -464,7 +477,7 @@ jQuery.fn.die = function( types, fn ) {
// Turn global events into document-triggered events
jQuery.event.trigger = function( event, data, elem, onlyHandlers ){
- if ( !elem & !rajaxEvent.test( event ) ) {
+ if ( !elem && !rajaxEvent.test( event ) ) {
migrateWarn( "Global events are undocumented and deprecated" );
}
return eventTrigger.call( this, event, data, elem || document, onlyHandlers );