aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFomafix <fomafix@googlemail.com>2019-09-10 08:07:57 +0200
committerFomafix <fomafix@googlemail.com>2019-09-10 12:51:16 +0200
commitd78d9fe3fb5afdcb3968d9957e6ff18c31106f6c (patch)
tree9240d693f3d2ff4c89a824d2f4489263ad09cf8f
parenta253c6d56cfa524f52379b8bf79bd4cd40143285 (diff)
downloadmediawikicore-d78d9fe3fb5afdcb3968d9957e6ff18c31106f6c.tar.gz
mediawikicore-d78d9fe3fb5afdcb3968d9957e6ff18c31106f6c.zip
resourceloader: Replace Xml::encodeJsCall by encodeJsonForScript
Also document that encodeJsonForScript can return false on invalid UTF-8 characters. Bug: T32956 Change-Id: I9c2fd33fb2130ada67fa70ff176e5488f1a014bf
-rw-r--r--includes/resourceloader/ResourceLoader.php20
-rw-r--r--includes/resourceloader/ResourceLoaderClientHtml.php2
-rw-r--r--includes/resourceloader/ResourceLoaderLanguageDataModule.php15
-rw-r--r--includes/resourceloader/ResourceLoaderUserDefaultsModule.php8
-rw-r--r--includes/resourceloader/ResourceLoaderUserOptionsModule.php11
-rw-r--r--includes/resourceloader/ResourceLoaderUserTokensModule.php9
6 files changed, 27 insertions, 38 deletions
diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php
index 4a23eae74fc8..6121bbf3043b 100644
--- a/includes/resourceloader/ResourceLoader.php
+++ b/includes/resourceloader/ResourceLoader.php
@@ -812,9 +812,9 @@ class ResourceLoader implements LoggerAwareInterface {
$errorText = implode( "\n\n", $this->errors );
$errorResponse = self::makeComment( $errorText );
if ( $context->shouldIncludeScripts() ) {
- $errorResponse .= 'if (window.console && console.error) {'
- . Xml::encodeJsCall( 'console.error', [ $errorText ] )
- . "}\n";
+ $errorResponse .= 'if (window.console && console.error) { console.error('
+ . self::encodeJsonForScript( $errorText )
+ . "); }\n";
}
// Prepend error info to the response
@@ -1323,7 +1323,7 @@ MESSAGE;
* @internal
* @since 1.32
* @param mixed $data
- * @return string JSON
+ * @return string|false JSON string, false on error
*/
public static function encodeJsonForScript( $data ) {
// Keep output as small as possible by disabling needless escape modes
@@ -1544,20 +1544,16 @@ MESSAGE;
* @throws Exception
*/
public static function makeConfigSetScript( array $configuration ) {
- $js = Xml::encodeJsCall(
- 'mw.config.set',
- [ $configuration ],
- self::inDebugMode()
- );
- if ( $js === false ) {
+ $json = self::encodeJsonForScript( $configuration );
+ if ( $json === false ) {
$e = new Exception(
'JSON serialization of config data failed. ' .
'This usually means the config data is not valid UTF-8.'
);
MWExceptionHandler::logException( $e );
- $js = Xml::encodeJsCall( 'mw.log.error', [ $e->__toString() ] );
+ return 'mw.log.error(' . self::encodeJsonForScript( $e->__toString() ) . ');';
}
- return $js;
+ return "mw.config.set($json);";
}
/**
diff --git a/includes/resourceloader/ResourceLoaderClientHtml.php b/includes/resourceloader/ResourceLoaderClientHtml.php
index 151b5fd50253..ea35de6bea98 100644
--- a/includes/resourceloader/ResourceLoaderClientHtml.php
+++ b/includes/resourceloader/ResourceLoaderClientHtml.php
@@ -478,7 +478,7 @@ JAVASCRIPT;
] );
} else {
$chunk = ResourceLoader::makeInlineScript(
- Xml::encodeJsCall( 'mw.loader.load', [ $url ] ),
+ 'mw.loader.load(' . ResourceLoader::encodeJsonForScript( $url ) . ');',
$nonce
);
}
diff --git a/includes/resourceloader/ResourceLoaderLanguageDataModule.php b/includes/resourceloader/ResourceLoaderLanguageDataModule.php
index 7a7ab892ce4d..c0a0921e11db 100644
--- a/includes/resourceloader/ResourceLoaderLanguageDataModule.php
+++ b/includes/resourceloader/ResourceLoaderLanguageDataModule.php
@@ -52,16 +52,11 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderFileModule {
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
- $fileScript = parent::getScript( $context );
- $langDataScript = Xml::encodeJsCall(
- 'mw.language.setData',
- [
- $context->getLanguage(),
- $this->getData( $context )
- ],
- ResourceLoader::inDebugMode()
- );
- return $fileScript . $langDataScript;
+ return parent::getScript( $context )
+ . 'mw.language.setData('
+ . ResourceLoader::encodeJsonForScript( $context->getLanguage() ) . ','
+ . ResourceLoader::encodeJsonForScript( $this->getData( $context ) )
+ . ');';
}
/**
diff --git a/includes/resourceloader/ResourceLoaderUserDefaultsModule.php b/includes/resourceloader/ResourceLoaderUserDefaultsModule.php
index b9dc098268c6..61cff822c971 100644
--- a/includes/resourceloader/ResourceLoaderUserDefaultsModule.php
+++ b/includes/resourceloader/ResourceLoaderUserDefaultsModule.php
@@ -40,10 +40,8 @@ class ResourceLoaderUserDefaultsModule extends ResourceLoaderModule {
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
- return Xml::encodeJsCall(
- 'mw.user.options.set',
- [ User::getDefaultOptions() ],
- ResourceLoader::inDebugMode()
- );
+ return 'mw.user.options.set('
+ . ResourceLoader::encodeJsonForScript( User::getDefaultOptions() )
+ . ');';
}
}
diff --git a/includes/resourceloader/ResourceLoaderUserOptionsModule.php b/includes/resourceloader/ResourceLoaderUserOptionsModule.php
index 0d40ad71ea10..ecbb50193cf6 100644
--- a/includes/resourceloader/ResourceLoaderUserOptionsModule.php
+++ b/includes/resourceloader/ResourceLoaderUserOptionsModule.php
@@ -52,11 +52,12 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
*/
public function getScript( ResourceLoaderContext $context ) {
// Use FILTER_NOMIN annotation to prevent needless minification and caching (T84960).
- return ResourceLoader::FILTER_NOMIN . Xml::encodeJsCall(
- 'mw.user.options.set',
- [ $context->getUserObj()->getOptions( User::GETOPTIONS_EXCLUDE_DEFAULTS ) ],
- ResourceLoader::inDebugMode()
- );
+ return ResourceLoader::FILTER_NOMIN
+ . 'mw.user.options.set('
+ . ResourceLoader::encodeJsonForScript(
+ $context->getUserObj()->getOptions( User::GETOPTIONS_EXCLUDE_DEFAULTS )
+ )
+ . ');';
}
/**
diff --git a/includes/resourceloader/ResourceLoaderUserTokensModule.php b/includes/resourceloader/ResourceLoaderUserTokensModule.php
index ae4fb67b8d5c..85c14cb99238 100644
--- a/includes/resourceloader/ResourceLoaderUserTokensModule.php
+++ b/includes/resourceloader/ResourceLoaderUserTokensModule.php
@@ -53,11 +53,10 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
*/
public function getScript( ResourceLoaderContext $context ) {
// Use FILTER_NOMIN annotation to prevent needless minification and caching (T84960).
- return ResourceLoader::FILTER_NOMIN . Xml::encodeJsCall(
- 'mw.user.tokens.set',
- [ $this->contextUserTokens( $context ) ],
- ResourceLoader::inDebugMode()
- );
+ return ResourceLoader::FILTER_NOMIN
+ . 'mw.user.tokens.set('
+ . ResourceLoader::encodeJsonForScript( $this->contextUserTokens( $context ) )
+ . ');';
}
/**