8
0

domeventobserver.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /**
  2. * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. 'use strict';
  6. import Observer from './observer.js';
  7. import DomEventData from './domeventdata.js';
  8. /**
  9. * Base class for DOM event observers. This class handles
  10. * {@link engine.treeView.observer.Observer#observe adding} listeners to DOM elements,
  11. * {@link engine.treeView.observer.Observer#disable disabling} and
  12. * {@link engine.treeView.observer.Observer#enable re-enabling} events.
  13. * Child class needs to define
  14. * {@link engine.treeView.observer.DomEventObserver#domEventType DOM event type} and
  15. * {@link engine.treeView.observer.DomEventObserver#onDomEvent callback}.
  16. *
  17. * For instance:
  18. *
  19. * class ClickObserver extends DomEventObserver {
  20. * // It can also be defined as a normal property in the constructor.
  21. * get domEventType() {
  22. * return 'click';
  23. * }
  24. *
  25. * onDomEvent( domEvt ) {
  26. * this.fire( 'click' );
  27. * }
  28. * }
  29. *
  30. * @memberOf engine.treeView.observer
  31. * @extends engine.treeView.observer.Observer
  32. */
  33. export default class DomEventObserver extends Observer {
  34. /**
  35. * Type of the DOM event the observer should listen on. Array of types can be defined
  36. * if the obsever should listen to multiple DOM events.
  37. *
  38. * @readonly
  39. * @member {String|Array.<String>} engine.treeView.observer.DomEventObserver#domEventType
  40. */
  41. /**
  42. * Callback which should be called when the DOM event occurred. Note that the callback will not be called if
  43. * observer {@link engine.treeView.observer.DomEventObserver#isEnabled is not enabled}.
  44. *
  45. * @see engine.treeView.observer.DomEventObserver#domEventType
  46. * @abstract
  47. * @method engine.treeView.observer.DomEventObserver#onDomEvent
  48. */
  49. /**
  50. * @inheritDoc
  51. */
  52. observe( domElement ) {
  53. const types = typeof this.domEventType == 'string' ? [ this.domEventType ] : this.domEventType;
  54. types.forEach( type => {
  55. domElement.addEventListener( type, domEvent => this.isEnabled && this.onDomEvent( domEvent ) );
  56. } );
  57. }
  58. /**
  59. * Calls {@link engine.treeView.TreeView#fire} if observer
  60. * {@link engine.treeView.observer.DomEventObserver#isEnabled is enabled}.
  61. *
  62. * @see engine.treeView.TreeView#fire
  63. * @param {String} eventType The event type (name).
  64. * @param {Event} domEvent The DOM event.
  65. * @param {Object} [additionalData] The additional data which should extend the
  66. * {@link engine.treeView.observer.DomEventData event data} object.
  67. */
  68. fire( eventType, domEvent, additionalData ) {
  69. if ( this.isEnabled ) {
  70. this.treeView.fire( eventType, new DomEventData( this.treeView, domEvent, additionalData ) );
  71. }
  72. }
  73. }