jenkins-bot has submitted this change and it was merged.

Change subject: Hygiene: Move ResourceLoaderParsedMessageModule to 
MobileFrontend
......................................................................


Hygiene: Move ResourceLoaderParsedMessageModule to MobileFrontend

Rename to maintain backwards compatibility

See also:
https://gerrit.wikimedia.org/r/182959

Change-Id: I627c46b7f673fcc98e3546f31990c31114566c5f
---
M MobileFrontend.php
M includes/MobileFrontend.hooks.php
M includes/Resources.php
A includes/modules/MFResourceLoaderParsedMessageModule.php
A tests/phpunit/modules/MFResourceLoaderParsedMessageModuleTest.php
5 files changed, 219 insertions(+), 10 deletions(-)

Approvals:
  Kaldari: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/MobileFrontend.php b/MobileFrontend.php
index 02b49e1..891f800 100644
--- a/MobileFrontend.php
+++ b/MobileFrontend.php
@@ -94,6 +94,8 @@
        'MinervaTemplateBeta' => 'skins/MinervaTemplateBeta',
        'MinervaTemplateAlpha' => 'skins/MinervaTemplateAlpha',
 
+       'MFResourceLoaderParsedMessageModule' => 
'modules/MFResourceLoaderParsedMessageModule',
+
        'SkinMinerva' => 'skins/SkinMinerva',
        'SkinMinervaBeta' => 'skins/SkinMinervaBeta',
        'SkinMinervaAlpha' => 'skins/SkinMinervaAlpha',
@@ -241,6 +243,14 @@
        'targets' => 'mobile',
        'group' => 'other',
 );
