Merge "Add framework for file warnings"
This commit is contained in:
commit
524d92b61f
6 changed files with 147 additions and 3 deletions
|
|
@ -245,11 +245,11 @@ abstract class ImageHandler extends MediaHandler {
|
|||
if ( $pages === false || $pages <= 1 ) {
|
||||
$msg = wfMessage( 'file-info-size' )->numParams( $file->getWidth(),
|
||||
$file->getHeight() )->params( $size,
|
||||
$file->getMimeType() )->parse();
|
||||
'<span class="mime-type">' . $file->getMimeType() . '</span>' )->parse();
|
||||
} else {
|
||||
$msg = wfMessage( 'file-info-size-pages' )->numParams( $file->getWidth(),
|
||||
$file->getHeight() )->params( $size,
|
||||
$file->getMimeType() )->numParams( $pages )->parse();
|
||||
'<span class="mime-type">' . $file->getMimeType() . '</span>' )->numParams( $pages )->parse();
|
||||
}
|
||||
|
||||
return $msg;
|
||||
|
|
|
|||
|
|
@ -639,7 +639,7 @@ abstract class MediaHandler {
|
|||
*/
|
||||
static function getGeneralLongDesc( $file ) {
|
||||
return wfMessage( 'file-info' )->sizeParams( $file->getSize() )
|
||||
->params( $file->getMimeType() )->parse();
|
||||
->params( '<span class="mime-type">' . $file->getMimeType() . '</span>' )->parse();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -861,4 +861,26 @@ abstract class MediaHandler {
|
|||
public function sanitizeParamsForBucketing( $params ) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets configuration for the file warning message. Return value of
|
||||
* the following structure:
|
||||
* array(
|
||||
* 'module' => 'example.filewarning.messages', // Required, module with messages loaded for the client
|
||||
* 'messages' => array( // Required, array of names of messages
|
||||
* 'main' => 'example-filewarning-main', // Required, main warning message
|
||||
* 'header' => 'example-filewarning-header', // Optional, header for warning dialog
|
||||
* 'footer' => 'example-filewarning-footer', // Optional, footer for warning dialog
|
||||
* 'info' => 'example-filewarning-info', // Optional, text for more-information link (see below)
|
||||
* ),
|
||||
* 'link' => 'http://example.com', // Optional, link for more information
|
||||
* )
|
||||
*
|
||||
* Returns null if no warning is necessary.
|
||||
* @param File $file
|
||||
* @return array|null
|
||||
*/
|
||||
public function getWarningConfig( $file ) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -505,6 +505,22 @@ class ImagePage extends Article {
|
|||
|
||||
$longDesc = $this->getContext()->msg( 'parentheses', $this->displayImg->getLongDesc() )->text();
|
||||
|
||||
$handler = $this->displayImg->getHandler();
|
||||
|
||||
// If this is a filetype with potential issues, warn the user.
|
||||
if ( $handler ) {
|
||||
$warningConfig = $handler->getWarningConfig( $this->displayImg );
|
||||
|
||||
if ( $warningConfig !== null ) {
|
||||
// The warning will be displayed via CSS and JavaScript.
|
||||
// We just need to tell the client side what message to use.
|
||||
$output = $this->getContext()->getOutput();
|
||||
$output->addJsConfigVars( 'wgFileWarning', $warningConfig );
|
||||
$output->addModules( $warningConfig['module'] );
|
||||
$output->addModules( 'mediawiki.filewarning' );
|
||||
}
|
||||
}
|
||||
|
||||
$medialink = "[[Media:$filename|$linktext]]";
|
||||
|
||||
if ( !$this->displayImg->isSafeFile() ) {
|
||||
|
|
|
|||
|
|
@ -892,6 +892,15 @@ return array(
|
|||
'feedback-useragent'
|
||||
),
|
||||
),
|
||||
|
||||
'mediawiki.filewarning' => array(
|
||||
'scripts' => 'resources/src/mediawiki/mediawiki.filewarning.js',
|
||||
'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less',
|
||||
'dependencies' => array(
|
||||
'oojs-ui',
|
||||
),
|
||||
),
|
||||
|
||||
'mediawiki.helplink' => array(
|
||||
'styles' => array(
|
||||
'resources/src/mediawiki/mediawiki.helplink.css',
|
||||
|
|
|
|||
68
resources/src/mediawiki/mediawiki.filewarning.js
Normal file
68
resources/src/mediawiki/mediawiki.filewarning.js
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
/*!
|
||||
* mediawiki.filewarning
|
||||
*
|
||||
* @author Mark Holmquist, 2015
|
||||
* @since 1.25
|
||||
*/
|
||||
/*global OO*/
|
||||
( function ( mw, $, oo ) {
|
||||
var warningConfig = mw.config.get( 'wgFileWarning' ),
|
||||
warningMessages = warningConfig.messages,
|
||||
warningLink = warningConfig.link,
|
||||
$origMimetype = $( '.fullMedia .fileInfo .mime-type' ),
|
||||
$mimetype = $origMimetype.clone(),
|
||||
$header = $( '<h3>' )
|
||||
.addClass( 'mediawiki-filewarning-header empty' ),
|
||||
$main = $( '<p>' )
|
||||
.addClass( 'mediawiki-filewarning-main empty' ),
|
||||
$info = $( '<a>' )
|
||||
.addClass( 'mediawiki-filewarning-info empty' ),
|
||||
$footer = $( '<p>' )
|
||||
.addClass( 'mediawiki-filewarning-footer empty' ),
|
||||
dialog = new oo.ui.PopupButtonWidget( {
|
||||
classes: [ 'mediawiki-filewarning-anchor' ],
|
||||
label: $mimetype,
|
||||
flags: [ 'warning' ],
|
||||
icon: 'alert',
|
||||
framed: false,
|
||||
popup: {
|
||||
classes: [ 'mediawiki-filewarning' ],
|
||||
padded: true,
|
||||
width: 400,
|
||||
$content: $header.add( $main ).add( $info ).add( $footer )
|
||||
}
|
||||
} );
|
||||
|
||||
function loadMessage( $target, message ) {
|
||||
if ( message ) {
|
||||
$target.removeClass( 'empty' )
|
||||
.text( mw.message( message ).text() );
|
||||
}
|
||||
}
|
||||
|
||||
// The main message must be populated for the dialog to show.
|
||||
if ( warningConfig && warningConfig.messages && warningConfig.messages.main ) {
|
||||
$mimetype.addClass( 'has-warning' );
|
||||
|
||||
$origMimetype.replaceWith( dialog.$element );
|
||||
|
||||
if ( warningMessages ) {
|
||||
loadMessage( $main, warningMessages.main );
|
||||
loadMessage( $header, warningMessages.header );
|
||||
loadMessage( $footer, warningMessages.footer );
|
||||
|
||||
if ( warningLink ) {
|
||||
loadMessage( $info, warningMessages.info );
|
||||
$info.attr( 'href', warningLink );
|
||||
}
|
||||
}
|
||||
|
||||
// Make OOUI open the dialog, it won't appear until the user
|
||||
// hovers over the warning.
|
||||
dialog.getPopup().toggle( true );
|
||||
|
||||
// Override toggle handler because we don't need it for this popup
|
||||
// object at all. Sort of nasty, but it gets the job done.
|
||||
dialog.getPopup().toggle = $.noop;
|
||||
}
|
||||
}( mediaWiki, jQuery, OO ) );
|
||||
29
resources/src/mediawiki/mediawiki.filewarning.less
Normal file
29
resources/src/mediawiki/mediawiki.filewarning.less
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
@import "mediawiki.ui/variables"
|
||||
|
||||
.mediawiki-filewarning {
|
||||
display: none;
|
||||
|
||||
.mediawiki-filewarning-header {
|
||||
padding: 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.mediawiki-filewarning-footer {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
.empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mediawiki-filewarning-anchor:hover & {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.mime-type {
|
||||
&.has-warning {
|
||||
font-weight: bold;
|
||||
color: @colorMediumSevere;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue