@ckeditor/ckeditor5-engine 36.0.0 → 37.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +1 -1
  2. package/package.json +24 -23
  3. package/src/controller/datacontroller.d.ts +331 -0
  4. package/src/controller/datacontroller.js +62 -109
  5. package/src/controller/editingcontroller.d.ts +98 -0
  6. package/src/controller/editingcontroller.js +22 -46
  7. package/src/conversion/conversion.d.ts +476 -0
  8. package/src/conversion/conversion.js +328 -347
  9. package/src/conversion/conversionhelpers.d.ts +26 -0
  10. package/src/conversion/conversionhelpers.js +1 -5
  11. package/src/conversion/downcastdispatcher.d.ts +547 -0
  12. package/src/conversion/downcastdispatcher.js +74 -152
  13. package/src/conversion/downcasthelpers.d.ts +1226 -0
  14. package/src/conversion/downcasthelpers.js +843 -762
  15. package/src/conversion/mapper.d.ts +499 -0
  16. package/src/conversion/mapper.js +84 -99
  17. package/src/conversion/modelconsumable.d.ts +201 -0
  18. package/src/conversion/modelconsumable.js +96 -99
  19. package/src/conversion/upcastdispatcher.d.ts +492 -0
  20. package/src/conversion/upcastdispatcher.js +73 -100
  21. package/src/conversion/upcasthelpers.d.ts +499 -0
  22. package/src/conversion/upcasthelpers.js +406 -373
  23. package/src/conversion/viewconsumable.d.ts +177 -0
  24. package/src/conversion/viewconsumable.js +157 -162
  25. package/src/dataprocessor/basichtmlwriter.d.ts +18 -0
  26. package/src/dataprocessor/basichtmlwriter.js +0 -9
  27. package/src/dataprocessor/dataprocessor.d.ts +61 -0
  28. package/src/dataprocessor/htmldataprocessor.d.ts +76 -0
  29. package/src/dataprocessor/htmldataprocessor.js +6 -28
  30. package/src/dataprocessor/htmlwriter.d.ts +16 -0
  31. package/src/dataprocessor/xmldataprocessor.d.ts +90 -0
  32. package/src/dataprocessor/xmldataprocessor.js +8 -40
  33. package/src/dev-utils/model.d.ts +124 -0
  34. package/src/dev-utils/model.js +41 -38
  35. package/src/dev-utils/operationreplayer.d.ts +51 -0
  36. package/src/dev-utils/operationreplayer.js +6 -14
  37. package/src/dev-utils/utils.d.ts +37 -0
  38. package/src/dev-utils/utils.js +5 -18
  39. package/src/dev-utils/view.d.ts +319 -0
  40. package/src/dev-utils/view.js +205 -226
  41. package/src/index.d.ts +105 -0
  42. package/src/index.js +1 -0
  43. package/src/model/batch.d.ts +106 -0
  44. package/src/model/differ.d.ts +329 -0
  45. package/src/model/document.d.ts +245 -0
  46. package/src/model/document.js +1 -1
  47. package/src/model/documentfragment.d.ts +196 -0
  48. package/src/model/documentfragment.js +2 -2
  49. package/src/model/documentselection.d.ts +420 -0
  50. package/src/model/element.d.ts +165 -0
  51. package/src/model/history.d.ts +114 -0
  52. package/src/model/item.d.ts +14 -0
  53. package/src/model/liveposition.d.ts +77 -0
  54. package/src/model/liverange.d.ts +102 -0
  55. package/src/model/markercollection.d.ts +335 -0
  56. package/src/model/model.d.ts +812 -0
  57. package/src/model/model.js +59 -30
  58. package/src/model/node.d.ts +256 -0
  59. package/src/model/nodelist.d.ts +91 -0
  60. package/src/model/operation/attributeoperation.d.ts +98 -0
  61. package/src/model/operation/detachoperation.d.ts +55 -0
  62. package/src/model/operation/insertoperation.d.ts +85 -0
  63. package/src/model/operation/markeroperation.d.ts +86 -0
  64. package/src/model/operation/mergeoperation.d.ts +95 -0
  65. package/src/model/operation/moveoperation.d.ts +91 -0
  66. package/src/model/operation/nooperation.d.ts +33 -0
  67. package/src/model/operation/operation.d.ts +89 -0
  68. package/src/model/operation/operationfactory.d.ts +18 -0
  69. package/src/model/operation/renameoperation.d.ts +78 -0
  70. package/src/model/operation/rootattributeoperation.d.ts +97 -0
  71. package/src/model/operation/rootattributeoperation.js +1 -1
  72. package/src/model/operation/splitoperation.d.ts +104 -0
  73. package/src/model/operation/transform.d.ts +100 -0
  74. package/src/model/operation/utils.d.ts +71 -0
  75. package/src/model/position.d.ts +539 -0
  76. package/src/model/position.js +1 -1
  77. package/src/model/range.d.ts +458 -0
  78. package/src/model/range.js +1 -1
  79. package/src/model/rootelement.d.ts +40 -0
  80. package/src/model/schema.d.ts +1176 -0
  81. package/src/model/schema.js +15 -15
  82. package/src/model/selection.d.ts +472 -0
  83. package/src/model/text.d.ts +66 -0
  84. package/src/model/text.js +0 -2
  85. package/src/model/textproxy.d.ts +144 -0
  86. package/src/model/treewalker.d.ts +186 -0
  87. package/src/model/treewalker.js +19 -10
  88. package/src/model/typecheckable.d.ts +255 -0
  89. package/src/model/utils/autoparagraphing.d.ts +37 -0
  90. package/src/model/utils/deletecontent.d.ts +58 -0
  91. package/src/model/utils/findoptimalinsertionrange.d.ts +32 -0
  92. package/src/model/utils/getselectedcontent.d.ts +30 -0
  93. package/src/model/utils/insertcontent.d.ts +46 -0
  94. package/src/model/utils/insertcontent.js +2 -12
  95. package/src/model/utils/insertobject.d.ts +44 -0
  96. package/src/model/utils/insertobject.js +3 -14
  97. package/src/model/utils/modifyselection.d.ts +48 -0
  98. package/src/model/utils/selection-post-fixer.d.ts +65 -0
  99. package/src/model/writer.d.ts +726 -0
  100. package/src/model/writer.js +6 -4
  101. package/src/view/attributeelement.d.ts +108 -0
  102. package/src/view/attributeelement.js +25 -69
  103. package/src/view/containerelement.d.ts +49 -0
  104. package/src/view/containerelement.js +10 -43
  105. package/src/view/datatransfer.d.ts +75 -0
  106. package/src/view/datatransfer.js +24 -27
  107. package/src/view/document.d.ts +184 -0
  108. package/src/view/document.js +15 -84
  109. package/src/view/documentfragment.d.ts +150 -0
  110. package/src/view/documentfragment.js +40 -81
  111. package/src/view/documentselection.d.ts +219 -0
  112. package/src/view/documentselection.js +75 -121
  113. package/src/view/domconverter.d.ts +620 -0
  114. package/src/view/domconverter.js +159 -276
  115. package/src/view/downcastwriter.d.ts +804 -0
  116. package/src/view/downcastwriter.js +336 -380
  117. package/src/view/editableelement.d.ts +52 -0
  118. package/src/view/editableelement.js +9 -49
  119. package/src/view/element.d.ts +466 -0
  120. package/src/view/element.js +150 -222
  121. package/src/view/elementdefinition.d.ts +87 -0
  122. package/src/view/emptyelement.d.ts +41 -0
  123. package/src/view/emptyelement.js +11 -44
  124. package/src/view/filler.d.ts +111 -0
  125. package/src/view/filler.js +24 -21
  126. package/src/view/item.d.ts +14 -0
  127. package/src/view/matcher.d.ts +486 -0
  128. package/src/view/matcher.js +247 -218
  129. package/src/view/node.d.ts +160 -0
  130. package/src/view/node.js +26 -100
  131. package/src/view/observer/arrowkeysobserver.d.ts +41 -0
  132. package/src/view/observer/arrowkeysobserver.js +0 -13
  133. package/src/view/observer/bubblingemittermixin.d.ts +166 -0
  134. package/src/view/observer/bubblingemittermixin.js +36 -25
  135. package/src/view/observer/bubblingeventinfo.d.ts +47 -0
  136. package/src/view/observer/bubblingeventinfo.js +3 -29
  137. package/src/view/observer/clickobserver.d.ts +43 -0
  138. package/src/view/observer/clickobserver.js +9 -19
  139. package/src/view/observer/compositionobserver.d.ts +82 -0
  140. package/src/view/observer/compositionobserver.js +13 -42
  141. package/src/view/observer/domeventdata.d.ts +50 -0
  142. package/src/view/observer/domeventdata.js +5 -30
  143. package/src/view/observer/domeventobserver.d.ts +69 -0
  144. package/src/view/observer/domeventobserver.js +19 -21
  145. package/src/view/observer/fakeselectionobserver.d.ts +46 -0
  146. package/src/view/observer/fakeselectionobserver.js +2 -15
  147. package/src/view/observer/focusobserver.d.ts +82 -0
  148. package/src/view/observer/focusobserver.js +14 -40
  149. package/src/view/observer/inputobserver.d.ts +86 -0
  150. package/src/view/observer/inputobserver.js +18 -64
  151. package/src/view/observer/keyobserver.d.ts +67 -0
  152. package/src/view/observer/keyobserver.js +8 -42
  153. package/src/view/observer/mouseobserver.d.ts +89 -0
  154. package/src/view/observer/mouseobserver.js +8 -28
  155. package/src/view/observer/mutationobserver.d.ts +82 -0
  156. package/src/view/observer/mutationobserver.js +7 -37
  157. package/src/view/observer/observer.d.ts +84 -0
  158. package/src/view/observer/observer.js +12 -25
  159. package/src/view/observer/selectionobserver.d.ts +143 -0
  160. package/src/view/observer/selectionobserver.js +9 -99
  161. package/src/view/observer/tabobserver.d.ts +42 -0
  162. package/src/view/observer/tabobserver.js +0 -14
  163. package/src/view/placeholder.d.ts +85 -0
  164. package/src/view/placeholder.js +26 -43
  165. package/src/view/position.d.ts +189 -0
  166. package/src/view/position.js +36 -83
  167. package/src/view/range.d.ts +279 -0
  168. package/src/view/range.js +79 -122
  169. package/src/view/rawelement.d.ts +73 -0
  170. package/src/view/rawelement.js +34 -48
  171. package/src/view/renderer.d.ts +265 -0
  172. package/src/view/renderer.js +105 -193
  173. package/src/view/rooteditableelement.d.ts +41 -0
  174. package/src/view/rooteditableelement.js +12 -40
  175. package/src/view/selection.d.ts +375 -0
  176. package/src/view/selection.js +79 -153
  177. package/src/view/styles/background.d.ts +33 -0
  178. package/src/view/styles/background.js +14 -12
  179. package/src/view/styles/border.d.ts +43 -0
  180. package/src/view/styles/border.js +58 -48
  181. package/src/view/styles/margin.d.ts +29 -0
  182. package/src/view/styles/margin.js +13 -11
  183. package/src/view/styles/padding.d.ts +29 -0
  184. package/src/view/styles/padding.js +13 -11
  185. package/src/view/styles/utils.d.ts +93 -0
  186. package/src/view/styles/utils.js +22 -48
  187. package/src/view/stylesmap.d.ts +675 -0
  188. package/src/view/stylesmap.js +249 -244
  189. package/src/view/text.d.ts +74 -0
  190. package/src/view/text.js +16 -46
  191. package/src/view/textproxy.d.ts +97 -0
  192. package/src/view/textproxy.js +10 -59
  193. package/src/view/treewalker.d.ts +195 -0
  194. package/src/view/treewalker.js +43 -106
  195. package/src/view/typecheckable.d.ts +401 -0
  196. package/src/view/uielement.d.ts +96 -0
  197. package/src/view/uielement.js +28 -62
  198. package/src/view/upcastwriter.d.ts +328 -0
  199. package/src/view/upcastwriter.js +124 -134
  200. package/src/view/view.d.ts +327 -0
  201. package/src/view/view.js +79 -150
