X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fstartup.js;h=d672d7697b8ccceefaf337e8a6a92f2c44e0e3e9;hb=f7e1770fb832aa77bf4e16ce8cc815f2b24dd10d;hp=deb280a8f18b8161434c64faa5ea1847b76d4a29;hpb=944b93ee740d491ec6353f3fa5a439db41de97b8;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/startup.js b/resources/src/startup.js index deb280a8f1..d672d7697b 100644 --- a/resources/src/startup.js +++ b/resources/src/startup.js @@ -1,44 +1,41 @@ /** - * Code in this file MUST work on even the most ancient of browsers! + * This file is where we decide whether to initialise the Grade A run-time. * - * This file is where we decide whether to initialise the modern run-time. + * - Beware: This file MUST parse without errors on even the most ancient of browsers! + * - Beware: Do not call mwNow before the isCompatible() check. */ -/* global mw, $VARS, $CODE */ - -var mwPerformance = ( window.performance && performance.mark ) ? performance : { - mark: function () {} - }, - // Define now() here to ensure valid comparison with mediaWikiLoadEnd (T153819). - mwNow = ( function () { - var perf = window.performance, - navStart = perf && perf.timing && perf.timing.navigationStart; - return navStart && typeof perf.now === 'function' ? - function () { return navStart + perf.now(); } : - function () { return +new Date(); }; - }() ), - // eslint-disable-next-line no-unused-vars - mediaWikiLoadStart = mwNow(); - -mwPerformance.mark( 'mwLoadStart' ); +/* global mw, mwPerformance, mwNow, isCompatible, $VARS, $CODE */ + +window.mwPerformance = ( window.performance && performance.mark ) ? performance : { + mark: function () {} +}; +// Define now() here to ensure valid comparison with mediaWikiLoadEnd (T153819). +window.mwNow = ( function () { + var perf = window.performance, + navStart = perf && perf.timing && perf.timing.navigationStart; + return navStart && typeof perf.now === 'function' ? + function () { return navStart + perf.now(); } : + function () { return Date.now(); }; +}() ); /** * See * * Capabilities required for modern run-time: + * - ECMAScript 5 * - DOM Level 4 & Selectors API Level 1 * - HTML5 & Web Storage * - DOM Level 2 Events - * - JSON * * Browsers we support in our modern run-time (Grade A): - * - Chrome 4+ - * - IE 9+ - * - Firefox 3.5+ + * - Chrome 13+ + * - IE 10+ + * - Firefox 4+ * - Safari 5+ - * - Opera 10.5+ - * - Mobile Safari (iOS 4+) - * - Android 2.0+ + * - Opera 12.10+ + * - Mobile Safari 5.1+ (iOS 5+) + * - Android 4.1+ * * Browsers we support in our no-javascript run-time (Grade C): * - Chrome 1+ @@ -46,6 +43,8 @@ mwPerformance.mark( 'mwLoadStart' ); * - Firefox 3+ * - Safari 3+ * - Opera 10+ + * - Mobile Safari 5.0+ (iOS 4+) + * - Android 2.0+ * - WebOS < 1.5 * - PlayStation * - Symbian-based browsers @@ -61,9 +60,17 @@ mwPerformance.mark( 'mwLoadStart' ); * @param {string} [str] User agent, defaults to navigator.userAgent * @return {boolean} User agent is compatible with MediaWiki JS */ -function isCompatible( str ) { +window.isCompatible = function ( str ) { var ua = str || navigator.userAgent; return !!( + // http://caniuse.com/#feat=es5 + // http://caniuse.com/#feat=use-strict + // http://caniuse.com/#feat=json / https://phabricator.wikimedia.org/T141344#2784065 + ( function () { + 'use strict'; + return !this && !!Function.prototype.bind && !!window.JSON; + }() ) && + // http://caniuse.com/#feat=queryselector 'querySelector' in document && @@ -75,10 +82,6 @@ function isCompatible( str ) { // http://caniuse.com/#feat=addeventlistener 'addEventListener' in window && - // http://caniuse.com/#feat=json - // https://phabricator.wikimedia.org/T141344#2784065 - ( window.JSON && JSON.stringify && JSON.parse ) && - // Hardcoded exceptions for browsers that pass the requirement but we don't want to // support in the modern run-time. // Note: Please extend the regex instead of adding new ones @@ -87,7 +90,7 @@ function isCompatible( str ) { ua.match( /PlayStation/i ) ) ); -} +}; // Conditional script injection ( function () { @@ -147,6 +150,9 @@ function isCompatible( str ) { }; } + window.mediaWikiLoadStart = mwNow(); + mwPerformance.mark( 'mwLoadStart' ); + script = document.createElement( 'script' ); script.src = $VARS.baseModulesUri; script.onload = script.onreadystatechange = function () {