X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=resources%2Fsrc%2Fstartup.js;h=97b4fce258d07c5beaed188e788a118f9cd588b0;hp=133245940983262b048ab4dce0cfb5bcdd841d09;hb=d92845c2295d982c80312880c3fae788450676ea;hpb=d30c1b1178f9424c9507c69d1585a1b50b8934b1 diff --git a/resources/src/startup.js b/resources/src/startup.js index 1332459409..97b4fce258 100644 --- a/resources/src/startup.js +++ b/resources/src/startup.js @@ -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,28 +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; + } - $CODE.registrations(); + /** + * The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php. + */ + function startUp() { + mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals ); - window.RLQ = window.RLQ || []; - while ( RLQ.length ) { - RLQ.shift()(); + $CODE.registrations(); + + 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()(); + } + window.RLQ = { + push: function ( fn ) { + fn(); + } + }; } - 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(); } }; - - mw.config.set( $VARS.configuration ); -} - -// Conditional script injection -if ( isCompatible() ) { - document.write( $VARS.baseModulesScript ); -} + document.getElementsByTagName( 'head' )[ 0 ].appendChild( script ); +}() );