8
0

focusobserver.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 DomEventObserver from './domeventobserver.js';
  7. /**
  8. * {@link engine.view.Document#focus Focus} and {@link engine.view.Document#blur blur} events observer.
  9. * Focus observer handle also {@link engine.view.RootEditableElement#isFocused isFocused} property of the
  10. * {@link engine.view.RootEditableElement root elements}.
  11. *
  12. * Note that this observer is attached by the {@link engine.EditingController} and is available by default.
  13. *
  14. * @memberOf engine.view.observer
  15. * @extends engine.view.observer.DomEventObserver
  16. */
  17. export default class FocusObserver extends DomEventObserver {
  18. constructor( document ) {
  19. super( document );
  20. this.domEventType = [ 'focus', 'blur' ];
  21. }
  22. onDomEvent( domEvent ) {
  23. const target = this.document.domConverter.getCorrespondingViewElement( domEvent.target );
  24. // Update `isFocus` property of root elements.
  25. for ( let root of this.document.roots.values() ) {
  26. if ( target === root ) {
  27. if ( domEvent.type == 'focus' ) {
  28. root.isFocused = true;
  29. } else {
  30. root.isFocused = false;
  31. }
  32. }
  33. }
  34. this.fire( domEvent.type, domEvent );
  35. }
  36. }
  37. /**
  38. * Fired when one of the editables gets focus.
  39. *
  40. * Introduced by {@link engine.view.observer.FocusObserver}.
  41. *
  42. * Note that because {@link engine.view.observer.FocusObserver} is attached by the {@link engine.EditingController}
  43. * this event is available by default.
  44. *
  45. * @see engine.view.observer.FocusObserver
  46. * @event engine.view.Document#focus
  47. * @param {engine.view.observer.DomEventData} data Event data.
  48. */
  49. /**
  50. * Fired when one of the editables loses focus.
  51. *
  52. * Introduced by {@link engine.view.observer.FocusObserver}.
  53. *
  54. * Note that because {@link engine.view.observer.FocusObserver} is attached by the {@link engine.EditingController}
  55. * this event is available by default.
  56. *
  57. * @see engine.view.observer.FocusObserver
  58. * @event engine.view.Document#blur
  59. * @param {engine.view.observer.DomEventData} data Event data.
  60. */