log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
obj[ key ] = val;
} : function ( obj, key, val, msg ) {
+ /*globals Set */
msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
+ var logged, loggedIsSet, uniqueTrace;
+ if ( window.Set ) {
+ logged = new Set();
+ loggedIsSet = true;
+ } else {
+ logged = {};
+ loggedIsSet = false;
+ }
+ uniqueTrace = function () {
+ var trace = new Error().stack;
+ if ( loggedIsSet ) {
+ if ( logged.has( trace ) ) {
+ return false;
+ }
+ logged.add( trace );
+ return true;
+ } else {
+ if ( logged.hasOwnProperty( trace ) ) {
+ return false;
+ }
+ logged[ trace ] = 1;
+ return true;
+ }
+ };
Object.defineProperty( obj, key, {
configurable: true,
enumerable: true,
get: function () {
- mw.track( 'mw.deprecate', key );
- mw.log.warn( msg );
+ if ( uniqueTrace() ) {
+ mw.track( 'mw.deprecate', key );
+ mw.log.warn( msg );
+ }
return val;
},
set: function ( newVal ) {
- mw.track( 'mw.deprecate', key );
- mw.log.warn( msg );
+ if ( uniqueTrace() ) {
+ mw.track( 'mw.deprecate', key );
+ mw.log.warn( msg );
+ }
val = newVal;
}
} );