@@ -18,30 +18,28 @@ import DomEventData from './domeventdata';
18
18
  *
19
19
  * For instance:
20
20
  *
21
- * class ClickObserver extends DomEventObserver {
22
- * // It can also be defined as a normal property in the constructor.
23
- * get domEventType() {
24
- * return 'click';
25
- * }
21
+ * ```ts
22
+ * class ClickObserver extends DomEventObserver<'click'> {
23
+ * // It can also be defined as a normal property in the constructor.
24
+ * get domEventType(): 'click' {
25
+ * return 'click';
26
+ * }
26
27
  *
27
- * onDomEvent( domEvent ) {
28
- * this.fire( 'click', domEvent );
29
- * }
30
- * }
28
+ * onDomEvent( domEvent: MouseEvent ): void {
29
+ * this.fire( 'click', domEvent );
30
+ * }
31
+ * }
32
+ * ```
31
33
  *
32
- * @extends module:engine/view/observer/observer~Observer
34
+ * @typeParam EventType DOM Event type name or an union of those.
35
+ * @typeParam AdditionalData Additional data passed along with the event.
33
36
  */
34
37
  export default class DomEventObserver extends Observer {
35
- /**
36
- * @inheritDoc
37
- */
38
- constructor(view) {
39
- super(view);
38
+ constructor() {
39
+ super(...arguments);
40
40
  /**
41
41
  * If set to `true` DOM events will be listened on the capturing phase.
42
42
  * Default value is `false`.
43
- *
44
- * @member {Boolean}
45
43
  */
46
44
  this.useCapture = false;
47
45
  }
@@ -61,10 +59,10 @@ export default class DomEventObserver extends Observer {
61
59
  /**
62
60
  * Calls `Document#fire()` if observer {@link #isEnabled is enabled}.
63
61
  *
64
- * @see module:utils/emittermixin~EmitterMixin#fire
65
- * @param {String} eventType The event type (name).
66
- * @param {Event} domEvent The DOM event.
67
- * @param {Object} [additionalData] The additional data which should extend the
62
+ * @see module:utils/emittermixin~Emitter#fire
63
+ * @param eventType The event type (name).
64
+ * @param domEvent The DOM event.
65
+ * @param additionalData The additional data which should extend the
68
66
  * {@link module:engine/view/observer/domeventdata~DomEventData event data} object.
69
67
  */
70
68
  fire(eventType, domEvent, additionalData) {
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module engine/view/observer/fakeselectionobserver
7
+ */
8
+ import Observer from './observer';
9
+ import type View from '../view';
10
+ /**
11
+ * Fake selection observer class. If view selection is fake it is placed in dummy DOM container. This observer listens
12
+ * on {@link module:engine/view/document~Document#event:keydown keydown} events and handles moving fake view selection to the correct place
13
+ * if arrow keys are pressed.
14
+ * Fires {@link module:engine/view/document~Document#event:selectionChange selectionChange event} simulating natural behaviour of
15
+ * {@link module:engine/view/observer/selectionobserver~SelectionObserver SelectionObserver}.
16
+ */
17
+ export default class FakeSelectionObserver extends Observer {
18
+ /**
19
+ * Fires debounced event `selectionChangeDone`. It uses `lodash#debounce` method to delay function call.
20
+ */
21
+ private readonly _fireSelectionChangeDoneDebounced;
22
+ /**
23
+ * Creates new FakeSelectionObserver instance.
24
+ */
25
+ constructor(view: View);
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ observe(): void;
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ destroy(): void;
34
+ /**
35
+ * Handles collapsing view selection according to given key code. If left or up key is provided - new selection will be
36
+ * collapsed to left. If right or down key is pressed - new selection will be collapsed to right.
37
+ *
38
+ * This method fires {@link module:engine/view/document~Document#event:selectionChange} and
39
+ * {@link module:engine/view/document~Document#event:selectionChangeDone} events imitating behaviour of
40
+ * {@link module:engine/view/observer/selectionobserver~SelectionObserver}.
41
+ *
42
+ * @fires selectionChange
43
+ * @fires selectionChangeDone
44
+ */
45
+ private _handleSelectionMove;
46
+ }
@@ -15,24 +15,13 @@ import { debounce } from 'lodash-es';
15
15
  * if arrow keys are pressed.
16
16
  * Fires {@link module:engine/view/document~Document#event:selectionChange selectionChange event} simulating natural behaviour of
17
17
  * {@link module:engine/view/observer/selectionobserver~SelectionObserver SelectionObserver}.
18
- *
19
- * @extends module:engine/view/observer/observer~Observer
20
18
  */
21
19
  export default class FakeSelectionObserver extends Observer {
22
20
  /**
23
21
  * Creates new FakeSelectionObserver instance.
24
- *
25
- * @param {module:engine/view/view~View} view
26
22
  */
27
23
  constructor(view) {
28
24
  super(view);
29
- /**
30
- * Fires debounced event `selectionChangeDone`. It uses `lodash#debounce` method to delay function call.
31
- *
32
- * @private
33
- * @param {Object} data Selection change data.
34
- * @method #_fireSelectionChangeDoneDebounced
35
- */
36
25
  this._fireSelectionChangeDoneDebounced = debounce(data => {
37
26
  this.document.fire('selectionChangeDone', data);
38
27
  }, 200);
@@ -71,10 +60,8 @@ export default class FakeSelectionObserver extends Observer {
71
60
  * {@link module:engine/view/document~Document#event:selectionChangeDone} events imitating behaviour of
72
61
  * {@link module:engine/view/observer/selectionobserver~SelectionObserver}.
73
62
  *
74
- * @private
75
- * @param {Number} keyCode
76
- * @fires module:engine/view/document~Document#event:selectionChange
77
- * @fires module:engine/view/document~Document#event:selectionChangeDone
63
+ * @fires selectionChange
64
+ * @fires selectionChangeDone
78
65
  */
79
66
  _handleSelectionMove(keyCode) {
80
67
  const selection = this.document.selection;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module engine/view/observer/focusobserver
7
+ */
8
+ import DomEventObserver from './domeventobserver';
9
+ import type DomEventData from './domeventdata';
10
+ import type View from '../view';
11
+ /**
12
+ * {@link module:engine/view/document~Document#event:focus Focus}
13
+ * and {@link module:engine/view/document~Document#event:blur blur} events observer.
14
+ * Focus observer handle also {@link module:engine/view/rooteditableelement~RootEditableElement#isFocused isFocused} property of the
15
+ * {@link module:engine/view/rooteditableelement~RootEditableElement root elements}.
16
+ *
17
+ * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.
18
+ */
19
+ export default class FocusObserver extends DomEventObserver<'focus' | 'blur'> {
20
+ /**
21
+ * Identifier of the timeout currently used by focus listener to delay rendering execution.
22
+ */
23
+ private _renderTimeoutId;
24
+ /**
25
+ * Set to `true` if the document is in the process of setting the focus.
26
+ *
27
+ * The flag is used to indicate that setting the focus is in progress.
28
+ */
29
+ private _isFocusChanging;
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ readonly domEventType: readonly ["focus", "blur"];
34
+ /**
35
+ * @inheritDoc
36
+ */
37
+ constructor(view: View);
38
+ /**
39
+ * Finishes setting the document focus state.
40
+ */
41
+ flush(): void;
42
+ /**
43
+ * @inheritDoc
44
+ */
45
+ onDomEvent(domEvent: FocusEvent): void;
46
+ /**
47
+ * @inheritDoc
48
+ */
49
+ destroy(): void;
50
+ }
51
+ /**
52
+ * Fired when one of the editables gets focus.
53
+ *
54
+ * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.
55
+ *
56
+ * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the
57
+ * {@link module:engine/view/view~View} this event is available by default.
58
+ *
59
+ * @see module:engine/view/observer/focusobserver~FocusObserver
60
+ * @eventName focus
61
+ * @param data Event data.
62
+ */
63
+ export type ViewDocumentFocusEvent = {
64
+ name: 'focus';
65
+ args: [data: DomEventData<FocusEvent>];
66
+ };
67
+ /**
68
+ * Fired when one of the editables loses focus.
69
+ *
70
+ * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.
71
+ *
72
+ * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the
73
+ * {@link module:engine/view/view~View} this event is available by default.
74
+ *
75
+ * @see module:engine/view/observer/focusobserver~FocusObserver
76
+ * @eventName blur
77
+ * @param data Event data.
78
+ */
79
+ export type ViewDocumentBlurEvent = {
80
+ name: 'blur';
81
+ args: [data: DomEventData<FocusEvent>];
82
+ };
@@ -14,25 +14,26 @@ import DomEventObserver from './domeventobserver';
14
14
  * {@link module:engine/view/rooteditableelement~RootEditableElement root elements}.
15
15
  *
16
16
  * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.
17
- *
18
- * @extends module:engine/view/observer/domeventobserver~DomEventObserver
19
17
  */
20
18
  export default class FocusObserver extends DomEventObserver {
19
+ /**
20
+ * @inheritDoc
21
+ */
21
22
  constructor(view) {
22
23
  super(view);
24
+ /**
25
+ * Set to `true` if the document is in the process of setting the focus.
26
+ *
27
+ * The flag is used to indicate that setting the focus is in progress.
28
+ */
23
29
  this._isFocusChanging = false;
30
+ /**
31
+ * @inheritDoc
32
+ */
24
33
  this.domEventType = ['focus', 'blur'];
25
34
  this.useCapture = true;
26
35
  const document = this.document;
27
36
  document.on('focus', () => {
28
- /**
29
- * Set to `true` if the document is in the process of setting the focus.
30
- *
31
- * The flag is used to indicate that setting the focus is in progress.
32
- *
33
- * @internal
34
- * @type {Boolean} module:engine/view/observer/focusobserver#_isFocusChanging
35
- */
36
37
  this._isFocusChanging = true;
37
38
  // Unfortunately native `selectionchange` event is fired asynchronously.
38
39
  // We need to wait until `SelectionObserver` handle the event and then render. Otherwise rendering will
@@ -57,12 +58,6 @@ export default class FocusObserver extends DomEventObserver {
57
58
  view.change(() => { });
58
59
  }
59
60
  });
60
- /**
61
- * Identifier of the timeout currently used by focus listener to delay rendering execution.
62
- *
63
- * @private
64
- * @member {Number} #_renderTimeoutId
65
- */
66
61
  }
67
62
  /**
68
63
  * Finishes setting the document focus state.
@@ -73,6 +68,9 @@ export default class FocusObserver extends DomEventObserver {
73
68
  this.document.isFocused = true;
74
69
  }
75
70
  }
71
+ /**
72
+ * @inheritDoc
73
+ */
76
74
  onDomEvent(domEvent) {
77
75
  this.fire(domEvent.type, domEvent);
78
76
  }
@@ -86,27 +84,3 @@ export default class FocusObserver extends DomEventObserver {
86
84
  super.destroy();
87
85
  }
88
86
  }
89
- /**
90
- * Fired when one of the editables gets focus.
91
- *
92
- * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.
93
- *
94
- * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the
95
- * {@link module:engine/view/view~View} this event is available by default.
96
- *
97
- * @see module:engine/view/observer/focusobserver~FocusObserver
98
- * @event module:engine/view/document~Document#event:focus
99
- * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.
100
- */
101
- /**
102
- * Fired when one of the editables loses focus.
103
- *
104
- * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.
105
- *
106
- * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the
107
- * {@link module:engine/view/view~View} this event is available by default.
108
- *
109
- * @see module:engine/view/observer/focusobserver~FocusObserver
110
- * @event module:engine/view/document~Document#event:blur
111
- * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.
112
- */
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module engine/view/observer/inputobserver
7
+ */
8
+ import DomEventObserver from './domeventobserver';
9
+ import type DomEventData from './domeventdata';
10
+ import type ViewRange from '../range';
11
+ import DataTransfer from '../datatransfer';
12
+ /**
13
+ * Observer for events connected with data input.
14
+ *
15
+ * **Note**: This observer is attached by {@link module:engine/view/view~View} and available by default in all
16
+ * editor instances.
17
+ */
18
+ export default class InputObserver extends DomEventObserver<'beforeinput'> {
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ readonly domEventType: "beforeinput";
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ onDomEvent(domEvent: InputEvent): void;
27
+ }
28
+ /**
29
+ * Fired before the web browser inputs, deletes, or formats some data.
30
+ *
31
+ * This event is introduced by {@link module:engine/view/observer/inputobserver~InputObserver} and available
32
+ * by default in all editor instances (attached by {@link module:engine/view/view~View}).
33
+ *
34
+ * @see module:engine/view/observer/inputobserver~InputObserver
35
+ * @eventName beforeinput
36
+ * @param data Event data containing detailed information about the event.
37
+ */
38
+ export type ViewDocumentInputEvent = {
39
+ name: 'beforeinput';
40
+ args: [data: InputEventData];
41
+ };
42
+ /**
43
+ * The value of the {@link module:engine/view/document~ViewDocumentInputEvent} event.
44
+ */
45
+ export interface InputEventData extends DomEventData<InputEvent> {
46
+ /**
47
+ * The type of the input event (e.g. "insertText" or "deleteWordBackward"). Corresponds to native `InputEvent#inputType`.
48
+ */
49
+ readonly inputType: string;
50
+ /**
51
+ * A unified text data passed along with the input event. Depending on:
52
+ *
53
+ * * the web browser and input events implementation (for instance [Level 1](https://www.w3.org/TR/input-events-1/) or
54
+ * [Level 2](https://www.w3.org/TR/input-events-2/)),
55
+ * * {@link module:engine/view/observer/inputobserver~InputEventData#inputType input type}
56
+ *
57
+ * text data is sometimes passed in the `data` and sometimes in the `dataTransfer` property.
58
+ *
59
+ * * If `InputEvent#data` was set, this property reflects its value.
60
+ * * If `InputEvent#data` is unavailable, this property contains the `'text/plain'` data from
61
+ * {@link module:engine/view/observer/inputobserver~InputEventData#dataTransfer}.
62
+ * * If the event ({@link module:engine/view/observer/inputobserver~InputEventData#inputType input type})
63
+ * provides no data whatsoever, this property is `null`.
64
+ */
65
+ readonly data: string | null;
66
+ /**
67
+ * The data transfer instance of the input event. Corresponds to native `InputEvent#dataTransfer`.
68
+ *
69
+ * The value is `null` when no `dataTransfer` was passed along with the input event.
70
+ */
71
+ readonly dataTransfer: DataTransfer;
72
+ /**
73
+ * A flag indicating that the `beforeinput` event was fired during composition.
74
+ *
75
+ * Corresponds to the
76
+ * {@link module:engine/view/document~Document#event:compositionstart},
77
+ * {@link module:engine/view/document~Document#event:compositionupdate},
78
+ * and {@link module:engine/view/document~Document#event:compositionend } trio.
79
+ */
80
+ readonly isComposing: boolean;
81
+ /**
82
+ * Editing {@link module:engine/view/range~Range view ranges} corresponding to DOM ranges provided by the web browser
83
+ * (as returned by `InputEvent#getTargetRanges()`).
84
+ */
85
+ readonly targetRanges: Array<ViewRange>;
86
+ }
@@ -13,16 +13,20 @@ import { env } from '@ckeditor/ckeditor5-utils';
13
13
  *
14
14
  * **Note**: This observer is attached by {@link module:engine/view/view~View} and available by default in all
15
15
  * editor instances.
16
- *
17
- * @extends module:engine/view/observer/domeventobserver~DomEventObserver
18
16
  */
19
17
  export default class InputObserver extends DomEventObserver {
20
- constructor(view) {
21
- super(view);
22
- this.domEventType = ['beforeinput'];
18
+ constructor() {
19
+ super(...arguments);
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ this.domEventType = 'beforeinput';
23
24
  }
25
+ /**
26
+ * @inheritDoc
27
+ */
24
28
  onDomEvent(domEvent) {
25
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
29
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
26
30
  // @if CK_DEBUG_TYPING // console.group( `%c[InputObserver]%c ${ domEvent.type }: ${ domEvent.inputType }`,
27
31
  // @if CK_DEBUG_TYPING // 'color: green', 'color: default'
28
32
  // @if CK_DEBUG_TYPING // );
@@ -38,7 +42,7 @@ export default class InputObserver extends DomEventObserver {
38
42
  }
39
43
  if (domEvent.data !== null) {
40
44
  data = domEvent.data;
41
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
45
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
42
46
  // @if CK_DEBUG_TYPING // console.info( `%c[InputObserver]%c event data: %c${ JSON.stringify( data ) }`,
43
47
  // @if CK_DEBUG_TYPING // 'color: green;font-weight: bold', 'font-weight:bold', 'color: blue;'
44
48
  // @if CK_DEBUG_TYPING // );
@@ -46,7 +50,7 @@ export default class InputObserver extends DomEventObserver {
46
50
  }
47
51
  else if (dataTransfer) {
48
52
  data = dataTransfer.getData('text/plain');
49
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
53
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
50
54
  // @if CK_DEBUG_TYPING // console.info( `%c[InputObserver]%c event data transfer: %c${ JSON.stringify( data ) }`,
51
55
  // @if CK_DEBUG_TYPING // 'color: green;font-weight: bold', 'font-weight:bold', 'color: blue;'
52
56
  // @if CK_DEBUG_TYPING // );
@@ -57,7 +61,7 @@ export default class InputObserver extends DomEventObserver {
57
61
  if (viewDocument.selection.isFake) {
58
62
  // Future-proof: in case of multi-range fake selections being possible.
59
63
  targetRanges = Array.from(viewDocument.selection.getRanges());
60
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
64
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
61
65
  // @if CK_DEBUG_TYPING // console.info( '%c[InputObserver]%c using fake selection:',
62
66
  // @if CK_DEBUG_TYPING // 'color: green;font-weight: bold', 'font-weight:bold', targetRanges,
63
67
  // @if CK_DEBUG_TYPING // viewDocument.selection.isFake ? 'fake view selection' : 'fake DOM parent'
@@ -68,7 +72,7 @@ export default class InputObserver extends DomEventObserver {
68
72
  targetRanges = domTargetRanges.map(domRange => {
69
73
  return view.domConverter.domRangeToView(domRange);
70
74
  });
71
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
75
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
72
76
  // @if CK_DEBUG_TYPING // console.info( '%c[InputObserver]%c using target ranges:',
73
77
  // @if CK_DEBUG_TYPING // 'color: green;font-weight: bold', 'font-weight:bold', targetRanges
74
78
  // @if CK_DEBUG_TYPING // );
@@ -79,7 +83,7 @@ export default class InputObserver extends DomEventObserver {
79
83
  else if (env.isAndroid) {
80
84
  const domSelection = domEvent.target.ownerDocument.defaultView.getSelection();
81
85
  targetRanges = Array.from(view.domConverter.domSelectionToView(domSelection).getRanges());
82
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
86
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
83
87
  // @if CK_DEBUG_TYPING // console.info( '%c[InputObserver]%c using selection ranges:',
84
88
  // @if CK_DEBUG_TYPING // 'color: green;font-weight: bold', 'font-weight:bold', targetRanges
85
89
  // @if CK_DEBUG_TYPING // );
@@ -95,7 +99,7 @@ export default class InputObserver extends DomEventObserver {
95
99
  inputType: 'insertParagraph',
96
100
  targetRanges: [view.createRange(targetRanges[0].end)]
97
101
  });
98
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
102
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
99
103
  // @if CK_DEBUG_TYPING // console.groupEnd();
100
104
  // @if CK_DEBUG_TYPING // }
101
105
  return;
@@ -129,7 +133,7 @@ export default class InputObserver extends DomEventObserver {
129
133
  partTargetRanges = [viewDocument.selection.getFirstRange()];
130
134
  }
131
135
  }
132
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
136
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
133
137
  // @if CK_DEBUG_TYPING // console.groupEnd();
134
138
  // @if CK_DEBUG_TYPING // }
135
139
  return;
@@ -142,58 +146,8 @@ export default class InputObserver extends DomEventObserver {
142
146
  inputType: domEvent.inputType,
143
147
  isComposing: domEvent.isComposing
144
148
  });
145
- // @if CK_DEBUG_TYPING // if ( window.logCKETyping ) {
149
+ // @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {
146
150
  // @if CK_DEBUG_TYPING // console.groupEnd();
147
151
  // @if CK_DEBUG_TYPING // }
148
152
  }
149
153
  }
150
- /**
151
- * The data transfer instance of the input event. Corresponds to native `InputEvent#dataTransfer`.
152
- *
153
- * The value is `null` when no `dataTransfer` was passed along with the input event.
154
- *
155
- * @readonly
156
- * @member {module:engine/view/datatransfer~DataTransfer|null} module:engine/view/observer/inputobserver~InputEventData#dataTransfer
157
- */
158
- /**
159
- * A flag indicating that the `beforeinput` event was fired during composition.
160
- *
161
- * Corresponds to the
162
- * {@link module:engine/view/document~Document#event:compositionstart},
163
- * {@link module:engine/view/document~Document#event:compositionupdate},
164
- * and {@link module:engine/view/document~Document#event:compositionend } trio.
165
- *
166
- * @readonly
167
- * @member {Boolean} module:engine/view/observer/inputobserver~InputEventData#isComposing
168
- */
169
- /**
170
- * The type of the input event (e.g. "insertText" or "deleteWordBackward"). Corresponds to native `InputEvent#inputType`.
171
- *
172
- * @readonly
173
- * @member {String} module:engine/view/observer/inputobserver~InputEventData#inputType
174
- */
175
- /**
176
- * Editing {@link module:engine/view/range~Range view ranges} corresponding to DOM ranges provided by the web browser
177
- * (as returned by `InputEvent#getTargetRanges()`).
178
- *
179
- * @readonly
180
- * @member {Array.<module:engine/view/range~Range>} module:engine/view/observer/inputobserver~InputEventData#targetRanges
181
- */
182
- /**
183
- * A unified text data passed along with the input event. Depending on:
184
- *
185
- * * the web browser and input events implementation (for instance [Level 1](https://www.w3.org/TR/input-events-1/) or
186
- * [Level 2](https://www.w3.org/TR/input-events-2/)),
187
- * * {@link module:engine/view/observer/inputobserver~InputEventData#inputType input type}
188
- *
189
- * text data is sometimes passed in the `data` and sometimes in the `dataTransfer` property.
190
- *
191
- * * If `InputEvent#data` was set, this property reflects its value.
192
- * * If `InputEvent#data` is unavailable, this property contains the `'text/plain'` data from
193
- * {@link module:engine/view/observer/inputobserver~InputEventData#dataTransfer}.
194
- * * If the event ({@link module:engine/view/observer/inputobserver~InputEventData#inputType input type})
195
- * provides no data whatsoever, this property is `null`.
196
- *
197
- * @readonly
198
- * @member {String|null} module:engine/view/observer/inputobserver~InputEventData#data
199
- */
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. 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 type DomEventData from './domeventdata';
10
+ import { type KeystrokeInfo } from '@ckeditor/ckeditor5-utils';
11
+ /**
12
+ * Observer for events connected with pressing keyboard keys.
13
+ *
14
+ * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.
15
+ */
16
+ export default class KeyObserver extends DomEventObserver<'keydown' | 'keyup', KeystrokeInfo & {
17
+ keystroke: number;
18
+ }> {
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ readonly domEventType: readonly ["keydown", "keyup"];
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ onDomEvent(domEvt: KeyboardEvent): void;
27
+ }
28
+ /**
29
+ * Fired when a key has been pressed.
30
+ *
31
+ * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.
32
+ *
33
+ * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the
34
+ * {@link module:engine/view/view~View} this event is available by default.
35
+ *
36
+ * @see module:engine/view/observer/keyobserver~KeyObserver
37
+ * @eventName keydown
38
+ */
39
+ export type ViewDocumentKeyDownEvent = {
40
+ name: 'keydown';
41
+ args: [data: KeyEventData];
42
+ };
43
+ /**
44
+ * Fired when a key has been released.
45
+ *
46
+ * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.
47
+ *
48
+ * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the
49
+ * {@link module:engine/view/view~View} this event is available by default.
50
+ *
51
+ * @see module:engine/view/observer/keyobserver~KeyObserver
52
+ * @eventName keyup
53
+ */
54
+ export type ViewDocumentKeyUpEvent = {
55
+ name: 'keyup';
56
+ args: [data: KeyEventData];
57
+ };
58
+ /**
59
+ * The value of both events - {@link module:engine/view/document~ViewDocumentKeyDownEvent} and
60
+ * {@link module:engine/view/document~ViewDocumentKeyUpEvent}.
61
+ */
62
+ export interface KeyEventData extends DomEventData<KeyboardEvent>, KeystrokeInfo {
63
+ /**
64
+ * Code of the whole keystroke. See {@link module:utils/keyboard~getCode}.
65
+ */
66
+ keystroke: number;
67
+ }