@akilli/editor-src 5.1.5
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/abbreviation/Abbreviation.js +32 -0
- package/abbreviation/AbbreviationDialog.js +21 -0
- package/audio/Audio.js +47 -0
- package/audio/AudioDialog.js +18 -0
- package/audio/AudioListener.js +50 -0
- package/base/AlignCommand.js +34 -0
- package/base/AlignableListener.js +45 -0
- package/base/Alignment.js +36 -0
- package/base/BarListener.js +95 -0
- package/base/Base.js +127 -0
- package/base/Command.js +139 -0
- package/base/CommandManager.js +60 -0
- package/base/ContentFilter.js +109 -0
- package/base/DeletableListener.js +36 -0
- package/base/DeleteCommand.js +18 -0
- package/base/Dialog.js +153 -0
- package/base/DialogManager.js +44 -0
- package/base/Dispatcher.js +88 -0
- package/base/Dom.js +790 -0
- package/base/EditableListener.js +82 -0
- package/base/Editor.js +448 -0
- package/base/Filter.js +35 -0
- package/base/FilterManager.js +44 -0
- package/base/FocusableListener.js +22 -0
- package/base/FocusbarListener.js +99 -0
- package/base/FormCreator.js +162 -0
- package/base/FormatbarListener.js +32 -0
- package/base/Key.js +258 -0
- package/base/Listener.js +51 -0
- package/base/NavigableListener.js +81 -0
- package/base/Plugin.js +176 -0
- package/base/PluginManager.js +51 -0
- package/base/SlotableListener.js +40 -0
- package/base/SortCommand.js +30 -0
- package/base/SortableListener.js +135 -0
- package/base/Sorting.js +36 -0
- package/base/Tag.js +113 -0
- package/base/TagGroup.js +183 -0
- package/base/TagListener.js +34 -0
- package/base/TagManager.js +61 -0
- package/base/TagName.js +470 -0
- package/base/ToolbarListener.js +11 -0
- package/base/util.js +59 -0
- package/block/Block.js +51 -0
- package/block/BlockDialog.js +11 -0
- package/block/BlockElement.js +21 -0
- package/block/BlockListener.js +60 -0
- package/blockquote/Blockquote.js +43 -0
- package/blockquote/BlockquoteFilter.js +22 -0
- package/blockquote/BlockquoteListener.js +34 -0
- package/bold/Bold.js +30 -0
- package/break/Break.js +33 -0
- package/break/BreakFilter.js +24 -0
- package/build/BuildEditor.js +97 -0
- package/build/editor.css +548 -0
- package/build/editor.woff2 +0 -0
- package/cite/Cite.js +30 -0
- package/code/Code.js +30 -0
- package/data/Data.js +32 -0
- package/data/DataDialog.js +13 -0
- package/definition/Definition.js +32 -0
- package/definition/DefinitionDialog.js +13 -0
- package/deletion/Deletion.js +30 -0
- package/details/Details.js +63 -0
- package/details/DetailsFilter.js +17 -0
- package/details/DetailsListener.js +102 -0
- package/division/Division.js +53 -0
- package/division/DivisionDialog.js +13 -0
- package/emphasis/Emphasis.js +30 -0
- package/figure/Figure.js +58 -0
- package/figure/FigureFilter.js +14 -0
- package/figure/FigureListener.js +23 -0
- package/heading/Heading.js +38 -0
- package/horizontalrule/HorizontalRule.js +37 -0
- package/i18n/I18n.js +26 -0
- package/i18n/de.js +167 -0
- package/iframe/Iframe.js +49 -0
- package/iframe/IframeDialog.js +20 -0
- package/iframe/IframeListener.js +48 -0
- package/image/Image.js +47 -0
- package/image/ImageDialog.js +23 -0
- package/image/ImageListener.js +47 -0
- package/insertion/Insertion.js +30 -0
- package/italic/Italic.js +30 -0
- package/keyboard/Keyboard.js +30 -0
- package/link/Link.js +34 -0
- package/link/LinkDialog.js +14 -0
- package/link/LinkListener.js +45 -0
- package/list/List.js +40 -0
- package/list/ListListener.js +91 -0
- package/mark/Mark.js +30 -0
- package/orderedlist/OrderedList.js +39 -0
- package/package.json +24 -0
- package/paragraph/Paragraph.js +42 -0
- package/paragraph/ParagraphListener.js +40 -0
- package/preformat/Preformat.js +43 -0
- package/preformat/PreformatFilter.js +22 -0
- package/preformat/PreformatListener.js +34 -0
- package/quote/Quote.js +30 -0
- package/sample/Sample.js +30 -0
- package/section/Section.js +55 -0
- package/section/SectionDialog.js +13 -0
- package/small/Small.js +30 -0
- package/strikethrough/Strikethrough.js +30 -0
- package/strong/Strong.js +30 -0
- package/subheading/Subheading.js +38 -0
- package/subscript/Subscript.js +30 -0
- package/superscript/Superscript.js +30 -0
- package/table/Table.js +113 -0
- package/table/TableCellListener.js +125 -0
- package/table/TableColumnAddCommand.js +19 -0
- package/table/TableColumnListener.js +34 -0
- package/table/TableCommand.js +23 -0
- package/table/TableDialog.js +14 -0
- package/table/TableFilter.js +35 -0
- package/table/TableListener.js +39 -0
- package/table/TableRowAddCommand.js +18 -0
- package/table/TableRowListener.js +34 -0
- package/time/Time.js +32 -0
- package/time/TimeDialog.js +13 -0
- package/underline/Underline.js +30 -0
- package/unorderedlist/UnorderedList.js +39 -0
- package/variable/Variable.js +30 -0
- package/video/Video.js +47 -0
- package/video/VideoDialog.js +20 -0
- package/video/VideoListener.js +48 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import Key from '../base/Key.js';
|
|
3
|
+
import Plugin from '../base/Plugin.js';
|
|
4
|
+
import TagGroup from '../base/TagGroup.js';
|
|
5
|
+
import TagName from '../base/TagName.js';
|
|
6
|
+
|
|
7
|
+
export default class Deletion extends Plugin {
|
|
8
|
+
/**
|
|
9
|
+
* @type {string}
|
|
10
|
+
*/
|
|
11
|
+
static get name() {
|
|
12
|
+
return 'deletion';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @type {Plugin[]}
|
|
17
|
+
*/
|
|
18
|
+
static get dependencies() {
|
|
19
|
+
return [Base];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @return {void}
|
|
24
|
+
*/
|
|
25
|
+
init() {
|
|
26
|
+
this._tag({ name: TagName.DEL, group: TagGroup.FORMAT });
|
|
27
|
+
this._command(TagName.DEL);
|
|
28
|
+
this._formatbar('Text Deletion', Key.G);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import DetailsFilter from './DetailsFilter.js';
|
|
3
|
+
import DetailsListener from './DetailsListener.js';
|
|
4
|
+
import Plugin from '../base/Plugin.js';
|
|
5
|
+
import TagGroup from '../base/TagGroup.js';
|
|
6
|
+
import TagName from '../base/TagName.js';
|
|
7
|
+
|
|
8
|
+
export default class Details extends Plugin {
|
|
9
|
+
/**
|
|
10
|
+
* @type {string}
|
|
11
|
+
*/
|
|
12
|
+
static get name() {
|
|
13
|
+
return 'details';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @type {Plugin[]}
|
|
18
|
+
*/
|
|
19
|
+
static get dependencies() {
|
|
20
|
+
return [Base];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @return {void}
|
|
25
|
+
*/
|
|
26
|
+
init() {
|
|
27
|
+
this._tag({
|
|
28
|
+
name: TagName.DETAILS,
|
|
29
|
+
group: TagGroup.CONTAINER,
|
|
30
|
+
children: [
|
|
31
|
+
TagGroup.AUDIO,
|
|
32
|
+
TagGroup.FIGURE,
|
|
33
|
+
TagGroup.IFRAME,
|
|
34
|
+
TagGroup.IMAGE,
|
|
35
|
+
TagGroup.LIST,
|
|
36
|
+
TagGroup.PARAGRAPH,
|
|
37
|
+
TagGroup.PREFORMAT,
|
|
38
|
+
TagGroup.QUOTE,
|
|
39
|
+
TagGroup.RULE,
|
|
40
|
+
TagGroup.SUMMARY,
|
|
41
|
+
TagGroup.TABLE,
|
|
42
|
+
TagGroup.VIDEO,
|
|
43
|
+
],
|
|
44
|
+
arbitrary: true,
|
|
45
|
+
deletable: true,
|
|
46
|
+
focusable: true,
|
|
47
|
+
navigable: true,
|
|
48
|
+
slotable: true,
|
|
49
|
+
sortable: true,
|
|
50
|
+
});
|
|
51
|
+
this._tag({
|
|
52
|
+
name: TagName.SUMMARY,
|
|
53
|
+
group: TagGroup.SUMMARY,
|
|
54
|
+
editable: true,
|
|
55
|
+
navigable: true,
|
|
56
|
+
enter: TagName.P,
|
|
57
|
+
});
|
|
58
|
+
new DetailsListener(this.editor);
|
|
59
|
+
this._command(TagName.DETAILS);
|
|
60
|
+
this._toolbar('Details');
|
|
61
|
+
this.editor.filters.add(new DetailsFilter(this.editor));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Filter from '../base/Filter.js';
|
|
2
|
+
import TagName from '../base/TagName.js';
|
|
3
|
+
|
|
4
|
+
export default class DetailsFilter extends Filter {
|
|
5
|
+
/**
|
|
6
|
+
* @param {HTMLElement} element
|
|
7
|
+
* @return {void}
|
|
8
|
+
*/
|
|
9
|
+
filter(element) {
|
|
10
|
+
element
|
|
11
|
+
.querySelectorAll(`${TagName.SUMMARY}:not(:first-child)`)
|
|
12
|
+
.forEach((item) => item.parentElement.removeChild(item));
|
|
13
|
+
element
|
|
14
|
+
.querySelectorAll(`${TagName.SUMMARY}:only-child`)
|
|
15
|
+
.forEach((item) => item.parentElement.removeChild(item));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import Key from '../base/Key.js';
|
|
2
|
+
import Listener from '../base/Listener.js';
|
|
3
|
+
import TagName from '../base/TagName.js';
|
|
4
|
+
|
|
5
|
+
export default class DetailsListener extends Listener {
|
|
6
|
+
/**
|
|
7
|
+
* @param {Editor} editor
|
|
8
|
+
*/
|
|
9
|
+
constructor(editor) {
|
|
10
|
+
super(editor);
|
|
11
|
+
this.editor.root.addEventListener('insertdetails', this);
|
|
12
|
+
this.editor.root.addEventListener('insertsummary', this);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {CustomEvent} event
|
|
17
|
+
* @param {HTMLDetailsElement} event.detail.element
|
|
18
|
+
* @return {void}
|
|
19
|
+
*/
|
|
20
|
+
insertdetails({ detail: { element } }) {
|
|
21
|
+
element.open = true;
|
|
22
|
+
|
|
23
|
+
if (!element.querySelector(`:scope > ${TagName.SUMMARY}:first-child`)) {
|
|
24
|
+
this.editor.dom.insertFirstChild(this.editor.dom.createElement(TagName.SUMMARY), element);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @param {CustomEvent} event
|
|
30
|
+
* @param {HTMLElement} event.detail.element
|
|
31
|
+
* @return {void}
|
|
32
|
+
*/
|
|
33
|
+
insertsummary({ detail: { element } }) {
|
|
34
|
+
this.#empty(element);
|
|
35
|
+
element.addEventListener('click', this);
|
|
36
|
+
element.addEventListener('blur', this);
|
|
37
|
+
element.addEventListener('keydown', this);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Prevents toggling details open state
|
|
42
|
+
*
|
|
43
|
+
* @param {MouseEvent} event
|
|
44
|
+
* @param {HTMLElement} event.target
|
|
45
|
+
* @return {void}
|
|
46
|
+
*/
|
|
47
|
+
click(event) {
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
event.stopPropagation();
|
|
50
|
+
event.target.parentElement.open = true;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Sets default summary text content if it's empty
|
|
55
|
+
*
|
|
56
|
+
* @param {FocusEvent} event
|
|
57
|
+
* @param {HTMLElement} event.target
|
|
58
|
+
* @return {void}
|
|
59
|
+
*/
|
|
60
|
+
blur({ target }) {
|
|
61
|
+
this.#empty(target);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Fixes space and enter key handling for editable summary elements
|
|
66
|
+
*
|
|
67
|
+
* @param {KeyboardEvent} event
|
|
68
|
+
* @param {HTMLElement} event.target
|
|
69
|
+
* @return {void}
|
|
70
|
+
*/
|
|
71
|
+
keydown(event) {
|
|
72
|
+
if (Key.isEventFor(event, Key.SPACE)) {
|
|
73
|
+
event.preventDefault();
|
|
74
|
+
event.stopPropagation();
|
|
75
|
+
this.editor.dom.insertText(' ');
|
|
76
|
+
} else if (Key.isEventFor(event, Key.ENTER)) {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
event.stopPropagation();
|
|
79
|
+
event.target.parentElement.open = true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Ensures summary element is not empty to avoid strange browser behaviour
|
|
85
|
+
*
|
|
86
|
+
* @param {HTMLElement} element
|
|
87
|
+
* @return {void}
|
|
88
|
+
*/
|
|
89
|
+
#empty(element) {
|
|
90
|
+
if (!element.textContent.trim()) {
|
|
91
|
+
element.textContent = this._('Details');
|
|
92
|
+
} else {
|
|
93
|
+
element
|
|
94
|
+
.querySelectorAll(TagName.BR + ':not(:last-child)')
|
|
95
|
+
.forEach((item) => item.parentElement.removeChild(item));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (!(element.lastElementChild instanceof HTMLBRElement)) {
|
|
99
|
+
this.editor.dom.insertLastChild(this.editor.dom.createElement(TagName.BR), element);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import DivisionDialog from './DivisionDialog.js';
|
|
3
|
+
import Plugin from '../base/Plugin.js';
|
|
4
|
+
import TagGroup from '../base/TagGroup.js';
|
|
5
|
+
import TagName from '../base/TagName.js';
|
|
6
|
+
|
|
7
|
+
export default class Division extends Plugin {
|
|
8
|
+
/**
|
|
9
|
+
* @type {string}
|
|
10
|
+
*/
|
|
11
|
+
static get name() {
|
|
12
|
+
return 'division';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @type {Plugin[]}
|
|
17
|
+
*/
|
|
18
|
+
static get dependencies() {
|
|
19
|
+
return [Base];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @return {void}
|
|
24
|
+
*/
|
|
25
|
+
init() {
|
|
26
|
+
this._tag({
|
|
27
|
+
name: TagName.DIV,
|
|
28
|
+
group: TagGroup.CONTAINER,
|
|
29
|
+
children: [
|
|
30
|
+
TagGroup.AUDIO,
|
|
31
|
+
TagGroup.BLOCK,
|
|
32
|
+
TagGroup.FIGURE,
|
|
33
|
+
TagGroup.IFRAME,
|
|
34
|
+
TagGroup.IMAGE,
|
|
35
|
+
TagGroup.PREFORMAT,
|
|
36
|
+
TagGroup.QUOTE,
|
|
37
|
+
TagGroup.RULE,
|
|
38
|
+
TagGroup.TABLE,
|
|
39
|
+
TagGroup.VIDEO,
|
|
40
|
+
],
|
|
41
|
+
attributes: ['class'],
|
|
42
|
+
arbitrary: true,
|
|
43
|
+
deletable: true,
|
|
44
|
+
focusable: true,
|
|
45
|
+
navigable: true,
|
|
46
|
+
slotable: true,
|
|
47
|
+
sortable: true,
|
|
48
|
+
});
|
|
49
|
+
this.editor.dialogs.set(new DivisionDialog(this.editor, this.constructor.name));
|
|
50
|
+
this._command(TagName.DIV);
|
|
51
|
+
this._toolbar('Division');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Dialog from '../base/Dialog.js';
|
|
2
|
+
|
|
3
|
+
export default class DivisionDialog extends Dialog {
|
|
4
|
+
/**
|
|
5
|
+
* @protected
|
|
6
|
+
* @return {void}
|
|
7
|
+
*/
|
|
8
|
+
_prepareForm() {
|
|
9
|
+
this.formCreator
|
|
10
|
+
.addLegend(this._('Division'))
|
|
11
|
+
.addTextInput('class', this._('CSS class'), { placeholder: this._('Insert CSS class') });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import Key from '../base/Key.js';
|
|
3
|
+
import Plugin from '../base/Plugin.js';
|
|
4
|
+
import TagGroup from '../base/TagGroup.js';
|
|
5
|
+
import TagName from '../base/TagName.js';
|
|
6
|
+
|
|
7
|
+
export default class Emphasis extends Plugin {
|
|
8
|
+
/**
|
|
9
|
+
* @type {string}
|
|
10
|
+
*/
|
|
11
|
+
static get name() {
|
|
12
|
+
return 'emphasis';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @type {Plugin[]}
|
|
17
|
+
*/
|
|
18
|
+
static get dependencies() {
|
|
19
|
+
return [Base];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @return {void}
|
|
24
|
+
*/
|
|
25
|
+
init() {
|
|
26
|
+
this._tag({ name: TagName.EM, group: TagGroup.FORMAT });
|
|
27
|
+
this._command(TagName.EM);
|
|
28
|
+
this._formatbar('emphasized', Key.E);
|
|
29
|
+
}
|
|
30
|
+
}
|
package/figure/Figure.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import FigureFilter from './FigureFilter.js';
|
|
3
|
+
import FigureListener from './FigureListener.js';
|
|
4
|
+
import Plugin from '../base/Plugin.js';
|
|
5
|
+
import TagGroup from '../base/TagGroup.js';
|
|
6
|
+
import TagName from '../base/TagName.js';
|
|
7
|
+
|
|
8
|
+
export default class Figure extends Plugin {
|
|
9
|
+
/**
|
|
10
|
+
* @type {string}
|
|
11
|
+
*/
|
|
12
|
+
static get name() {
|
|
13
|
+
return 'figure';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @type {Plugin[]}
|
|
18
|
+
*/
|
|
19
|
+
static get dependencies() {
|
|
20
|
+
return [Base];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @return {void}
|
|
25
|
+
*/
|
|
26
|
+
init() {
|
|
27
|
+
this._tag({
|
|
28
|
+
name: TagName.FIGURE,
|
|
29
|
+
group: TagGroup.FIGURE,
|
|
30
|
+
children: [
|
|
31
|
+
TagGroup.AUDIO,
|
|
32
|
+
TagGroup.CAPTION,
|
|
33
|
+
TagGroup.IFRAME,
|
|
34
|
+
TagGroup.IMAGE,
|
|
35
|
+
TagGroup.PREFORMAT,
|
|
36
|
+
TagGroup.QUOTE,
|
|
37
|
+
TagGroup.TABLE,
|
|
38
|
+
TagGroup.VIDEO,
|
|
39
|
+
],
|
|
40
|
+
attributes: ['class'],
|
|
41
|
+
alignable: true,
|
|
42
|
+
deletable: true,
|
|
43
|
+
focusable: true,
|
|
44
|
+
navigable: true,
|
|
45
|
+
sortable: true,
|
|
46
|
+
});
|
|
47
|
+
this._tag({
|
|
48
|
+
name: TagName.FIGCAPTION,
|
|
49
|
+
group: TagGroup.CAPTION,
|
|
50
|
+
children: [TagGroup.FORMAT],
|
|
51
|
+
editable: true,
|
|
52
|
+
navigable: true,
|
|
53
|
+
enter: TagName.P,
|
|
54
|
+
});
|
|
55
|
+
new FigureListener(this.editor);
|
|
56
|
+
this.editor.filters.add(new FigureFilter(this.editor));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Filter from '../base/Filter.js';
|
|
2
|
+
import TagName from '../base/TagName.js';
|
|
3
|
+
|
|
4
|
+
export default class FigureFilter extends Filter {
|
|
5
|
+
/**
|
|
6
|
+
* @param {HTMLElement} element
|
|
7
|
+
* @return {void}
|
|
8
|
+
*/
|
|
9
|
+
filter(element) {
|
|
10
|
+
element
|
|
11
|
+
.querySelectorAll(`${TagName.FIGURE} > ${TagName.FIGCAPTION}:only-child`)
|
|
12
|
+
.forEach((item) => item.parentElement.removeChild(item));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import Listener from '../base/Listener.js';
|
|
2
|
+
import TagName from '../base/TagName.js';
|
|
3
|
+
|
|
4
|
+
export default class FigureListener extends Listener {
|
|
5
|
+
/**
|
|
6
|
+
* @param {Editor} editor
|
|
7
|
+
*/
|
|
8
|
+
constructor(editor) {
|
|
9
|
+
super(editor);
|
|
10
|
+
this.editor.root.addEventListener('insertfigure', this);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param {CustomEvent} event
|
|
15
|
+
* @param {HTMLElement} event.detail.element
|
|
16
|
+
* @return {void}
|
|
17
|
+
*/
|
|
18
|
+
insertfigure({ detail: { element } }) {
|
|
19
|
+
if (!element.querySelector(':scope > ' + TagName.FIGCAPTION)) {
|
|
20
|
+
this.editor.dom.insertLastChild(this.editor.dom.createElement(TagName.FIGCAPTION), element);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import Plugin from '../base/Plugin.js';
|
|
3
|
+
import TagGroup from '../base/TagGroup.js';
|
|
4
|
+
import TagName from '../base/TagName.js';
|
|
5
|
+
|
|
6
|
+
export default class Heading extends Plugin {
|
|
7
|
+
/**
|
|
8
|
+
* @type {string}
|
|
9
|
+
*/
|
|
10
|
+
static get name() {
|
|
11
|
+
return 'heading';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @type {Plugin[]}
|
|
16
|
+
*/
|
|
17
|
+
static get dependencies() {
|
|
18
|
+
return [Base];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @return {void}
|
|
23
|
+
*/
|
|
24
|
+
init() {
|
|
25
|
+
this._tag({
|
|
26
|
+
name: TagName.H2,
|
|
27
|
+
group: TagGroup.HEADING,
|
|
28
|
+
deletable: true,
|
|
29
|
+
editable: true,
|
|
30
|
+
focusable: true,
|
|
31
|
+
navigable: true,
|
|
32
|
+
sortable: true,
|
|
33
|
+
enter: TagName.P,
|
|
34
|
+
});
|
|
35
|
+
this._command(TagName.H2);
|
|
36
|
+
this._toolbar('Heading');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import Plugin from '../base/Plugin.js';
|
|
3
|
+
import TagGroup from '../base/TagGroup.js';
|
|
4
|
+
import TagName from '../base/TagName.js';
|
|
5
|
+
|
|
6
|
+
export default class HorizontalRule extends Plugin {
|
|
7
|
+
/**
|
|
8
|
+
* @type {string}
|
|
9
|
+
*/
|
|
10
|
+
static get name() {
|
|
11
|
+
return 'horizontalrule';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @type {Plugin[]}
|
|
16
|
+
*/
|
|
17
|
+
static get dependencies() {
|
|
18
|
+
return [Base];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @return {void}
|
|
23
|
+
*/
|
|
24
|
+
init() {
|
|
25
|
+
this._tag({
|
|
26
|
+
name: TagName.HR,
|
|
27
|
+
group: TagGroup.RULE,
|
|
28
|
+
deletable: true,
|
|
29
|
+
empty: true,
|
|
30
|
+
focusable: true,
|
|
31
|
+
navigable: true,
|
|
32
|
+
sortable: true,
|
|
33
|
+
});
|
|
34
|
+
this._command(TagName.HR);
|
|
35
|
+
this._toolbar('Horizontal Rule');
|
|
36
|
+
}
|
|
37
|
+
}
|
package/i18n/I18n.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Base from '../base/Base.js';
|
|
2
|
+
import Plugin from '../base/Plugin.js';
|
|
3
|
+
import de from './de.js';
|
|
4
|
+
|
|
5
|
+
export default class I18n extends Plugin {
|
|
6
|
+
/**
|
|
7
|
+
* @type {string}
|
|
8
|
+
*/
|
|
9
|
+
static get name() {
|
|
10
|
+
return 'i18n';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @type {Plugin[]}
|
|
15
|
+
*/
|
|
16
|
+
static get dependencies() {
|
|
17
|
+
return [Base];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @return {void}
|
|
22
|
+
*/
|
|
23
|
+
init() {
|
|
24
|
+
this._i18n({ de });
|
|
25
|
+
}
|
|
26
|
+
}
|
package/i18n/de.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* German translations
|
|
3
|
+
*
|
|
4
|
+
* @type {Object.<string, string>}
|
|
5
|
+
*/
|
|
6
|
+
export default {
|
|
7
|
+
'CSS class': 'CSS-Klasse',
|
|
8
|
+
Height: 'Höhe',
|
|
9
|
+
ID: 'ID',
|
|
10
|
+
'Insert CSS class': 'CSS-Klasse eingeben',
|
|
11
|
+
URL: 'URL',
|
|
12
|
+
Width: 'Breite',
|
|
13
|
+
|
|
14
|
+
// abbreviation
|
|
15
|
+
Abbreviation: 'Abkürzung',
|
|
16
|
+
'Full term': 'Langform',
|
|
17
|
+
'Insert full term or leave empty to remove it': 'Langform eingeben oder zum Entfernen leer lassen',
|
|
18
|
+
|
|
19
|
+
// audio
|
|
20
|
+
Audio: 'Audio',
|
|
21
|
+
'Insert URL to audio': 'URL zur Audiodatei eingeben',
|
|
22
|
+
|
|
23
|
+
// base
|
|
24
|
+
'Align center': 'zentriert',
|
|
25
|
+
'Align left': 'linksbündig',
|
|
26
|
+
'Align right': 'rechtsbündig',
|
|
27
|
+
Alt: 'Alt',
|
|
28
|
+
Cancel: 'Abbrechen',
|
|
29
|
+
Delete: 'Löschen',
|
|
30
|
+
'No alignment': 'Keine Ausrichtung',
|
|
31
|
+
Save: 'Speichern',
|
|
32
|
+
Shift: 'Umschalt',
|
|
33
|
+
'Sort after next element': 'Hinter das nächste Element sortieren',
|
|
34
|
+
'Sort before previous element': 'Vor das vorherige Element sortieren',
|
|
35
|
+
'Sort to the beginning': 'An den Anfang sortieren',
|
|
36
|
+
'Sort to the end': 'Ans Ende sortieren',
|
|
37
|
+
|
|
38
|
+
// block
|
|
39
|
+
Block: 'Block',
|
|
40
|
+
|
|
41
|
+
// Blockquote
|
|
42
|
+
Blockquote: 'Blockzitat',
|
|
43
|
+
|
|
44
|
+
// bold
|
|
45
|
+
bold: 'fett',
|
|
46
|
+
|
|
47
|
+
// cite
|
|
48
|
+
Citation: 'Zitatquelle',
|
|
49
|
+
|
|
50
|
+
// code
|
|
51
|
+
Code: 'Quelltext',
|
|
52
|
+
|
|
53
|
+
// data
|
|
54
|
+
Data: 'Data',
|
|
55
|
+
'Machine-readable Value': 'Maschinenlesbarer Wert',
|
|
56
|
+
'Insert value or leave empty to remove it': 'Wert eingeben oder zum Entfernen leer lassen',
|
|
57
|
+
|
|
58
|
+
// definition
|
|
59
|
+
Definition: 'Definition',
|
|
60
|
+
'Insert term or leave empty to remove it': 'Begriff eingeben oder zum Entfernen leer lassen',
|
|
61
|
+
Term: 'Begriff',
|
|
62
|
+
|
|
63
|
+
// deletion
|
|
64
|
+
'Text Deletion': 'Textlöschung',
|
|
65
|
+
|
|
66
|
+
// details
|
|
67
|
+
Details: 'Details',
|
|
68
|
+
|
|
69
|
+
// division
|
|
70
|
+
Division: 'Division',
|
|
71
|
+
|
|
72
|
+
// emphasis
|
|
73
|
+
emphasized: 'betont',
|
|
74
|
+
|
|
75
|
+
// heading
|
|
76
|
+
Heading: 'Überschrift',
|
|
77
|
+
|
|
78
|
+
// horizontalrule
|
|
79
|
+
'Horizontal Rule': 'Horizontale Linie',
|
|
80
|
+
|
|
81
|
+
// iframe
|
|
82
|
+
Ifrane: 'Iframe',
|
|
83
|
+
'Insert URL to embedded page': 'URL zur eingebetteten Seite eingeben',
|
|
84
|
+
|
|
85
|
+
// image
|
|
86
|
+
'Alternative text': 'Alternativtext',
|
|
87
|
+
Image: 'Bild',
|
|
88
|
+
'Insert URL to image': 'URL zur Bilddatei eingeben',
|
|
89
|
+
'Text shown when media element is not available': 'Ersatztext, falls Medienelement nicht verfügbar ist',
|
|
90
|
+
|
|
91
|
+
// insertion
|
|
92
|
+
'Text Insertion': 'Texteinfügung',
|
|
93
|
+
|
|
94
|
+
// italic
|
|
95
|
+
italic: 'kursiv',
|
|
96
|
+
|
|
97
|
+
// keyboard
|
|
98
|
+
'User Input': 'Benutzereingabe',
|
|
99
|
+
|
|
100
|
+
// link
|
|
101
|
+
'Insert link or leave empty to unlink': 'Link eingeben oder zum Entfernen leer lassen',
|
|
102
|
+
Link: 'Link',
|
|
103
|
+
|
|
104
|
+
// mark
|
|
105
|
+
mark: 'markiert',
|
|
106
|
+
|
|
107
|
+
// orderedlist
|
|
108
|
+
'Ordered List': 'Geordnete Liste',
|
|
109
|
+
|
|
110
|
+
// paragraph
|
|
111
|
+
Paragraph: 'Absatz',
|
|
112
|
+
|
|
113
|
+
// preformat
|
|
114
|
+
'Preformatted Text': 'Vorformatierter Text',
|
|
115
|
+
|
|
116
|
+
// quote
|
|
117
|
+
Quote: 'Zitat',
|
|
118
|
+
|
|
119
|
+
// sample
|
|
120
|
+
'Sample Output': 'Beispielausgabe',
|
|
121
|
+
|
|
122
|
+
// section
|
|
123
|
+
Section: 'Sektion',
|
|
124
|
+
|
|
125
|
+
// small
|
|
126
|
+
small: 'klein',
|
|
127
|
+
|
|
128
|
+
// strikethrough
|
|
129
|
+
strikethrough: 'durchgestrichen',
|
|
130
|
+
|
|
131
|
+
// strong
|
|
132
|
+
'strongly emphasized': 'stark betont',
|
|
133
|
+
|
|
134
|
+
// subheading
|
|
135
|
+
Subheading: 'Unterüberschrift',
|
|
136
|
+
|
|
137
|
+
// subscript
|
|
138
|
+
subscript: 'tiefgestellt',
|
|
139
|
+
|
|
140
|
+
// superscript
|
|
141
|
+
superscript: 'hochgestellt',
|
|
142
|
+
|
|
143
|
+
// table
|
|
144
|
+
'Add column': 'Spalte hinzufügen',
|
|
145
|
+
'Add row': 'Zeile hinzufügen',
|
|
146
|
+
Columns: 'Spalten',
|
|
147
|
+
Rows: 'Zeilen',
|
|
148
|
+
Table: 'Tabelle',
|
|
149
|
+
|
|
150
|
+
// time
|
|
151
|
+
'Insert date/time or leave empty to remove it': 'Datum/Zeit eingeben oder zum Entfernen leer lassen',
|
|
152
|
+
'Machine-readable Datetime': 'Maschinenlesbare Datums-/Zeitangabe',
|
|
153
|
+
Time: 'Zeit',
|
|
154
|
+
|
|
155
|
+
// underline
|
|
156
|
+
underline: 'unterstrichen',
|
|
157
|
+
|
|
158
|
+
// unorderedlist
|
|
159
|
+
'Unordered List': 'Ungeordnete Liste',
|
|
160
|
+
|
|
161
|
+
// variable
|
|
162
|
+
Variable: 'Variable',
|
|
163
|
+
|
|
164
|
+
// video
|
|
165
|
+
'Insert URL to video': 'URL zur Videodatei eingeben',
|
|
166
|
+
Video: 'Video',
|
|
167
|
+
};
|