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

Change subject: Split out ResourceLoaderTemplateParserModule from 
ResourceLoaderTemplateModule
......................................................................


Split out ResourceLoaderTemplateParserModule from ResourceLoaderTemplateModule

Deprecate ResourceLoaderTemplateModule

Change-Id: If8921332ba3176e3dc2f739c709587701480518e
---
M Mantle.php
M includes/Hooks.php
A includes/ResourceLoaderParsedMessageModule.php
M includes/ResourceLoaderTemplateModule.php
A tests/ResourceLoaderParsedMessageModuleTest.php
M tests/ResourceLoaderTemplateModuleTest.php
6 files changed, 212 insertions(+), 177 deletions(-)

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



diff --git a/Mantle.php b/Mantle.php
index 5f6f2d4..d60a716 100644
--- a/Mantle.php
+++ b/Mantle.php
@@ -21,6 +21,7 @@
 // autoload extension classes
 $autoloadClasses = array (
        'MantleHooks' => 'Hooks',
+       'ResourceLoaderParsedMessageModule' => 
'ResourceLoaderParsedMessageModule',
        'ResourceLoaderTemplateModule' => 'ResourceLoaderTemplateModule',
 );
 
diff --git a/includes/Hooks.php b/includes/Hooks.php
index f879399..6702992 100644
--- a/includes/Hooks.php
+++ b/includes/Hooks.php
@@ -26,6 +26,7 @@
                        array_map( $callback,
                                array(
                                        'ResourceLoaderTemplateModuleTest.php',
+                                       
'ResourceLoaderParsedMessageModuleTest.php',
                                )
                        )
                );
diff --git a/includes/ResourceLoaderParsedMessageModule.php 
b/includes/ResourceLoaderParsedMessageModule.php
new file mode 100644
index 0000000..08efeaa
--- /dev/null
+++ b/includes/ResourceLoaderParsedMessageModule.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * ResourceLoaderModule subclass for mobile
+ * Allows basic parsing of messages without arguments
+ */
+class ResourceLoaderParsedMessageModule 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/includes/ResourceLoaderTemplateModule.php 
b/includes/ResourceLoaderTemplateModule.php
index 84df31f..d88e9d7 100644
--- a/includes/ResourceLoaderTemplateModule.php
+++ b/includes/ResourceLoaderTemplateModule.php
@@ -4,28 +4,16 @@
  */
 
 /**
- * ResourceLoaderModule subclass for mobile
- * Allows basic parsing of messages without arguments
+ * ResourceLoaderTemplateModule subclass
+ * A deprecated module for hacking templates into ResourceLoader.
+ * Use ResourceLoaderFileModule or ResourceLoaderParsedMessageModule instead.
+ * @deprecated
  */
-class ResourceLoaderTemplateModule extends ResourceLoaderFileModule {
-       /** @var array Saves a list of names of modules this module depends on. 
*/
-       protected $dependencies = array();
-       /** @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();
+class ResourceLoaderTemplateModule extends ResourceLoaderParsedMessageModule {
        /** @var array Saves a list of the templates named by the modules. */
        protected $legacyTemplates = array();
-       /** @var string Base path to prepend to all local paths in $options. 
Defaults to $IP. */
-       protected $localBasePath;
-       /** @var array Saves the target for the module (e.g. desktop and 
mobile). */
-       protected $targets = array( 'mobile', 'desktop' );
        /** @var string The local path to where templates are located, see 
__construct() */
        protected $localTemplateBasePath = '';
-       /** @var boolean Whether the module has parsed messages or not. */
-       private $hasParsedMessages = false;
-       /** @var boolean Whether the module has templates or not. */
-       private $hasTemplates = false;
 
        /**
         * @var array Cache for mtime of templates
@@ -44,28 +32,13 @@
                                        $this->{$member} = (string) $option;
                                        break;
                                case 'templates':
-                                       $this->hasTemplates = true;
+                                       $this->hasHackedScriptMode = true;
                                        $this->legacyTemplates = (array)$option;
-                                       break;
-                               case 'messages':
-                                       $this->processMessages( $option );
-                                       $this->hasParsedMessages = true;
-                                       // Prevent them being reinitialised 
when parent construct is called.
-                                       unset( $options[$member] );
                                        break;
                        }
                }
 
                parent::__construct( $options );
-       }
-
-       /**
-        * Gets list of names of modules this module depends on.
-        *
-        * @return Array List of module names
-        */
-       public function getDependencies() {
-               return $this->dependencies;
        }
 
        /**
@@ -118,47 +91,6 @@
        }
 
        /**
-        * 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
@@ -166,33 +98,7 @@
         */
        public function getScript( ResourceLoaderContext $context ) {
                $script = parent::getScript( $context );
-               return $this->addParsedMessages() . $this->getTemplateScript() 
. $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->hasParsedMessages || $this->hasTemplates ) {
-                       $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;
+               return $this->getTemplateScript() . $script;
        }
 
        /**
diff --git a/tests/ResourceLoaderParsedMessageModuleTest.php 
b/tests/ResourceLoaderParsedMessageModuleTest.php
new file mode 100644
index 0000000..490bf38
--- /dev/null
+++ b/tests/ResourceLoaderParsedMessageModuleTest.php
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * @group Mantle
+ */
+class ResourceLoaderParsedMessageModuleTest 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 ResourceLoaderParsedMessageModule( $module );
+               $js = $rl->addParsedMessages();
+
+               $this->assertEquals( $js, $expectedJavascript );
+       }
+
+       /**
+        * @dataProvider providerGetMessages
+        */
+       public function testGetMessages( $module, $expectedMessages ) {
+               $rl = new ResourceLoaderParsedMessageModule( $module );
+               $msgs = $rl->getMessages();
+
+               $this->assertEquals( $msgs, $expectedMessages );
+       }
+}
diff --git a/tests/ResourceLoaderTemplateModuleTest.php 
b/tests/ResourceLoaderTemplateModuleTest.php
index 5f215f3..f59b515 100644
--- a/tests/ResourceLoaderTemplateModuleTest.php
+++ b/tests/ResourceLoaderTemplateModuleTest.php
@@ -8,18 +8,6 @@
                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' ),
-                       ),
-               ),
 
                'templateModule' => array(
                        'templates' => array(
@@ -44,50 +32,6 @@
        );
 
        // 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"
-                       ),
-               );
-       }
-
        public function providerGetTemplateNames() {
                return array(
                        array(
@@ -140,26 +84,6 @@
        }
 
        // tests
-
-       /**
-        * @dataProvider providerAddParsedMessages
-        */
-       public function testAddParsedMessages( $module, $expectedJavascript ) {
-               $rl = new ResourceLoaderTemplateModule( $module );
-               $js = $rl->addParsedMessages();
-
-               $this->assertEquals( $js, $expectedJavascript );
-       }
-
-       /**
-        * @dataProvider providerGetMessages
-        */
-       public function testGetMessages( $module, $expectedMessages ) {
-               $rl = new ResourceLoaderTemplateModule( $module );
-               $msgs = $rl->getMessages();
-
-               $this->assertEquals( $msgs, $expectedMessages );
-       }
 
        /**
         * @dataProvider providerGetTemplateNames

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

Gerrit-MessageType: merged
Gerrit-Change-Id: If8921332ba3176e3dc2f739c709587701480518e
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/Mantle
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>
Gerrit-Reviewer: Jdlrobson <[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