For a bit of background, rather than pollute mw or a variable like mw.mobileFrontend we have functions require and define that exposure pieces of functionality. This is akin to var EventEmitter = OO.EventEmitter; for those familiar with oojs\
M = mw.mobileFrontend; M.define( 'Foo', FooClass' ); var FooClass = M.require( 'Foo', FooClass' );
essentially what Florian is talking about is dealing when we do this:
// left for backwards compatibility M.define( 'Foo', FooClass' ); M.define( 'FooNew', FooClass' );
and want to discourage use of 'Foo'
so mw.deprecate currently allows you to deprecate a function but doesn't work in this case as the define function is not what has been deprecated.
As I see it we have several options and I'm not sure what is the right place to do this. 1) Make it possible to deprecate methods where parameters have changed (e.g. I see places where a parameter changes from a string to say a class but we do type checking and allow both) In this example we could use withParams as a parameter checker
mw.deprecate( mw.mobileFrontend, 'define' ).withParams( function () { return args[0] === 'Foo' } )
2) Just bake this into M.define itself as an explicit parameter (using Florian's method)
3) Bake into M.require and handle deprecation like so:
M.define( 'Foo', FooClass.extend( { deprecated: true } ) ); var x = M.require( 'Foo' ) Foo module name is deprecated.
Personally I like the third example here since it is cleanest. 1 however would be useful in various other locations.
On Tue, Apr 7, 2015 at 9:07 AM, Florian Schmidt florian.schmidt.welzow@t-online.de wrote:
Recently i noticed, that Jon wants to deprecate a module (he moved it to another location and changed the module name)[1], so I thought about a better way of deprecating a module (like core functions with a visible deprecation warning in the browser console, e.g.). So I uploaded a change for review[2] to extend module.js to support the definition of a deprecated module (it will log a warning every time someone access the module with M.require). Jon already posted, that he don’t know, if this is the right approach and suggested to extend core’s mw.log.deprecate. I’m not sure, if it’s a better approach to extend a core module in this way, so I hope for some feedback on this mailing list: What do you think? :)
[1] https://gerrit.wikimedia.org/r/#/c/202053/3/javascripts/ContentOverlay.js
[2] https://gerrit.wikimedia.org/r/#/c/202069/
Best,
Florian
Mobile-l mailing list Mobile-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mobile-l