Merge "resourceloader: Allow style-only modules to have deprecation warnings"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 19 May 2018 08:47:21 +0000 (08:47 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 19 May 2018 08:47:21 +0000 (08:47 +0000)
includes/resourceloader/ResourceLoaderClientHtml.php
includes/resourceloader/ResourceLoaderModule.php
tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php

index 9eae7e8..479a263 100644 (file)
@@ -143,7 +143,8 @@ class ResourceLoaderClientHtml {
                                'styles' => [],
                                'general' => [],
                        ],
-
+                       // Deprecations for style-only modules
+                       'styledeprecations' => [],
                ];
 
                foreach ( $this->modules as $name ) {
@@ -208,6 +209,10 @@ class ResourceLoaderClientHtml {
                                        $data['styles'][] = $name;
                                }
                        }
+                       $deprecation = $module->getDeprecationInformation();
+                       if ( $deprecation ) {
+                               $data['styledeprecations'][] = $deprecation;
+                       }
                }
 
                foreach ( $this->moduleScripts as $name ) {
@@ -311,7 +316,15 @@ class ResourceLoaderClientHtml {
                        );
                }
 
-               // External stylesheets
+               // Deprecations for only=styles modules
+               if ( $data['styledeprecations'] ) {
+                       $chunks[] = ResourceLoader::makeInlineScript(
+                               implode( '', $data['styledeprecations'] ),
+                               $nonce
+                       );
+               }
+
+               // External stylesheets (only=styles)
                if ( $data['styles'] ) {
                        $chunks[] = $this->getLoad(
                                $data['styles'],
index 6d1529b..7351cb3 100644 (file)
@@ -139,7 +139,7 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
         *
         * @return string JavaScript code
         */
-       protected function getDeprecationInformation() {
+       public function getDeprecationInformation() {
                $deprecationInfo = $this->deprecated;
                if ( $deprecationInfo ) {
                        $name = $this->getName();
index 1017632..5b5c484 100644 (file)
@@ -72,6 +72,10 @@ class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
                                'shouldEmbed' => true,
                                'styles' => '.shouldembed{}',
                        ],
+                       'test.styles.deprecated' => [
+                               'type' => ResourceLoaderModule::LOAD_STYLES,
+                               'deprecated' => 'Deprecation message.',
+                       ],
 
                        'test.scripts' => [],
                        'test.scripts.user' => [ 'group' => 'user' ],
@@ -125,6 +129,7 @@ class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
                        'test.styles.private',
                        'test.styles.pure',
                        'test.styles.shouldembed',
+                       'test.styles.deprecated',
                        'test.unregistered.styles',
                ] );
                $client->setModuleScripts( [
@@ -145,6 +150,7 @@ class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
                                'test.styles.user.empty' => 'ready',
                                'test.styles.private' => 'ready',
                                'test.styles.shouldembed' => 'ready',
+                               'test.styles.deprecated' => 'ready',
                                'test.scripts' => 'loading',
                                'test.scripts.user' => 'loading',
                                'test.scripts.user.empty' => 'ready',
@@ -155,6 +161,7 @@ class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
                        ],
                        'styles' => [
                                'test.styles.pure',
+                               'test.styles.deprecated',
                        ],
                        'scripts' => [
                                'test.scripts',
@@ -169,6 +176,13 @@ class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
                                        'test.user',
                                ],
                        ],
+                       'styledeprecations' => [
+                               Xml::encodeJsCall(
+                                       'mw.log.warn',
+                                       [ 'This page is using the deprecated ResourceLoader module "test.styles.deprecated".
+Deprecation message.' ]
+                               )
+                       ],
                ];
 
                $access = TestingAccessWrapper::newFromObject( $client );
@@ -197,6 +211,7 @@ class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
                $client->setModuleStyles( [
                        'test.styles.pure',
                        'test.styles.private',
+                       'test.styles.deprecated',
                ] );
                $client->setModuleScripts( [
                        'test.scripts',
@@ -209,12 +224,13 @@ class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
                $expected = '<script>document.documentElement.className = document.documentElement.className.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );</script>' . "\n"
                        . '<script>(window.RLQ=window.RLQ||[]).push(function(){'
                        . 'mw.config.set({"key":"value"});'
-                       . 'mw.loader.state({"test.exempt":"ready","test.private":"loading","test.styles.pure":"ready","test.styles.private":"ready","test.scripts":"loading"});'
+                       . 'mw.loader.state({"test.exempt":"ready","test.private":"loading","test.styles.pure":"ready","test.styles.private":"ready","test.styles.deprecated":"ready","test.scripts":"loading"});'
                        . 'mw.loader.implement("test.private@{blankVer}",function($,jQuery,require,module){},{"css":[]});'
                        . 'mw.loader.load(["test"]);'
                        . 'mw.loader.load("/w/load.php?debug=false\u0026lang=nl\u0026modules=test.scripts\u0026only=scripts\u0026skin=fallback");'
+                       . 'mw.log.warn("This page is using the deprecated ResourceLoader module \"test.styles.deprecated\".\nDeprecation message.");'
                        . '});</script>' . "\n"
-                       . '<link rel="stylesheet" href="/w/load.php?debug=false&amp;lang=nl&amp;modules=test.styles.pure&amp;only=styles&amp;skin=fallback"/>' . "\n"
+                       . '<link rel="stylesheet" href="/w/load.php?debug=false&amp;lang=nl&amp;modules=test.styles.deprecated%2Cpure&amp;only=styles&amp;skin=fallback"/>' . "\n"
                        . '<style>.private{}</style>' . "\n"
                        . '<script async="" src="/w/load.php?debug=false&amp;lang=nl&amp;modules=startup&amp;only=scripts&amp;skin=fallback"></script>';
                // phpcs:enable