| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- import {
- isCmd,
- isKey,
- isCopy,
- isPaste,
- isUndo,
- isRedo,
- KEYS_COPY,
- KEYS_PASTE,
- KEYS_UNDO,
- KEYS_REDO
- } from './KeyboardUtil';
- export {
- KEYS_COPY,
- KEYS_PASTE,
- KEYS_UNDO,
- KEYS_REDO
- };
- var LOW_PRIORITY = 500;
- /**
- * Adds default keyboard bindings.
- *
- * This does not pull in any features will bind only actions that
- * have previously been registered against the editorActions component.
- *
- * @param {EventBus} eventBus
- * @param {Keyboard} keyboard
- */
- export default function KeyboardBindings(eventBus, keyboard) {
- var self = this;
- eventBus.on('editorActions.init', LOW_PRIORITY, function(event) {
- var editorActions = event.editorActions;
- self.registerBindings(keyboard, editorActions);
- });
- }
- KeyboardBindings.$inject = [
- 'eventBus',
- 'keyboard'
- ];
- /**
- * Register available keyboard bindings.
- *
- * @param {Keyboard} keyboard
- * @param {EditorActions} editorActions
- */
- KeyboardBindings.prototype.registerBindings = function(keyboard, editorActions) {
- /**
- * Add keyboard binding if respective editor action
- * is registered.
- *
- * @param {string} action name
- * @param {Function} fn that implements the key binding
- */
- function addListener(action, fn) {
- if (editorActions.isRegistered(action)) {
- keyboard.addListener(fn);
- }
- }
- // undo
- // (CTRL|CMD) + Z
- addListener('undo', function(context) {
- var event = context.keyEvent;
- if (isUndo(event)) {
- editorActions.trigger('undo');
- return true;
- }
- });
- // redo
- // CTRL + Y
- // CMD + SHIFT + Z
- addListener('redo', function(context) {
- var event = context.keyEvent;
- if (isRedo(event)) {
- editorActions.trigger('redo');
- return true;
- }
- });
- // copy
- // CTRL/CMD + C
- addListener('copy', function(context) {
- var event = context.keyEvent;
- if (isCopy(event)) {
- editorActions.trigger('copy');
- return true;
- }
- });
- // paste
- // CTRL/CMD + V
- addListener('paste', function(context) {
- var event = context.keyEvent;
- if (isPaste(event)) {
- editorActions.trigger('paste');
- return true;
- }
- });
- // zoom in one step
- // CTRL/CMD + +
- addListener('stepZoom', function(context) {
- var event = context.keyEvent;
- // quirk: it has to be triggered by `=` as well to work on international keyboard layout
- // cf: https://github.com/bpmn-io/bpmn-js/issues/1362#issuecomment-722989754
- if (isKey([ '+', 'Add', '=' ], event) && isCmd(event)) {
- editorActions.trigger('stepZoom', { value: 1 });
- return true;
- }
- });
- // zoom out one step
- // CTRL + -
- addListener('stepZoom', function(context) {
- var event = context.keyEvent;
- if (isKey([ '-', 'Subtract' ], event) && isCmd(event)) {
- editorActions.trigger('stepZoom', { value: -1 });
- return true;
- }
- });
- // zoom to the default level
- // CTRL + 0
- addListener('zoom', function(context) {
- var event = context.keyEvent;
- if (isKey('0', event) && isCmd(event)) {
- editorActions.trigger('zoom', { value: 1 });
- return true;
- }
- });
- // delete selected element
- // DEL
- addListener('removeSelection', function(context) {
- var event = context.keyEvent;
- if (isKey([ 'Backspace', 'Delete', 'Del' ], event)) {
- editorActions.trigger('removeSelection');
- return true;
- }
- });
- };
|