domeventobserver.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /**
  2. * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. 'use strict';
  6. /**
  7. * Base class for DOM event observers. This class handles
  8. * {@link core.treeView.observer.Observer#observe adding} listeners to DOM elements,
  9. * {@link core.treeView.observer.Observer#disable disabling} and
  10. * {@link core.treeView.observer.Observer#enable re-enabling} events.
  11. * Child class needs to define
  12. * {@link core.treeView.observer.DomEventObserver#domEventType DOM event type} and
  13. * {@link core.treeView.observer.DomEventObserver#onDomEvent callback}.
  14. *
  15. * For instance:
  16. *
  17. * class ClickObserver extends DomEventObserver {
  18. * // It can also be defined as a normal property in the constructor.
  19. * get domEventType() {
  20. * return 'click';
  21. * }
  22. *
  23. * onDomEvent( domEvt ) {
  24. * this.fire( 'click' );
  25. * }
  26. * }
  27. *
  28. * Or:
  29. *
  30. * const observer = new DomEventObserver();
  31. * observer.domEventType = 'click';
  32. * observer.onDomEvent = ( domEvt ) => observer.fire( 'click' );
  33. *
  34. */
  35. export default class DomEventObserver {
  36. /**
  37. * @inheritDoc
  38. */
  39. init( treeView ) {
  40. /**
  41. * Reference to the {@link core.treeView.TreeView} object.
  42. *
  43. * @member {core.treeView.TreeView} core.treeView.observer.DomEventObserver#treeView
  44. */
  45. this.treeView = treeView;
  46. /**
  47. * State of the observer. If it is disabled not event should be fired.
  48. *
  49. * @member {Boolean} core.treeView.observer.DomEventObserver#isEnabled
  50. */
  51. this.isEnabled = false;
  52. /**
  53. * Type of the DOM event the observer should listen on.
  54. *
  55. * @member {String} core.treeView.observer.DomEventObserver#domEventType
  56. */
  57. }
  58. /**
  59. * Callback which should be called when the DOM event occurred. Note that the callback will not be called if
  60. * observer {@link core.treeView.observer.DomEventObserver#isEnabled is not enabled}.
  61. *
  62. * @see core.treeView.observer.DomEventObserver#domEventType
  63. * @abstract
  64. * @method core.treeView.observer.DomEventObserver#onDomEvent
  65. */
  66. /**
  67. * @inheritDoc
  68. */
  69. observe( domElement ) {
  70. domElement.addEventListener( this.domEventType, domEvent => {
  71. if ( this.isEnabled ) {
  72. this.onDomEvent( domEvent );
  73. }
  74. } );
  75. }
  76. /**
  77. * @inheritDoc
  78. */
  79. enable() {
  80. this.isEnabled = true;
  81. }
  82. /**
  83. * @inheritDoc
  84. */
  85. disable() {
  86. this.isEnabled = false;
  87. }
  88. /**
  89. * Calls {@link core.treeView.TreeView#fire} if observer
  90. * {@link core.treeView.observer.DomEventObserver#isEnabled is enabled}.
  91. *
  92. * @see core.treeView.TreeView#fire
  93. * @param {...*} args Fire arguments {@link core.treeView.TreeView#fire}.
  94. */
  95. fire( ...args ) {
  96. if ( this.isEnabled ) {
  97. this.treeView.fire.apply( this.treeView, args );
  98. }
  99. }
  100. }