mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-01 09:26:37 +00:00
20063995b2
Underline is particularly important as CE will apply underline formatting automatically when you press Ctrl+U but the SurfaceObserver will not notice it, leading to inconsistency between the view and the model. For sub/superscript I've used the Google Docs key mappings as these appear to have the fewest conflicts with existing browser shortcuts and there isn't much consistency between desktop clients anyway (Word and Open/LibreOffice use completely different shortcuts). Bonus: reordered command lists to be consistent with UI layout. Change-Id: I92998e42f9bcfb932d44e8f483811efd538e5981
124 lines
4.1 KiB
JavaScript
124 lines
4.1 KiB
JavaScript
/*!
|
|
* VisualEditor UserInterface TriggerRegistry class.
|
|
*
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/**
|
|
* Trigger registry.
|
|
*
|
|
* @class
|
|
* @extends OO.Registry
|
|
* @constructor
|
|
*/
|
|
ve.ui.TriggerRegistry = function VeUiTriggerRegistry() {
|
|
// Parent constructor
|
|
OO.Registry.call( this );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
OO.inheritClass( ve.ui.TriggerRegistry, OO.Registry );
|
|
|
|
/* Methods */
|
|
|
|
/**
|
|
* Register a constructor with the factory.
|
|
*
|
|
* The only supported platforms are 'mac' and 'pc'. All platforms not identified as 'mac' will be
|
|
* considered to be 'pc', including 'win', 'linux', 'solaris', etc.
|
|
*
|
|
* @method
|
|
* @param {string|string[]} name Symbolic name or list of symbolic names
|
|
* @param {ve.ui.Trigger|Object} trigger Trigger object, or map of trigger objects keyed by
|
|
* platform name e.g. 'mac' or 'pc'
|
|
*/
|
|
ve.ui.TriggerRegistry.prototype.register = function ( name, trigger ) {
|
|
var platform = ve.init.platform.getSystemPlatform(),
|
|
platformKey = platform === 'mac' ? 'mac' : 'pc';
|
|
|
|
// Validate arguments
|
|
if ( !( trigger instanceof ve.ui.Trigger ) && !ve.isPlainObject( trigger ) ) {
|
|
throw new Error(
|
|
'trigger must be an instance of ve.ui.Trigger or an object containing instances of ' +
|
|
've.ui.Trigger, cannot be a ' + typeof trigger
|
|
);
|
|
}
|
|
|
|
// Check for platform-specific trigger
|
|
if ( ve.isPlainObject( trigger ) ) {
|
|
// Only register if the current platform is supported
|
|
if ( platformKey in trigger ) {
|
|
OO.Registry.prototype.register.call( this, name, trigger[platformKey] );
|
|
}
|
|
} else {
|
|
OO.Registry.prototype.register.call( this, name, trigger );
|
|
}
|
|
};
|
|
|
|
/* Initialization */
|
|
|
|
ve.ui.triggerRegistry = new ve.ui.TriggerRegistry();
|
|
|
|
/* Registrations */
|
|
|
|
ve.ui.triggerRegistry.register(
|
|
'undo', { 'mac': new ve.ui.Trigger( 'cmd+z' ), 'pc': new ve.ui.Trigger( 'ctrl+z' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'redo', { 'mac': new ve.ui.Trigger( 'cmd+shift+z' ), 'pc': new ve.ui.Trigger( 'ctrl+shift+z' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'bold', { 'mac': new ve.ui.Trigger( 'cmd+b' ), 'pc': new ve.ui.Trigger( 'ctrl+b' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'italic', { 'mac': new ve.ui.Trigger( 'cmd+i' ), 'pc': new ve.ui.Trigger( 'ctrl+i' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'link', { 'mac': new ve.ui.Trigger( 'cmd+k' ), 'pc': new ve.ui.Trigger( 'ctrl+k' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'clear', { 'mac': new ve.ui.Trigger( 'cmd+\\' ), 'pc': new ve.ui.Trigger( 'ctrl+\\' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'underline', { 'mac': new ve.ui.Trigger( 'cmd+u' ), 'pc': new ve.ui.Trigger( 'ctrl+u' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'subscript', { 'mac': new ve.ui.Trigger( 'cmd+,' ), 'pc': new ve.ui.Trigger( 'ctrl+,' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'superscript', { 'mac': new ve.ui.Trigger( 'cmd+.' ), 'pc': new ve.ui.Trigger( 'ctrl+.' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'indent', new ve.ui.Trigger( 'tab' )
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'outdent', new ve.ui.Trigger( 'shift+tab' )
|
|
);
|
|
// Ctrl+0-7 below are not mapped to Cmd+0-7 on Mac because Chrome reserves those for switching tabs
|
|
ve.ui.triggerRegistry.register(
|
|
'paragraph', { 'mac': new ve.ui.Trigger( 'ctrl+0' ), 'pc': new ve.ui.Trigger ( 'ctrl+0' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'heading1', { 'mac': new ve.ui.Trigger( 'ctrl+1' ), 'pc': new ve.ui.Trigger ( 'ctrl+1' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'heading2', { 'mac': new ve.ui.Trigger( 'ctrl+2' ), 'pc': new ve.ui.Trigger ( 'ctrl+2' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'heading3', { 'mac': new ve.ui.Trigger( 'ctrl+3' ), 'pc': new ve.ui.Trigger ( 'ctrl+3' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'heading4', { 'mac': new ve.ui.Trigger( 'ctrl+4' ), 'pc': new ve.ui.Trigger ( 'ctrl+4' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'heading5', { 'mac': new ve.ui.Trigger( 'ctrl+5' ), 'pc': new ve.ui.Trigger ( 'ctrl+5' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'heading6', { 'mac': new ve.ui.Trigger( 'ctrl+6' ), 'pc': new ve.ui.Trigger ( 'ctrl+6' ) }
|
|
);
|
|
ve.ui.triggerRegistry.register(
|
|
'preformatted', { 'mac': new ve.ui.Trigger( 'ctrl+7' ), 'pc': new ve.ui.Trigger ( 'ctrl+7' ) }
|
|
);
|