Jdlrobson has uploaded a new change for review.
https://gerrit.wikimedia.org/r/182957
Change subject: Hygiene: Move ResourceLoaderParsedMessageModule to
MobileFrontend
......................................................................
Hygiene: Move ResourceLoaderParsedMessageModule to MobileFrontend
Change-Id: I627c46b7f673fcc98e3546f31990c31114566c5f
---
M MobileFrontend.php
M includes/MobileFrontend.hooks.php
A includes/modules/ResourceLoaderParsedMessageModule.php
A tests/phpunit/modules/ResourceLoaderParsedMessageModuleTest.php
4 files changed, 206 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend
refs/changes/57/182957/1
diff --git a/MobileFrontend.php b/MobileFrontend.php
index c2417e3..830895b 100644
--- a/MobileFrontend.php
+++ b/MobileFrontend.php
@@ -91,6 +91,8 @@
'MinervaTemplateBeta' => 'skins/MinervaTemplateBeta',
'MinervaTemplateAlpha' => 'skins/MinervaTemplateAlpha',
+ 'ResourceLoaderParsedMessageModule' =>
'modules/ResourceLoaderParsedMessageModule',
+
'SkinMinerva' => 'skins/SkinMinerva',
'SkinMinervaBeta' => 'skins/SkinMinervaBeta',
'SkinMinervaAlpha' => 'skins/SkinMinervaAlpha',
diff --git a/includes/MobileFrontend.hooks.php
b/includes/MobileFrontend.hooks.php
index 4fba4dc..5844e7f 100644
--- a/includes/MobileFrontend.hooks.php
+++ b/includes/MobileFrontend.hooks.php
@@ -781,6 +781,7 @@
'DeviceDetectionTest.php',
'MobileContextTest.php',
'MobileFormatterTest.php',
+
'modules/ResourceLoaderParsedMessageModuleTest.php',
'skins/SkinMinervaTest.php',
'skins/SkinMinervaAlphaTest.php',
'specials/MobileSpecialPageTest.php',
diff --git a/includes/modules/ResourceLoaderParsedMessageModule.php
b/includes/modules/ResourceLoaderParsedMessageModule.php
new file mode 100644
index 0000000..08efeaa
--- /dev/null
+++ b/includes/modules/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/tests/phpunit/modules/ResourceLoaderParsedMessageModuleTest.php
b/tests/phpunit/modules/ResourceLoaderParsedMessageModuleTest.php
new file mode 100644
index 0000000..490bf38
--- /dev/null
+++ b/tests/phpunit/modules/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 );
+ }
+}
--
To view, visit https://gerrit.wikimedia.org/r/182957
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I627c46b7f673fcc98e3546f31990c31114566c5f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits