@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.
- package/LICENSE.md +17 -0
- package/README.md +30 -0
- package/package.json +70 -0
- package/src/controller/datacontroller.js +563 -0
- package/src/controller/editingcontroller.js +149 -0
- package/src/conversion/conversion.js +644 -0
- package/src/conversion/conversionhelpers.js +40 -0
- package/src/conversion/downcastdispatcher.js +914 -0
- package/src/conversion/downcasthelpers.js +1706 -0
- package/src/conversion/mapper.js +696 -0
- package/src/conversion/modelconsumable.js +329 -0
- package/src/conversion/upcastdispatcher.js +807 -0
- package/src/conversion/upcasthelpers.js +997 -0
- package/src/conversion/viewconsumable.js +623 -0
- package/src/dataprocessor/basichtmlwriter.js +32 -0
- package/src/dataprocessor/dataprocessor.jsdoc +64 -0
- package/src/dataprocessor/htmldataprocessor.js +159 -0
- package/src/dataprocessor/htmlwriter.js +22 -0
- package/src/dataprocessor/xmldataprocessor.js +161 -0
- package/src/dev-utils/model.js +482 -0
- package/src/dev-utils/operationreplayer.js +140 -0
- package/src/dev-utils/utils.js +103 -0
- package/src/dev-utils/view.js +1091 -0
- package/src/index.js +52 -0
- package/src/model/batch.js +82 -0
- package/src/model/differ.js +1282 -0
- package/src/model/document.js +483 -0
- package/src/model/documentfragment.js +390 -0
- package/src/model/documentselection.js +1261 -0
- package/src/model/element.js +438 -0
- package/src/model/history.js +138 -0
- package/src/model/item.jsdoc +14 -0
- package/src/model/liveposition.js +182 -0
- package/src/model/liverange.js +221 -0
- package/src/model/markercollection.js +553 -0
- package/src/model/model.js +934 -0
- package/src/model/node.js +507 -0
- package/src/model/nodelist.js +217 -0
- package/src/model/operation/attributeoperation.js +202 -0
- package/src/model/operation/detachoperation.js +103 -0
- package/src/model/operation/insertoperation.js +188 -0
- package/src/model/operation/markeroperation.js +154 -0
- package/src/model/operation/mergeoperation.js +216 -0
- package/src/model/operation/moveoperation.js +209 -0
- package/src/model/operation/nooperation.js +58 -0
- package/src/model/operation/operation.js +139 -0
- package/src/model/operation/operationfactory.js +49 -0
- package/src/model/operation/renameoperation.js +155 -0
- package/src/model/operation/rootattributeoperation.js +211 -0
- package/src/model/operation/splitoperation.js +254 -0
- package/src/model/operation/transform.js +2389 -0
- package/src/model/operation/utils.js +292 -0
- package/src/model/position.js +1164 -0
- package/src/model/range.js +1049 -0
- package/src/model/rootelement.js +111 -0
- package/src/model/schema.js +1851 -0
- package/src/model/selection.js +902 -0
- package/src/model/text.js +138 -0
- package/src/model/textproxy.js +279 -0
- package/src/model/treewalker.js +414 -0
- package/src/model/utils/autoparagraphing.js +77 -0
- package/src/model/utils/deletecontent.js +528 -0
- package/src/model/utils/getselectedcontent.js +150 -0
- package/src/model/utils/insertcontent.js +824 -0
- package/src/model/utils/modifyselection.js +229 -0
- package/src/model/utils/selection-post-fixer.js +297 -0
- package/src/model/writer.js +1574 -0
- package/src/view/attributeelement.js +274 -0
- package/src/view/containerelement.js +123 -0
- package/src/view/document.js +221 -0
- package/src/view/documentfragment.js +273 -0
- package/src/view/documentselection.js +387 -0
- package/src/view/domconverter.js +1437 -0
- package/src/view/downcastwriter.js +2121 -0
- package/src/view/editableelement.js +118 -0
- package/src/view/element.js +945 -0
- package/src/view/elementdefinition.jsdoc +59 -0
- package/src/view/emptyelement.js +119 -0
- package/src/view/filler.js +161 -0
- package/src/view/item.jsdoc +14 -0
- package/src/view/matcher.js +776 -0
- package/src/view/node.js +391 -0
- package/src/view/observer/arrowkeysobserver.js +58 -0
- package/src/view/observer/bubblingemittermixin.js +307 -0
- package/src/view/observer/bubblingeventinfo.js +71 -0
- package/src/view/observer/clickobserver.js +46 -0
- package/src/view/observer/compositionobserver.js +79 -0
- package/src/view/observer/domeventdata.js +82 -0
- package/src/view/observer/domeventobserver.js +99 -0
- package/src/view/observer/fakeselectionobserver.js +118 -0
- package/src/view/observer/focusobserver.js +106 -0
- package/src/view/observer/inputobserver.js +44 -0
- package/src/view/observer/keyobserver.js +83 -0
- package/src/view/observer/mouseobserver.js +56 -0
- package/src/view/observer/mutationobserver.js +345 -0
- package/src/view/observer/observer.js +118 -0
- package/src/view/observer/selectionobserver.js +242 -0
- package/src/view/placeholder.js +285 -0
- package/src/view/position.js +426 -0
- package/src/view/range.js +533 -0
- package/src/view/rawelement.js +148 -0
- package/src/view/renderer.js +1037 -0
- package/src/view/rooteditableelement.js +107 -0
- package/src/view/selection.js +718 -0
- package/src/view/styles/background.js +73 -0
- package/src/view/styles/border.js +362 -0
- package/src/view/styles/margin.js +41 -0
- package/src/view/styles/padding.js +40 -0
- package/src/view/styles/utils.js +277 -0
- package/src/view/stylesmap.js +938 -0
- package/src/view/text.js +147 -0
- package/src/view/textproxy.js +199 -0
- package/src/view/treewalker.js +496 -0
- package/src/view/uielement.js +238 -0
- package/src/view/upcastwriter.js +484 -0
- package/src/view/view.js +721 -0
- 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 );
|