* @class mw.Map
*
* @constructor
- * @param {boolean} [global=false] Whether to store the values in the global window
- * object or a exclusively in the object property 'values'.
+ * @param {Object|boolean} [values] Value-bearing object to map, or boolean
+ * true to map over the global object. Defaults to an empty object.
*/
- function Map( global ) {
- this.values = global === true ? window : {};
+ function Map( values ) {
+ this.values = values === true ? window : ( values || {} );
return this;
}
*/
work: function () {
var reqBase, splits, maxQueryLength, q, b, bSource, bGroup, bSourceGroup,
- source, group, g, i, modules, maxVersion, sourceLoadScript,
+ source, concatSource, group, g, i, modules, maxVersion, sourceLoadScript,
currReqBase, currReqBaseLength, moduleMap, l,
lastDotIndex, prefix, suffix, bytesAdded, async;
mw.loader.store.init();
if ( mw.loader.store.enabled ) {
+ concatSource = [];
batch = $.grep( batch, function ( module ) {
var source = mw.loader.store.get( module );
if ( source ) {
- $.globalEval( source );
- return false; // Don't fetch
+ concatSource.push( source );
+ return false;
}
- return true; // Fetch
+ return true;
} );
+ $.globalEval( concatSource.join( ';' ) );
}
// Early exit if there's nothing to load...
* code for a full account of why we need a try / catch: <http://git.io/4NEwKg>.
*/
init: function () {
- var raw, data;
+ var raw, data, optedIn;
if ( mw.loader.store.enabled !== null ) {
// #init already ran.
return;
}
- if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.config.get( 'debug' ) ) {
+ // Temporarily allow users to opt-in during mw.loader.store test phase by
+ // manually setting a cookie (bug 56397).
+ optedIn = /ResourceLoaderStorageEnabled=1/.test( document.cookie );
+
+ if ( !( mw.config.get( 'wgResourceLoaderStorageEnabled' ) || optedIn ) || mw.config.get( 'debug' ) ) {
// Disabled by configuration, or because debug mode is set.
mw.loader.store.enabled = false;
return;