[MediaWiki-commits] [Gerrit] mediawiki/core[master]: resourceloader: Move 'site' and 'user' logic to makeModuleRe...
jenkins-bot has submitted this change and it was merged. Change subject: resourceloader: Move 'site' and 'user' logic to makeModuleResponse .. resourceloader: Move 'site' and 'user' logic to makeModuleResponse * Keep this out of makeLoaderImplementScript() to keep it more generic and to simplify future refactoring. * Remove now-broken test case that asserted that the output varies by global debug mode. * Make the test responsible for wrapping in XmlJsCode. Previously this magically happened because the module name was "user" in the last test case. * Make makeLoaderImplementScript protected. It's not used anywhere outside ResourceLoader and we should keep it that way. Test plan: * Verify output unchanged: - load.php?modules=user=scripts=Admin (raw code) - load.php?modules=user=Admin (implement with unwrapped string) - load.php?modules=jquery.client (implement with closure) Change-Id: I527d01926fb6e4ce68c931695d830cdb9ceb608c --- M includes/resourceloader/ResourceLoader.php M resources/src/mediawiki/mediawiki.js M tests/phpunit/includes/resourceloader/ResourceLoaderTest.php 3 files changed, 35 insertions(+), 34 deletions(-) Approvals: Aaron Schulz: Looks good to me, approved jenkins-bot: Verified diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index 97a86c3..34a0a99 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -1031,9 +1031,23 @@ $strContent = isset( $styles['css'] ) ? implode( '', $styles['css'] ) : ''; break; default: + $scripts = isset( $content['scripts'] ) ? $content['scripts'] : ''; + if ( is_string( $scripts ) ) { + if ( $name === 'site' || $name === 'user' ) { + // Legacy scripts that run in the global scope without a closure. + // mw.loader.implement will use globalEval if scripts is a string. + // Minify manually here, because general response minification is + // not effective due it being a string literal, not a function. + if ( !ResourceLoader::inDebugMode() ) { + $scripts = self::filter( 'minify-js', $scripts ); // T107377 + } + } else { + $scripts = new XmlJsCode( $scripts ); + } + } $strContent = self::makeLoaderImplementScript( $name, - isset( $content['scripts'] ) ? $content['scripts'] : '', + $scripts, isset( $content['styles'] ) ? $content['styles'] : [], isset( $content['messagesBlob'] ) ? new XmlJsCode( $content['messagesBlob'] ) : [], isset( $content['templates'] ) ? $content['templates'] : [] @@ -1112,7 +1126,8 @@ * Return JS code that calls mw.loader.implement with given module properties. * * @param string $name Module name -* @param mixed $scripts List of URLs to JavaScript files or String of JavaScript code +* @param XmlJsCode|array|string $scripts Code as XmlJsCode (to be wrapped in a closure), +* list of URLs to JavaScript files, or a string of JavaScript for `$.globalEval`. * @param mixed $styles Array of CSS strings keyed by media type, or an array of lists of URLs * to CSS files keyed by media type * @param mixed $messages List of messages associated with this module. May either be an @@ -1123,22 +1138,13 @@ * @throws MWException * @return string */ - public static function makeLoaderImplementScript( + protected static function makeLoaderImplementScript( $name, $scripts, $styles, $messages, $templates ) { - if ( is_string( $scripts ) ) { - // Site and user module are a
[MediaWiki-commits] [Gerrit] mediawiki/core[master]: resourceloader: Move 'site' and 'user' logic to makeModuleRe...
Krinkle has uploaded a new change for review. https://gerrit.wikimedia.org/r/310727 Change subject: resourceloader: Move 'site' and 'user' logic to makeModuleResponse .. resourceloader: Move 'site' and 'user' logic to makeModuleResponse * Keep this out of makeLoaderImplementScript() to keep it more generic and to simplify future refactoring. * Remove now-broken test case that asserted that the output varies by global debug mode. * Make the test responsible for wrapping in XmlJsCode. Previously this magically happened because the module name was "user" in the last test case. Change-Id: I527d01926fb6e4ce68c931695d830cdb9ceb608c --- M includes/resourceloader/ResourceLoader.php M tests/phpunit/includes/resourceloader/ResourceLoaderTest.php 2 files changed, 28 insertions(+), 29 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/27/310727/1 diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index 97a86c3..db26dd8 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -1031,9 +1031,23 @@ $strContent = isset( $styles['css'] ) ? implode( '', $styles['css'] ) : ''; break; default: + $scripts = isset( $content['scripts'] ) ? $content['scripts'] : ''; + if ( is_string( $scripts ) ) { + if ( $name === 'site' || $name === 'user' ) { + // Legacy scripts that run in the global scope without closure. + // Transport as string instructs mw.loader.implement to use globalEval. + // Minify manually here, because general response minification is not + // effective due it being a string literal, not a function. (T107377) + if ( !ResourceLoader::inDebugMode() ) { + $scripts = self::filter( 'minify-js', $scripts ); + } + } else { + $scripts = new XmlJsCode( $scripts ); + } + } $strContent = self::makeLoaderImplementScript( $name, - isset( $content['scripts'] ) ? $content['scripts'] : '', + $scripts, isset( $content['styles'] ) ? $content['styles'] : [], isset( $content['messagesBlob'] ) ? new XmlJsCode( $content['messagesBlob'] ) : [], isset( $content['templates'] ) ? $content['templates'] : [] @@ -1112,7 +1126,8 @@ * Return JS code that calls mw.loader.implement with given module properties. * * @param string $name Module name -* @param mixed $scripts List of URLs to JavaScript files or String of JavaScript code +* @param string|array|XmlJsCode $scripts JavaScript code to be wrapped in a closure, +* list of URLs to JavaScript files, or raw JavaScript code as XmlJsCode. * @param mixed $styles Array of CSS strings keyed by media type, or an array of lists of URLs * to CSS files keyed by media type * @param mixed $messages List of messages associated with this module. May either be an @@ -1126,19 +1141,10 @@ public static function makeLoaderImplementScript( $name, $scripts, $styles, $messages, $templates ) { - if ( is_string( $scripts ) ) { - // Site and user module are a legacy scripts that run in the global scope (no closure). - // Transportation as string instructs mw.loader.implement to use globalEval. - if ( $name === 'site' || $name === 'user' ) { - // Minify manually because the general makeModuleResponse() minification won't be - // effective here due to the script being a string instead of a function. (T107377) -