suneditor 3.0.0-alpha.9 → 3.0.0-beta.2
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/CONTRIBUTING.md +170 -22
- package/{LICENSE.txt → LICENSE} +9 -9
- package/README.md +168 -30
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +47 -21
- package/src/assets/design/color.css +121 -0
- package/src/assets/design/index.css +3 -0
- package/src/assets/design/size.css +35 -0
- package/src/assets/design/typography.css +37 -0
- package/src/assets/icons/defaultIcons.js +232 -0
- package/src/assets/suneditor-contents.css +181 -46
- package/src/assets/suneditor.css +1403 -650
- package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
- package/src/core/base/eventHandlers/handler_ww_clipboard.js +23 -4
- package/src/core/base/eventHandlers/handler_ww_dragDrop.js +49 -10
- package/src/core/base/eventHandlers/handler_ww_key_input.js +422 -224
- package/src/core/base/eventHandlers/handler_ww_mouse.js +83 -36
- package/src/core/base/eventManager.js +520 -179
- package/src/core/base/history.js +95 -41
- package/src/core/class/char.js +26 -11
- package/src/core/class/component.js +345 -137
- package/src/core/class/format.js +683 -519
- package/src/core/class/html.js +485 -305
- package/src/core/class/menu.js +133 -47
- package/src/core/class/nodeTransform.js +90 -71
- package/src/core/class/offset.js +408 -92
- package/src/core/class/selection.js +216 -106
- package/src/core/class/shortcuts.js +68 -8
- package/src/core/class/toolbar.js +106 -116
- package/src/core/class/ui.js +422 -0
- package/src/core/class/viewer.js +178 -74
- package/src/core/editor.js +496 -389
- package/src/core/section/actives.js +123 -27
- package/src/core/section/constructor.js +615 -206
- package/src/core/section/context.js +28 -23
- package/src/core/section/documentType.js +561 -0
- package/src/editorInjector/_classes.js +19 -5
- package/src/editorInjector/_core.js +71 -7
- package/src/editorInjector/index.js +63 -1
- package/src/events.js +622 -0
- package/src/helper/clipboard.js +59 -0
- package/src/helper/converter.js +202 -26
- package/src/helper/dom/domCheck.js +304 -0
- package/src/helper/dom/domQuery.js +669 -0
- package/src/helper/dom/domUtils.js +557 -0
- package/src/helper/dom/index.js +12 -0
- package/src/helper/env.js +46 -56
- package/src/helper/index.js +10 -4
- package/src/helper/keyCodeMap.js +183 -0
- package/src/helper/numbers.js +12 -8
- package/src/helper/unicode.js +9 -5
- package/src/langs/ckb.js +74 -4
- package/src/langs/cs.js +72 -2
- package/src/langs/da.js +73 -3
- package/src/langs/de.js +73 -4
- package/src/langs/en.js +23 -3
- package/src/langs/es.js +73 -4
- package/src/langs/fa.js +75 -3
- package/src/langs/fr.js +73 -3
- package/src/langs/he.js +73 -4
- package/src/langs/hu.js +230 -0
- package/src/langs/index.js +7 -3
- package/src/langs/it.js +70 -1
- package/src/langs/ja.js +72 -4
- package/src/langs/km.js +230 -0
- package/src/langs/ko.js +22 -2
- package/src/langs/lv.js +74 -5
- package/src/langs/nl.js +73 -4
- package/src/langs/pl.js +73 -4
- package/src/langs/pt_br.js +70 -1
- package/src/langs/ro.js +74 -5
- package/src/langs/ru.js +73 -4
- package/src/langs/se.js +73 -4
- package/src/langs/tr.js +73 -1
- package/src/langs/{ua.js → uk.js} +75 -6
- package/src/langs/ur.js +77 -8
- package/src/langs/zh_cn.js +74 -5
- package/src/modules/ApiManager.js +77 -54
- package/src/modules/Browser.js +667 -0
- package/src/modules/ColorPicker.js +162 -102
- package/src/modules/Controller.js +273 -142
- package/src/modules/Figure.js +925 -484
- package/src/modules/FileManager.js +121 -69
- package/src/modules/HueSlider.js +113 -61
- package/src/modules/Modal.js +291 -122
- package/src/modules/ModalAnchorEditor.js +383 -234
- package/src/modules/SelectMenu.js +270 -168
- package/src/modules/_DragHandle.js +2 -1
- package/src/modules/index.js +3 -3
- package/src/plugins/browser/audioGallery.js +83 -0
- package/src/plugins/browser/fileBrowser.js +103 -0
- package/src/plugins/browser/fileGallery.js +83 -0
- package/src/plugins/browser/imageGallery.js +81 -0
- package/src/plugins/browser/videoGallery.js +103 -0
- package/src/plugins/command/blockquote.js +40 -27
- package/src/plugins/command/exportPDF.js +134 -0
- package/src/plugins/command/fileUpload.js +229 -162
- package/src/plugins/command/list_bulleted.js +83 -47
- package/src/plugins/command/list_numbered.js +83 -47
- package/src/plugins/dropdown/align.js +66 -54
- package/src/plugins/dropdown/backgroundColor.js +63 -49
- package/src/plugins/dropdown/font.js +71 -47
- package/src/plugins/dropdown/fontColor.js +63 -48
- package/src/plugins/dropdown/formatBlock.js +70 -33
- package/src/plugins/dropdown/hr.js +92 -51
- package/src/plugins/dropdown/layout.js +37 -26
- package/src/plugins/dropdown/lineHeight.js +54 -38
- package/src/plugins/dropdown/list.js +60 -45
- package/src/plugins/dropdown/paragraphStyle.js +51 -30
- package/src/plugins/dropdown/table.js +2003 -813
- package/src/plugins/dropdown/template.js +38 -26
- package/src/plugins/dropdown/textStyle.js +43 -31
- package/src/plugins/field/mention.js +147 -86
- package/src/plugins/index.js +32 -6
- package/src/plugins/input/fontSize.js +161 -108
- package/src/plugins/input/pageNavigator.js +70 -0
- package/src/plugins/modal/audio.js +358 -173
- package/src/plugins/modal/drawing.js +531 -0
- package/src/plugins/modal/embed.js +886 -0
- package/src/plugins/modal/image.js +674 -362
- package/src/plugins/modal/link.js +100 -71
- package/src/plugins/modal/math.js +367 -167
- package/src/plugins/modal/video.js +691 -335
- package/src/plugins/popup/anchor.js +222 -0
- package/src/suneditor.js +50 -13
- package/src/themes/dark.css +122 -0
- package/src/typedef.js +130 -0
- package/types/assets/icons/defaultIcons.d.ts +153 -0
- package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
- package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
- package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
- package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
- package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
- package/types/core/base/eventManager.d.ts +385 -0
- package/types/core/base/history.d.ts +81 -0
- package/types/core/class/char.d.ts +60 -0
- package/types/core/class/component.d.ts +212 -0
- package/types/core/class/format.d.ts +616 -0
- package/types/core/class/html.d.ts +422 -0
- package/types/core/class/menu.d.ts +126 -0
- package/types/core/class/nodeTransform.d.ts +93 -0
- package/types/core/class/offset.d.ts +522 -0
- package/types/core/class/selection.d.ts +188 -0
- package/types/core/class/shortcuts.d.ts +142 -0
- package/types/core/class/toolbar.d.ts +189 -0
- package/types/core/class/ui.d.ts +164 -0
- package/types/core/class/viewer.d.ts +140 -0
- package/types/core/editor.d.ts +610 -0
- package/types/core/section/actives.d.ts +46 -0
- package/types/core/section/constructor.d.ts +777 -0
- package/types/core/section/context.d.ts +45 -0
- package/types/core/section/documentType.d.ts +178 -0
- package/types/editorInjector/_classes.d.ts +41 -0
- package/types/editorInjector/_core.d.ts +92 -0
- package/types/editorInjector/index.d.ts +71 -0
- package/types/events.d.ts +273 -0
- package/types/helper/clipboard.d.ts +12 -0
- package/types/helper/converter.d.ts +197 -0
- package/types/helper/dom/domCheck.d.ts +189 -0
- package/types/helper/dom/domQuery.d.ts +223 -0
- package/types/helper/dom/domUtils.d.ts +226 -0
- package/types/helper/dom/index.d.ts +9 -0
- package/types/helper/env.d.ts +132 -0
- package/types/helper/index.d.ts +174 -0
- package/types/helper/keyCodeMap.d.ts +110 -0
- package/types/helper/numbers.d.ts +46 -0
- package/types/helper/unicode.d.ts +28 -0
- package/types/index.d.ts +120 -0
- package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +173 -103
- package/types/langs/ckb.d.ts +3 -0
- package/types/langs/cs.d.ts +3 -0
- package/types/langs/da.d.ts +3 -0
- package/types/langs/de.d.ts +3 -0
- package/types/langs/en.d.ts +3 -0
- package/types/langs/es.d.ts +3 -0
- package/types/langs/fa.d.ts +3 -0
- package/types/langs/fr.d.ts +3 -0
- package/types/langs/he.d.ts +3 -0
- package/types/langs/hu.d.ts +3 -0
- package/types/langs/index.d.ts +54 -0
- package/types/langs/it.d.ts +3 -0
- package/types/langs/ja.d.ts +3 -0
- package/types/langs/km.d.ts +3 -0
- package/types/langs/ko.d.ts +3 -0
- package/types/langs/lv.d.ts +3 -0
- package/types/langs/nl.d.ts +3 -0
- package/types/langs/pl.d.ts +3 -0
- package/types/langs/pt_br.d.ts +3 -0
- package/types/langs/ro.d.ts +3 -0
- package/types/langs/ru.d.ts +3 -0
- package/types/langs/se.d.ts +3 -0
- package/types/langs/tr.d.ts +3 -0
- package/types/langs/uk.d.ts +3 -0
- package/types/langs/ur.d.ts +3 -0
- package/types/langs/zh_cn.d.ts +3 -0
- package/types/modules/ApiManager.d.ts +125 -0
- package/types/modules/Browser.d.ts +326 -0
- package/types/modules/ColorPicker.d.ts +131 -0
- package/types/modules/Controller.d.ts +251 -0
- package/types/modules/Figure.d.ts +517 -0
- package/types/modules/FileManager.d.ts +202 -0
- package/types/modules/HueSlider.d.ts +136 -0
- package/types/modules/Modal.d.ts +111 -0
- package/types/modules/ModalAnchorEditor.d.ts +236 -0
- package/types/modules/SelectMenu.d.ts +194 -0
- package/types/modules/_DragHandle.d.ts +7 -0
- package/types/modules/index.d.ts +26 -0
- package/types/plugins/browser/audioGallery.d.ts +55 -0
- package/types/plugins/browser/fileBrowser.d.ts +64 -0
- package/types/plugins/browser/fileGallery.d.ts +55 -0
- package/types/plugins/browser/imageGallery.d.ts +51 -0
- package/types/plugins/browser/videoGallery.d.ts +57 -0
- package/types/plugins/command/blockquote.d.ts +28 -0
- package/types/plugins/command/exportPDF.d.ts +46 -0
- package/types/plugins/command/fileUpload.d.ts +156 -0
- package/types/plugins/command/list_bulleted.d.ts +46 -0
- package/types/plugins/command/list_numbered.d.ts +46 -0
- package/types/plugins/dropdown/align.d.ts +60 -0
- package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
- package/types/plugins/dropdown/font.d.ts +54 -0
- package/types/plugins/dropdown/fontColor.d.ts +63 -0
- package/types/plugins/dropdown/formatBlock.d.ts +54 -0
- package/types/plugins/dropdown/hr.d.ts +71 -0
- package/types/plugins/dropdown/layout.d.ts +40 -0
- package/types/plugins/dropdown/lineHeight.d.ts +50 -0
- package/types/plugins/dropdown/list.d.ts +39 -0
- package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
- package/types/plugins/dropdown/table.d.ts +627 -0
- package/types/plugins/dropdown/template.d.ts +40 -0
- package/types/plugins/dropdown/textStyle.d.ts +41 -0
- package/types/plugins/field/mention.d.ts +102 -0
- package/types/plugins/index.d.ts +107 -0
- package/types/plugins/input/fontSize.d.ts +170 -0
- package/types/plugins/input/pageNavigator.d.ts +28 -0
- package/types/plugins/modal/audio.d.ts +269 -0
- package/types/plugins/modal/drawing.d.ts +246 -0
- package/types/plugins/modal/embed.d.ts +387 -0
- package/types/plugins/modal/image.d.ts +451 -0
- package/types/plugins/modal/link.d.ts +128 -0
- package/types/plugins/modal/math.d.ts +193 -0
- package/types/plugins/modal/video.d.ts +485 -0
- package/types/plugins/popup/anchor.d.ts +56 -0
- package/types/suneditor.d.ts +51 -0
- package/types/typedef.d.ts +233 -0
- package/.eslintignore +0 -7
- package/.eslintrc.json +0 -64
- package/src/assets/icons/_default.js +0 -194
- package/src/core/base/events.js +0 -320
- package/src/core/class/notice.js +0 -42
- package/src/helper/domUtils.js +0 -1177
- package/src/modules/FileBrowser.js +0 -271
- package/src/plugins/command/exportPdf.js +0 -168
- package/src/plugins/fileBrowser/imageGallery.js +0 -81
- package/src/themes/test.css +0 -61
- package/typings/CommandPlugin.d.ts +0 -8
- package/typings/DialogPlugin.d.ts +0 -20
- package/typings/FileBrowserPlugin.d.ts +0 -30
- package/typings/Module.d.ts +0 -15
- package/typings/Plugin.d.ts +0 -42
- package/typings/SubmenuPlugin.d.ts +0 -8
- package/typings/_classes.d.ts +0 -17
- package/typings/_colorPicker.d.ts +0 -60
- package/typings/_core.d.ts +0 -55
- package/typings/align.d.ts +0 -5
- package/typings/audio.d.ts +0 -5
- package/typings/backgroundColor.d.ts +0 -5
- package/typings/blockquote.d.ts +0 -5
- package/typings/char.d.ts +0 -39
- package/typings/component.d.ts +0 -38
- package/typings/context.d.ts +0 -39
- package/typings/converter.d.ts +0 -33
- package/typings/dialog.d.ts +0 -28
- package/typings/domUtils.d.ts +0 -361
- package/typings/editor.d.ts +0 -7
- package/typings/editor.ts +0 -542
- package/typings/env.d.ts +0 -70
- package/typings/eventManager.d.ts +0 -37
- package/typings/events.d.ts +0 -262
- package/typings/fileBrowser.d.ts +0 -42
- package/typings/fileManager.d.ts +0 -67
- package/typings/font.d.ts +0 -5
- package/typings/fontColor.d.ts +0 -5
- package/typings/fontSize.d.ts +0 -5
- package/typings/format.d.ts +0 -191
- package/typings/formatBlock.d.ts +0 -5
- package/typings/history.d.ts +0 -48
- package/typings/horizontalRule.d.ts +0 -5
- package/typings/image.d.ts +0 -5
- package/typings/imageGallery.d.ts +0 -5
- package/typings/index.d.ts +0 -21
- package/typings/index.modules.d.ts +0 -11
- package/typings/index.plugins.d.ts +0 -58
- package/typings/lineHeight.d.ts +0 -5
- package/typings/link.d.ts +0 -5
- package/typings/list.d.ts +0 -5
- package/typings/math.d.ts +0 -5
- package/typings/mediaContainer.d.ts +0 -25
- package/typings/mention.d.ts +0 -5
- package/typings/node.d.ts +0 -57
- package/typings/notice.d.ts +0 -16
- package/typings/numbers.d.ts +0 -29
- package/typings/offset.d.ts +0 -24
- package/typings/options.d.ts +0 -589
- package/typings/paragraphStyle.d.ts +0 -5
- package/typings/resizing.d.ts +0 -141
- package/typings/selection.d.ts +0 -94
- package/typings/shortcuts.d.ts +0 -13
- package/typings/suneditor.d.ts +0 -9
- package/typings/table.d.ts +0 -5
- package/typings/template.d.ts +0 -5
- package/typings/textStyle.d.ts +0 -5
- package/typings/toolbar.d.ts +0 -32
- package/typings/unicode.d.ts +0 -25
- package/typings/video.d.ts +0 -5
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import EditorInjector from '../../editorInjector';
|
|
2
|
+
import { Controller } from '../../modules';
|
|
3
|
+
import { dom, env } from '../../helper';
|
|
4
|
+
|
|
5
|
+
const { _w } = env;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @class
|
|
9
|
+
* @description Anchor plugin
|
|
10
|
+
* - Allows you to create, edit, and delete elements that act as anchors (bookmarks) within a document.
|
|
11
|
+
*/
|
|
12
|
+
class Anchor extends EditorInjector {
|
|
13
|
+
static key = 'anchor';
|
|
14
|
+
static type = 'popup';
|
|
15
|
+
static className = '';
|
|
16
|
+
/**
|
|
17
|
+
* @this {Anchor}
|
|
18
|
+
* @param {HTMLElement} node - The node to check.
|
|
19
|
+
* @returns {HTMLElement|null} Returns a node if the node is a valid component.
|
|
20
|
+
*/
|
|
21
|
+
static component(node) {
|
|
22
|
+
return dom.check.isAnchor(node) && node.hasAttribute('id') && node.hasAttribute('data-se-anchor') ? node : null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @constructor
|
|
27
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
28
|
+
*/
|
|
29
|
+
constructor(editor) {
|
|
30
|
+
super(editor);
|
|
31
|
+
// plugin basic properties
|
|
32
|
+
this.title = this.lang.anchor;
|
|
33
|
+
this.icon = 'bookmark_anchor';
|
|
34
|
+
|
|
35
|
+
// members
|
|
36
|
+
const parser = new DOMParser();
|
|
37
|
+
const svgDoc = parser.parseFromString(this.icons.bookmark_anchor, 'image/svg+xml');
|
|
38
|
+
this.bookmarkIcon = svgDoc.documentElement;
|
|
39
|
+
this._element = null;
|
|
40
|
+
this._range = null;
|
|
41
|
+
|
|
42
|
+
// controller
|
|
43
|
+
const controllerSelectEl = CreateHTML_controller_select(this);
|
|
44
|
+
this.displayId = controllerSelectEl.querySelector('.se-controller-display');
|
|
45
|
+
this.controllerSelect = new Controller(this, controllerSelectEl, { position: 'bottom', disabled: true }, Anchor.key);
|
|
46
|
+
|
|
47
|
+
const controllerEl = CreateHTML_controller(this);
|
|
48
|
+
this.inputEl = controllerEl.querySelector('input');
|
|
49
|
+
this.controller = new Controller(this, controllerEl, { position: 'bottom', disabled: true, parents: [this.controllerSelect.form], parentsHide: true }, Anchor.key);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @editorMethod Editor.Plugin<popup>
|
|
54
|
+
* @description Displays a popup and gives focus to the input field.
|
|
55
|
+
*/
|
|
56
|
+
show() {
|
|
57
|
+
this.controller.open((this._range = this.selection.getRange()));
|
|
58
|
+
_w.setTimeout(() => {
|
|
59
|
+
this.inputEl.focus();
|
|
60
|
+
}, 0);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @editorMethod Editor.component
|
|
65
|
+
* @description Executes the method that is called when a component of a plugin is selected.
|
|
66
|
+
* @param {HTMLElement} target Target component element
|
|
67
|
+
*/
|
|
68
|
+
select(target) {
|
|
69
|
+
this._element = target;
|
|
70
|
+
this.displayId.textContent = target.getAttribute('id');
|
|
71
|
+
this.controllerSelect.open(target);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @editorMethod Editor.Component
|
|
76
|
+
* @description Called when a container is deselected.
|
|
77
|
+
*/
|
|
78
|
+
deselect() {
|
|
79
|
+
this._init();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @editorMethod Modules.Controller
|
|
84
|
+
* @description Executes the method that is called when a button is clicked in the "controller".
|
|
85
|
+
* @param {HTMLButtonElement} target Target button element
|
|
86
|
+
*/
|
|
87
|
+
controllerAction(target) {
|
|
88
|
+
const command = target.getAttribute('data-command');
|
|
89
|
+
if (!command) return;
|
|
90
|
+
const currentElement = this._element;
|
|
91
|
+
|
|
92
|
+
switch (command) {
|
|
93
|
+
case 'submit': {
|
|
94
|
+
if (!currentElement) {
|
|
95
|
+
const id = this.inputEl.value.trim();
|
|
96
|
+
if (!id) {
|
|
97
|
+
this.inputEl.focus();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const a = dom.utils.createElement('A', {
|
|
102
|
+
id,
|
|
103
|
+
'data-se-anchor': this.inputEl.value,
|
|
104
|
+
'data-se-non-link': 'true',
|
|
105
|
+
contenteditable: 'false',
|
|
106
|
+
class: 'se-component se-inline-component'
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
this.component.insert(a, { skipCharCount: false, skipSelection: true, skipHistory: false });
|
|
110
|
+
|
|
111
|
+
const r = this.selection.getNearRange(a);
|
|
112
|
+
if (r) {
|
|
113
|
+
this.selection.setRange(r.container, r.offset, r.container, r.offset);
|
|
114
|
+
} else {
|
|
115
|
+
this.component.select(a, Anchor.key);
|
|
116
|
+
}
|
|
117
|
+
this._init();
|
|
118
|
+
} else {
|
|
119
|
+
this.controller.close();
|
|
120
|
+
currentElement.id = this.inputEl.value;
|
|
121
|
+
this.select(currentElement);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case 'cancel': {
|
|
127
|
+
this.controller.close(!currentElement);
|
|
128
|
+
if (this._range) {
|
|
129
|
+
this.selection.setRange(this._range);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
this._init();
|
|
133
|
+
if (currentElement) {
|
|
134
|
+
this.select(currentElement);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'edit': {
|
|
140
|
+
this.inputEl.value = this.displayId.textContent;
|
|
141
|
+
this.controllerSelect.hide();
|
|
142
|
+
this.controller.open(currentElement);
|
|
143
|
+
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
case 'delete': {
|
|
147
|
+
const r = this.selection.getNearRange(currentElement);
|
|
148
|
+
|
|
149
|
+
dom.utils.removeItem(currentElement);
|
|
150
|
+
this.controllerSelect.close(true);
|
|
151
|
+
|
|
152
|
+
if (r) {
|
|
153
|
+
this.selection.setRange(r.container, r.offset, r.container, r.offset);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
this._init();
|
|
157
|
+
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @private
|
|
165
|
+
* @description Initializes state variables.
|
|
166
|
+
* - called when the popup is closed
|
|
167
|
+
*/
|
|
168
|
+
_init() {
|
|
169
|
+
this._element = null;
|
|
170
|
+
this._range = null;
|
|
171
|
+
this.inputEl.value = '';
|
|
172
|
+
this.displayId.textContent = '';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function CreateHTML_controller({ lang, icons }) {
|
|
177
|
+
const html = /*html*/ `
|
|
178
|
+
<div class="se-arrow se-arrow-up"></div>
|
|
179
|
+
<form>
|
|
180
|
+
<div class="se-controller-display">${lang.id}</div>
|
|
181
|
+
<div class="se-btn-group se-form-group">
|
|
182
|
+
<input type="text" required />
|
|
183
|
+
<button type="submit" data-command="submit" class="se-btn se-tooltip se-btn-success">
|
|
184
|
+
${icons.checked}
|
|
185
|
+
<span class="se-tooltip-inner"><span class="se-tooltip-text">${lang.save}</span></span>
|
|
186
|
+
</button>
|
|
187
|
+
<button type="button" data-command="cancel" class="se-btn se-tooltip se-btn-danger">
|
|
188
|
+
${icons.cancel}
|
|
189
|
+
<span class="se-tooltip-inner"><span class="se-tooltip-text">${lang.cancel}</span></span>
|
|
190
|
+
</button>
|
|
191
|
+
</div>
|
|
192
|
+
</form>
|
|
193
|
+
`;
|
|
194
|
+
|
|
195
|
+
return dom.utils.createElement('DIV', { class: 'se-controller se-controller-simple-input' }, html);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function CreateHTML_controller_select({ lang, icons }) {
|
|
199
|
+
const html = /*html*/ `
|
|
200
|
+
<div class="se-arrow se-arrow-up"></div>
|
|
201
|
+
<div class="link-content">
|
|
202
|
+
<div class="se-controller-display"></div>
|
|
203
|
+
<div class="se-btn-group">
|
|
204
|
+
<button type="button" data-command="edit" tabindex="-1" class="se-btn se-tooltip">
|
|
205
|
+
${icons.edit}
|
|
206
|
+
<span class="se-tooltip-inner">
|
|
207
|
+
<span class="se-tooltip-text">${lang.edit}</span>
|
|
208
|
+
</span>
|
|
209
|
+
</button>
|
|
210
|
+
<button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">
|
|
211
|
+
${icons.delete}
|
|
212
|
+
<span class="se-tooltip-inner">
|
|
213
|
+
<span class="se-tooltip-text">${lang.remove}</span>
|
|
214
|
+
</span>
|
|
215
|
+
</button>
|
|
216
|
+
</div>
|
|
217
|
+
</div>`;
|
|
218
|
+
|
|
219
|
+
return dom.utils.createElement('DIV', { class: 'se-controller se-controller-link' }, html);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export default Anchor;
|
package/src/suneditor.js
CHANGED
|
@@ -6,18 +6,53 @@ import Langs from './langs';
|
|
|
6
6
|
import Modules from './modules';
|
|
7
7
|
import Helper from './helper';
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export const langs = Langs;
|
|
13
|
-
export const helper = Helper;
|
|
9
|
+
/**
|
|
10
|
+
* @module SunEditorExports
|
|
11
|
+
*/
|
|
14
12
|
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {import('./core/section/constructor').EditorFrameOptions} EditorFrameOptions_suneditor
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {import('./core/section/constructor').EditorInitOptions} EditorInitOptions_suneditor
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Editor Injector module, Inject "editor" and basic frequently used objects by calling it with "call(this, editor)".
|
|
23
|
+
*/
|
|
24
|
+
export { EditorInjector };
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Available editor plugins
|
|
28
|
+
*/
|
|
29
|
+
export { Plugins };
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Editor modules
|
|
33
|
+
*/
|
|
34
|
+
export { Modules };
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Language packs for the editor
|
|
38
|
+
*/
|
|
39
|
+
export { Langs };
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Helper functions for the editor
|
|
43
|
+
*/
|
|
44
|
+
export { Helper };
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* SunEditor Factory Object
|
|
48
|
+
* @namespace SunEditor
|
|
49
|
+
*/
|
|
15
50
|
export default {
|
|
16
51
|
/**
|
|
17
|
-
*
|
|
52
|
+
* Returns the create function with preset options.
|
|
18
53
|
* If the options overlap, the options of the 'create' function take precedence.
|
|
19
|
-
* @param {
|
|
20
|
-
* @returns {Object}
|
|
54
|
+
* @param {EditorInitOptions_suneditor} init_options - Initialization options
|
|
55
|
+
* @returns {{create: (targets: Element|Object<string, {target: Element, options: EditorFrameOptions_suneditor}>, options: EditorInitOptions_suneditor) => Editor}}}
|
|
21
56
|
*/
|
|
22
57
|
init(init_options) {
|
|
23
58
|
return {
|
|
@@ -26,10 +61,12 @@ export default {
|
|
|
26
61
|
},
|
|
27
62
|
|
|
28
63
|
/**
|
|
29
|
-
*
|
|
30
|
-
* @param {
|
|
31
|
-
* @param {
|
|
32
|
-
* @
|
|
64
|
+
* Creates a new instance of the SunEditor
|
|
65
|
+
* @param {Element|Object<string, {target: Element, options: EditorFrameOptions_suneditor}>} target - Target element or multi-root object
|
|
66
|
+
* @param {EditorInitOptions_suneditor} options - Initialization options
|
|
67
|
+
* @param {EditorInitOptions_suneditor} [_init_options] - Optional preset initialization options
|
|
68
|
+
* @returns {Editor} - Instance of the SunEditor
|
|
69
|
+
* @throws {Error} If the target element is not provided or is invalid
|
|
33
70
|
*/
|
|
34
71
|
create(target, options, _init_options) {
|
|
35
72
|
if (typeof options !== 'object') options = {};
|
|
@@ -54,7 +91,7 @@ export default {
|
|
|
54
91
|
|
|
55
92
|
const multiTargets = [];
|
|
56
93
|
if (target.nodeType === 1) {
|
|
57
|
-
multiTargets.push({ target: target });
|
|
94
|
+
multiTargets.push({ key: null, target: target });
|
|
58
95
|
} else {
|
|
59
96
|
let props;
|
|
60
97
|
for (const key in target) {
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
.sun-editor.se-theme-dark,
|
|
2
|
+
.sun-editor-editable.se-theme-dark {
|
|
3
|
+
/** --------------------------- content - [colors] ----------- */
|
|
4
|
+
--se-caret-color: #ccc;
|
|
5
|
+
--se-placeholder-color: #64718c;
|
|
6
|
+
--se-edit-font-color: #ccc;
|
|
7
|
+
--se-edit-font-pre: #aaa;
|
|
8
|
+
--se-edit-font-quote: #888;
|
|
9
|
+
--se-edit-background-color: #0f1828;
|
|
10
|
+
--se-edit-background-pre: #364153;
|
|
11
|
+
--se-edit-border-light: #555;
|
|
12
|
+
--se-edit-border-dark: #444;
|
|
13
|
+
--se-edit-border-dark-n1: #555;
|
|
14
|
+
--se-edit-border-dark-n2: #666;
|
|
15
|
+
--se-edit-anchor: #77aaff;
|
|
16
|
+
--se-edit-anchor-on-back: #004cff;
|
|
17
|
+
--se-edit-anchor-on-font: #e8f7ff;
|
|
18
|
+
--se-edit-hr-color: #ccc;
|
|
19
|
+
--se-edit-hr-on-back: #77aaff;
|
|
20
|
+
--se-edit-active: #77aaff;
|
|
21
|
+
--se-edit-hover: #5599ff;
|
|
22
|
+
--se-edit-outline: #444;
|
|
23
|
+
|
|
24
|
+
/** --------------------------- layout - [colors] ----------- */
|
|
25
|
+
/** main, common */
|
|
26
|
+
--se-main-font-family: Helvetica Neue;
|
|
27
|
+
--se-main-out-color: #444;
|
|
28
|
+
--se-main-color: #ccc;
|
|
29
|
+
--se-main-color-lighter: #aaa;
|
|
30
|
+
--se-main-background-color: #0f1828;
|
|
31
|
+
--se-code-view-color: #030712;
|
|
32
|
+
--se-main-font-color: #ccc;
|
|
33
|
+
--se-code-view-background-color: #ddd;
|
|
34
|
+
--se-main-divider-color: #555;
|
|
35
|
+
--se-main-border-color: #666;
|
|
36
|
+
--se-main-outline-color: #444;
|
|
37
|
+
--se-main-shadow-color: #222;
|
|
38
|
+
--se-statusbar-font-color: #aaa;
|
|
39
|
+
--se-overlay-background-color: #111;
|
|
40
|
+
|
|
41
|
+
/* hover, active */
|
|
42
|
+
--se-active-color: #5cd2e6;
|
|
43
|
+
--se-active-dark-color: #3bb9cd;
|
|
44
|
+
--se-active-dark2-color: #2a9fb1;
|
|
45
|
+
--se-active-dark3-color: #5cd2e6;
|
|
46
|
+
--se-active-dark4-color: #3bb9cd;
|
|
47
|
+
--se-active-dark5-color: #197d91;
|
|
48
|
+
--se-active-light-color: #17303a;
|
|
49
|
+
--se-active-light2-color: #1e3f4d;
|
|
50
|
+
--se-active-light3-color: #255e6f;
|
|
51
|
+
--se-active-light4-color: #2c7d91;
|
|
52
|
+
--se-active-light5-color: #33aacc;
|
|
53
|
+
--se-active-light6-color: #3bd1f2;
|
|
54
|
+
|
|
55
|
+
/* [toolbar, menu, modal] layer - shadow */
|
|
56
|
+
--se-shadow-layer-color: rgba(0, 64, 128, 0.25);
|
|
57
|
+
|
|
58
|
+
/* drag */
|
|
59
|
+
--se-drag-over-color: #ffcc00;
|
|
60
|
+
|
|
61
|
+
/* modal, browser, dropdown */
|
|
62
|
+
--se-modal-background-color: #1c202a;
|
|
63
|
+
--se-modal-color: #ececec;
|
|
64
|
+
--se-modal-border-color: #555;
|
|
65
|
+
--se-modal-anchor-color: #77aaff;
|
|
66
|
+
--se-modal-preview-color: #aaa;
|
|
67
|
+
--se-modal-file-input-background-color: #232837;
|
|
68
|
+
--se-modal-input-disabled-color: #666;
|
|
69
|
+
--se-modal-input-disabled-background-color: #333;
|
|
70
|
+
|
|
71
|
+
/* dropdown, selectMenu */
|
|
72
|
+
--se-dropdown-font-color: #ccc;
|
|
73
|
+
|
|
74
|
+
/* controller */
|
|
75
|
+
--se-controller-border-color: #555;
|
|
76
|
+
--se-controller-background-color: #091025;
|
|
77
|
+
--se-controller-color: #ececec;
|
|
78
|
+
--se-shadow-controller-color: rgba(80, 200, 255, 0.2);
|
|
79
|
+
|
|
80
|
+
/* button : input-side */
|
|
81
|
+
--se-input-btn-border-color: #444;
|
|
82
|
+
--se-input-btn-disabled-color: #666;
|
|
83
|
+
|
|
84
|
+
/* success */
|
|
85
|
+
--se-success-color: #2cb67d;
|
|
86
|
+
--se-success-dark-color: #1f8f65;
|
|
87
|
+
--se-success-dark2-color: #186f4f;
|
|
88
|
+
--se-success-dark3-color: #125f44;
|
|
89
|
+
--se-success-light-color: #3dd9a5;
|
|
90
|
+
--se-success-light2-color: #57e2b7;
|
|
91
|
+
--se-success-light3-color: #8cf0ce;
|
|
92
|
+
--se-success-light4-color: #c1fae4;
|
|
93
|
+
--se-success-light5-color: #e9fef5;
|
|
94
|
+
|
|
95
|
+
/* error */
|
|
96
|
+
--se-error-color: #ef4444;
|
|
97
|
+
--se-error-dark-color: #991b1b;
|
|
98
|
+
--se-error-dark2-color: #7f1d1d;
|
|
99
|
+
--se-error-dark3-color: #651616;
|
|
100
|
+
--se-error-light-color: #f87171;
|
|
101
|
+
--se-error-light2-color: #fca5a5;
|
|
102
|
+
--se-error-light3-color: #fecaca;
|
|
103
|
+
--se-error-light4-color: #fee2e2;
|
|
104
|
+
--se-error-light5-color: #fef2f2;
|
|
105
|
+
|
|
106
|
+
/* document type */
|
|
107
|
+
--se-doc-background: #344153;
|
|
108
|
+
--se-doc-info-page-font-color: #0f1828;
|
|
109
|
+
--se-doc-info-page-background-color: #cfcfcf;
|
|
110
|
+
/* document type - font, active */
|
|
111
|
+
--se-doc-info-font-color: #cfcfcf;
|
|
112
|
+
--se-doc-info-active-color: #5599ff;
|
|
113
|
+
|
|
114
|
+
/* loading */
|
|
115
|
+
--se-loading-color: #77aaff;
|
|
116
|
+
|
|
117
|
+
/* show blocks */
|
|
118
|
+
--se-show-blocks-color: #5599ff;
|
|
119
|
+
--se-show-blocks-li-color: #d539ff;
|
|
120
|
+
--se-show-blocks-pre-color: #27c022;
|
|
121
|
+
--se-show-blocks-component-color: #f4b124;
|
|
122
|
+
}
|
package/src/typedef.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Global Type Declarations for SunEditor Custom Types
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// --------------------------------------------------------- [Node] ---------------------------------------------------------------------------------------------------
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {Array<Node>|HTMLCollection|NodeList} __se__NodeCollection
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// --------------------------------------------------------- [Editor] ---------------------------------------------------------------------------------------------------
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {import('./core/editor').default} __se__EditorCore
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {import('./editorInjector').default} __se__EditorInjector
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {import('./editorInjector/_core').default} __se__CoreInjector
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {Object} __se__ComponentInfo
|
|
25
|
+
* @property {HTMLElement} target - The target element associated with the component.
|
|
26
|
+
* @property {string} pluginName - The name of the plugin related to the component.
|
|
27
|
+
* @property {Object<string, *>} options - Options related to the component.
|
|
28
|
+
* @property {HTMLElement} container - The main container element for the component.
|
|
29
|
+
* @property {?HTMLElement} cover - The cover element, if applicable.
|
|
30
|
+
* @property {?HTMLElement} inlineCover - The inline cover element, if applicable.
|
|
31
|
+
* @property {?HTMLElement} caption - The caption element, if applicable.
|
|
32
|
+
* @property {boolean} isFile - Whether the component is a file-related component.
|
|
33
|
+
* @property {?HTMLElement} launcher - The element that triggered the component, if applicable.
|
|
34
|
+
* @property {boolean} isInputType - Whether the component is an input component (e.g., table).
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @typedef {Object} __se__EditorStatus
|
|
39
|
+
* @property {boolean} hasFocus Boolean value of whether the editor has focus
|
|
40
|
+
* @property {number} tabSize Indent size of tab (4)
|
|
41
|
+
* @property {number} indentSize Indent size (25)px
|
|
42
|
+
* @property {number} codeIndentSize Indent size of Code view mode (2)
|
|
43
|
+
* @property {Array<string>} currentNodes An element array of the current cursor's node structure
|
|
44
|
+
* @property {Array<string>} currentNodesMap An element name array of the current cursor's node structure
|
|
45
|
+
* @property {boolean} onSelected Boolean value of whether component is selected
|
|
46
|
+
* @property {number} rootKey Current root key
|
|
47
|
+
* @property {Range} _range Current range object
|
|
48
|
+
* @property {boolean} _onMousedown Mouse down event status
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
// --------------------------------------------------------- [Event] ---------------------------------------------------------------------------------------------------
|
|
52
|
+
/**
|
|
53
|
+
* @typedef {Object} __se__EventInfo
|
|
54
|
+
* @property {*} target Target element
|
|
55
|
+
* @property {string} type Event type
|
|
56
|
+
* @property {(...args: *) => *} listener Event listener
|
|
57
|
+
* @property {boolean|AddEventListenerOptions=} useCapture Event useCapture option
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @typedef {Object} __se__GlobalEventInfo
|
|
62
|
+
* @property {string} type Event type
|
|
63
|
+
* @property {(...args: *) => *} listener Event listener
|
|
64
|
+
* @property {boolean|AddEventListenerOptions=} useCapture Use event capture
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
// --------------------------------------------------------- [Plugin Event] ---------------------------------------------------------------------------------------------------
|
|
68
|
+
/**
|
|
69
|
+
* @typedef {Object} __se__PluginMouseEventInfo
|
|
70
|
+
* @property {__se__FrameContext} frameContext Frame context
|
|
71
|
+
* @property {MouseEvent} event Event object
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @typedef {Object} __se__PluginKeyEventInfo
|
|
76
|
+
* @property {__se__FrameContext} frameContext Frame context
|
|
77
|
+
* @property {KeyboardEvent} event Event object
|
|
78
|
+
* @property {Range} range range object
|
|
79
|
+
* @property {HTMLElement} line Current line element
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @typedef {Object} __se__PluginToolbarInputChangeEventInfo
|
|
84
|
+
* @property {HTMLElement} target Input element
|
|
85
|
+
* @property {Event} event Event object
|
|
86
|
+
* @property {string} value Input value
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @typedef {Object} __se__PluginShortcutInfo Information of the "shortcut" plugin
|
|
91
|
+
* @property {Range} range - Range object
|
|
92
|
+
* @property {HTMLElement} line - The line element of the current range
|
|
93
|
+
* @property {import('./core/class/shortcuts').ShortcutInfo} info - Information of the shortcut
|
|
94
|
+
* @property {KeyboardEvent} event - Key event object
|
|
95
|
+
* @property {string} keyCode - KeyBoardEvent.code
|
|
96
|
+
* @property {__se__EditorCore} editor - The root editor instance
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @typedef {Object} __se__PluginPasteParams
|
|
101
|
+
* @property {__se__FrameContext} frameContext Frame context
|
|
102
|
+
* @property {ClipboardEvent} event Clipboard event object
|
|
103
|
+
* @property {string} data Format cleaned paste data (HTML string)
|
|
104
|
+
* @property {Document} doc DomParser data (new DOMParser().parseFromString(data, 'text/html');)
|
|
105
|
+
*/
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @typedef {Object} __se__PluginCopyComponentParams
|
|
109
|
+
* @property {ClipboardEvent} event Clipboard event object
|
|
110
|
+
* @property {HTMLElement} cloneContainer Cloned component container
|
|
111
|
+
* @property {__se__ComponentInfo} info Component information
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
// --------------------------------------------------------- [Context] ---------------------------------------------------------------------------------------------------
|
|
115
|
+
/**
|
|
116
|
+
* @typedef {Map<string, *>} __se__FrameOptions
|
|
117
|
+
*/
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @typedef {Map<string, *>} __se__FrameContext
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @typedef {Map<string, *>} __se__Context
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
// --------------------------------------------------------- [core.class] ---------------------------------------------------------------------------------------------------
|
|
128
|
+
/**
|
|
129
|
+
* @typedef {import('./core/class/offset').OffsetGlobalInfo} __se__Class_OffsetGlobalInfo
|
|
130
|
+
*/
|