From: Timo Tijhof Date: Wed, 8 May 2019 17:24:07 +0000 (+0100) Subject: resourceloader: Move per-page function calls to startup.js X-Git-Tag: 1.34.0-rc.0~1752^2 X-Git-Url: https://git.cyclocoop.org/%7B%7B%20url_for%28%27votes%27%2C%20votes=%27waiting%27%29%20%7D%7D?a=commitdiff_plain;h=cd45307ba16230d880ad062da7ccde6fa086729c;p=lhc%2Fweb%2Fwiklou.git resourceloader: Move per-page function calls to startup.js Turn these embedded function calls into variable declarations, later consumed by startup.js. This has a few benefits: * Variables can be declared immediately, without needing to defer it to after mw.loader arrives from startup, via an RLQ callback. This makes the inline script simpler and a tiny bit smaller. * By moving the actual function calls to startup.js, they could easily be re-arranged in the future or migrated in other ways without needing to worry about HTML caching and keeping concurrent compatibility with both orders of execution. Change-Id: I1c995a9572d9eb3201a565341c19bdf81ab00eff --- diff --git a/includes/resourceloader/ResourceLoaderClientHtml.php b/includes/resourceloader/ResourceLoaderClientHtml.php index ec408c742b..6061fb518e 100644 --- a/includes/resourceloader/ResourceLoaderClientHtml.php +++ b/includes/resourceloader/ResourceLoaderClientHtml.php @@ -233,27 +233,43 @@ class ResourceLoaderClientHtml { $chunks = []; // Change "client-nojs" class to client-js. This allows easy toggling of UI components. - // This happens synchronously on every page view to avoid flashes of wrong content. + // This must happen synchronously on every page view to avoid flashes of wrong content. // See also #getDocumentAttributes() and /resources/src/startup.js. - $chunks[] = Html::inlineScript( - 'document.documentElement.className = document.documentElement.className' - . '.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );', - $nonce - ); + $script = <<config ) { - $chunks[] = ResourceLoader::makeInlineScript( - ResourceLoader::makeConfigSetScript( $this->config ), - $nonce - ); + $confJson = ResourceLoader::encodeJsonForScript( $this->config ); + $script .= <<exemptStates, $data['states'] ); if ( $states ) { - $chunks[] = ResourceLoader::makeInlineScript( - ResourceLoader::makeLoaderStateScript( $states ), + $stateJson = ResourceLoader::encodeJsonForScript( $states ); + $script .= <<context->getDebug() ) { + $chunks[] = Html::inlineScript( $script, $nonce ); + } else { + $chunks[] = Html::inlineScript( + ResourceLoader::filter( 'minify-js', $script, [ 'cache' => false ] ), $nonce ); } @@ -267,17 +283,6 @@ class ResourceLoaderClientHtml { ); } - // Inline RLQ: Load general modules - if ( $data['general'] ) { - $chunks[] = ResourceLoader::makeInlineScript( - 'RLPAGEMODULES=' - . ResourceLoader::encodeJsonForScript( $data['general'] ) - . ';' - . 'mw.loader.load(RLPAGEMODULES);', - $nonce - ); - } - // External stylesheets (only=styles) if ( $data['styles'] ) { $chunks[] = $this->getLoad( diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php index 9ab3a2dae3..9e310d97a3 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php @@ -107,12 +107,14 @@ Deprecation message.' ] ] ); // phpcs:disable Generic.Files.LineLength - $expected = '' . "\n" + $expected = '' . "\n" . '' . "\n" . '' . "\n" . '' . "\n" @@ -133,7 +135,7 @@ Deprecation message.' ] ); // phpcs:disable Generic.Files.LineLength - $expected = '' . "\n" + $expected = '' . "\n" . ''; // phpcs:enable @@ -150,7 +152,7 @@ Deprecation message.' ] ); // phpcs:disable Generic.Files.LineLength - $expected = '' . "\n" + $expected = '' . "\n" . ''; // phpcs:enable @@ -167,7 +169,7 @@ Deprecation message.' ] ); // phpcs:disable Generic.Files.LineLength - $expected = '' . "\n" + $expected = '' . "\n" . ''; // phpcs:enable