suneditor 3.0.0-alpha.2 → 3.0.0-alpha.20
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/.eslintrc.json +4 -3
- package/CONTRIBUTING.md +4 -2
- package/README.md +19 -11
- package/README_V3_TEMP.md +705 -0
- package/dist/suneditor.min.css +1 -0
- package/dist/suneditor.min.js +1 -0
- package/example.md +587 -0
- package/package.json +15 -9
- package/src/assets/icons/_default.js +166 -131
- package/src/assets/{suneditor-content.css → suneditor-contents.css} +182 -45
- package/src/assets/suneditor.css +1195 -556
- package/src/assets/variables.css +138 -0
- package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
- package/src/core/base/eventHandlers/handler_ww_clipboard.js +29 -4
- package/src/core/base/eventHandlers/handler_ww_dragDrop.js +59 -15
- package/src/core/base/eventHandlers/handler_ww_key_input.js +426 -212
- package/src/core/base/eventHandlers/handler_ww_mouse.js +108 -32
- package/src/core/base/eventManager.js +540 -209
- package/src/core/base/events.js +616 -320
- package/src/core/base/history.js +93 -39
- package/src/core/class/char.js +29 -13
- package/src/core/class/component.js +332 -145
- package/src/core/class/format.js +671 -509
- package/src/core/class/html.js +504 -290
- package/src/core/class/menu.js +114 -47
- package/src/core/class/nodeTransform.js +111 -66
- package/src/core/class/offset.js +409 -105
- package/src/core/class/selection.js +220 -108
- package/src/core/class/shortcuts.js +68 -8
- package/src/core/class/toolbar.js +106 -116
- package/src/core/class/ui.js +330 -0
- package/src/core/class/viewer.js +178 -74
- package/src/core/editor.js +489 -384
- package/src/core/section/actives.js +118 -22
- package/src/core/section/constructor.js +504 -170
- 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/helper/converter.js +137 -19
- package/src/helper/dom/domCheck.js +294 -0
- package/src/helper/dom/domQuery.js +609 -0
- package/src/helper/dom/domUtils.js +533 -0
- package/src/helper/dom/index.js +12 -0
- package/src/helper/env.js +42 -19
- package/src/helper/index.js +7 -4
- package/src/helper/keyCodeMap.js +183 -0
- package/src/helper/numbers.js +8 -8
- package/src/helper/unicode.js +5 -5
- package/src/langs/ckb.js +69 -3
- package/src/langs/cs.js +67 -1
- package/src/langs/da.js +68 -2
- package/src/langs/de.js +68 -3
- package/src/langs/en.js +29 -1
- package/src/langs/es.js +68 -3
- package/src/langs/fa.js +70 -2
- package/src/langs/fr.js +68 -2
- package/src/langs/he.js +68 -3
- package/src/langs/hu.js +226 -0
- package/src/langs/index.js +3 -2
- package/src/langs/it.js +65 -0
- package/src/langs/ja.js +68 -3
- package/src/langs/ko.js +66 -1
- package/src/langs/lv.js +68 -3
- package/src/langs/nl.js +68 -3
- package/src/langs/pl.js +68 -3
- package/src/langs/pt_br.js +65 -0
- package/src/langs/ro.js +69 -4
- package/src/langs/ru.js +68 -3
- package/src/langs/se.js +68 -3
- package/src/langs/tr.js +68 -0
- package/src/langs/ua.js +68 -3
- package/src/langs/ur.js +71 -6
- package/src/langs/zh_cn.js +69 -4
- 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 +233 -136
- package/src/modules/Figure.js +913 -489
- package/src/modules/FileManager.js +141 -72
- package/src/modules/HueSlider.js +113 -61
- package/src/modules/Modal.js +292 -113
- package/src/modules/ModalAnchorEditor.js +380 -230
- 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 +226 -158
- package/src/plugins/command/list_bulleted.js +93 -47
- package/src/plugins/command/list_numbered.js +93 -47
- package/src/plugins/dropdown/align.js +66 -54
- package/src/plugins/dropdown/backgroundColor.js +76 -45
- package/src/plugins/dropdown/font.js +71 -47
- package/src/plugins/dropdown/fontColor.js +78 -46
- package/src/plugins/dropdown/formatBlock.js +74 -33
- package/src/plugins/dropdown/hr.js +102 -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 +1269 -777
- package/src/plugins/dropdown/template.js +38 -26
- package/src/plugins/dropdown/textStyle.js +43 -31
- package/src/plugins/field/mention.js +144 -82
- 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 +341 -169
- package/src/plugins/modal/drawing.js +530 -0
- package/src/plugins/modal/embed.js +886 -0
- package/src/plugins/modal/image.js +673 -358
- package/src/plugins/modal/link.js +100 -71
- package/src/plugins/modal/math.js +384 -168
- package/src/plugins/modal/video.js +693 -336
- package/src/plugins/popup/anchor.js +222 -0
- package/src/suneditor.js +54 -12
- package/src/themes/dark.css +85 -0
- package/src/typedef.js +86 -0
- package/types/assets/icons/_default.d.ts +152 -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 +377 -0
- package/types/core/base/events.d.ts +297 -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 +259 -0
- package/types/core/class/format.d.ts +615 -0
- package/types/core/class/html.d.ts +377 -0
- package/types/core/class/menu.d.ts +118 -0
- package/types/core/class/nodeTransform.d.ts +93 -0
- package/types/core/class/offset.d.ts +512 -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 +144 -0
- package/types/core/class/viewer.d.ts +140 -0
- package/types/core/editor.d.ts +606 -0
- package/types/core/section/actives.d.ts +46 -0
- package/types/core/section/constructor.d.ts +748 -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/helper/converter.d.ts +150 -0
- package/types/helper/dom/domCheck.d.ts +182 -0
- package/types/helper/dom/domQuery.d.ts +214 -0
- package/types/helper/dom/domUtils.d.ts +211 -0
- package/types/helper/dom/index.d.ts +9 -0
- package/types/helper/env.d.ts +149 -0
- package/types/helper/index.d.ts +163 -0
- package/types/helper/keyCodeMap.d.ts +110 -0
- package/types/helper/numbers.d.ts +43 -0
- package/types/helper/unicode.d.ts +28 -0
- package/types/index.d.ts +0 -0
- package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +170 -103
- package/types/langs/ckb.d.ts +384 -0
- package/types/langs/cs.d.ts +384 -0
- package/types/langs/da.d.ts +384 -0
- package/types/langs/de.d.ts +384 -0
- package/types/langs/en.d.ts +384 -0
- package/types/langs/es.d.ts +384 -0
- package/types/langs/fa.d.ts +384 -0
- package/types/langs/fr.d.ts +384 -0
- package/types/langs/he.d.ts +384 -0
- package/types/langs/hu.d.ts +384 -0
- package/types/langs/index.d.ts +48 -0
- package/types/langs/it.d.ts +384 -0
- package/types/langs/ja.d.ts +384 -0
- package/types/langs/ko.d.ts +384 -0
- package/types/langs/lv.d.ts +384 -0
- package/types/langs/nl.d.ts +384 -0
- package/types/langs/pl.d.ts +384 -0
- package/types/langs/pt_br.d.ts +384 -0
- package/types/langs/ro.d.ts +384 -0
- package/types/langs/ru.d.ts +384 -0
- package/types/langs/se.d.ts +384 -0
- package/types/langs/tr.d.ts +384 -0
- package/types/langs/ua.d.ts +384 -0
- package/types/langs/ur.d.ts +384 -0
- package/types/langs/zh_cn.d.ts +384 -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 +231 -0
- package/types/modules/Figure.d.ts +504 -0
- package/types/modules/FileManager.d.ts +202 -0
- package/types/modules/HueSlider.d.ts +136 -0
- package/types/modules/Modal.d.ts +117 -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 +56 -0
- package/types/plugins/command/list_numbered.d.ts +56 -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 +58 -0
- package/types/plugins/dropdown/hr.d.ts +81 -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 +579 -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-global.d.ts +144 -0
- 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,48 +1,66 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
4
|
const DEFAULT_TYPE = 'disc';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// members
|
|
21
|
-
this.listItems = menu.querySelectorAll('li button ul');
|
|
22
|
-
|
|
23
|
-
// init
|
|
24
|
-
this.menu.initDropdownTarget({ key: List_bulleted.key, type: 'dropdown' }, menu);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
List_bulleted.key = 'list_bulleted';
|
|
28
|
-
List_bulleted.type = 'command';
|
|
29
|
-
List_bulleted.className = 'se-icon-flip-rtl';
|
|
30
|
-
List_bulleted.prototype = {
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {import('../../core/class/shortcuts').ShortcutInfo} ShortcutInfo
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @class
|
|
12
|
+
* @description List bulleted plugin, Several types of lists are provided.
|
|
13
|
+
*/
|
|
14
|
+
class List_bulleted extends EditorInjector {
|
|
15
|
+
static key = 'list_bulleted';
|
|
16
|
+
static type = 'command';
|
|
17
|
+
static className = 'se-icon-flip-rtl';
|
|
18
|
+
|
|
31
19
|
/**
|
|
32
|
-
* @
|
|
20
|
+
* @constructor
|
|
21
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
22
|
+
*/
|
|
23
|
+
constructor(editor) {
|
|
24
|
+
// plugin bisic properties
|
|
25
|
+
super(editor);
|
|
26
|
+
this.title = this.lang.bulletedList;
|
|
27
|
+
this.icon = 'list_bulleted';
|
|
28
|
+
this.afterItem = dom.utils.createElement(
|
|
29
|
+
'button',
|
|
30
|
+
{ class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_bulleted.key, 'data-type': 'dropdown' },
|
|
31
|
+
`${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.bulletedList}</span></span>`
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
// create HTML
|
|
35
|
+
const menu = CreateHTML();
|
|
36
|
+
|
|
37
|
+
// members
|
|
38
|
+
this.listItems = menu.querySelectorAll('li button ul');
|
|
39
|
+
|
|
40
|
+
// init
|
|
41
|
+
this.menu.initDropdownTarget({ key: List_bulleted.key, type: 'dropdown' }, menu);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @editorMethod Editor.EventManager
|
|
46
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
47
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
48
|
+
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
49
|
+
* @returns {boolean} - Whether the plugin is active
|
|
33
50
|
*/
|
|
34
51
|
active(element, target) {
|
|
35
|
-
if (
|
|
36
|
-
|
|
52
|
+
if (dom.check.isListCell(element) && /^UL$/i.test(element.parentElement.nodeName)) {
|
|
53
|
+
dom.utils.addClass(target, 'active');
|
|
37
54
|
return true;
|
|
38
55
|
}
|
|
39
56
|
|
|
40
|
-
|
|
57
|
+
dom.utils.removeClass(target, 'active');
|
|
41
58
|
return false;
|
|
42
|
-
}
|
|
59
|
+
}
|
|
43
60
|
|
|
44
61
|
/**
|
|
45
|
-
* @
|
|
62
|
+
* @editorMethod Modules.Dropdown
|
|
63
|
+
* @description Executes the method that is called when a plugin's dropdown menu is opened.
|
|
46
64
|
*/
|
|
47
65
|
on() {
|
|
48
66
|
const list = this.listItems;
|
|
@@ -50,37 +68,65 @@ List_bulleted.prototype = {
|
|
|
50
68
|
const type = el?.style ? el.style.listStyleType || DEFAULT_TYPE : '';
|
|
51
69
|
|
|
52
70
|
for (let i = 0, len = list.length, l; i < len; i++) {
|
|
53
|
-
l = list[i];
|
|
71
|
+
l = /** @type {HTMLElement} */ (list[i]);
|
|
54
72
|
if (type === l.style.listStyleType) {
|
|
55
|
-
|
|
73
|
+
dom.utils.addClass(l.parentElement, 'active');
|
|
56
74
|
} else {
|
|
57
|
-
|
|
75
|
+
dom.utils.removeClass(l.parentElement, 'active');
|
|
58
76
|
}
|
|
59
77
|
}
|
|
60
|
-
}
|
|
78
|
+
}
|
|
61
79
|
|
|
62
80
|
/**
|
|
63
|
-
* @
|
|
64
|
-
* @
|
|
81
|
+
* @editorMethod Editor.core
|
|
82
|
+
* @description Executes the main execution method of the plugin.
|
|
83
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
84
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
65
85
|
*/
|
|
66
86
|
action(target) {
|
|
67
87
|
const el = this.format.getBlock(this.selection.getNode());
|
|
68
|
-
const type = target?.querySelector('ul')?.style.listStyleType
|
|
88
|
+
const type = target?.querySelector('ul')?.style.listStyleType;
|
|
69
89
|
|
|
70
|
-
if (
|
|
90
|
+
if (dom.check.isList(el) && type) {
|
|
71
91
|
el.style.listStyleType = type;
|
|
72
92
|
} else {
|
|
73
|
-
|
|
74
|
-
if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
|
|
93
|
+
this.submit(type);
|
|
75
94
|
}
|
|
76
95
|
|
|
77
96
|
this.menu.dropdownOff();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @editorMethod Editor.core
|
|
101
|
+
* @description Executes methods called by shortcut keys.
|
|
102
|
+
* @param {Object} params - Information of the "shortcut" plugin
|
|
103
|
+
* @param {Range} params.range - Range object
|
|
104
|
+
* @param {HTMLElement} params.line - The line element of the current range
|
|
105
|
+
* @param {ShortcutInfo} params.info - Information of the shortcut
|
|
106
|
+
* @param {KeyboardEvent} params.event - Key event object
|
|
107
|
+
* @param {string} params.keyCode - KeyBoardEvent.code
|
|
108
|
+
* @param {__se__EditorCore} params.editor - The root editor instance
|
|
109
|
+
*/
|
|
110
|
+
shortcut({ range, info }) {
|
|
111
|
+
const { startContainer } = range;
|
|
112
|
+
if (dom.check.isText(startContainer)) {
|
|
113
|
+
const newText = startContainer.substringData(info.key.length, startContainer.textContent.length - 1);
|
|
114
|
+
startContainer.textContent = newText;
|
|
115
|
+
}
|
|
116
|
+
this.submit();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @description Add a bulleted list
|
|
121
|
+
* @param {string} [type=""] List type
|
|
122
|
+
*/
|
|
123
|
+
submit(type) {
|
|
124
|
+
const range = this.format.applyList(`ul:${type || ''}`, null, false);
|
|
125
|
+
if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
|
|
78
126
|
this.editor.focus();
|
|
79
127
|
this.history.push(false);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
constructor: List_bulleted
|
|
83
|
-
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
84
130
|
|
|
85
131
|
function CreateHTML() {
|
|
86
132
|
const html = /*html*/ `
|
|
@@ -90,7 +136,7 @@ function CreateHTML() {
|
|
|
90
136
|
</ul>
|
|
91
137
|
</div>`;
|
|
92
138
|
|
|
93
|
-
return
|
|
139
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
|
|
94
140
|
}
|
|
95
141
|
|
|
96
142
|
function _CreateLI(types) {
|
|
@@ -1,48 +1,66 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
4
|
const DEFAULT_TYPE = 'decimal';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// members
|
|
21
|
-
this.listItems = menu.querySelectorAll('li button ol');
|
|
22
|
-
|
|
23
|
-
// init
|
|
24
|
-
this.menu.initDropdownTarget({ key: List_numbered.key, type: 'dropdown' }, menu);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
List_numbered.key = 'list_numbered';
|
|
28
|
-
List_numbered.type = 'command';
|
|
29
|
-
List_numbered.className = 'se-icon-flip-rtl';
|
|
30
|
-
List_numbered.prototype = {
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {import('../../core/class/shortcuts').ShortcutInfo} ShortcutInfo
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @class
|
|
12
|
+
* @description List numbered plugin, Several types of lists are provided.
|
|
13
|
+
*/
|
|
14
|
+
class List_numbered extends EditorInjector {
|
|
15
|
+
static key = 'list_numbered';
|
|
16
|
+
static type = 'command';
|
|
17
|
+
static className = 'se-icon-flip-rtl';
|
|
18
|
+
|
|
31
19
|
/**
|
|
32
|
-
* @
|
|
20
|
+
* @constructor
|
|
21
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
22
|
+
*/
|
|
23
|
+
constructor(editor) {
|
|
24
|
+
// plugin bisic properties
|
|
25
|
+
super(editor);
|
|
26
|
+
this.title = this.lang.numberedList;
|
|
27
|
+
this.icon = 'list_numbered';
|
|
28
|
+
this.afterItem = dom.utils.createElement(
|
|
29
|
+
'button',
|
|
30
|
+
{ class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_numbered.key, 'data-type': 'dropdown' },
|
|
31
|
+
`${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.numberedList}</span></span>`
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
// create HTML
|
|
35
|
+
const menu = CreateHTML();
|
|
36
|
+
|
|
37
|
+
// members
|
|
38
|
+
this.listItems = menu.querySelectorAll('li button ol');
|
|
39
|
+
|
|
40
|
+
// init
|
|
41
|
+
this.menu.initDropdownTarget({ key: List_numbered.key, type: 'dropdown' }, menu);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @editorMethod Editor.EventManager
|
|
46
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
47
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
48
|
+
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
49
|
+
* @returns {boolean} - Whether the plugin is active
|
|
33
50
|
*/
|
|
34
51
|
active(element, target) {
|
|
35
|
-
if (
|
|
36
|
-
|
|
52
|
+
if (dom.check.isListCell(element) && /^OL$/i.test(element.parentElement.nodeName)) {
|
|
53
|
+
dom.utils.addClass(target, 'active');
|
|
37
54
|
return true;
|
|
38
55
|
}
|
|
39
56
|
|
|
40
|
-
|
|
57
|
+
dom.utils.removeClass(target, 'active');
|
|
41
58
|
return false;
|
|
42
|
-
}
|
|
59
|
+
}
|
|
43
60
|
|
|
44
61
|
/**
|
|
45
|
-
* @
|
|
62
|
+
* @editorMethod Modules.Dropdown
|
|
63
|
+
* @description Executes the method that is called when a plugin's dropdown menu is opened.
|
|
46
64
|
*/
|
|
47
65
|
on() {
|
|
48
66
|
const list = this.listItems;
|
|
@@ -50,37 +68,65 @@ List_numbered.prototype = {
|
|
|
50
68
|
const type = el?.style ? el.style.listStyleType || DEFAULT_TYPE : '';
|
|
51
69
|
|
|
52
70
|
for (let i = 0, len = list.length, l; i < len; i++) {
|
|
53
|
-
l = list[i];
|
|
71
|
+
l = /** @type {HTMLElement} */ (list[i]);
|
|
54
72
|
if (type === l.style.listStyleType) {
|
|
55
|
-
|
|
73
|
+
dom.utils.addClass(l.parentElement, 'active');
|
|
56
74
|
} else {
|
|
57
|
-
|
|
75
|
+
dom.utils.removeClass(l.parentElement, 'active');
|
|
58
76
|
}
|
|
59
77
|
}
|
|
60
|
-
}
|
|
78
|
+
}
|
|
61
79
|
|
|
62
80
|
/**
|
|
63
|
-
* @
|
|
64
|
-
* @
|
|
81
|
+
* @editorMethod Editor.core
|
|
82
|
+
* @description Executes the main execution method of the plugin.
|
|
83
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
84
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
65
85
|
*/
|
|
66
86
|
action(target) {
|
|
67
87
|
const el = this.format.getBlock(this.selection.getNode());
|
|
68
|
-
const type = target?.querySelector('ol')?.style.listStyleType
|
|
88
|
+
const type = target?.querySelector('ol')?.style.listStyleType;
|
|
69
89
|
|
|
70
|
-
if (
|
|
90
|
+
if (dom.check.isList(el) && type) {
|
|
71
91
|
el.style.listStyleType = type;
|
|
72
92
|
} else {
|
|
73
|
-
|
|
74
|
-
if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
|
|
93
|
+
this.submit(type);
|
|
75
94
|
}
|
|
76
95
|
|
|
77
96
|
this.menu.dropdownOff();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @editorMethod Editor.core
|
|
101
|
+
* @description Executes methods called by shortcut keys.
|
|
102
|
+
* @param {Object} params - Information of the "shortcut" plugin
|
|
103
|
+
* @param {Range} params.range - Range object
|
|
104
|
+
* @param {HTMLElement} params.line - The line element of the current range
|
|
105
|
+
* @param {ShortcutInfo} params.info - Information of the shortcut
|
|
106
|
+
* @param {KeyboardEvent} params.event - Key event object
|
|
107
|
+
* @param {string} params.keyCode - KeyBoardEvent.code
|
|
108
|
+
* @param {Object} params.editor - The root editor instance
|
|
109
|
+
*/
|
|
110
|
+
shortcut({ range, info }) {
|
|
111
|
+
const { startContainer } = range;
|
|
112
|
+
if (dom.check.isText(startContainer)) {
|
|
113
|
+
const newText = startContainer.substringData(info.key.length, startContainer.textContent.length - 1);
|
|
114
|
+
startContainer.textContent = newText;
|
|
115
|
+
}
|
|
116
|
+
this.submit();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @description Add a numbered list
|
|
121
|
+
* @param {string} [type=""] List type
|
|
122
|
+
*/
|
|
123
|
+
submit(type) {
|
|
124
|
+
const range = this.format.applyList(`ol:${type || ''}`, null, false);
|
|
125
|
+
if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
|
|
78
126
|
this.editor.focus();
|
|
79
127
|
this.history.push(false);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
constructor: List_numbered
|
|
83
|
-
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
84
130
|
|
|
85
131
|
function CreateHTML() {
|
|
86
132
|
const html = /*html*/ `
|
|
@@ -93,7 +139,7 @@ function CreateHTML() {
|
|
|
93
139
|
</ul>
|
|
94
140
|
</div>`;
|
|
95
141
|
|
|
96
|
-
return
|
|
142
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
|
|
97
143
|
}
|
|
98
144
|
|
|
99
145
|
function _CreateLI(types) {
|
|
@@ -1,60 +1,72 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
* @description Align plugin
|
|
7
|
+
*/
|
|
8
|
+
class Align extends EditorInjector {
|
|
9
|
+
static key = 'align';
|
|
10
|
+
static type = 'dropdown';
|
|
11
|
+
static className = '';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
15
|
+
* @param {Object} pluginOptions
|
|
16
|
+
* @param {Array.<"right"|"center"|"left"|"justify">} pluginOptions.items - Align items
|
|
17
|
+
*/
|
|
18
|
+
constructor(editor, pluginOptions) {
|
|
19
|
+
super(editor);
|
|
20
|
+
this.title = this.lang.align;
|
|
21
|
+
this.icon = this.options.get('_rtl') ? 'align_right' : 'align_left';
|
|
22
|
+
|
|
23
|
+
// create HTML
|
|
24
|
+
const menu = CreateHTML(editor, pluginOptions.items);
|
|
25
|
+
const commandArea = (this._itemMenu = menu.querySelector('ul'));
|
|
26
|
+
|
|
27
|
+
// members
|
|
28
|
+
this.defaultDir = editor.options.get('_rtl') ? 'right' : 'left';
|
|
29
|
+
this.alignIcons = {
|
|
30
|
+
justify: editor.icons.align_justify,
|
|
31
|
+
left: editor.icons.align_left,
|
|
32
|
+
right: editor.icons.align_right,
|
|
33
|
+
center: editor.icons.align_center
|
|
34
|
+
};
|
|
35
|
+
this.alignList = commandArea.querySelectorAll('li button');
|
|
36
|
+
|
|
37
|
+
// init
|
|
38
|
+
this.menu.initDropdownTarget(Align, menu);
|
|
39
|
+
}
|
|
40
|
+
|
|
32
41
|
/**
|
|
33
|
-
* @
|
|
34
|
-
* @
|
|
35
|
-
* @param {
|
|
36
|
-
* @
|
|
42
|
+
* @editorMethod Editor.EventManager
|
|
43
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
44
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
45
|
+
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
46
|
+
* @returns {boolean} - Whether the plugin is active
|
|
37
47
|
*/
|
|
38
48
|
active(element, target) {
|
|
39
49
|
const targetChild = target.firstElementChild;
|
|
40
50
|
|
|
41
51
|
if (!element) {
|
|
42
|
-
|
|
52
|
+
dom.utils.changeElement(targetChild, this.alignIcons[this.defaultDir]);
|
|
43
53
|
target.removeAttribute('data-focus');
|
|
44
54
|
} else if (this.format.isLine(element)) {
|
|
45
|
-
const textAlign = element.style.textAlign;
|
|
55
|
+
const textAlign = /** @type {HTMLElement} */ (element).style.textAlign;
|
|
46
56
|
if (textAlign) {
|
|
47
|
-
|
|
57
|
+
dom.utils.changeElement(targetChild, this.alignIcons[textAlign] || this.alignIcons[this.defaultDir]);
|
|
48
58
|
target.setAttribute('data-focus', textAlign);
|
|
49
59
|
return true;
|
|
50
60
|
}
|
|
51
61
|
}
|
|
52
62
|
|
|
53
63
|
return false;
|
|
54
|
-
}
|
|
64
|
+
}
|
|
55
65
|
|
|
56
66
|
/**
|
|
57
|
-
* @
|
|
67
|
+
* @editorMethod Modules.Dropdown
|
|
68
|
+
* @description Executes the method that is called when a plugin's dropdown menu is opened.
|
|
69
|
+
* @param {HTMLElement} target Line element at the current cursor position
|
|
58
70
|
*/
|
|
59
71
|
on(target) {
|
|
60
72
|
const currentAlign = target.getAttribute('data-focus') || this.defaultDir;
|
|
@@ -63,16 +75,17 @@ Align.prototype = {
|
|
|
63
75
|
const alignList = this.alignList;
|
|
64
76
|
for (let i = 0, len = alignList.length; i < len; i++) {
|
|
65
77
|
if (currentAlign === alignList[i].getAttribute('data-command')) {
|
|
66
|
-
|
|
78
|
+
dom.utils.addClass(alignList[i], 'active');
|
|
67
79
|
} else {
|
|
68
|
-
|
|
80
|
+
dom.utils.removeClass(alignList[i], 'active');
|
|
69
81
|
}
|
|
70
82
|
}
|
|
71
|
-
}
|
|
83
|
+
}
|
|
72
84
|
|
|
73
85
|
/**
|
|
74
|
-
* @
|
|
75
|
-
* @
|
|
86
|
+
* @editorMethod Editor.core
|
|
87
|
+
* @description Executes the method called when the rtl, ltr mode changes. ("editor.setDir")
|
|
88
|
+
* @param {string} dir Direction ("rtl" or "ltr")
|
|
76
89
|
*/
|
|
77
90
|
setDir(dir) {
|
|
78
91
|
const _dir = dir === 'rtl' ? 'right' : 'left';
|
|
@@ -87,12 +100,13 @@ Align.prototype = {
|
|
|
87
100
|
lp.appendChild(rightBtn);
|
|
88
101
|
rp.appendChild(leftBtn);
|
|
89
102
|
}
|
|
90
|
-
}
|
|
103
|
+
}
|
|
91
104
|
|
|
92
105
|
/**
|
|
93
|
-
* @
|
|
94
|
-
* @
|
|
95
|
-
*
|
|
106
|
+
* @editorMethod Editor.core
|
|
107
|
+
* @description Executes the main execution method of the plugin.
|
|
108
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
109
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
96
110
|
*/
|
|
97
111
|
action(target) {
|
|
98
112
|
const value = target.getAttribute('data-command');
|
|
@@ -101,17 +115,15 @@ Align.prototype = {
|
|
|
101
115
|
const defaultDir = this.defaultDir;
|
|
102
116
|
const selectedFormsts = this.format.getLines();
|
|
103
117
|
for (let i = 0, len = selectedFormsts.length; i < len; i++) {
|
|
104
|
-
|
|
118
|
+
dom.utils.setStyle(selectedFormsts[i], 'textAlign', value === defaultDir ? '' : value);
|
|
105
119
|
}
|
|
106
120
|
|
|
107
121
|
this.editor.effectNode = null;
|
|
108
122
|
this.menu.dropdownOff();
|
|
109
123
|
this.editor.focus();
|
|
110
124
|
this.history.push(false);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
constructor: Align
|
|
114
|
-
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
115
127
|
|
|
116
128
|
function CreateHTML({ lang, icons, options }, items) {
|
|
117
129
|
const alignItems = Array.isArray(items) ? items : options.get('_rtl') ? ['right', 'center', 'left', 'justify'] : ['left', 'center', 'right', 'justify'];
|
|
@@ -128,7 +140,7 @@ function CreateHTML({ lang, icons, options }, items) {
|
|
|
128
140
|
</li>`;
|
|
129
141
|
}
|
|
130
142
|
|
|
131
|
-
return
|
|
143
|
+
return dom.utils.createElement(
|
|
132
144
|
'div',
|
|
133
145
|
{
|
|
134
146
|
class: 'se-dropdown se-list-layer se-list-align'
|