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