One of WikiEditor's modules had only messages, no scripts; updates to the debug mode loader had ended up failing in the case where no scripts got passed in (if passed with a loader function we were fine, hence non-debug mode being ok)
This commit explicitly checks for the empty-array case and marks the module as ready immediately, instead of waiting for the last item in the loop to finish, which never happens. :)
Also consolidated three calls to the same few lines of code into a lambda function.
// Execute script
try {
var script = registry[module].script;
// Execute script
try {
var script = registry[module].script;
+ var markModuleReady = function() {
+ registry[module].state = 'ready';
+ handlePending( module );
+ if ( $.isFunction( callback ) ) {
+ callback();
+ }
+ };
if ( $.isArray( script ) ) {
var done = 0;
if ( $.isArray( script ) ) {
var done = 0;
+ if (script.length == 0 ) {
+ // No scripts in this module? Let's dive out early.
+ markModuleReady();
+ }
for ( var i = 0; i < script.length; i++ ) {
registry[module].state = 'loading';
addScript( script[i], function() {
if ( ++done == script.length ) {
for ( var i = 0; i < script.length; i++ ) {
registry[module].state = 'loading';
addScript( script[i], function() {
if ( ++done == script.length ) {
- registry[module].state = 'ready';
- handlePending( module );
- if ( $.isFunction( callback ) ) {
- callback();
- }
}
} );
}
} else if ( $.isFunction( script ) ) {
script( jQuery );
}
} );
}
} else if ( $.isFunction( script ) ) {
script( jQuery );
- registry[module].state = 'ready';
- handlePending( module );
- if ( $.isFunction( callback ) ) {
- callback();
- }
}
} catch ( e ) {
// This needs to NOT use mw.log because these errors are common in production mode
}
} catch ( e ) {
// This needs to NOT use mw.log because these errors are common in production mode