8
0

keyobserver.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  4. */
  5. /**
  6. * @module engine/view/observer/keyobserver
  7. */
  8. import DomEventObserver from './domeventobserver';
  9. import { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';
  10. /**
  11. * Observer for events connected with pressing keyboard keys.
  12. *
  13. * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.
  14. *
  15. * @extends module:engine/view/observer/domeventobserver~DomEventObserver
  16. */
  17. export default class KeyObserver extends DomEventObserver {
  18. constructor( view ) {
  19. super( view );
  20. this.domEventType = [ 'keydown', 'keyup' ];
  21. }
  22. onDomEvent( domEvt ) {
  23. this.fire( domEvt.type, domEvt, {
  24. keyCode: domEvt.keyCode,
  25. altKey: domEvt.altKey,
  26. ctrlKey: domEvt.ctrlKey || domEvt.metaKey,
  27. shiftKey: domEvt.shiftKey,
  28. get keystroke() {
  29. return getCode( this );
  30. }
  31. } );
  32. }
  33. }
  34. /**
  35. * Fired when a key has been pressed.
  36. *
  37. * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.
  38. *
  39. * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the
  40. * {@link module:engine/view/view~View} this event is available by default.
  41. *
  42. * @see module:engine/view/observer/keyobserver~KeyObserver
  43. * @event module:engine/view/document~Document#event:keydown
  44. * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData
  45. */
  46. /**
  47. * Fired when a key has been released.
  48. *
  49. * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.
  50. *
  51. * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the
  52. * {@link module:engine/view/view~View} this event is available by default.
  53. *
  54. * @see module:engine/view/observer/keyobserver~KeyObserver
  55. * @event module:engine/view/document~Document#event:keyup
  56. * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData
  57. */
  58. /**
  59. * The value of both events - {@link module:engine/view/document~Document#event:keydown} and
  60. * {@link module:engine/view/document~Document#event:keyup}.
  61. *
  62. * @class module:engine/view/observer/keyobserver~KeyEventData
  63. * @extends module:engine/view/observer/domeventdata~DomEventData
  64. * @implements module:utils/keyboard~KeystrokeInfo
  65. */
  66. /**
  67. * Code of the whole keystroke. See {@link module:utils/keyboard~getCode}.
  68. *
  69. * @readonly
  70. * @member {Number} module:engine/view/observer/keyobserver~KeyEventData#keystroke
  71. */