diff options
author | Fomafix <fomafix@googlemail.com> | 2019-09-10 08:07:57 +0200 |
---|---|---|
committer | Fomafix <fomafix@googlemail.com> | 2019-09-10 12:51:16 +0200 |
commit | d78d9fe3fb5afdcb3968d9957e6ff18c31106f6c (patch) | |
tree | 9240d693f3d2ff4c89a824d2f4489263ad09cf8f | |
parent | a253c6d56cfa524f52379b8bf79bd4cd40143285 (diff) | |
download | mediawikicore-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
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 ) ) + . ');'; } /** |