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
|
@@ -1,74 +1,115 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// members
|
|
14
|
-
this.list = HRMenus.querySelectorAll('button');
|
|
15
|
-
|
|
16
|
-
// init
|
|
17
|
-
this.menu.initDropdownTarget(HR, HRMenus);
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
HR.key = 'hr';
|
|
21
|
-
HR.type = 'dropdown';
|
|
22
|
-
HR.className = '';
|
|
23
|
-
HR.component = function (node) {
|
|
24
|
-
return /^hr$/i.test(node?.nodeName) ? node : null;
|
|
25
|
-
};
|
|
26
|
-
HR.prototype = {
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
* @description HR Plugin
|
|
7
|
+
*/
|
|
8
|
+
class HR extends EditorInjector {
|
|
9
|
+
static key = 'hr';
|
|
10
|
+
static type = 'dropdown';
|
|
11
|
+
static className = '';
|
|
27
12
|
/**
|
|
28
|
-
* @
|
|
29
|
-
* @
|
|
30
|
-
* @
|
|
13
|
+
* @this {HR}
|
|
14
|
+
* @param {HTMLElement} node - The node to check.
|
|
15
|
+
* @returns {HTMLElement|null} Returns a node if the node is a valid component.
|
|
31
16
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
17
|
+
static component(node) {
|
|
18
|
+
return /^hr$/i.test(node?.nodeName) ? node : null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @constructor
|
|
23
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
24
|
+
* @param {Object} pluginOptions
|
|
25
|
+
* @param {Array<{name: string, class: string}>} pluginOptions.items - HR list
|
|
26
|
+
*/
|
|
27
|
+
constructor(editor, pluginOptions) {
|
|
28
|
+
// plugin bisic properties
|
|
29
|
+
super(editor);
|
|
30
|
+
this.title = this.lang.horizontalLine;
|
|
31
|
+
this.icon = 'horizontal_line';
|
|
32
|
+
|
|
33
|
+
// create HTML
|
|
34
|
+
const HRMenus = CreateHTML(editor, pluginOptions.items);
|
|
35
|
+
|
|
36
|
+
// members
|
|
37
|
+
this.list = HRMenus.querySelectorAll('button');
|
|
38
|
+
|
|
39
|
+
// init
|
|
40
|
+
this.menu.initDropdownTarget(HR, HRMenus);
|
|
41
|
+
}
|
|
35
42
|
|
|
36
43
|
/**
|
|
37
|
-
* @
|
|
44
|
+
* @editorMethod Editor.Component
|
|
45
|
+
* @description Executes the method that is called when a component of a plugin is selected.
|
|
46
|
+
* @param {HTMLElement} target Target component element
|
|
47
|
+
*/
|
|
48
|
+
select(target) {
|
|
49
|
+
dom.utils.addClass(target, 'on');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @editorMethod Editor.Component
|
|
38
54
|
* @description Called when a container is deselected.
|
|
39
|
-
* @param {
|
|
55
|
+
* @param {HTMLElement} element Target element
|
|
40
56
|
*/
|
|
41
57
|
deselect(element) {
|
|
42
|
-
|
|
43
|
-
}
|
|
58
|
+
dom.utils.removeClass(element, 'on');
|
|
59
|
+
}
|
|
44
60
|
|
|
45
|
-
|
|
46
|
-
|
|
61
|
+
/**
|
|
62
|
+
* @editorMethod Editor.Component
|
|
63
|
+
* @description Method to delete a component of a plugin, called by the "FileManager", "Controller" module.
|
|
64
|
+
* @param {HTMLElement} target Target element
|
|
65
|
+
*/
|
|
66
|
+
destroy(target) {
|
|
67
|
+
if (!target) return;
|
|
47
68
|
|
|
48
|
-
const focusEl =
|
|
49
|
-
|
|
69
|
+
const focusEl = target.previousElementSibling || target.nextElementSibling;
|
|
70
|
+
dom.utils.removeItem(target);
|
|
50
71
|
|
|
51
72
|
// focus
|
|
52
73
|
this.editor.focusEdge(focusEl);
|
|
53
74
|
this.history.push(false);
|
|
54
|
-
}
|
|
75
|
+
}
|
|
55
76
|
|
|
56
77
|
/**
|
|
57
|
-
* @
|
|
58
|
-
* @
|
|
78
|
+
* @editorMethod Editor.core
|
|
79
|
+
* @description Executes the main execution method of the plugin.
|
|
80
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
81
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
59
82
|
*/
|
|
60
83
|
action(target) {
|
|
61
|
-
const hr = target.firstElementChild.
|
|
62
|
-
this.editor.focus();
|
|
63
|
-
this.component.insert(hr, false, false);
|
|
64
|
-
this.menu.dropdownOff();
|
|
65
|
-
|
|
84
|
+
const hr = this.submit(target.firstElementChild.className);
|
|
66
85
|
const line = this.format.addLine(hr);
|
|
67
86
|
this.selection.setRange(line, 1, line, 1);
|
|
68
|
-
|
|
87
|
+
this.menu.dropdownOff();
|
|
88
|
+
}
|
|
69
89
|
|
|
70
|
-
|
|
71
|
-
|
|
90
|
+
/**
|
|
91
|
+
* @editorMethod Editor.core
|
|
92
|
+
* @description Executes methods called by shortcut keys.
|
|
93
|
+
* @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
|
|
94
|
+
*/
|
|
95
|
+
shortcut({ line, range }) {
|
|
96
|
+
const newLine = this.nodeTransform.split(range.endContainer, range.endOffset, 0);
|
|
97
|
+
this.submit('__se__solid');
|
|
98
|
+
dom.utils.removeItem(line);
|
|
99
|
+
this.selection.setRange(newLine, 0, newLine, 0);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @description Add a hr element
|
|
104
|
+
* @param {string} className HR class name
|
|
105
|
+
*/
|
|
106
|
+
submit(className) {
|
|
107
|
+
const hr = dom.utils.createElement('hr', { class: className });
|
|
108
|
+
this.editor.focus();
|
|
109
|
+
this.component.insert(hr, { skipCharCount: false, skipSelection: true, skipHistory: false });
|
|
110
|
+
return hr;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
72
113
|
|
|
73
114
|
function CreateHTML({ lang }, HRItems) {
|
|
74
115
|
const items = HRItems || [
|
|
@@ -96,7 +137,7 @@ function CreateHTML({ lang }, HRItems) {
|
|
|
96
137
|
</li>`;
|
|
97
138
|
}
|
|
98
139
|
|
|
99
|
-
return
|
|
140
|
+
return dom.utils.createElement(
|
|
100
141
|
'DIV',
|
|
101
142
|
{
|
|
102
143
|
class: 'se-dropdown se-list-layer se-list-line'
|
|
@@ -1,33 +1,46 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
* @description Layout Plugin, Apply layout to the entire editor.
|
|
7
|
+
*/
|
|
8
|
+
class Layout extends EditorInjector {
|
|
9
|
+
static key = 'layout';
|
|
10
|
+
static type = 'dropdown';
|
|
11
|
+
static className = '';
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
/**
|
|
14
|
+
* @constructor
|
|
15
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
16
|
+
* @param {Object} pluginOptions
|
|
17
|
+
* @param {Array<{name: string, html: string}>} pluginOptions.items - Layout list
|
|
18
|
+
*/
|
|
19
|
+
constructor(editor, pluginOptions) {
|
|
20
|
+
// plugin bisic properties
|
|
21
|
+
super(editor);
|
|
22
|
+
this.title = this.lang.layout;
|
|
23
|
+
this.icon = 'layout';
|
|
13
24
|
|
|
14
|
-
|
|
15
|
-
|
|
25
|
+
// members
|
|
26
|
+
this.selectedIndex = -1;
|
|
27
|
+
this.items = pluginOptions.items;
|
|
16
28
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
29
|
+
// create HTML
|
|
30
|
+
const menu = CreateHTML(this.items);
|
|
31
|
+
|
|
32
|
+
// init
|
|
33
|
+
this.menu.initDropdownTarget(Layout, menu);
|
|
34
|
+
}
|
|
20
35
|
|
|
21
|
-
Layout.key = 'layout';
|
|
22
|
-
Layout.type = 'dropdown';
|
|
23
|
-
Layout.className = '';
|
|
24
|
-
Layout.prototype = {
|
|
25
36
|
/**
|
|
26
|
-
* @
|
|
27
|
-
* @
|
|
37
|
+
* @editorMethod Editor.core
|
|
38
|
+
* @description Executes the main execution method of the plugin.
|
|
39
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
40
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
28
41
|
*/
|
|
29
42
|
action(target) {
|
|
30
|
-
const index = target.getAttribute('data-value')
|
|
43
|
+
const index = Number(target.getAttribute('data-value'));
|
|
31
44
|
const temp = this.items[(this.selectedIndex = index)];
|
|
32
45
|
|
|
33
46
|
if (temp.html) {
|
|
@@ -38,10 +51,8 @@ Layout.prototype = {
|
|
|
38
51
|
}
|
|
39
52
|
|
|
40
53
|
this.menu.dropdownOff();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
constructor: Layout
|
|
44
|
-
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
45
56
|
|
|
46
57
|
function CreateHTML(layoutList) {
|
|
47
58
|
if (!layoutList || layoutList.length === 0) {
|
|
@@ -66,7 +77,7 @@ function CreateHTML(layoutList) {
|
|
|
66
77
|
</ul>
|
|
67
78
|
</div>`;
|
|
68
79
|
|
|
69
|
-
return
|
|
80
|
+
return dom.utils.createElement('DIV', { class: 'se-list-layer' }, list);
|
|
70
81
|
}
|
|
71
82
|
|
|
72
83
|
export default Layout;
|
|
@@ -1,42 +1,58 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
* @description Line height Plugin
|
|
7
|
+
*/
|
|
8
|
+
class LineHeight extends EditorInjector {
|
|
9
|
+
static key = 'lineHeight';
|
|
10
|
+
static type = 'dropdown';
|
|
11
|
+
static className = '';
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
/**
|
|
14
|
+
* @constructor
|
|
15
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
16
|
+
* @param {Object} pluginOptions
|
|
17
|
+
* @param {Array<{text: string, value: number}>} pluginOptions.items - Line height list
|
|
18
|
+
*/
|
|
19
|
+
constructor(editor, pluginOptions) {
|
|
20
|
+
// plugin bisic properties
|
|
21
|
+
super(editor);
|
|
22
|
+
this.title = this.lang.lineHeight;
|
|
23
|
+
this.icon = 'line_height';
|
|
12
24
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this.currentSize = -1;
|
|
25
|
+
// create HTML
|
|
26
|
+
const menu = CreateHTML(editor, pluginOptions.items);
|
|
16
27
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
// members
|
|
29
|
+
this.sizeList = menu.querySelectorAll('li button');
|
|
30
|
+
this.currentSize = null;
|
|
31
|
+
|
|
32
|
+
// init
|
|
33
|
+
this.menu.initDropdownTarget(LineHeight, menu);
|
|
34
|
+
}
|
|
20
35
|
|
|
21
|
-
LineHeight.key = 'lineHeight';
|
|
22
|
-
LineHeight.type = 'dropdown';
|
|
23
|
-
LineHeight.className = '';
|
|
24
|
-
LineHeight.prototype = {
|
|
25
36
|
/**
|
|
26
|
-
* @
|
|
37
|
+
* @editorMethod Editor.EventManager
|
|
38
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
39
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
40
|
+
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
41
|
+
* @returns {boolean} - Whether the plugin is active
|
|
27
42
|
*/
|
|
28
43
|
active(element, target) {
|
|
29
44
|
if (element?.style?.lineHeight.length > 0) {
|
|
30
|
-
|
|
45
|
+
dom.utils.addClass(target, 'active');
|
|
31
46
|
return true;
|
|
32
47
|
}
|
|
33
48
|
|
|
34
|
-
|
|
49
|
+
dom.utils.removeClass(target, 'active');
|
|
35
50
|
return false;
|
|
36
|
-
}
|
|
51
|
+
}
|
|
37
52
|
|
|
38
53
|
/**
|
|
39
|
-
* @
|
|
54
|
+
* @editorMethod Modules.Dropdown
|
|
55
|
+
* @description Executes the method that is called when a plugin's dropdown menu is opened.
|
|
40
56
|
*/
|
|
41
57
|
on() {
|
|
42
58
|
const format = this.format.getLine(this.selection.getNode());
|
|
@@ -46,19 +62,21 @@ LineHeight.prototype = {
|
|
|
46
62
|
const sizeList = this.sizeList;
|
|
47
63
|
for (let i = 0, len = sizeList.length; i < len; i++) {
|
|
48
64
|
if (currentSize === sizeList[i].getAttribute('data-command')) {
|
|
49
|
-
|
|
65
|
+
dom.utils.addClass(sizeList[i], 'active');
|
|
50
66
|
} else {
|
|
51
|
-
|
|
67
|
+
dom.utils.removeClass(sizeList[i], 'active');
|
|
52
68
|
}
|
|
53
69
|
}
|
|
54
70
|
|
|
55
71
|
this.currentSize = currentSize;
|
|
56
72
|
}
|
|
57
|
-
}
|
|
73
|
+
}
|
|
58
74
|
|
|
59
75
|
/**
|
|
60
|
-
* @
|
|
61
|
-
* @
|
|
76
|
+
* @editorMethod Editor.core
|
|
77
|
+
* @description Executes the main execution method of the plugin.
|
|
78
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
79
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
62
80
|
*/
|
|
63
81
|
action(target) {
|
|
64
82
|
const value = target.getAttribute('data-command') || '';
|
|
@@ -72,24 +90,22 @@ LineHeight.prototype = {
|
|
|
72
90
|
|
|
73
91
|
this.editor.effectNode = null;
|
|
74
92
|
this.history.push(false);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
constructor: LineHeight
|
|
78
|
-
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
79
95
|
|
|
80
96
|
function CreateHTML({ lang }, items) {
|
|
81
97
|
const sizeList = items || [
|
|
82
|
-
{ text: '1', value:
|
|
83
|
-
{ text: '1.
|
|
84
|
-
{ text: '1.
|
|
85
|
-
{ text: '2', value:
|
|
98
|
+
{ text: '1', value: '1em' },
|
|
99
|
+
{ text: '1.2', value: '1.2em' },
|
|
100
|
+
{ text: '1.7', value: '1.7em' },
|
|
101
|
+
{ text: '2', value: '2em' }
|
|
86
102
|
];
|
|
87
103
|
|
|
88
104
|
let list = /*html*/ `
|
|
89
105
|
<div class="se-list-inner">
|
|
90
106
|
<ul class="se-list-basic">
|
|
91
107
|
<li>
|
|
92
|
-
<button type="button" class="
|
|
108
|
+
<button type="button" class="se-btn se-btn-list default_value" data-command="" title="${lang.default}" aria-label="${lang.default}">
|
|
93
109
|
(${lang.default})
|
|
94
110
|
</button>
|
|
95
111
|
</li>`;
|
|
@@ -108,7 +124,7 @@ function CreateHTML({ lang }, items) {
|
|
|
108
124
|
</ul>
|
|
109
125
|
</div>`;
|
|
110
126
|
|
|
111
|
-
return
|
|
127
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, list);
|
|
112
128
|
}
|
|
113
129
|
|
|
114
130
|
export default LineHeight;
|
|
@@ -1,75 +1,92 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// members
|
|
14
|
-
this.listItems = menu.querySelectorAll('li button');
|
|
15
|
-
this.icons = {
|
|
16
|
-
bulleted: editor.icons.list_bulleted,
|
|
17
|
-
numbered: editor.icons.list_numbered
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
// init
|
|
21
|
-
this.menu.initDropdownTarget(List, menu);
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
List.key = 'list';
|
|
25
|
-
List.type = 'dropdown';
|
|
26
|
-
List.className = 'se-icon-flip-rtl';
|
|
27
|
-
List.prototype = {
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
* @description List Plugin (OL, UL)
|
|
7
|
+
*/
|
|
8
|
+
class List extends EditorInjector {
|
|
9
|
+
static key = 'list';
|
|
10
|
+
static type = 'dropdown';
|
|
11
|
+
static className = 'se-icon-flip-rtl';
|
|
12
|
+
|
|
28
13
|
/**
|
|
29
|
-
* @
|
|
14
|
+
* @constructor
|
|
15
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
16
|
+
*/
|
|
17
|
+
constructor(editor) {
|
|
18
|
+
// plugin bisic properties
|
|
19
|
+
super(editor);
|
|
20
|
+
this.title = this.lang.list;
|
|
21
|
+
this.icon = 'list_numbered';
|
|
22
|
+
|
|
23
|
+
// create HTML
|
|
24
|
+
const menu = CreateHTML(editor);
|
|
25
|
+
|
|
26
|
+
// members
|
|
27
|
+
this.listItems = menu.querySelectorAll('li button');
|
|
28
|
+
this.icons = {
|
|
29
|
+
bulleted: editor.icons.list_bulleted,
|
|
30
|
+
numbered: editor.icons.list_numbered
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// init
|
|
34
|
+
this.menu.initDropdownTarget(List, menu);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @editorMethod Editor.EventManager
|
|
39
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
40
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
41
|
+
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
42
|
+
* @returns {boolean} - Whether the plugin is active
|
|
30
43
|
*/
|
|
31
44
|
active(element, target) {
|
|
32
45
|
const icon = target.firstElementChild;
|
|
33
46
|
|
|
34
|
-
if (
|
|
47
|
+
if (dom.check.isList(element)) {
|
|
35
48
|
const nodeName = element.nodeName.toLowerCase();
|
|
36
49
|
target.setAttribute('data-focus', nodeName);
|
|
37
|
-
|
|
50
|
+
dom.utils.addClass(target, 'active');
|
|
38
51
|
|
|
39
52
|
if (/^ul$/.test(nodeName)) {
|
|
40
|
-
|
|
53
|
+
dom.utils.changeElement(icon, this.icons.bulleted);
|
|
41
54
|
} else {
|
|
42
|
-
|
|
55
|
+
dom.utils.changeElement(icon, this.icons.numbered);
|
|
43
56
|
}
|
|
44
57
|
|
|
45
58
|
return true;
|
|
46
59
|
}
|
|
47
60
|
|
|
48
61
|
target.removeAttribute('data-focus');
|
|
49
|
-
|
|
50
|
-
|
|
62
|
+
dom.utils.changeElement(icon, this.icons.number);
|
|
63
|
+
dom.utils.removeClass(target, 'active');
|
|
51
64
|
|
|
52
65
|
return false;
|
|
53
|
-
}
|
|
66
|
+
}
|
|
54
67
|
|
|
55
68
|
/**
|
|
56
|
-
* @
|
|
69
|
+
* @editorMethod Modules.Dropdown
|
|
70
|
+
* @description Executes the method that is called when a plugin's dropdown menu is opened.
|
|
71
|
+
* @param {HTMLElement} target Line element at the current cursor position
|
|
57
72
|
*/
|
|
58
73
|
on(target) {
|
|
59
74
|
const currentList = target.getAttribute('data-focus') || '';
|
|
60
75
|
const list = this.listItems;
|
|
61
76
|
for (let i = 0, len = list.length; i < len; i++) {
|
|
62
77
|
if (currentList === list[i].getAttribute('data-command')) {
|
|
63
|
-
|
|
78
|
+
dom.utils.addClass(list[i], 'active');
|
|
64
79
|
} else {
|
|
65
|
-
|
|
80
|
+
dom.utils.removeClass(list[i], 'active');
|
|
66
81
|
}
|
|
67
82
|
}
|
|
68
|
-
}
|
|
83
|
+
}
|
|
69
84
|
|
|
70
85
|
/**
|
|
71
|
-
* @
|
|
72
|
-
* @
|
|
86
|
+
* @editorMethod Editor.core
|
|
87
|
+
* @description Executes the main execution method of the plugin.
|
|
88
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
89
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
73
90
|
*/
|
|
74
91
|
action(target) {
|
|
75
92
|
const command = target.getAttribute('data-command');
|
|
@@ -79,10 +96,8 @@ List.prototype = {
|
|
|
79
96
|
|
|
80
97
|
this.menu.dropdownOff();
|
|
81
98
|
this.history.push(false);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
constructor: List
|
|
85
|
-
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
86
101
|
|
|
87
102
|
function CreateHTML({ lang, icons }) {
|
|
88
103
|
const html = /*html*/ `
|
|
@@ -101,7 +116,7 @@ function CreateHTML({ lang, icons }) {
|
|
|
101
116
|
</ul>
|
|
102
117
|
</div>`;
|
|
103
118
|
|
|
104
|
-
return
|
|
119
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
|
|
105
120
|
}
|
|
106
121
|
|
|
107
122
|
export default List;
|