* (bug 29107) Fix regression in ResourceLoader debug mode for WikiEditor
authorBrion Vibber <brion@users.mediawiki.org>
Tue, 24 May 2011 00:42:42 +0000 (00:42 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Tue, 24 May 2011 00:42:42 +0000 (00:42 +0000)
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.

resources/mediawiki/mediawiki.js

index ccc703e..8dd0052 100644 (file)
@@ -481,27 +481,30 @@ window.mediaWiki = new ( function( $ ) {
                        // 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 (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 ) {
-                                                               registry[module].state = 'ready';
-                                                               handlePending( module );
-                                                               if ( $.isFunction( callback ) ) {
-                                                                       callback();
-                                                               }
+                                                               markModuleReady();
                                                        }
                                                } );
                                        }
                                } else if ( $.isFunction( script ) ) {
                                        script( jQuery );
-                                       registry[module].state = 'ready';
-                                       handlePending( module );
-                                       if ( $.isFunction( callback ) ) {
-                                               callback();
-                                       }
+                                       markModuleReady();
                                }
                        } catch ( e ) {
                                // This needs to NOT use mw.log because these errors are common in production mode