Merge "Add tests for WikiMap and WikiReference"
[lhc/web/wiklou.git] / resources / src / startup.js
index 3b79bd3..97b4fce 100644 (file)
@@ -12,7 +12,7 @@ if ( !window.performance ) {
 if ( !performance.mark ) {
        performance.mark = function () {};
 }
-performance.mark( 'mediaWikiStartUp' );
+performance.mark( 'mwLoadStart' );
 
 /**
  * Returns false for Grade C supported browsers.
@@ -35,18 +35,18 @@ function isCompatible( ua ) {
        // Browsers with outdated or limited JavaScript engines get the no-JS experience
        return !(
                // Internet Explorer < 8
-               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[1] ) < 8 ) ||
+               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[ 1 ] ) < 8 ) ||
                // Firefox < 3
-               ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[1] ) < 3 ) ||
+               ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[ 1 ] ) < 3 ) ||
                // Opera < 12
                ( ua.indexOf( 'Opera/' ) !== -1 && ( ua.indexOf( 'Version/' ) === -1 ?
                        // "Opera/x.y"
-                       parseFloat( ua.split( 'Opera/' )[1] ) < 10 :
+                       parseFloat( ua.split( 'Opera/' )[ 1 ] ) < 10 :
                        // "Opera/9.80 ... Version/x.y"
-                       parseFloat( ua.split( 'Version/' )[1] ) < 12
+                       parseFloat( ua.split( 'Version/' )[ 1 ] ) < 12
                ) ) ||
                // "Mozilla/0.0 ... Opera x.y"
-               ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[1] ) < 10 ) ||
+               ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[ 1 ] ) < 10 ) ||
                // BlackBerry < 6
                ua.match( /BlackBerry[^\/]*\/[1-5]\./ ) ||
                // Open WebOS < 1.5
@@ -68,39 +68,49 @@ function isCompatible( ua ) {
        );
 }
 
-/**
- * The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php.
- */
-function startUp() {
-       mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals );
+// Conditional script injection
+( function () {
+       if ( !isCompatible() ) {
+               // Undo class swapping in case of an unsupported browser.
+               // See OutputPage::getHeadScripts().
+               document.documentElement.className = document.documentElement.className
+                       .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
+               return;
+       }
+
+       /**
+        * The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php.
+        */
+       function startUp() {
+               mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals );
 
-       $CODE.registrations();
+               $CODE.registrations();
 
-       mw.config.set( $VARS.configuration );
+               mw.config.set( $VARS.configuration );
 
-       // Must be after mw.config.set because these callbacks may use mw.loader which
-       // needs to have values 'skin', 'debug' etc. from mw.config.
-       window.RLQ = window.RLQ || [];
-       while ( RLQ.length ) {
-               RLQ.shift()();
+               // Must be after mw.config.set because these callbacks may use mw.loader which
+               // needs to have values 'skin', 'debug' etc. from mw.config.
+               window.RLQ = window.RLQ || [];
+               while ( RLQ.length ) {
+                       RLQ.shift()();
+               }
+               window.RLQ = {
+                       push: function ( fn ) {
+                               fn();
+                       }
+               };
        }
-       window.RLQ = {
-               push: function ( fn ) {
-                       fn();
+
+       var script = document.createElement( 'script' );
+       script.src = $VARS.baseModulesUri;
+       script.onload = script.onreadystatechange = function () {
+               if ( !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+                       // Clean up
+                       script.onload = script.onreadystatechange = null;
+                       script = null;
+                       // Callback
+                       startUp();
                }
        };
-}
-
-// Conditional script injection
-if ( isCompatible() ) {
-       ( function () {
-               var script = document.createElement( 'script' );
-               script.src = $VARS.baseModulesUri;
-               document.getElementsByTagName( 'head' )[0].appendChild( script );
-       }() );
-} else {
-       // Undo class swapping in case of an unsupported browser.
-       // See OutputPage::getHeadScripts().
-       document.documentElement.className = document.documentElement.className
-               .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
-}
+       document.getElementsByTagName( 'head' )[ 0 ].appendChild( script );
+}() );