$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 = <<<JAVASCRIPT
+document.documentElement.className = document.documentElement.className
+ .replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );
+JAVASCRIPT;
- // Inline RLQ: Set page variables
+ // Inline script: Declare mw.config variables for this page.
if ( $this->config ) {
- $chunks[] = ResourceLoader::makeInlineScript(
- ResourceLoader::makeConfigSetScript( $this->config ),
- $nonce
- );
+ $confJson = ResourceLoader::encodeJsonForScript( $this->config );
+ $script .= <<<JAVASCRIPT
+RLCONF = {$confJson};
+JAVASCRIPT;
}
- // Inline RLQ: Initial module states
+ // Inline script: Declare initial module states for this page.
$states = array_merge( $this->exemptStates, $data['states'] );
if ( $states ) {
- $chunks[] = ResourceLoader::makeInlineScript(
- ResourceLoader::makeLoaderStateScript( $states ),
+ $stateJson = ResourceLoader::encodeJsonForScript( $states );
+ $script .= <<<JAVASCRIPT
+RLSTATE = {$stateJson};
+JAVASCRIPT;
+ }
+
+ // Inline script: Declare general modules to load on this page.
+ if ( $data['general'] ) {
+ $pageModulesJson = ResourceLoader::encodeJsonForScript( $data['general'] );
+ $script .= <<<JAVASCRIPT
+RLPAGEMODULES = {$pageModulesJson};
+JAVASCRIPT;
+ }
+
+ if ( $this->context->getDebug() ) {
+ $chunks[] = Html::inlineScript( $script, $nonce );
+ } else {
+ $chunks[] = Html::inlineScript(
+ ResourceLoader::filter( 'minify-js', $script, [ 'cache' => false ] ),
$nonce
);
}
);
}
- // 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(
] );
// phpcs:disable Generic.Files.LineLength
- $expected = '<script>document.documentElement.className = document.documentElement.className.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );</script>' . "\n"
+ $expected = '<script>'
+ . 'document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-nojs(\s|$)/,"$1client-js$2");'
+ . 'RLCONF={"key":"value"};'
+ . 'RLSTATE={"test.exempt":"ready","test.private":"loading","test.styles.pure":"ready","test.styles.private":"ready","test.styles.deprecated":"ready"};'
+ . 'RLPAGEMODULES=["test"];'
+ . '</script>' . "\n"
. '<script>(window.RLQ=window.RLQ||[]).push(function(){'
- . 'mw.config.set({"key":"value"});'
- . 'mw.loader.state({"test.exempt":"ready","test.private":"loading","test.styles.pure":"ready","test.styles.private":"ready","test.styles.deprecated":"ready"});'
. 'mw.loader.implement("test.private@{blankVer}",null,{"css":[]});'
- . 'RLPAGEMODULES=["test"];mw.loader.load(RLPAGEMODULES);'
. '});</script>' . "\n"
. '<link rel="stylesheet" href="/w/load.php?lang=nl&modules=test.styles.deprecated%2Cpure&only=styles&skin=fallback"/>' . "\n"
. '<style>.private{}</style>' . "\n"
);
// phpcs:disable Generic.Files.LineLength
- $expected = '<script>document.documentElement.className = document.documentElement.className.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );</script>' . "\n"
+ $expected = '<script>document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-nojs(\s|$)/,"$1client-js$2");</script>' . "\n"
. '<script async="" src="/w/load.php?lang=nl&modules=startup&only=scripts&skin=fallback&target=example"></script>';
// phpcs:enable
);
// phpcs:disable Generic.Files.LineLength
- $expected = '<script>document.documentElement.className = document.documentElement.className.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );</script>' . "\n"
+ $expected = '<script>document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-nojs(\s|$)/,"$1client-js$2");</script>' . "\n"
. '<script async="" src="/w/load.php?lang=nl&modules=startup&only=scripts&safemode=1&skin=fallback"></script>';
// phpcs:enable
);
// phpcs:disable Generic.Files.LineLength
- $expected = '<script>document.documentElement.className = document.documentElement.className.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );</script>' . "\n"
+ $expected = '<script>document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-nojs(\s|$)/,"$1client-js$2");</script>' . "\n"
. '<script async="" src="/w/load.php?lang=nl&modules=startup&only=scripts&skin=fallback"></script>';
// phpcs:enable