This repository has been archived by the owner on Jun 26, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 40
/
emptyelement.js
84 lines (77 loc) · 2.53 KB
/
emptyelement.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module engine/view/emptyelement
*/
import Element from './element';
import CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';
import Node from './node';
/**
* Empty element class. It is used to represent elements that cannot contain any child nodes (for example `<img>` elements).
*
* To create a new empty element use the
* {@link module:engine/view/downcastwriter~DowncastWriter#createEmptyElement `downcastWriter#createEmptyElement()`} method.
*
* @extends module:engine/view/element~Element
*/
export default class EmptyElement extends Element {
/**
* Creates new instance of EmptyElement.
*
* Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` when third parameter is passed,
* to inform that usage of EmptyElement is incorrect (adding child nodes to EmptyElement is forbidden).
*
* @see module:engine/view/downcastwriter~DowncastWriter#createEmptyElement
* @protected
* @param {String} name Node name.
* @param {Object|Iterable} [attributes] Collection of attributes.
*/
constructor( name, attributes, children ) {
super( name, attributes, children );
/**
* Returns `null` because filler is not needed for EmptyElements.
*
* @method #getFillerOffset
* @returns {null} Always returns null.
*/
this.getFillerOffset = getFillerOffset;
}
/**
* @inheritDoc
*/
is( type, name = null ) {
if ( !name ) {
return type == 'emptyElement' || super.is( type );
} else {
return ( type == 'emptyElement' && name == this.name ) || super.is( type, name );
}
}
/**
* Overrides {@link module:engine/view/element~Element#_insertChild} method.
* Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent
* adding any child nodes to EmptyElement.
*
* @protected
*/
_insertChild( index, nodes ) {
if ( nodes && ( nodes instanceof Node || Array.from( nodes ).length > 0 ) ) {
/**
* Cannot add children to {@link module:engine/view/emptyelement~EmptyElement}.
*
* @error view-emptyelement-cannot-add
*/
throw new CKEditorError(
'view-emptyelement-cannot-add: Cannot add child nodes to EmptyElement instance.',
[ this, nodes ]
);
}
}
}
// Returns `null` because block filler is not needed for EmptyElements.
//
// @returns {null}
function getFillerOffset() {
return null;
}