mediawiki-extensions-Visual.../modules/ve-mw/ui/actions/ve.ui.MWSaveDialogAction.js
Ed Sanders 4d134cfefc Add shortcut for show preview and resolve access key conflicts
Refactor save dialog setup so logic for canPreview/canReview
is external and passed in.

'Show preview' will show in the VE command help dialog until
I56c1036e6 is merged in core.

Bug: T149914
Change-Id: Id718ad622be43c03df61d12b8688d53462c59f36
2016-12-16 13:33:57 +00:00

142 lines
3.7 KiB
JavaScript

/*!
* VisualEditor UserInterface MWSaveDialogAction class.
*
* @copyright 2011-2016 VisualEditor Team and others; see http://ve.mit-license.org
*/
// TODO: Can perhaps extract a lot of the dialog lifecycle management code
// from ArticleTarget and put it here.
/**
* Save action.
*
* @class
* @extends ve.ui.Action
*
* @constructor
* @param {ve.ui.Surface} surface Surface to act on
*/
ve.ui.MWSaveDialogAction = function VeUiMWSaveDialogAction() {
// Parent constructor
ve.ui.MWSaveDialogAction.super.apply( this, arguments );
};
/* Inheritance */
OO.inheritClass( ve.ui.MWSaveDialogAction, ve.ui.Action );
/* Static Properties */
ve.ui.MWSaveDialogAction.static.name = 'mwSaveDialog';
/**
* List of allowed methods for the action.
*
* @static
* @property
*/
ve.ui.MWSaveDialogAction.static.methods = [ 'save', 'review', 'preview' ];
/* Methods */
/**
* Open the save dialog
*
* @method
* @return {boolean} Action was executed
*/
ve.ui.MWSaveDialogAction.prototype.save = function () {
ve.init.target.showSaveDialog();
return true;
};
/**
* Open the save dialog, and set it to the review panel
*
* @method
* @return {boolean} Action was executed
*/
ve.ui.MWSaveDialogAction.prototype.review = function () {
ve.init.target.showSaveDialog( 'review' );
return true;
};
/**
* Open the save dialog, and set it to the preview panel
*
* @method
* @return {boolean} Action was executed
*/
ve.ui.MWSaveDialogAction.prototype.preview = function () {
ve.init.target.showSaveDialog( 'preview' );
return true;
};
/* Registration */
ve.ui.actionFactory.register( ve.ui.MWSaveDialogAction );
ve.ui.commandRegistry.register(
new ve.ui.Command(
'showSave', 'mwSaveDialog', 'save',
{ supportedSelections: [ 'linear', 'table' ] }
)
);
ve.ui.commandRegistry.register(
new ve.ui.Command(
'showChanges', 'mwSaveDialog', 'review',
{ supportedSelections: [ 'linear', 'table' ] }
)
);
if ( mw.libs.ve.isWikitextAvailable ) {
// wikitextCommandRegistry has been requested already, but hasn't
// loaded yet.
mw.loader.using( 'ext.visualEditor.mwwikitext' ).then( function () {
ve.ui.wikitextCommandRegistry.register(
new ve.ui.Command(
'showPreview', 'mwSaveDialog', 'preview',
{ supportedSelections: [ 'linear', 'table' ] }
)
);
} );
}
( function () {
var accessKeyPrefix = $.fn.updateTooltipAccessKeys.getAccessKeyPrefix().replace( /-/g, '+' ),
saveShortcut = ve.msg( 'accesskey-save' ),
changesShortcut = ve.msg( 'accesskey-diff' ),
previewShortcut = ve.msg( 'accesskey-preview' );
if ( saveShortcut !== '-' && saveShortcut !== '' ) {
ve.ui.triggerRegistry.register(
'showSave', new ve.ui.Trigger( accessKeyPrefix + saveShortcut )
);
ve.ui.commandHelpRegistry.register( 'other', 'showSave', {
trigger: 'showSave',
label: function () { return ve.init.target.getSaveButtonLabel(); }
} );
ve.ui.MWCommandHelpDialog.static.commandGroups.other.demote.push( 'showSave' );
}
if ( changesShortcut !== '-' && changesShortcut !== '' ) {
ve.ui.triggerRegistry.register(
'showChanges', new ve.ui.Trigger( accessKeyPrefix + changesShortcut )
);
ve.ui.commandHelpRegistry.register( 'other', 'showChanges', {
trigger: 'showChanges',
label: OO.ui.deferMsg( 'visualeditor-savedialog-label-review' )
} );
ve.ui.MWCommandHelpDialog.static.commandGroups.other.demote.push( 'showChanges' );
}
if ( previewShortcut !== '-' && previewShortcut !== '' ) {
ve.ui.triggerRegistry.register(
'showPreview', new ve.ui.Trigger( accessKeyPrefix + previewShortcut )
);
ve.ui.commandHelpRegistry.register( 'other', 'showPreview', {
trigger: 'showPreview',
label: OO.ui.deferMsg( 'showpreview' )
} );
ve.ui.MWCommandHelpDialog.static.commandGroups.other.demote.push( 'showPreview' );
}
}() );