suneditor 3.0.0-beta.2 → 3.0.0-beta.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/CONTRIBUTING.md +186 -184
- package/LICENSE +21 -21
- package/README.md +157 -180
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +126 -123
- package/src/assets/design/color.css +131 -121
- package/src/assets/design/index.css +3 -3
- package/src/assets/design/size.css +37 -35
- package/src/assets/design/typography.css +37 -37
- package/src/assets/icons/defaultIcons.js +247 -232
- package/src/assets/suneditor-contents.css +779 -778
- package/src/assets/suneditor.css +43 -35
- package/src/core/base/eventHandlers/handler_toolbar.js +135 -135
- package/src/core/base/eventHandlers/handler_ww_clipboard.js +56 -56
- package/src/core/base/eventHandlers/handler_ww_dragDrop.js +115 -113
- package/src/core/base/eventHandlers/handler_ww_key_input.js +1200 -1200
- package/src/core/base/eventHandlers/handler_ww_mouse.js +194 -194
- package/src/core/base/eventManager.js +1550 -1484
- package/src/core/base/history.js +355 -355
- package/src/core/class/char.js +163 -162
- package/src/core/class/component.js +856 -842
- package/src/core/class/format.js +3433 -3422
- package/src/core/class/html.js +1927 -1890
- package/src/core/class/menu.js +357 -346
- package/src/core/class/nodeTransform.js +424 -424
- package/src/core/class/offset.js +858 -891
- package/src/core/class/selection.js +710 -620
- package/src/core/class/shortcuts.js +98 -98
- package/src/core/class/toolbar.js +438 -430
- package/src/core/class/ui.js +424 -422
- package/src/core/class/viewer.js +750 -750
- package/src/core/editor.js +1810 -1708
- package/src/core/section/actives.js +268 -241
- package/src/core/section/constructor.js +1348 -1661
- package/src/core/section/context.js +102 -102
- package/src/core/section/documentType.js +582 -561
- package/src/core/section/options.js +367 -0
- package/src/core/util/instanceCheck.js +59 -0
- package/src/editorInjector/_classes.js +36 -36
- package/src/editorInjector/_core.js +92 -92
- package/src/editorInjector/index.js +75 -75
- package/src/events.js +634 -622
- package/src/helper/clipboard.js +59 -59
- package/src/helper/converter.js +586 -564
- package/src/helper/dom/domCheck.js +304 -304
- package/src/helper/dom/domQuery.js +677 -669
- package/src/helper/dom/domUtils.js +618 -557
- package/src/helper/dom/index.js +12 -12
- package/src/helper/env.js +249 -240
- package/src/helper/index.js +25 -25
- package/src/helper/keyCodeMap.js +183 -183
- package/src/helper/numbers.js +72 -72
- package/src/helper/unicode.js +47 -47
- package/src/langs/ckb.js +231 -231
- package/src/langs/cs.js +231 -231
- package/src/langs/da.js +231 -231
- package/src/langs/de.js +231 -231
- package/src/langs/en.js +230 -230
- package/src/langs/es.js +231 -231
- package/src/langs/fa.js +231 -231
- package/src/langs/fr.js +231 -231
- package/src/langs/he.js +231 -231
- package/src/langs/hu.js +230 -230
- package/src/langs/index.js +28 -28
- package/src/langs/it.js +231 -231
- package/src/langs/ja.js +230 -230
- package/src/langs/km.js +230 -230
- package/src/langs/ko.js +230 -230
- package/src/langs/lv.js +231 -231
- package/src/langs/nl.js +231 -231
- package/src/langs/pl.js +231 -231
- package/src/langs/pt_br.js +231 -231
- package/src/langs/ro.js +231 -231
- package/src/langs/ru.js +231 -231
- package/src/langs/se.js +231 -231
- package/src/langs/tr.js +231 -231
- package/src/langs/uk.js +231 -231
- package/src/langs/ur.js +231 -231
- package/src/langs/zh_cn.js +231 -231
- package/src/modules/ApiManager.js +191 -191
- package/src/modules/Browser.js +669 -667
- package/src/modules/ColorPicker.js +364 -362
- package/src/modules/Controller.js +474 -454
- package/src/modules/Figure.js +1620 -1617
- package/src/modules/FileManager.js +359 -359
- package/src/modules/HueSlider.js +577 -565
- package/src/modules/Modal.js +346 -346
- package/src/modules/ModalAnchorEditor.js +643 -643
- package/src/modules/SelectMenu.js +549 -549
- package/src/modules/_DragHandle.js +17 -17
- package/src/modules/index.js +14 -14
- package/src/plugins/browser/audioGallery.js +83 -83
- package/src/plugins/browser/fileBrowser.js +103 -103
- package/src/plugins/browser/fileGallery.js +83 -83
- package/src/plugins/browser/imageGallery.js +81 -81
- package/src/plugins/browser/videoGallery.js +103 -103
- package/src/plugins/command/blockquote.js +61 -60
- package/src/plugins/command/exportPDF.js +134 -134
- package/src/plugins/command/fileUpload.js +456 -456
- package/src/plugins/command/list_bulleted.js +149 -148
- package/src/plugins/command/list_numbered.js +152 -151
- package/src/plugins/dropdown/align.js +157 -155
- package/src/plugins/dropdown/backgroundColor.js +108 -104
- package/src/plugins/dropdown/font.js +141 -137
- package/src/plugins/dropdown/fontColor.js +109 -105
- package/src/plugins/dropdown/formatBlock.js +170 -178
- package/src/plugins/dropdown/hr.js +152 -152
- package/src/plugins/dropdown/layout.js +83 -83
- package/src/plugins/dropdown/lineHeight.js +131 -130
- package/src/plugins/dropdown/list.js +123 -122
- package/src/plugins/dropdown/paragraphStyle.js +138 -138
- package/src/plugins/dropdown/table.js +4110 -4000
- package/src/plugins/dropdown/template.js +83 -83
- package/src/plugins/dropdown/textStyle.js +149 -149
- package/src/plugins/field/mention.js +242 -242
- package/src/plugins/index.js +120 -120
- package/src/plugins/input/fontSize.js +414 -410
- package/src/plugins/input/pageNavigator.js +71 -70
- package/src/plugins/modal/audio.js +677 -677
- package/src/plugins/modal/drawing.js +537 -531
- package/src/plugins/modal/embed.js +886 -886
- package/src/plugins/modal/image.js +1377 -1376
- package/src/plugins/modal/link.js +248 -240
- package/src/plugins/modal/math.js +563 -563
- package/src/plugins/modal/video.js +1226 -1226
- package/src/plugins/popup/anchor.js +224 -222
- package/src/suneditor.js +114 -107
- package/src/themes/dark.css +132 -122
- package/src/typedef.js +132 -130
- package/types/assets/icons/defaultIcons.d.ts +8 -0
- package/types/core/base/eventManager.d.ts +29 -4
- package/types/core/class/char.d.ts +2 -1
- package/types/core/class/component.d.ts +1 -2
- package/types/core/class/format.d.ts +8 -1
- package/types/core/class/html.d.ts +8 -0
- package/types/core/class/menu.d.ts +8 -0
- package/types/core/class/offset.d.ts +24 -26
- package/types/core/class/selection.d.ts +2 -0
- package/types/core/class/toolbar.d.ts +6 -0
- package/types/core/class/ui.d.ts +1 -1
- package/types/core/editor.d.ts +34 -12
- package/types/core/section/constructor.d.ts +5 -638
- package/types/core/section/documentType.d.ts +12 -2
- package/types/core/section/options.d.ts +740 -0
- package/types/core/util/instanceCheck.d.ts +50 -0
- package/types/editorInjector/_core.d.ts +5 -5
- package/types/editorInjector/index.d.ts +2 -2
- package/types/events.d.ts +2 -0
- package/types/helper/converter.d.ts +9 -0
- package/types/helper/dom/domQuery.d.ts +5 -5
- package/types/helper/dom/domUtils.d.ts +8 -0
- package/types/helper/env.d.ts +6 -1
- package/types/helper/index.d.ts +4 -1
- package/types/index.d.ts +122 -120
- package/types/langs/_Lang.d.ts +194 -194
- package/types/modules/ColorPicker.d.ts +5 -1
- package/types/modules/Controller.d.ts +8 -4
- package/types/modules/Figure.d.ts +2 -1
- package/types/modules/HueSlider.d.ts +4 -1
- package/types/modules/SelectMenu.d.ts +1 -1
- package/types/plugins/command/blockquote.d.ts +1 -0
- package/types/plugins/command/list_bulleted.d.ts +1 -0
- package/types/plugins/command/list_numbered.d.ts +1 -0
- package/types/plugins/dropdown/align.d.ts +1 -0
- package/types/plugins/dropdown/backgroundColor.d.ts +1 -0
- package/types/plugins/dropdown/font.d.ts +1 -0
- package/types/plugins/dropdown/fontColor.d.ts +1 -0
- package/types/plugins/dropdown/formatBlock.d.ts +3 -2
- package/types/plugins/dropdown/lineHeight.d.ts +1 -0
- package/types/plugins/dropdown/list.d.ts +1 -0
- package/types/plugins/dropdown/table.d.ts +6 -0
- package/types/plugins/input/fontSize.d.ts +1 -0
- package/types/plugins/modal/drawing.d.ts +4 -0
- package/types/plugins/modal/link.d.ts +32 -15
- package/types/suneditor.d.ts +13 -9
- package/types/typedef.d.ts +8 -0
|
@@ -1,155 +1,157 @@
|
|
|
1
|
-
import EditorInjector from '../../editorInjector';
|
|
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
|
-
|
|
41
|
-
/**
|
|
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
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* @
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
dom.utils.
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
* @
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
this.defaultDir
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
lp.
|
|
101
|
-
rp.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
*
|
|
109
|
-
* @
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this.editor.
|
|
124
|
-
this.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
1
|
+
import EditorInjector from '../../editorInjector';
|
|
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
|
+
|
|
41
|
+
/**
|
|
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
|
|
47
|
+
* - If it returns "undefined", it will no longer be called in this scope.
|
|
48
|
+
*/
|
|
49
|
+
active(element, target) {
|
|
50
|
+
const targetChild = target.firstElementChild;
|
|
51
|
+
|
|
52
|
+
if (!element) {
|
|
53
|
+
dom.utils.changeElement(targetChild, this.alignIcons[this.defaultDir]);
|
|
54
|
+
target.removeAttribute('data-focus');
|
|
55
|
+
} else if (this.format.isLine(element)) {
|
|
56
|
+
const textAlign = /** @type {HTMLElement} */ (element).style.textAlign;
|
|
57
|
+
if (textAlign) {
|
|
58
|
+
dom.utils.changeElement(targetChild, this.alignIcons[textAlign] || this.alignIcons[this.defaultDir]);
|
|
59
|
+
target.setAttribute('data-focus', textAlign);
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
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
|
|
72
|
+
*/
|
|
73
|
+
on(target) {
|
|
74
|
+
const currentAlign = target.getAttribute('data-focus') || this.defaultDir;
|
|
75
|
+
if (!currentAlign) return;
|
|
76
|
+
|
|
77
|
+
const alignList = this.alignList;
|
|
78
|
+
for (let i = 0, len = alignList.length; i < len; i++) {
|
|
79
|
+
if (currentAlign === alignList[i].getAttribute('data-command')) {
|
|
80
|
+
dom.utils.addClass(alignList[i], 'active');
|
|
81
|
+
} else {
|
|
82
|
+
dom.utils.removeClass(alignList[i], 'active');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @editorMethod Editor.core
|
|
89
|
+
* @description Executes the method called when the rtl, ltr mode changes. ("editor.setDir")
|
|
90
|
+
* @param {string} dir Direction ("rtl" or "ltr")
|
|
91
|
+
*/
|
|
92
|
+
setDir(dir) {
|
|
93
|
+
const _dir = dir === 'rtl' ? 'right' : 'left';
|
|
94
|
+
if (this.defaultDir === _dir) return;
|
|
95
|
+
|
|
96
|
+
this.defaultDir = _dir;
|
|
97
|
+
const leftBtn = this._itemMenu.querySelector('[data-command="left"]');
|
|
98
|
+
const rightBtn = this._itemMenu.querySelector('[data-command="right"]');
|
|
99
|
+
if (leftBtn && rightBtn) {
|
|
100
|
+
const lp = leftBtn.parentElement;
|
|
101
|
+
const rp = rightBtn.parentElement;
|
|
102
|
+
lp.appendChild(rightBtn);
|
|
103
|
+
rp.appendChild(leftBtn);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @editorMethod Editor.core
|
|
109
|
+
* @description Executes the main execution method of the plugin.
|
|
110
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
111
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
112
|
+
*/
|
|
113
|
+
action(target) {
|
|
114
|
+
const value = target.getAttribute('data-command');
|
|
115
|
+
if (!value) return;
|
|
116
|
+
|
|
117
|
+
const defaultDir = this.defaultDir;
|
|
118
|
+
const selectedFormsts = this.format.getLines();
|
|
119
|
+
for (let i = 0, len = selectedFormsts.length; i < len; i++) {
|
|
120
|
+
dom.utils.setStyle(selectedFormsts[i], 'textAlign', value === defaultDir ? '' : value);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
this.editor.effectNode = null;
|
|
124
|
+
this.menu.dropdownOff();
|
|
125
|
+
this.editor.focus();
|
|
126
|
+
this.history.push(false);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function CreateHTML({ lang, icons, options }, items) {
|
|
131
|
+
const alignItems = Array.isArray(items) ? items : options.get('_rtl') ? ['right', 'center', 'left', 'justify'] : ['left', 'center', 'right', 'justify'];
|
|
132
|
+
|
|
133
|
+
let html = '';
|
|
134
|
+
for (let i = 0, item, text; i < alignItems.length; i++) {
|
|
135
|
+
item = alignItems[i];
|
|
136
|
+
text = lang['align' + item.charAt(0).toUpperCase() + item.slice(1)];
|
|
137
|
+
html += /*html*/ `
|
|
138
|
+
<li>
|
|
139
|
+
<button type="button" class="se-btn se-btn-list" data-command="${item}" title="${text}" aria-label="${text}">
|
|
140
|
+
<span class="se-list-icon">${icons['align_' + item]}</span>${text}
|
|
141
|
+
</button>
|
|
142
|
+
</li>`;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return dom.utils.createElement(
|
|
146
|
+
'div',
|
|
147
|
+
{
|
|
148
|
+
class: 'se-dropdown se-list-layer se-list-align'
|
|
149
|
+
},
|
|
150
|
+
/*html*/ `
|
|
151
|
+
<div class="se-list-inner">
|
|
152
|
+
<ul class="se-list-basic">${html}</ul>
|
|
153
|
+
</div>`
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export default Align;
|
|
@@ -1,104 +1,108 @@
|
|
|
1
|
-
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import ColorPicker from '../../modules/ColorPicker';
|
|
3
|
-
import { dom } from '../../helper';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @class
|
|
7
|
-
* @description Text background color plugin
|
|
8
|
-
*/
|
|
9
|
-
class BackgroundColor extends EditorInjector {
|
|
10
|
-
static key = 'backgroundColor';
|
|
11
|
-
static type = 'dropdown-free';
|
|
12
|
-
static className = '';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @constructor
|
|
16
|
-
* @param {__se__EditorCore} editor - The root editor instance
|
|
17
|
-
* @param {Object} pluginOptions
|
|
18
|
-
* @param {Array<string|{value: string, name: string}>} pluginOptions.items - Color list
|
|
19
|
-
* @param {number} pluginOptions.splitNum - Number of colors per line
|
|
20
|
-
* @param {boolean} pluginOptions.disableHEXInput - Disable HEX input
|
|
21
|
-
*/
|
|
22
|
-
constructor(editor, pluginOptions) {
|
|
23
|
-
super(editor);
|
|
24
|
-
// plugin basic properties
|
|
25
|
-
this.title = this.lang.backgroundColor;
|
|
26
|
-
this.icon = 'background_color';
|
|
27
|
-
|
|
28
|
-
// create HTML
|
|
29
|
-
const menu = CreateHTML();
|
|
30
|
-
|
|
31
|
-
// members
|
|
32
|
-
this.colorPicker = new ColorPicker(this, 'backgroundColor', {
|
|
33
|
-
colorList: pluginOptions.items,
|
|
34
|
-
splitNum: pluginOptions.splitNum,
|
|
35
|
-
disableHEXInput: pluginOptions.disableHEXInput,
|
|
36
|
-
hueSliderOptions: { controllerOptions: { parents: [menu], isOutsideForm: true } }
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
// itit
|
|
40
|
-
menu.appendChild(this.colorPicker.target);
|
|
41
|
-
this.menu.initDropdownTarget(BackgroundColor, 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
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
colorHelper.style.color =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
1
|
+
import EditorInjector from '../../editorInjector';
|
|
2
|
+
import ColorPicker from '../../modules/ColorPicker';
|
|
3
|
+
import { dom } from '../../helper';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @class
|
|
7
|
+
* @description Text background color plugin
|
|
8
|
+
*/
|
|
9
|
+
class BackgroundColor extends EditorInjector {
|
|
10
|
+
static key = 'backgroundColor';
|
|
11
|
+
static type = 'dropdown-free';
|
|
12
|
+
static className = '';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @constructor
|
|
16
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
17
|
+
* @param {Object} pluginOptions
|
|
18
|
+
* @param {Array<string|{value: string, name: string}>} pluginOptions.items - Color list
|
|
19
|
+
* @param {number} pluginOptions.splitNum - Number of colors per line
|
|
20
|
+
* @param {boolean} pluginOptions.disableHEXInput - Disable HEX input
|
|
21
|
+
*/
|
|
22
|
+
constructor(editor, pluginOptions) {
|
|
23
|
+
super(editor);
|
|
24
|
+
// plugin basic properties
|
|
25
|
+
this.title = this.lang.backgroundColor;
|
|
26
|
+
this.icon = 'background_color';
|
|
27
|
+
|
|
28
|
+
// create HTML
|
|
29
|
+
const menu = CreateHTML();
|
|
30
|
+
|
|
31
|
+
// members
|
|
32
|
+
this.colorPicker = new ColorPicker(this, 'backgroundColor', {
|
|
33
|
+
colorList: pluginOptions.items,
|
|
34
|
+
splitNum: pluginOptions.splitNum,
|
|
35
|
+
disableHEXInput: pluginOptions.disableHEXInput,
|
|
36
|
+
hueSliderOptions: { controllerOptions: { parents: [menu], isOutsideForm: true } }
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// itit
|
|
40
|
+
menu.appendChild(this.colorPicker.target);
|
|
41
|
+
this.menu.initDropdownTarget(BackgroundColor, 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
|
|
50
|
+
* - If it returns "undefined", it will no longer be called in this scope.
|
|
51
|
+
*/
|
|
52
|
+
active(element, target) {
|
|
53
|
+
const colorHelper = /** @type {SVGPathElement} */ (target.querySelector('path.se-svg-color-helper'));
|
|
54
|
+
if (!colorHelper) return undefined;
|
|
55
|
+
|
|
56
|
+
let color = '';
|
|
57
|
+
if (!element) {
|
|
58
|
+
colorHelper.style.color = color;
|
|
59
|
+
} else if (this.format.isLine(element)) {
|
|
60
|
+
return undefined;
|
|
61
|
+
} else if ((color = dom.utils.getStyle(element, 'backgroundColor'))) {
|
|
62
|
+
colorHelper.style.color = color;
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @editorMethod Modules.Dropdown
|
|
71
|
+
* @description Executes the method that is called when a plugin's "dropdown" menu is opened.
|
|
72
|
+
* @param {HTMLElement} target Line element at the current cursor position
|
|
73
|
+
*/
|
|
74
|
+
on(target) {
|
|
75
|
+
this.colorPicker.init(this.selection.getNode(), target, (current) => this.format.isLine(current));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @editorMethod Modules.Dropdown
|
|
80
|
+
* @description Executes the method that is called when a plugin's "dropdown" menu is closed.
|
|
81
|
+
*/
|
|
82
|
+
off() {
|
|
83
|
+
this.colorPicker.hueSliderClose();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @editorMethod Modules.ColorPicker
|
|
88
|
+
* @description Executes the method called when a button of "ColorPicker" module is clicked.
|
|
89
|
+
* - This plugin is by applying the "ColorPicker" module globally to the "dropdown" menu, the default "action" method is not called.
|
|
90
|
+
* @param {string} color - Color code (hex)
|
|
91
|
+
*/
|
|
92
|
+
colorPickerAction(color) {
|
|
93
|
+
if (color) {
|
|
94
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'background-color: ' + color + ';' });
|
|
95
|
+
this.format.applyInlineElement(newNode, { stylesToModify: ['background-color'], nodesToRemove: null, strictRemove: null });
|
|
96
|
+
} else {
|
|
97
|
+
this.format.applyInlineElement(null, { stylesToModify: ['background-color'], nodesToRemove: ['span'], strictRemove: true });
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
this.menu.dropdownOff();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function CreateHTML() {
|
|
105
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, null);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export default BackgroundColor;
|