From: Krinkle Date: Thu, 11 Aug 2011 03:12:12 +0000 (+0000) Subject: Renaming jquery.mwPrototypes to jquery.mwExtension X-Git-Tag: 1.31.0-rc.0~28365 X-Git-Url: http://git.cyclocoop.org/%22.%24info%5B?a=commitdiff_plain;h=d9cdc43b0ec3cb9bf042dcde9db3c59722c2b289;p=lhc%2Fweb%2Fwiklou.git Renaming jquery.mwPrototypes to jquery.mwExtension * Originally they were a few prototypes on the native String object, however they were converted to be (static) members extending the jQuery object. Calling them prototypes is confusing. A grep search on /trunk/ didn't reveal any direct uses of this module (it's loaded by default through mediawiki.util's dependencies) --- diff --git a/RELEASE-NOTES-1.19 b/RELEASE-NOTES-1.19 index 25c619ff47..86fcf352b2 100644 --- a/RELEASE-NOTES-1.19 +++ b/RELEASE-NOTES-1.19 @@ -60,6 +60,7 @@ changes to languages because of Bugzilla reports. * Uighur (Latin) (ug-latn) was incorrectly marked as right-to-left language. === Other changes in 1.19 === +* jquery.mwPrototypes module was renamed to jquery.mwExtension. == Compatibility == diff --git a/resources/Resources.php b/resources/Resources.php index d51d586b91..6bcf5ad4cc 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -145,8 +145,8 @@ return array( 'jquery.mockjax' => array( 'scripts' => 'resources/jquery/jquery.mockjax.js', ), - 'jquery.mwPrototypes' => array( - 'scripts' => 'resources/jquery/jquery.mwPrototypes.js', + 'jquery.mwExtension' => array( + 'scripts' => 'resources/jquery/jquery.mwExtension.js', ), 'jquery.qunit' => array( 'scripts' => 'resources/jquery/jquery.qunit.js', @@ -579,7 +579,7 @@ return array( 'jquery.client', 'jquery.cookie', 'jquery.messageBox', - 'jquery.mwPrototypes', + 'jquery.mwExtension', ), ), 'mediawiki.uri' => array( diff --git a/resources/jquery/jquery.mwExtension.js b/resources/jquery/jquery.mwExtension.js new file mode 100644 index 0000000000..e26a6be644 --- /dev/null +++ b/resources/jquery/jquery.mwExtension.js @@ -0,0 +1,120 @@ +/* + * JavaScript backwards-compatibility alternatives and other convenience functions + */ + +jQuery.extend({ + trimLeft : function( str ) { + return str === null ? '' : str.toString().replace( /^\s+/, '' ); + }, + trimRight : function( str ) { + return str === null ? + '' : str.toString().replace( /\s+$/, '' ); + }, + ucFirst : function( str ) { + return str.substr( 0, 1 ).toUpperCase() + str.substr( 1 ); + }, + escapeRE : function( str ) { + return str.replace ( /([\\{}()|.?*+\-^$\[\]])/g, "\\$1" ); + }, + isDomElement : function( el ) { + return !!el && !!el.nodeType; + }, + isEmpty : function( v ) { + var key; + if ( v === "" || v === 0 || v === "0" || v === null + || v === false || typeof v === 'undefined' ) + { + return true; + } + // the for-loop could potentially contain prototypes + // to avoid that we check it's length first + if ( v.length === 0 ) { + return true; + } + if ( typeof v === 'object' ) { + for ( key in v ) { + return false; + } + return true; + } + return false; + }, + compareArray : function( arrThis, arrAgainst ) { + if ( arrThis.length != arrAgainst.length ) { + return false; + } + for ( var i = 0; i < arrThis.length; i++ ) { + if ( arrThis[i] instanceof Array ) { + if ( !$.compareArray( arrThis[i], arrAgainst[i] ) ) { + return false; + } + } else if ( arrThis[i] !== arrAgainst[i] ) { + return false; + } + } + return true; + }, + compareObject : function( objectA, objectB ) { + + // Do a simple check if the types match + if ( typeof objectA == typeof objectB ) { + + // Only loop over the contents if it really is an object + if ( typeof objectA == 'object' ) { + // If they are aliases of the same object (ie. mw and mediaWiki) return now + if ( objectA === objectB ) { + return true; + } else { + var prop; + // Iterate over each property + for ( prop in objectA ) { + // Check if this property is also present in the other object + if ( prop in objectB ) { + // Compare the types of the properties + var type = typeof objectA[prop]; + if ( type == typeof objectB[prop] ) { + // Recursively check objects inside this one + switch ( type ) { + case 'object' : + if ( !$.compareObject( objectA[prop], objectB[prop] ) ) { + return false; + } + break; + case 'function' : + // Functions need to be strings to compare them properly + if ( objectA[prop].toString() !== objectB[prop].toString() ) { + return false; + } + break; + default: + // Strings, numbers + if ( objectA[prop] !== objectB[prop] ) { + return false; + } + break; + } + } else { + return false; + } + } else { + return false; + } + } + // Check for properties in B but not in A + // This is about 15% faster (tested in Safari 5 and Firefox 3.6) + // ...than incrementing a count variable in the above and below loops + // See also: http://www.mediawiki.org/wiki/ResourceLoader/Default_modules/compareObject_test#Results + for ( prop in objectB ) { + if ( !( prop in objectA ) ) { + return false; + } + } + } + } + } else { + return false; + } + return true; + } +}); + diff --git a/resources/jquery/jquery.mwPrototypes.js b/resources/jquery/jquery.mwPrototypes.js deleted file mode 100644 index e26a6be644..0000000000 --- a/resources/jquery/jquery.mwPrototypes.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - * JavaScript backwards-compatibility alternatives and other convenience functions - */ - -jQuery.extend({ - trimLeft : function( str ) { - return str === null ? '' : str.toString().replace( /^\s+/, '' ); - }, - trimRight : function( str ) { - return str === null ? - '' : str.toString().replace( /\s+$/, '' ); - }, - ucFirst : function( str ) { - return str.substr( 0, 1 ).toUpperCase() + str.substr( 1 ); - }, - escapeRE : function( str ) { - return str.replace ( /([\\{}()|.?*+\-^$\[\]])/g, "\\$1" ); - }, - isDomElement : function( el ) { - return !!el && !!el.nodeType; - }, - isEmpty : function( v ) { - var key; - if ( v === "" || v === 0 || v === "0" || v === null - || v === false || typeof v === 'undefined' ) - { - return true; - } - // the for-loop could potentially contain prototypes - // to avoid that we check it's length first - if ( v.length === 0 ) { - return true; - } - if ( typeof v === 'object' ) { - for ( key in v ) { - return false; - } - return true; - } - return false; - }, - compareArray : function( arrThis, arrAgainst ) { - if ( arrThis.length != arrAgainst.length ) { - return false; - } - for ( var i = 0; i < arrThis.length; i++ ) { - if ( arrThis[i] instanceof Array ) { - if ( !$.compareArray( arrThis[i], arrAgainst[i] ) ) { - return false; - } - } else if ( arrThis[i] !== arrAgainst[i] ) { - return false; - } - } - return true; - }, - compareObject : function( objectA, objectB ) { - - // Do a simple check if the types match - if ( typeof objectA == typeof objectB ) { - - // Only loop over the contents if it really is an object - if ( typeof objectA == 'object' ) { - // If they are aliases of the same object (ie. mw and mediaWiki) return now - if ( objectA === objectB ) { - return true; - } else { - var prop; - // Iterate over each property - for ( prop in objectA ) { - // Check if this property is also present in the other object - if ( prop in objectB ) { - // Compare the types of the properties - var type = typeof objectA[prop]; - if ( type == typeof objectB[prop] ) { - // Recursively check objects inside this one - switch ( type ) { - case 'object' : - if ( !$.compareObject( objectA[prop], objectB[prop] ) ) { - return false; - } - break; - case 'function' : - // Functions need to be strings to compare them properly - if ( objectA[prop].toString() !== objectB[prop].toString() ) { - return false; - } - break; - default: - // Strings, numbers - if ( objectA[prop] !== objectB[prop] ) { - return false; - } - break; - } - } else { - return false; - } - } else { - return false; - } - } - // Check for properties in B but not in A - // This is about 15% faster (tested in Safari 5 and Firefox 3.6) - // ...than incrementing a count variable in the above and below loops - // See also: http://www.mediawiki.org/wiki/ResourceLoader/Default_modules/compareObject_test#Results - for ( prop in objectB ) { - if ( !( prop in objectA ) ) { - return false; - } - } - } - } - } else { - return false; - } - return true; - } -}); - diff --git a/tests/qunit/index.html b/tests/qunit/index.html index a5819209c3..a88a662140 100644 --- a/tests/qunit/index.html +++ b/tests/qunit/index.html @@ -25,7 +25,7 @@ - + @@ -63,7 +63,7 @@ - + diff --git a/tests/qunit/suites/resources/jquery/jquery.mwExtension.js b/tests/qunit/suites/resources/jquery/jquery.mwExtension.js new file mode 100644 index 0000000000..f68bd582e3 --- /dev/null +++ b/tests/qunit/suites/resources/jquery/jquery.mwExtension.js @@ -0,0 +1,56 @@ +module( 'jquery.mwExtension.js' ); + +test( 'String functions', function() { + + equal( $.trimLeft( ' foo bar ' ), 'foo bar ', 'trimLeft' ); + equal( $.trimRight( ' foo bar ' ), ' foo bar', 'trimRight' ); + equal( $.ucFirst( 'foo'), 'Foo', 'ucFirst' ); + + equal( $.escapeRE( '