[MediaWiki-commits] [Gerrit] mediawiki/core[master]: resourceloader: Move 'site' and 'user' logic to makeModuleRe...

2016-09-16 Thread jenkins-bot (Code Review)
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...

2016-09-14 Thread Krinkle (Code Review)
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)
-