mediawiki-extensions-Visual.../includes/VisualEditorDataModule.php
Bartosz Dziewoński 4efc2f876d VisualEditorDataModule: Remove origin restriction
"ORIGIN_USER_SITEWIDE" indicates "sitewide module generated from
user-editable files, like MediaWiki:Common.js". In this case the
JavaScript generated by this module is not directly editably by wiki
users. It includes localisation messages editable by users, but that
is considered safe because we correctly escape them when including
them in the JavaScript code.

Without this change, VisualEditor would no longer load in safe mode
(T185303) because this module would be missing.

Bug: T185303
Change-Id: I6d097ccbf1dc2462843219adcf96bf8313e30289
2018-04-30 21:58:18 +02:00

114 lines
3.1 KiB
PHP

<?php
/**
* Resource loader module providing extra data from the server to VisualEditor.
*
* @file
* @ingroup Extensions
* @copyright 2011-2018 VisualEditor Team and others; see AUTHORS.txt
* @license MIT
*/
class VisualEditorDataModule extends ResourceLoaderModule {
/* Protected Members */
protected $targets = [ 'desktop', 'mobile' ];
/* Methods */
/**
* @param ResourceLoaderContext $context Object containing information about the state of this
* specific loader request.
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
$msgInfo = $this->getMessageInfo( $context );
$parsedMessages = $msgInfo['parsed'];
$plainMessages = [];
foreach ( $msgInfo['parse'] as $msgKey => $msgObj ) {
$parsedMessages[ $msgKey ] = $msgObj->parse();
}
foreach ( $msgInfo['plain'] as $msgKey => $msgObj ) {
$plainMessages[ $msgKey ] = $msgObj->plain();
}
return 've.init.platform.addParsedMessages(' . FormatJson::encode(
$parsedMessages,
ResourceLoader::inDebugMode()
) . ');'.
've.init.platform.addMessages(' . FormatJson::encode(
$plainMessages,
ResourceLoader::inDebugMode()
) . ');';
}
/**
* @param ResourceLoaderContext $context Object containing information about the state of this
* specific loader request.
* @return string[] Messages in various states of parsing
*/
protected function getMessageInfo( ResourceLoaderContext $context ) {
$editSubmitButtonLabelPublish = $context->getResourceLoader()->getConfig()
->get( 'EditSubmitButtonLabelPublish' );
$saveButtonLabelKey = $editSubmitButtonLabelPublish ? 'publishpage' : 'savearticle';
$saveButtonLabel = $context->msg( $saveButtonLabelKey )->text();
// Messages to be exported as parsed html
$parseMsgs = [
'missingsummary' => $context->msg( 'missingsummary', $saveButtonLabel ),
'summary' => $context->msg( 'summary' ),
'visualeditor-browserwarning' => $context->msg( 'visualeditor-browserwarning' ),
'visualeditor-wikitext-warning' => $context->msg( 'visualeditor-wikitext-warning' ),
];
// Copyright warning (already parsed)
$parsedMsgs = [
'copyrightwarning' => EditPage::getCopyrightWarning(
// Use a dummy title
Title::newFromText( 'Dwimmerlaik' ),
'parse',
$context->getLanguage()
),
];
// Messages to be exported as plain text
$plainMsgs = [
'visualeditor-feedback-link' =>
$context->msg( 'visualeditor-feedback-link' )
->inContentLanguage(),
'visualeditor-feedback-source-link' =>
$context->msg( 'visualeditor-feedback-source-link' )
->inContentLanguage(),
'visualeditor-quick-access-characters.json' =>
$context->msg( 'visualeditor-quick-access-characters.json' )
->inContentLanguage(),
];
return [
'parse' => $parseMsgs,
// Already parsed
'parsed' => $parsedMsgs,
'plain' => $plainMsgs,
];
}
/**
* @inheritDoc
*
* Always true.
*/
public function enableModuleContentVersion() {
return true;
}
/**
* @inheritDoc
*/
public function getDependencies( ResourceLoaderContext $context = null ) {
return [
'ext.visualEditor.base',
'ext.visualEditor.mediawiki',
];
}
}