jenkins-bot has submitted this change and it was merged.

Change subject: Add support to deprecate a module
......................................................................


Add support to deprecate a module

If a module is deprecated (or it has a new name and the old one is kept
for compatibility), you can deprecate the module and a deprecation warning
will appear in the browser console.

Usage:
// For defining a module
M.define( 'moduleName', ModuleName );

// I want to deprecate a module name, so I define the module with the new path,
// and mark the old one as deprecated.
M.define( 'newModuleName', ModuleName ).deprecate( 'moduleName' );

// Now moduleName shows a deprecation message on the console
M.require( 'moduleName' );

// But newModuleName doesn't show anything
M.require( 'newModuleName' );

// When we are ready for removing the deprecated module, then we just remove
// .deprecate( 'moduleName' );
// leaving:
M.define( 'newModuleName', ModuleName );

// If I want to deprecate a module without providing an alternative then I just
// do a deprecate insted of a define:
M.deprecate( 'moduleName', ModuleName );

Change-Id: I5ddc099ba2d215137c385a27d36aff5f6f35cbb3
---
M javascripts/modules.js
1 file changed, 39 insertions(+), 1 deletion(-)

Approvals:
  Jhernandez: Looks good to me, approved
  jenkins-bot: Verified

Objections:
  Bmansurov: There's a problem with this change, please improve



diff --git a/javascripts/modules.js b/javascripts/modules.js
index c80b414..edb10b7 100644
--- a/javascripts/modules.js
+++ b/javascripts/modules.js
@@ -36,12 +36,43 @@
                 *
                 * @param {String} id Defined module id.
                 * @param {Object} obj Defined module body, can be any 
JavaScript object.
+                * @return {Object}
                 */
                define: function ( id, obj ) {
+                       var self = this;
+
                        if ( this._register.hasOwnProperty( id ) ) {
                                throw new Error( 'Module already exists: ' + id 
);
                        }
                        this._register[ id ] = obj;
+                       // return an object of additionally functions to do 
with the registered module
+                       return {
+                               /**
+                                * @see ModuleLoader#deprecate
+                                * @param {Number} deprecatedId Defined module 
id, which is deprecated.
+                                */
+                               deprecate: function ( deprecatedId ) {
+                                       self.deprecate( deprecatedId, obj, id );
+                               }
+                       };
+               },
+
+               /**
+                * Deprecate a module and give an replacement (if there is any).
+                *
+                * @param {String} id Defined module id, which is deprecated.
+                * @param {Object} obj Defined module body, can be any 
JavaScript object.
+                * @param {String} [replacement] Give an optional replacement 
for this module (which
+                * needs to be already defined!)
+                */
+               deprecate: function ( id, obj, replacement ) {
+                       var depreacteMsg;
+                       if ( replacement ) {
+                               // add an alternative for this module, if any 
given
+                               depreacteMsg = 'Use ' + replacement + ' 
instead.';
+                       }
+                       // register it as a deprecated one
+                       mw.log.deprecate( this._register, id, obj, depreacteMsg 
);
                }
        };
 
@@ -57,15 +88,22 @@
        mw.mobileFrontend = {
                /**
                 * @see ModuleLoader#define
+                * @return {Object}
                 */
                define: function () {
-                       loader.define.apply( loader, arguments );
+                       return loader.define.apply( loader, arguments );
                },
                /**
                 * @see ModuleLoader#require
                 */
                require: function () {
                        return loader.require.apply( loader, arguments );
+               },
+               /**
+                * @see ModuleLoader#deprecate
+                */
+               deprecate: function () {
+                       return loader.deprecate.apply( loader, arguments );
                }
        };
 

-- 
To view, visit https://gerrit.wikimedia.org/r/202069
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5ddc099ba2d215137c385a27d36aff5f6f35cbb3
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Florianschmidtwelzow <florian.schmidt.wel...@t-online.de>
Gerrit-Reviewer: Bmansurov <bmansu...@wikimedia.org>
Gerrit-Reviewer: Florianschmidtwelzow <florian.schmidt.wel...@t-online.de>
Gerrit-Reviewer: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: Jhernandez <jhernan...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to