KeyboardBindings.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import {
  2. isCmd,
  3. isKey,
  4. isShift
  5. } from './KeyboardUtil';
  6. var LOW_PRIORITY = 500;
  7. /**
  8. * Adds default keyboard bindings.
  9. *
  10. * This does not pull in any features will bind only actions that
  11. * have previously been registered against the editorActions component.
  12. *
  13. * @param {EventBus} eventBus
  14. * @param {Keyboard} keyboard
  15. */
  16. export default function KeyboardBindings(eventBus, keyboard) {
  17. var self = this;
  18. eventBus.on('editorActions.init', LOW_PRIORITY, function(event) {
  19. var editorActions = event.editorActions;
  20. self.registerBindings(keyboard, editorActions);
  21. });
  22. }
  23. KeyboardBindings.$inject = [
  24. 'eventBus',
  25. 'keyboard'
  26. ];
  27. /**
  28. * Register available keyboard bindings.
  29. *
  30. * @param {Keyboard} keyboard
  31. * @param {EditorActions} editorActions
  32. */
  33. KeyboardBindings.prototype.registerBindings = function(keyboard, editorActions) {
  34. /**
  35. * Add keyboard binding if respective editor action
  36. * is registered.
  37. *
  38. * @param {String} action name
  39. * @param {Function} fn that implements the key binding
  40. */
  41. function addListener(action, fn) {
  42. if (editorActions.isRegistered(action)) {
  43. keyboard.addListener(fn);
  44. }
  45. }
  46. // undo
  47. // (CTRL|CMD) + Z
  48. addListener('undo', function(context) {
  49. var event = context.keyEvent;
  50. if (isCmd(event) && !isShift(event) && isKey(['z', 'Z'], event)) {
  51. editorActions.trigger('undo');
  52. return true;
  53. }
  54. });
  55. // redo
  56. // CTRL + Y
  57. // CMD + SHIFT + Z
  58. addListener('redo', function(context) {
  59. var event = context.keyEvent;
  60. if (isCmd(event) && (isKey(['y', 'Y'], event) || (isKey(['z', 'Z'], event) && isShift(event)))) {
  61. editorActions.trigger('redo');
  62. return true;
  63. }
  64. });
  65. // copy
  66. // CTRL/CMD + C
  67. addListener('copy', function(context) {
  68. var event = context.keyEvent;
  69. if (isCmd(event) && isKey(['c', 'C'], event)) {
  70. editorActions.trigger('copy');
  71. return true;
  72. }
  73. });
  74. // paste
  75. // CTRL/CMD + V
  76. addListener('paste', function(context) {
  77. var event = context.keyEvent;
  78. if (isCmd(event) && isKey(['v', 'V'], event)) {
  79. editorActions.trigger('paste');
  80. return true;
  81. }
  82. });
  83. // zoom in one step
  84. // CTRL/CMD + +
  85. addListener('stepZoom', function(context) {
  86. var event = context.keyEvent;
  87. if (isKey([ '+', 'Add' ], event) && isCmd(event)) {
  88. editorActions.trigger('stepZoom', { value: 1 });
  89. return true;
  90. }
  91. });
  92. // zoom out one step
  93. // CTRL + -
  94. addListener('stepZoom', function(context) {
  95. var event = context.keyEvent;
  96. if (isKey([ '-', 'Subtract' ], event) && isCmd(event)) {
  97. editorActions.trigger('stepZoom', { value: -1 });
  98. return true;
  99. }
  100. });
  101. // zoom to the default level
  102. // CTRL + 0
  103. addListener('zoom', function(context) {
  104. var event = context.keyEvent;
  105. if (isKey('0', event) && isCmd(event)) {
  106. editorActions.trigger('zoom', { value: 1 });
  107. return true;
  108. }
  109. });
  110. // delete selected element
  111. // DEL
  112. addListener('removeSelection', function(context) {
  113. var event = context.keyEvent;
  114. if (isKey([ 'Delete', 'Del' ], event)) {
  115. editorActions.trigger('removeSelection');
  116. return true;
  117. }
  118. });
  119. };