@ckeditor/ckeditor5-engine 30.0.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 (117) hide show
  1. package/LICENSE.md +17 -0
  2. package/README.md +30 -0
  3. package/package.json +70 -0
  4. package/src/controller/datacontroller.js +563 -0
  5. package/src/controller/editingcontroller.js +149 -0
  6. package/src/conversion/conversion.js +644 -0
  7. package/src/conversion/conversionhelpers.js +40 -0
  8. package/src/conversion/downcastdispatcher.js +914 -0
  9. package/src/conversion/downcasthelpers.js +1706 -0
  10. package/src/conversion/mapper.js +696 -0
  11. package/src/conversion/modelconsumable.js +329 -0
  12. package/src/conversion/upcastdispatcher.js +807 -0
  13. package/src/conversion/upcasthelpers.js +997 -0
  14. package/src/conversion/viewconsumable.js +623 -0
  15. package/src/dataprocessor/basichtmlwriter.js +32 -0
  16. package/src/dataprocessor/dataprocessor.jsdoc +64 -0
  17. package/src/dataprocessor/htmldataprocessor.js +159 -0
  18. package/src/dataprocessor/htmlwriter.js +22 -0
  19. package/src/dataprocessor/xmldataprocessor.js +161 -0
  20. package/src/dev-utils/model.js +482 -0
  21. package/src/dev-utils/operationreplayer.js +140 -0
  22. package/src/dev-utils/utils.js +103 -0
  23. package/src/dev-utils/view.js +1091 -0
  24. package/src/index.js +52 -0
  25. package/src/model/batch.js +82 -0
  26. package/src/model/differ.js +1282 -0
  27. package/src/model/document.js +483 -0
  28. package/src/model/documentfragment.js +390 -0
  29. package/src/model/documentselection.js +1261 -0
  30. package/src/model/element.js +438 -0
  31. package/src/model/history.js +138 -0
  32. package/src/model/item.jsdoc +14 -0
  33. package/src/model/liveposition.js +182 -0
  34. package/src/model/liverange.js +221 -0
  35. package/src/model/markercollection.js +553 -0
  36. package/src/model/model.js +934 -0
  37. package/src/model/node.js +507 -0
  38. package/src/model/nodelist.js +217 -0
  39. package/src/model/operation/attributeoperation.js +202 -0
  40. package/src/model/operation/detachoperation.js +103 -0
  41. package/src/model/operation/insertoperation.js +188 -0
  42. package/src/model/operation/markeroperation.js +154 -0
  43. package/src/model/operation/mergeoperation.js +216 -0
  44. package/src/model/operation/moveoperation.js +209 -0
  45. package/src/model/operation/nooperation.js +58 -0
  46. package/src/model/operation/operation.js +139 -0
  47. package/src/model/operation/operationfactory.js +49 -0
  48. package/src/model/operation/renameoperation.js +155 -0
  49. package/src/model/operation/rootattributeoperation.js +211 -0
  50. package/src/model/operation/splitoperation.js +254 -0
  51. package/src/model/operation/transform.js +2389 -0
  52. package/src/model/operation/utils.js +292 -0
  53. package/src/model/position.js +1164 -0
  54. package/src/model/range.js +1049 -0
  55. package/src/model/rootelement.js +111 -0
  56. package/src/model/schema.js +1851 -0
  57. package/src/model/selection.js +902 -0
  58. package/src/model/text.js +138 -0
  59. package/src/model/textproxy.js +279 -0
  60. package/src/model/treewalker.js +414 -0
  61. package/src/model/utils/autoparagraphing.js +77 -0
  62. package/src/model/utils/deletecontent.js +528 -0
  63. package/src/model/utils/getselectedcontent.js +150 -0
  64. package/src/model/utils/insertcontent.js +824 -0
  65. package/src/model/utils/modifyselection.js +229 -0
  66. package/src/model/utils/selection-post-fixer.js +297 -0
  67. package/src/model/writer.js +1574 -0
  68. package/src/view/attributeelement.js +274 -0
  69. package/src/view/containerelement.js +123 -0
  70. package/src/view/document.js +221 -0
  71. package/src/view/documentfragment.js +273 -0
  72. package/src/view/documentselection.js +387 -0
  73. package/src/view/domconverter.js +1437 -0
  74. package/src/view/downcastwriter.js +2121 -0
  75. package/src/view/editableelement.js +118 -0
  76. package/src/view/element.js +945 -0
  77. package/src/view/elementdefinition.jsdoc +59 -0
  78. package/src/view/emptyelement.js +119 -0
  79. package/src/view/filler.js +161 -0
  80. package/src/view/item.jsdoc +14 -0
  81. package/src/view/matcher.js +776 -0
  82. package/src/view/node.js +391 -0
  83. package/src/view/observer/arrowkeysobserver.js +58 -0
  84. package/src/view/observer/bubblingemittermixin.js +307 -0
  85. package/src/view/observer/bubblingeventinfo.js +71 -0
  86. package/src/view/observer/clickobserver.js +46 -0
  87. package/src/view/observer/compositionobserver.js +79 -0
  88. package/src/view/observer/domeventdata.js +82 -0
  89. package/src/view/observer/domeventobserver.js +99 -0
  90. package/src/view/observer/fakeselectionobserver.js +118 -0
  91. package/src/view/observer/focusobserver.js +106 -0
  92. package/src/view/observer/inputobserver.js +44 -0
  93. package/src/view/observer/keyobserver.js +83 -0
  94. package/src/view/observer/mouseobserver.js +56 -0
  95. package/src/view/observer/mutationobserver.js +345 -0
  96. package/src/view/observer/observer.js +118 -0
  97. package/src/view/observer/selectionobserver.js +242 -0
  98. package/src/view/placeholder.js +285 -0
  99. package/src/view/position.js +426 -0
  100. package/src/view/range.js +533 -0
  101. package/src/view/rawelement.js +148 -0
  102. package/src/view/renderer.js +1037 -0
  103. package/src/view/rooteditableelement.js +107 -0
  104. package/src/view/selection.js +718 -0
  105. package/src/view/styles/background.js +73 -0
  106. package/src/view/styles/border.js +362 -0
  107. package/src/view/styles/margin.js +41 -0
  108. package/src/view/styles/padding.js +40 -0
  109. package/src/view/styles/utils.js +277 -0
  110. package/src/view/stylesmap.js +938 -0
  111. package/src/view/text.js +147 -0
  112. package/src/view/textproxy.js +199 -0
  113. package/src/view/treewalker.js +496 -0
  114. package/src/view/uielement.js +238 -0
  115. package/src/view/upcastwriter.js +484 -0
  116. package/src/view/view.js +721 -0
  117. package/theme/placeholder.css +27 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ /**
7
+ * @module engine/view/editableelement
8
+ */
9
+
10
+ import ContainerElement from './containerelement';
11
+ import mix from '@ckeditor/ckeditor5-utils/src/mix';
12
+ import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
13
+
14
+ /**
15
+ * Editable element which can be a {@link module:engine/view/rooteditableelement~RootEditableElement root}
16
+ * or nested editable area in the editor.
17
+ *
18
+ * Editable is automatically read-only when its {@link module:engine/view/document~Document Document} is read-only.
19
+ *
20
+ * The constructor of this class shouldn't be used directly. To create new `EditableElement` use the
21
+ * {@link module:engine/view/downcastwriter~DowncastWriter#createEditableElement `downcastWriter#createEditableElement()`} method.
22
+ *
23
+ * @extends module:engine/view/containerelement~ContainerElement
24
+ * @mixes module:utils/observablemixin~ObservableMixin
25
+ */
26
+ export default class EditableElement extends ContainerElement {
27
+ /**
28
+ * Creates an editable element.
29
+ *
30
+ * @see module:engine/view/downcastwriter~DowncastWriter#createEditableElement
31
+ * @protected
32
+ */
33
+ constructor( document, name, attrs, children ) {
34
+ super( document, name, attrs, children );
35
+
36
+ /**
37
+ * Whether the editable is in read-write or read-only mode.
38
+ *
39
+ * @observable
40
+ * @member {Boolean} module:engine/view/editableelement~EditableElement#isReadOnly
41
+ */
42
+ this.set( 'isReadOnly', false );
43
+
44
+ /**
45
+ * Whether the editable is focused.
46
+ *
47
+ * This property updates when {@link module:engine/view/document~Document#isFocused document.isFocused} or view
48
+ * selection is changed.
49
+ *
50
+ * @readonly
51
+ * @observable
52
+ * @member {Boolean} module:engine/view/editableelement~EditableElement#isFocused
53
+ */
54
+ this.set( 'isFocused', false );
55
+
56
+ this.bind( 'isReadOnly' ).to( document );
57
+
58
+ this.bind( 'isFocused' ).to(
59
+ document,
60
+ 'isFocused',
61
+ isFocused => isFocused && document.selection.editableElement == this
62
+ );
63
+
64
+ // Update focus state based on selection changes.
65
+ this.listenTo( document.selection, 'change', () => {
66
+ this.isFocused = document.isFocused && document.selection.editableElement == this;
67
+ } );
68
+ }
69
+
70
+ /**
71
+ * Checks whether this object is of the given.
72
+ *
73
+ * editableElement.is( 'editableElement' ); // -> true
74
+ * editableElement.is( 'element' ); // -> true
75
+ * editableElement.is( 'node' ); // -> true
76
+ * editableElement.is( 'view:editableElement' ); // -> true
77
+ * editableElement.is( 'view:element' ); // -> true
78
+ * editableElement.is( 'view:node' ); // -> true
79
+ *
80
+ * editableElement.is( 'model:element' ); // -> false
81
+ * editableElement.is( 'documentFragment' ); // -> false
82
+ *
83
+ * Assuming that the object being checked is an editbale element, you can also check its
84
+ * {@link module:engine/view/editableelement~EditableElement#name name}:
85
+ *
86
+ * editableElement.is( 'element', 'div' ); // -> true if this is a div element
87
+ * editableElement.is( 'editableElement', 'div' ); // -> same as above
88
+ * text.is( 'element', 'div' ); -> false
89
+ *
90
+ * {@link module:engine/view/node~Node#is Check the entire list of view objects} which implement the `is()` method.
91
+ *
92
+ * @param {String} type Type to check.
93
+ * @param {String} [name] Element name.
94
+ * @returns {Boolean}
95
+ */
96
+ is( type, name = null ) {
97
+ if ( !name ) {
98
+ return type === 'editableElement' || type === 'view:editableElement' ||
99
+ // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.
100
+ type === 'containerElement' || type === 'view:containerElement' ||
101
+ type === 'element' || type === 'view:element' ||
102
+ type === 'node' || type === 'view:node';
103
+ } else {
104
+ return name === this.name && (
105
+ type === 'editableElement' || type === 'view:editableElement' ||
106
+ // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.
107
+ type === 'containerElement' || type === 'view:containerElement' ||
108
+ type === 'element' || type === 'view:element'
109
+ );
110
+ }
111
+ }
112
+
113
+ destroy() {
114
+ this.stopListening();
115
+ }
116
+ }
117
+
118
+ mix( EditableElement, ObservableMixin );