2 * JavaScript backwards-compatibility alternatives and other convenience functions
4 * @deprecated since 1.26 Dated collection of miscellaneous utilities. Methods are
5 * either trivially inline, obsolete, or have a better place elsewhere.
9 trimLeft: function ( str ) {
10 return str === null ? '' : str.toString().replace( /^\s+/, '' );
12 trimRight: function ( str ) {
14 '' : str.toString().replace( /\s+$/, '' );
16 ucFirst: function ( str ) {
17 return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
19 isDomElement: function ( el ) {
20 return !!el && !!el.nodeType;
22 isEmpty: function ( v ) {
25 v === '' || v === 0 || v === '0' || v === null || v === false || v === undefined
29 // the for-loop could potentially contain prototypes
30 // to avoid that we check its length first
31 if ( v.length === 0 ) {
34 if ( typeof v === 'object' ) {
42 compareArray: function ( arrThis, arrAgainst ) {
43 if ( arrThis.length !== arrAgainst.length ) {
46 for ( var i = 0; i < arrThis.length; i++ ) {
47 if ( $.isArray( arrThis[ i ] ) ) {
48 if ( !$.compareArray( arrThis[ i ], arrAgainst[ i ] ) ) {
51 } else if ( arrThis[ i ] !== arrAgainst[ i ] ) {
57 compareObject: function ( objectA, objectB ) {
60 // Do a simple check if the types match
61 if ( typeof objectA === typeof objectB ) {
63 // Only loop over the contents if it really is an object
64 if ( typeof objectA === 'object' ) {
65 // If they are aliases of the same object (ie. mw and mediaWiki) return now
66 if ( objectA === objectB ) {
69 // Iterate over each property
70 for ( prop in objectA ) {
71 // Check if this property is also present in the other object
72 if ( prop in objectB ) {
73 // Compare the types of the properties
74 type = typeof objectA[ prop ];
75 if ( type === typeof objectB[ prop ] ) {
76 // Recursively check objects inside this one
79 if ( !$.compareObject( objectA[ prop ], objectB[ prop ] ) ) {
84 // Functions need to be strings to compare them properly
85 if ( objectA[ prop ].toString() !== objectB[ prop ].toString() ) {
91 if ( objectA[ prop ] !== objectB[ prop ] ) {
103 // Check for properties in B but not in A
104 // This is about 15% faster (tested in Safari 5 and Firefox 3.6)
105 // ...than incrementing a count variable in the above and below loops
106 // See also: https://www.mediawiki.org/wiki/ResourceLoader/Default_modules/compareObject_test#Results
107 for ( prop in objectB ) {
108 if ( !( prop in objectA ) ) {
119 }, function ( key, value ) {
120 mw.log.deprecate( $, key, value );
123 mw.log.deprecate( $, 'escapeRE', function ( str ) {
124 return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
125 }, 'Use mediawiki.RegExp instead.' );
127 } )( jQuery, mediaWiki );