8
0

observer.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /**
  6. * @module engine/view/observer/observer
  7. */
  8. import DomEmitterMixin from 'ckeditor5-utils/src/dom/emittermixin';
  9. import mix from 'ckeditor5-utils/src/mix';
  10. /**
  11. * Abstract base observer class. Observers are classes which observe changes on DOM elements, do the preliminary
  12. * processing and fire events on the {@link module:engine/view/document~Document} objects. Observers can also add features to the view,
  13. * for instance by updating its status or marking elements which need refresh on DOM events.
  14. *
  15. * @abstract
  16. */
  17. export default class Observer {
  18. /**
  19. * Creates an instance of the observer.
  20. *
  21. * @param {module:engine/view/document~Document} document
  22. */
  23. constructor( document ) {
  24. /**
  25. * Reference to the {@link module:engine/view/document~Document} object.
  26. *
  27. * @readonly
  28. * @member {module:engine/view/document~Document}
  29. */
  30. this.document = document;
  31. /**
  32. * State of the observer. If it is disabled events will not be fired.
  33. *
  34. * @readonly
  35. * @member {Boolean}
  36. */
  37. this.isEnabled = false;
  38. }
  39. /**
  40. * Enables the observer. This method is called when then observer is registered to the
  41. * {@link module:engine/view/document~Document} and after {@link module:engine/view/document~Document#render rendering}
  42. * (all observers are {@link #disable disabled} before rendering).
  43. *
  44. * A typical use case for disabling observers is that mutation observers need to be disabled for the rendering.
  45. * However, a child class may not need to be disabled, so it can implement an empty method.
  46. *
  47. * @see module:engine/view/observer/observer~Observer#disable
  48. */
  49. enable() {
  50. this.isEnabled = true;
  51. }
  52. /**
  53. * Disables the observer. This method is called before
  54. * {@link module:engine/view/document~Document#render rendering} to prevent firing events during rendering.
  55. *
  56. * @see module:engine/view/observer/observer~Observer#enable
  57. */
  58. disable() {
  59. this.isEnabled = false;
  60. }
  61. /**
  62. * Disables and destroys the observer, among others removes event listeners created by the observer.
  63. */
  64. destroy() {
  65. this.disable();
  66. this.stopListening();
  67. }
  68. /**
  69. * Starts observing the given root element.
  70. *
  71. * @method #observe
  72. * @param {HTMLElement} domElement
  73. * @param {String} name The name of the root element.
  74. */
  75. }
  76. mix( Observer, DomEmitterMixin );