+
+/**
+ * A mobile enabled ResourceLoaderFileModule template which supports parsed 
messages.
+ */
+$wgMFResourceParsedMessageModuleBoilerplate = $wgMFResourceBoilerplate + array(
+       'class' => 'MFResourceLoaderParsedMessageModule',
+);
+
 require_once __DIR__ . "/includes/Resources.php";
 
 /**
diff --git a/includes/MobileFrontend.hooks.php 
b/includes/MobileFrontend.hooks.php
index 1b0fdff..e16266b 100644
--- a/includes/MobileFrontend.hooks.php
+++ b/includes/MobileFrontend.hooks.php
@@ -781,6 +781,7 @@
                                        'DeviceDetectionTest.php',
                                        'MobileContextTest.php',
                                        'MobileFormatterTest.php',
+                                       
'modules/MFResourceLoaderParsedMessageModuleTest.php',
                                        'skins/SkinMinervaTest.php',
                                        'skins/SkinMinervaAlphaTest.php',
                                        'skins/SkinMinervaBetaTest.php',
diff --git a/includes/Resources.php b/includes/Resources.php
index 62a5fd3..d60e47c 100644
--- a/includes/Resources.php
+++ b/includes/Resources.php
@@ -339,8 +339,7 @@
                ),
        ),
 
-       'mobile.editor.common' => $wgMFResourceFileModuleBoilerplate + array(
-               'class' => 'ResourceLoaderParsedMessageModule',
+       'mobile.editor.common' => $wgMFResourceParsedMessageModuleBoilerplate + 
array(
                'dependencies' => array(
                        'mobile.stable',
                        'mobile.templates',
@@ -413,8 +412,7 @@
                ),
        ),
 
-       'mobile.uploads' => $wgMFResourceFileModuleBoilerplate + array(
-               'class' => 'ResourceLoaderParsedMessageModule',
+       'mobile.uploads' => $wgMFResourceParsedMessageModuleBoilerplate + array(
                'dependencies' => array(
                        'mobile.stable',
                        'mobile.templates',
@@ -504,8 +502,7 @@
                ),
        ),
 
-       'mobile.search' => $wgMFResourceFileModuleBoilerplate + array(
-               'class' => 'ResourceLoaderParsedMessageModule',
+       'mobile.search' => $wgMFResourceParsedMessageModuleBoilerplate + array(
                'dependencies' => array(
                        'mobile.pagelist.scripts',
                        'mobile.overlays',
@@ -899,8 +896,7 @@
                ),
        ),
 
-       'mobile.languages' => $wgMFResourceFileModuleBoilerplate + array(
-               'class' => 'ResourceLoaderParsedMessageModule',
+       'mobile.languages' => $wgMFResourceParsedMessageModuleBoilerplate + 
array(
                'dependencies' => array(
                        'mobile.overlays',
                        'mobile.templates',
@@ -1106,8 +1102,7 @@
                'position' => 'top',
        ),
 
-       'mobile.infobox' => $wgMFResourceFileModuleBoilerplate + array(
-               'class' => 'ResourceLoaderParsedMessageModule',
+       'mobile.infobox' => $wgMFResourceParsedMessageModuleBoilerplate + array(
                'dependencies' => array(
                        'mobile.wikidata.api',
                        'mobile.ajax',
diff --git a/includes/modules/MFResourceLoaderParsedMessageModule.php 
b/includes/modules/MFResourceLoaderParsedMessageModule.php
new file mode 100644
index 0000000..7ae9f8c
--- /dev/null
+++ b/includes/modules/MFResourceLoaderParsedMessageModule.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * ResourceLoaderModule subclass for mobile
+ * Allows basic parsing of messages without arguments
+ */
+class MFResourceLoaderParsedMessageModule extends ResourceLoaderFileModule {
+       /** @var array Saves a list of messages which have been marked as 
needing parsing. */
+       protected $parsedMessages = array();
+       /** @var array Saves a list of message keys used by this module. */
+       protected $messages = array();
+       /** @var array Saves the target for the module (e.g. desktop and 
mobile). */
+       protected $targets = array( 'mobile', 'desktop' );
+       /** @var boolean Whether the module abuses getScripts. */
+       protected $hasHackedScriptMode = false;
+
+       /**
+        * Registers core modules and runs registration hooks.
+        * @param $options List of options; if not given or empty, an empty 
module will be constructed
+        */
+       public function __construct( $options ) {
+               foreach ( $options as $member => $option ) {
+                       switch ( $member ) {
+                               case 'messages':
+                                       $this->processMessages( $option );
+                                       $this->hasHackedScriptMode = true;
+                                       // Prevent them being reinitialised 
when parent construct is called.
+                                       unset( $options[$member] );
+                                       break;
+                       }
+               }
+
+               parent::__construct( $options );
+       }
+
+       /**
+        * Processes messages which have been marked as needing parsing
+        *
+        * @return string JavaScript code
+        */
+       public function addParsedMessages() {
+               $js = "\n";
+               foreach ( $this->parsedMessages as $key ) {
+                       $value = wfMessage( $key )->parse();
+                       $js .= Xml::encodeJsCall( 'mw.messages.set', array( 
$key, $value ) );
+               }
+               return $js;
+       }
+
+       /**
+        * Separates messages which have been marked as needing parsing from 
standard messages
+        * @param array $messages Array of messages to process
+        */
+       public function processMessages( $messages ) {
+               foreach ( $messages as $key => $value ) {
+                       if ( is_array( $value ) ) {
+                               foreach ( $value as $directive ) {
+                                       if ( $directive == 'parse' ) {
+                                               $this->parsedMessages[] = $key;
+                                       }
+                               }
+                       } else {
+                               $this->messages[] = $value;
+                       }
+               }
+       }
+
+       /**
+        * Gets list of message keys used by this module.
+        *
+        * @return array List of message keys
+        */
+       public function getMessages() {
+               return $this->messages;
+       }
+
+       /**
+        * Gets all scripts for a given context concatenated together including 
processed messages
+        *
+        * @param ResourceLoaderContext $context Context in which to generate 
script
+        * @return string JavaScript code for $context
+        */
+       public function getScript( ResourceLoaderContext $context ) {
+               $script = parent::getScript( $context );
+               return $this->addParsedMessages() . $script;
+       }
+
+       /**
+        * Get the URL or URLs to load for this module's JS in debug mode.
+        * @param ResourceLoaderContext $context
+        * @return array list of urls
+        * @see ResourceLoaderModule::getScriptURLsForDebug
+        */
+       public function getScriptURLsForDebug( ResourceLoaderContext $context ) 
{
+               if ( $this->hasHackedScriptMode ) {
+                       $derivative = new DerivativeResourceLoaderContext( 
$context );
+                       $derivative->setDebug( true );
+                       $derivative->setModules( array( $this->getName() ) );
+                       // @todo FIXME: Make this templates and update
+                       // makeModuleResponse so that it only outputs template 
code.
+                       // When this is done you can merge with parent array and
+                       // retain file names.
+                       $derivative->setOnly( 'scripts' );
+                       $rl = $derivative->getResourceLoader();
+                       $urls = array(
+                               $rl->createLoaderURL( $this->getSource(), 
$derivative ),
+                       );
+               } else {
+                       $urls = parent::getScriptURLsForDebug( $context );
+               }
+               return $urls;
+       }
+}
diff --git a/tests/phpunit/modules/MFResourceLoaderParsedMessageModuleTest.php 
b/tests/phpunit/modules/MFResourceLoaderParsedMessageModuleTest.php
new file mode 100644
index 0000000..4ee5b44
--- /dev/null
+++ b/tests/phpunit/modules/MFResourceLoaderParsedMessageModuleTest.php
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * @group MobileFrontend
+ */
+class MFResourceLoaderParsedMessageModuleTest extends MediaWikiTestCase {
+       private $modules = array(
+               array(
+                       'messages' => array( 'foo', 'bar' ),
+               ),
+               array(
+                       'messages' => array(
+                               'foo',
+                               'mobile-frontend-photo-license' => array( 
'parse' ),
+                       ),
+               ),
+               array(
+                       'messages' => array(
+                               'foo',
+                               'mobile-frontend-photo-license' => array( 
'unknown' ),
+                       ),
+               ),
+       );
+
+       // providers
+       public function providerGetMessages() {
+               return array(
+                       array(
+                               $this->modules[0],
+                               array( 'foo', 'bar' ),
+                       ),
+                       array(
+                               $this->modules[1],
+                               array( 'foo' ),
+                       ),
+                       array(
+                               $this->modules[2],
+                               array( 'foo' ),
+                       ),
+               );
+       }
+
+       public function providerAddParsedMessages() {
+               $msg = wfMessage( 'mobile-frontend-photo-license' )->parse();
+               $expected = "\n" . Xml::encodeJsCall( 'mw.messages.set',
+                               array( 'mobile-frontend-photo-license', $msg ) 
);
+
+               return array(
+                       // test case 1
+                       array(
+                               $this->modules[0],
+                               // expected value
+                               "\n"
+                       ),
+                       // test case 2
+                       array(
+                               $this->modules[1],
+                               // expected value 2
+                               $expected
+                       ),
+                       // test case 3
+                       array(
+                               $this->modules[2],
+                               // expected value 2
+                               "\n"
+                       ),
+               );
+       }
+
+       // tests
+
+       /**
+        * @dataProvider providerAddParsedMessages
+        */
+       public function testAddParsedMessages( $module, $expectedJavascript ) {
+               $rl = new MFResourceLoaderParsedMessageModule( $module );
+               $js = $rl->addParsedMessages();
+
+               $this->assertEquals( $js, $expectedJavascript );
+       }
+
+       /**
+        * @dataProvider providerGetMessages
+        */
+       public function testGetMessages( $module, $expectedMessages ) {
+               $rl = new MFResourceLoaderParsedMessageModule( $module );
+               $msgs = $rl->getMessages();
+
+               $this->assertEquals( $msgs, $expectedMessages );
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/182957
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I627c46b7f673fcc98e3546f31990c31114566c5f
Gerrit-PatchSet: 9
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>
Gerrit-Reviewer: Bmansurov <[email protected]>
Gerrit-Reviewer: Florianschmidtwelzow <[email protected]>
Gerrit-Reviewer: Jdlrobson <[email protected]>
Gerrit-Reviewer: Jhernandez <[email protected]>
Gerrit-Reviewer: Kaldari <[email protected]>
Gerrit-Reviewer: MaxSem <[email protected]>
Gerrit-Reviewer: Phuedx <[email protected]>
Gerrit-Reviewer: Robmoen <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to