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