mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-01 17:36:35 +00:00
370b0bfeb5
This method is only called once, in getScript(). There is no need to indefinitely cache it in the class. Besides, the GitInfo class already caches it in much the same way in its own class. Also move the class instantiation of GitInto into getScript() so that it is deferred until getScript() is needed – which in turn is only called once and will naturally gargage collect it as it's now a local variable. Change-Id: I545baa04e9ff2333fbf2ca7d0473dab0cf9269fd
147 lines
4.3 KiB
PHP
147 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* Resource loader module providing extra data from the server to VisualEditor.
|
|
*
|
|
* @file
|
|
* @ingroup Extensions
|
|
* @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
class VisualEditorDataModule extends ResourceLoaderModule {
|
|
|
|
/* Protected Members */
|
|
|
|
protected $origin = self::ORIGIN_USER_SITEWIDE;
|
|
protected $targets = array( 'desktop', 'mobile' );
|
|
|
|
/* Methods */
|
|
|
|
public function __construct() {
|
|
}
|
|
|
|
public function getScript( ResourceLoaderContext $context ) {
|
|
// Messages
|
|
$msgInfo = $this->getMessageInfo();
|
|
$parsedMessages = array();
|
|
$messages = array();
|
|
foreach ( $msgInfo['args'] as $msgKey => $msgArgs ) {
|
|
$parsedMessages[ $msgKey ] = call_user_func_array( 'wfMessage', $msgArgs )
|
|
->inLanguage( $context->getLanguage() )
|
|
->parse();
|
|
}
|
|
foreach ( $msgInfo['vals'] as $msgKey => $msgVal ) {
|
|
$messages[ $msgKey ] = $msgVal;
|
|
}
|
|
|
|
// Version information
|
|
$language = Language::factory( $context->getLanguage() );
|
|
|
|
$gitInfo = new GitInfo( __DIR__ );
|
|
$hash = $gitInfo->getHeadSHA1();
|
|
$id = $hash ? substr( $hash, 0, 7 ) : false;
|
|
$url = $gitInfo->getHeadViewUrl();
|
|
$date = $gitInfo->getHeadCommitDate();
|
|
$dateString = $date ? $language->timeanddate( $date, true ) : '';
|
|
|
|
return
|
|
've.init.platform.addParsedMessages(' . FormatJson::encode(
|
|
$parsedMessages,
|
|
ResourceLoader::inDebugMode()
|
|
) . ');'.
|
|
've.init.platform.addMessages(' . FormatJson::encode(
|
|
$messages,
|
|
ResourceLoader::inDebugMode()
|
|
) . ');'.
|
|
// Documented in .docs/external.json
|
|
've.version = ' . FormatJson::encode(
|
|
array(
|
|
'id' => $id,
|
|
'url' => $url,
|
|
'timestamp' => $date,
|
|
'dateString' => $dateString,
|
|
), ResourceLoader::inDebugMode()
|
|
) . ';';
|
|
}
|
|
|
|
protected function getMessageInfo() {
|
|
// Messages that just require simple parsing
|
|
$msgArgs = array(
|
|
'minoredit' => array( 'minoredit' ),
|
|
'missingsummary' => array( 'missingsummary' ),
|
|
'summary' => array( 'summary' ),
|
|
'watchthis' => array( 'watchthis' ),
|
|
'visualeditor-browserwarning' => array( 'visualeditor-browserwarning' ),
|
|
'visualeditor-wikitext-warning' => array( 'visualeditor-wikitext-warning' ),
|
|
);
|
|
|
|
// Override message value
|
|
$msgVals = array(
|
|
'visualeditor-feedback-link' => wfMessage( 'visualeditor-feedback-link' )
|
|
->inContentLanguage()
|
|
->text(),
|
|
);
|
|
|
|
// Copyright warning (based on EditPage::getCopyrightWarning)
|
|
$rightsText = $this->config->get( 'RightsText' );
|
|
if ( $rightsText ) {
|
|
$copywarnMsg = array( 'copyrightwarning',
|
|
'[[' . wfMessage( 'copyrightpage' )->inContentLanguage()->text() . ']]',
|
|
$rightsText );
|
|
} else {
|
|
$copywarnMsg = array( 'copyrightwarning2',
|
|
'[[' . wfMessage( 'copyrightpage' )->inContentLanguage()->text() . ']]' );
|
|
}
|
|
// EditPage supports customisation based on title, we can't support that here
|
|
// since these messages are cached on a site-level. $wgTitle is likely set to null.
|
|
$title = Title::newFromText( 'Dwimmerlaik' );
|
|
Hooks::run( 'EditPageCopyrightWarning', array( $title, &$copywarnMsg ) );
|
|
|
|
// Normalise to 'copyrightwarning' so we have a consistent key in the front-end.
|
|
$msgArgs[ 'copyrightwarning' ] = $copywarnMsg;
|
|
|
|
// Citation tools
|
|
$msgVals['visualeditor-cite-tool-definition.json'] = json_encode( self::getCitationTools() );
|
|
|
|
return array(
|
|
'args' => $msgArgs,
|
|
'vals' => $msgVals,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Retrieve the list of citation templates that we want to make available in the
|
|
* VisualEditor toolbar (via the Cite dropdown). These are defined on-wiki at
|
|
* MediaWiki:Visualeditor-cite-tool-definition.json.
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function getCitationTools() {
|
|
$citationDefinition = json_decode(
|
|
wfMessage( 'visualeditor-cite-tool-definition.json' )->plain()
|
|
);
|
|
$citationTools = array();
|
|
if ( is_array( $citationDefinition ) ) {
|
|
foreach ( $citationDefinition as $tool ) {
|
|
if ( !isset( $tool->title ) ) {
|
|
$tool->title =
|
|
wfMessage( 'visualeditor-cite-tool-name-' . $tool->name )->text();
|
|
}
|
|
$citationTools[] = $tool;
|
|
}
|
|
}
|
|
return $citationTools;
|
|
}
|
|
|
|
public function enableModuleContentVersion() {
|
|
return true;
|
|
}
|
|
|
|
public function getDependencies( ResourceLoaderContext $context = null ) {
|
|
return array(
|
|
'ext.visualEditor.base',
|
|
'ext.visualEditor.mediawiki',
|
|
);
|
|
}
|
|
}
|