I've made a modest initial stab at MobileFrontend support for using ResourceLoader directly, using a 'target' filtering technique that we discussed with Trevor, Roan, and Timo. This is another step in integrating MobileFrontend/SkinMobile into the core MediaWiki ecosystem.
Once we're happy with this and merge it, this'll let both core code and extensions add appropriate JS and CSS by whitelisting their modules for mobile -- or including a separate mobile module if necessary -- without having to special-case JS and CSS loading into MobileFrontend.
Core changes: https://gerrit.wikimedia.org/r/#/c/28433/ MobileFrontend: https://gerrit.wikimedia.org/r/#/c/28434/
In mobile beta mode, if jQuery is listed as supported for the device profile, instead of loading jQuery directly we load up the ResourceLoader startup module using the 'mobile' target instead of the default ('desktop').
This filters the module list and dependency graph, including only modules whitelisted by including 'mobile' in its 'targets' attribute. The startup module then loads jQuery and the stub 'mediawiki' module for us... as well as anything that's been specified via OutputPage->addModules(), if it's in the whitelist.
I haven't yet done much refactoring to make SkinMobile/MobileFrontend use ResourceLoader fully for its own stuff, except for removing a special case for the $wgResponsiveImages code that loads high-resolution pictures. By marking the core JS modules used to implement this with:
'targets' => array( 'desktop', 'mobile' ),
the existing core code that uses OutputPage->addModules() "just works" and RL loads those modules. Other modules that have not been whitelisted for mobile don't get included, so we're not randomly loading code that's going to expect a different environment and just break.
Mobile-specific modules can also specify:
'targets' => 'mobile'
to avoid cluttering up the module list for the desktop, if they're never going to be used there.
Currently this adds one HTTP request to MobileFrontend output (replacing one load of jquery with two loads of [RL startup, jquery+mediawiki]), but we should be able to cut that back down by loading more mobile modules via RL.
Please feel free to test, give feedback, and/or demand the whole thing be rewritten (but only with good reason ;).
-- brion