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: