(bug 38034) Implement MediaWiki's copyright warning

Logic taken from EditPage::getCopyrightWarning, but couldn't use
it directly because it doesn't give the message keys and wraps
the html.

Using the same logic and running the same hook, we'll get the same
message keys (and message parameters therefore) as EditPage would.

Also fixed these bugs (as they were more prominent now):
* Use Message::parse() instead of Message::plain()
* Set inLanguage properly instead of using the default
  (EditPage is user-localised, including this message, just like
  the rest of VE).
  Fixes bug 42764: minoredit/watchthis should be in user-language.

Change-Id: I84fee641162cdeed290092e56fb0e1d2562d833d
This commit is contained in:
Timo Tijhof 2012-12-06 06:27:44 +01:00
parent 82746f990d
commit 4e407bd59e
2 changed files with 50 additions and 17 deletions

View file

@ -20,18 +20,61 @@ class VisualEditorMessagesModule extends ResourceLoaderModule {
/* Methods */
public function getScript( ResourceLoaderContext $context ) {
$msgInfo = $this->getMessageInfo();
$parsedMesssages = array();
foreach ( $this->getMessages() as $msgKey ) {
$parsedMesssages[$msgKey] = wfMessage( $msgKey )->parse();
foreach ( $msgInfo['args'] as $msgKey => $msgArgs ) {
$parsedMesssages[ $msgKey ] = call_user_func_array( 'wfMessage', $msgArgs )
->inLanguage( $context->getLanguage() )
->parse();
}
return 've.init.platform.addParsedMessages(' . FormatJson::encode( $parsedMesssages ) . ');';
}
protected function getMessageInfo() {
$msgKeys = array();
// Simple ones
$msgArgs = array(
'minoredit' => array( 'minoredit' ),
'watchthis' => array( 'watchthis' ),
);
// Copyright warning (based on EditPage::getCopyrightWarning)
global $wgRightsText;
if ( $wgRightsText ) {
$copywarnMsg = array( 'copyrightwarning',
'[[' . wfMessage( 'copyrightpage' )->inContentLanguage()->text() . ']]',
$wgRightsText );
} 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' );
wfRunHooks( 'EditPageCopyrightWarning', array( $title, &$copywarnMsg ) );
// Keys used in copyright warning
$msgKeys[] = 'copyrightpage';
$msgKeys[] = $copywarnMsg[0];
// Normalise to 'copyrightwarning' so we have a consistent key in the front-end.
$msgArgs[ 'copyrightwarning' ] = $copywarnMsg;
$msgKeys = array_values( array_unique( array_merge( $msgKeys, array_keys( $msgArgs ) ) ) );
return array(
'keys' => $msgKeys,
'args' => $msgArgs,
);
}
public function getMessages() {
// We don't actually enable the client-side message system for these messages.
// But registering them in this standardised method to make use of the getMsgBlobMtime
// utility for make cache invalidation work out-of-the-box.
return array( 'minoredit', 'watchthis' );
// We don't actually use the client-side message system for these messages.
// But we're registering them in this standardised method to make use of the
// getMsgBlobMtime utility to make cache invalidation work out-of-the-box.
$msgInfo = $this->getMessageInfo();
return $msgInfo['keys'];
}
public function getDependencies() {

View file

@ -835,17 +835,7 @@ ve.init.mw.ViewPageTarget.prototype.setupSaveDialog = function () {
.text( ve.msg( viewPage.restoring ? 'visualeditor-restore-page' : 'savearticle' ) )
.end()
.find( '.ve-init-mw-viewPageTarget-saveDialog-license' )
// FIXME license text is hardcoded English
.html(
'By editing this page, you agree to irrevocably release your \
contributions under the CC-BY-SA 3.0 License. If you don\'t want your \
writing to be edited mercilessly and redistrubuted at will, then \
don\'t submit it here.<br/><br/>You are also confirming that you \
wrote this yourself, or copied it from a public domain or similar free \
resource. See Project:Copyright for full details of the licenses \
used on this site.\
<b>DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!</b>'
);
.html( ve.init.platform.getParsedMessage( 'copyrightwarning' ) );
viewPage.$saveDialogSaveButton = viewPage.$saveDialog
.find( '.ve-init-mw-viewPageTarget-saveDialog-saveButton' );
viewPage.$saveDialogLoadingIcon = viewPage.$saveDialog