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,137 +1,141 @@
|
|
|
1
|
-
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import { dom } from '../../helper';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @class
|
|
6
|
-
* @description Text font plugin
|
|
7
|
-
*/
|
|
8
|
-
class Font extends EditorInjector {
|
|
9
|
-
static key = 'font';
|
|
10
|
-
static type = 'dropdown';
|
|
11
|
-
static className = 'se-btn-select se-btn-tool-font';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @constructor
|
|
15
|
-
* @param {__se__EditorCore} editor - The root editor instance
|
|
16
|
-
* @param {Object} pluginOptions
|
|
17
|
-
* @param {Array<string>} pluginOptions.items - Font list
|
|
18
|
-
* @param {number} pluginOptions.splitNum - Number of colors per line
|
|
19
|
-
* @param {boolean} pluginOptions.disableHEXInput - Disable HEX input
|
|
20
|
-
*/
|
|
21
|
-
constructor(editor, pluginOptions) {
|
|
22
|
-
super(editor);
|
|
23
|
-
// plugin basic properties
|
|
24
|
-
this.title = this.lang.font;
|
|
25
|
-
this.inner = '<span class="se-txt">' + this.lang.font + '</span>' + this.icons.arrow_down;
|
|
26
|
-
|
|
27
|
-
// create HTML
|
|
28
|
-
const fontList = pluginOptions.items || ['Arial', 'Comic Sans MS', 'Courier New', 'Impact', 'Georgia', 'tahoma', 'Trebuchet MS', 'Verdana'];
|
|
29
|
-
const menu = CreateHTML(editor, fontList);
|
|
30
|
-
|
|
31
|
-
// members
|
|
32
|
-
this.currentFont = '';
|
|
33
|
-
this.fontList = menu.querySelectorAll('ul li button');
|
|
34
|
-
this.fontArray = fontList;
|
|
35
|
-
|
|
36
|
-
// init
|
|
37
|
-
this.menu.initDropdownTarget(Font, menu);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* @editorMethod Editor.EventManager
|
|
42
|
-
* @description Executes the method that is called whenever the cursor position changes.
|
|
43
|
-
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
44
|
-
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
45
|
-
* @returns {boolean} - Whether the plugin is active
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
* @
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
1
|
+
import EditorInjector from '../../editorInjector';
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
* @description Text font plugin
|
|
7
|
+
*/
|
|
8
|
+
class Font extends EditorInjector {
|
|
9
|
+
static key = 'font';
|
|
10
|
+
static type = 'dropdown';
|
|
11
|
+
static className = 'se-btn-select se-btn-tool-font';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @constructor
|
|
15
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
16
|
+
* @param {Object} pluginOptions
|
|
17
|
+
* @param {Array<string>} pluginOptions.items - Font list
|
|
18
|
+
* @param {number} pluginOptions.splitNum - Number of colors per line
|
|
19
|
+
* @param {boolean} pluginOptions.disableHEXInput - Disable HEX input
|
|
20
|
+
*/
|
|
21
|
+
constructor(editor, pluginOptions) {
|
|
22
|
+
super(editor);
|
|
23
|
+
// plugin basic properties
|
|
24
|
+
this.title = this.lang.font;
|
|
25
|
+
this.inner = '<span class="se-txt">' + this.lang.font + '</span>' + this.icons.arrow_down;
|
|
26
|
+
|
|
27
|
+
// create HTML
|
|
28
|
+
const fontList = pluginOptions.items || ['Arial', 'Comic Sans MS', 'Courier New', 'Impact', 'Georgia', 'tahoma', 'Trebuchet MS', 'Verdana'];
|
|
29
|
+
const menu = CreateHTML(editor, fontList);
|
|
30
|
+
|
|
31
|
+
// members
|
|
32
|
+
this.currentFont = '';
|
|
33
|
+
this.fontList = menu.querySelectorAll('ul li button');
|
|
34
|
+
this.fontArray = fontList;
|
|
35
|
+
|
|
36
|
+
// init
|
|
37
|
+
this.menu.initDropdownTarget(Font, menu);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @editorMethod Editor.EventManager
|
|
42
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
43
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
44
|
+
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
45
|
+
* @returns {boolean} - Whether the plugin is active
|
|
46
|
+
* - If it returns "undefined", it will no longer be called in this scope.
|
|
47
|
+
*/
|
|
48
|
+
active(element, target) {
|
|
49
|
+
const targetText = target.querySelector('.se-txt');
|
|
50
|
+
const tooltip = target.parentNode.querySelector('.se-tooltip-text');
|
|
51
|
+
|
|
52
|
+
let fontFamily = '';
|
|
53
|
+
if (!element) {
|
|
54
|
+
const font = this.status.hasFocus ? this.editor.frameContext.get('wwComputedStyle').fontFamily : this.lang.font;
|
|
55
|
+
dom.utils.changeTxt(targetText, font);
|
|
56
|
+
dom.utils.changeTxt(tooltip, this.status.hasFocus ? this.lang.font + (font ? ' (' + font + ')' : '') : font);
|
|
57
|
+
} else if (this.format.isLine(element)) {
|
|
58
|
+
return undefined;
|
|
59
|
+
} else if ((fontFamily = dom.utils.getStyle(element, 'fontFamily'))) {
|
|
60
|
+
const selectFont = fontFamily.replace(/["']/g, '');
|
|
61
|
+
dom.utils.changeTxt(targetText, selectFont);
|
|
62
|
+
dom.utils.changeTxt(tooltip, this.lang.font + ' (' + selectFont + ')');
|
|
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
|
+
const fontList = this.fontList;
|
|
76
|
+
const currentFont = target.querySelector('.se-txt').textContent;
|
|
77
|
+
|
|
78
|
+
if (currentFont !== this.currentFont) {
|
|
79
|
+
for (let i = 0, len = fontList.length; i < len; i++) {
|
|
80
|
+
if (currentFont === (fontList[i].getAttribute('data-command') || '').replace(/'|"/g, '')) {
|
|
81
|
+
dom.utils.addClass(fontList[i], 'active');
|
|
82
|
+
} else {
|
|
83
|
+
dom.utils.removeClass(fontList[i], 'active');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
this.currentFont = currentFont;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @editorMethod Editor.core
|
|
93
|
+
* @description Executes the main execution method of the plugin.
|
|
94
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
95
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
96
|
+
* @returns {Promise<void>}
|
|
97
|
+
*/
|
|
98
|
+
async action(target) {
|
|
99
|
+
let value = target.getAttribute('data-command');
|
|
100
|
+
if (value) {
|
|
101
|
+
if (/[\s\d\W]/.test(value) && !/^['"].*['"]$/.test(value)) {
|
|
102
|
+
value = `"${value}"`;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// before event
|
|
106
|
+
if ((await this.triggerEvent('onFontActionBefore', { value })) === false) return;
|
|
107
|
+
|
|
108
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'font-family: ' + value + ';' });
|
|
109
|
+
this.format.applyInlineElement(newNode, { stylesToModify: ['font-family'], nodesToRemove: null, strictRemove: null });
|
|
110
|
+
} else {
|
|
111
|
+
this.format.applyInlineElement(null, { stylesToModify: ['font-family'], nodesToRemove: ['span'], strictRemove: true });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
this.menu.dropdownOff();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function CreateHTML({ lang }, fontList) {
|
|
119
|
+
let list = /*html*/ `
|
|
120
|
+
<div class="se-list-inner">
|
|
121
|
+
<ul class="se-list-basic">
|
|
122
|
+
<li>
|
|
123
|
+
<button type="button" class="se-btn se-btn-list default_value" data-command="" title="${lang.default}" aria-label="${lang.default}">(${lang.default})</button>
|
|
124
|
+
</li>`;
|
|
125
|
+
|
|
126
|
+
for (let i = 0, len = fontList.length, font, text; i < len; i++) {
|
|
127
|
+
font = fontList[i];
|
|
128
|
+
text = font.split(',')[0];
|
|
129
|
+
list += /*html*/ `
|
|
130
|
+
<li>
|
|
131
|
+
<button type="button" class="se-btn se-btn-list" data-command="${font}" data-txt="${text}" title="${text}" aria-label="${text}" style="font-family:${font};">${text}</button>
|
|
132
|
+
</li>`;
|
|
133
|
+
}
|
|
134
|
+
list += /*html*/ `
|
|
135
|
+
</ul>
|
|
136
|
+
</div>`;
|
|
137
|
+
|
|
138
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer se-list-font-family' }, list);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export default Font;
|
|
@@ -1,105 +1,109 @@
|
|
|
1
|
-
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import ColorPicker from '../../modules/ColorPicker';
|
|
3
|
-
import { dom } from '../../helper';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @class
|
|
7
|
-
* @description Font color plugin
|
|
8
|
-
*/
|
|
9
|
-
class FontColor extends EditorInjector {
|
|
10
|
-
static key = 'fontColor';
|
|
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.fontColor;
|
|
26
|
-
this.icon = 'font_color';
|
|
27
|
-
|
|
28
|
-
// create HTML
|
|
29
|
-
const menu = CreateHTML();
|
|
30
|
-
|
|
31
|
-
// members
|
|
32
|
-
this.colorPicker = new ColorPicker(this, 'color', {
|
|
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(FontColor, 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
|
-
|
|
59
|
-
colorHelper.style.color =
|
|
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
|
-
|
|
105
|
-
|
|
1
|
+
import EditorInjector from '../../editorInjector';
|
|
2
|
+
import ColorPicker from '../../modules/ColorPicker';
|
|
3
|
+
import { dom } from '../../helper';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @class
|
|
7
|
+
* @description Font color plugin
|
|
8
|
+
*/
|
|
9
|
+
class FontColor extends EditorInjector {
|
|
10
|
+
static key = 'fontColor';
|
|
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.fontColor;
|
|
26
|
+
this.icon = 'font_color';
|
|
27
|
+
|
|
28
|
+
// create HTML
|
|
29
|
+
const menu = CreateHTML();
|
|
30
|
+
|
|
31
|
+
// members
|
|
32
|
+
this.colorPicker = new ColorPicker(this, 'color', {
|
|
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(FontColor, 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
|
+
/** @type {HTMLElement} */
|
|
54
|
+
const colorHelper = target.querySelector('.se-svg-color-helper');
|
|
55
|
+
if (!colorHelper) return undefined;
|
|
56
|
+
|
|
57
|
+
let color = '';
|
|
58
|
+
if (!element) {
|
|
59
|
+
colorHelper.style.color = color;
|
|
60
|
+
} else if (this.format.isLine(element)) {
|
|
61
|
+
return undefined;
|
|
62
|
+
} else if ((color = dom.utils.getStyle(element, 'color'))) {
|
|
63
|
+
colorHelper.style.color = color;
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @editorMethod Modules.Dropdown
|
|
72
|
+
* @description Executes the method that is called when a plugin's dropdown menu is opened.
|
|
73
|
+
* @param {HTMLElement} target Line element at the current cursor position
|
|
74
|
+
*/
|
|
75
|
+
on(target) {
|
|
76
|
+
this.colorPicker.init(this.selection.getNode(), target, (current) => this.format.isLine(current));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @editorMethod Modules.Dropdown
|
|
81
|
+
* @Override Executes the method that is called when a plugin's dropdown menu is closed.
|
|
82
|
+
*/
|
|
83
|
+
off() {
|
|
84
|
+
this.colorPicker.hueSliderClose();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @editorMethod Modules.ColorPicker
|
|
89
|
+
* @description Executes the method called when a button of "ColorPicker" module is clicked.
|
|
90
|
+
* - This plugin is by applying the "ColorPicker" module globally to the "dropdown" menu, the default "action" method is not called.
|
|
91
|
+
* @param {string} color - Color code (hex)
|
|
92
|
+
*/
|
|
93
|
+
colorPickerAction(color) {
|
|
94
|
+
if (color) {
|
|
95
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'color: ' + color + ';' });
|
|
96
|
+
this.format.applyInlineElement(newNode, { stylesToModify: ['color'], nodesToRemove: null, strictRemove: null });
|
|
97
|
+
} else {
|
|
98
|
+
this.format.applyInlineElement(null, { stylesToModify: ['color'], nodesToRemove: ['span'], strictRemove: true });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
this.menu.dropdownOff();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function CreateHTML() {
|
|
106
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, null);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export default FontColor;
|