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,5 +1,5 @@
|
|
|
1
1
|
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import {
|
|
2
|
+
import { dom, numbers, keyCodeMap } from '../../helper';
|
|
3
3
|
|
|
4
4
|
const DEFAULT_UNIT_MAP = {
|
|
5
5
|
text: {
|
|
@@ -85,76 +85,100 @@ const DEFAULT_UNIT_MAP = {
|
|
|
85
85
|
}
|
|
86
86
|
};
|
|
87
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
|
-
this.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
88
|
+
/**
|
|
89
|
+
* @class
|
|
90
|
+
* @description FontSize Plugin
|
|
91
|
+
* - This plugin enables users to modify the font size of selected text within the editor.
|
|
92
|
+
* - It supports various measurement units (e.g., 'px', 'pt', 'em', 'rem', 'vw', 'vh', '%') and
|
|
93
|
+
* - provides multiple interfaces: dropdown menus, direct input, and optional increment/decrement buttons.
|
|
94
|
+
*/
|
|
95
|
+
class FontSize extends EditorInjector {
|
|
96
|
+
static key = 'fontSize';
|
|
97
|
+
static type = 'input';
|
|
98
|
+
static className = 'se-btn-select se-btn-input se-btn-tool-font-size';
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @constructor
|
|
102
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
103
|
+
* @param {Object} pluginOptions - Configuration options for the FontSize plugin.
|
|
104
|
+
* @param {string=} [pluginOptions.sizeUnit='px'] - The unit for the font size.
|
|
105
|
+
* - Accepted values include: 'px', 'pt', 'em', 'rem', 'vw', 'vh', '%' or 'text'.
|
|
106
|
+
* - If 'text' is used, a text-based font size list is applied.
|
|
107
|
+
* @param {boolean=} [pluginOptions.showDefaultSizeLabel=true] - Determines whether the default size label is displayed in the dropdown menu.
|
|
108
|
+
* @param {boolean=} [pluginOptions.showIncDecControls=false] - When true, displays increase and decrease buttons for font size adjustments.
|
|
109
|
+
* @param {boolean=} [pluginOptions.disableInput=true] - When true, disables the direct font size input box.
|
|
110
|
+
* @param {Object<string, {default: number, inc: number, min: number, max: number, list: Array<number>}>} [pluginOptions.unitMap={}] - Optional object to override or extend the default unit mapping for font sizes.
|
|
111
|
+
*/
|
|
112
|
+
constructor(editor, pluginOptions) {
|
|
113
|
+
super(editor);
|
|
114
|
+
|
|
115
|
+
// create HTML
|
|
116
|
+
this.unitMap = { ...DEFAULT_UNIT_MAP, ...(pluginOptions.unitMap || {}) };
|
|
117
|
+
this.sizeUnit = /text/.test(pluginOptions.sizeUnit) ? '' : pluginOptions.sizeUnit || this.options.get('fontSizeUnits')[0];
|
|
118
|
+
|
|
119
|
+
const unitMap = this.unitMap[this.sizeUnit || 'text'];
|
|
120
|
+
const menu = CreateHTML(editor, unitMap, this.sizeUnit, pluginOptions.showDefaultSizeLabel);
|
|
121
|
+
|
|
122
|
+
// plugin basic properties
|
|
123
|
+
const showIncDec = this.sizeUnit ? pluginOptions.showIncDecControls ?? false : false;
|
|
124
|
+
const disableInput = this.sizeUnit ? pluginOptions.disableInput ?? false : true;
|
|
125
|
+
|
|
126
|
+
this.title = this.lang.fontSize;
|
|
127
|
+
this.inner =
|
|
128
|
+
disableInput && !showIncDec
|
|
129
|
+
? false
|
|
130
|
+
: disableInput
|
|
131
|
+
? `<span class="se-txt se-not-arrow-text __se__font_size">${this.lang.fontSize}</span>`
|
|
132
|
+
: `<input type="text" class="__se__font_size se-not-arrow-text" placeholder="${this.lang.fontSize}" />`;
|
|
133
|
+
|
|
134
|
+
// increase, decrease buttons
|
|
135
|
+
if (showIncDec) {
|
|
136
|
+
this.beforeItem = dom.utils.createElement(
|
|
137
|
+
'button',
|
|
138
|
+
{ class: 'se-btn se-tooltip se-sub-btn', 'data-command': FontSize.key, 'data-type': 'command', 'data-value': 'dec' },
|
|
139
|
+
`${this.icons.minus}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.decrease}</span></span>`
|
|
140
|
+
);
|
|
141
|
+
this.afterItem = dom.utils.createElement(
|
|
142
|
+
'button',
|
|
143
|
+
{ class: 'se-btn se-tooltip se-sub-btn', 'data-command': FontSize.key, 'data-type': 'command', 'data-value': 'inc' },
|
|
144
|
+
`${this.icons.plus}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.increase}</span></span>`
|
|
145
|
+
);
|
|
146
|
+
} else if (!disableInput) {
|
|
147
|
+
this.afterItem = dom.utils.createElement(
|
|
148
|
+
'button',
|
|
149
|
+
{ class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': FontSize.key, 'data-type': 'dropdown' },
|
|
150
|
+
`${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.fontSize}</span></span>`
|
|
151
|
+
);
|
|
152
|
+
this.menu.initDropdownTarget({ key: FontSize.key, type: 'dropdown' }, menu);
|
|
153
|
+
} else if (disableInput && !showIncDec) {
|
|
154
|
+
this.replaceButton = dom.utils.createElement(
|
|
155
|
+
'button',
|
|
156
|
+
{ class: 'se-btn se-tooltip se-btn-select se-btn-tool-font-size', 'data-command': FontSize.key, 'data-type': 'dropdown' },
|
|
157
|
+
`<span class="se-txt __se__font_size">${this.lang.fontSize}</span>${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.fontSize}</span></span>`
|
|
158
|
+
);
|
|
159
|
+
this.menu.initDropdownTarget({ key: FontSize.key, type: 'dropdown' }, menu);
|
|
160
|
+
}
|
|
137
161
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
162
|
+
// members
|
|
163
|
+
this.currentSize = '';
|
|
164
|
+
this.sizeList = menu.querySelectorAll('li button');
|
|
165
|
+
this.hasInputFocus = false;
|
|
166
|
+
this.isInputActive = false; // input target event
|
|
167
|
+
this._disableInput = disableInput;
|
|
144
168
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
169
|
+
// init
|
|
170
|
+
this.menu.initDropdownTarget(FontSize, menu);
|
|
171
|
+
}
|
|
148
172
|
|
|
149
|
-
FontSize.key = 'fontSize';
|
|
150
|
-
FontSize.type = 'input';
|
|
151
|
-
FontSize.className = 'se-btn-select se-btn-input se-btn-tool-font-size';
|
|
152
|
-
FontSize.prototype = {
|
|
153
173
|
/**
|
|
154
|
-
* @
|
|
174
|
+
* @editorMethod Editor.EventManager
|
|
175
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
176
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
177
|
+
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
178
|
+
* @returns {boolean} - Whether the plugin is active
|
|
155
179
|
*/
|
|
156
180
|
active(element, target) {
|
|
157
|
-
if (!
|
|
181
|
+
if (!dom.utils.hasClass(target, '__se__font_size')) return false;
|
|
158
182
|
|
|
159
183
|
if (!element) {
|
|
160
184
|
this._setSize(target, this._getDefaultSize());
|
|
@@ -164,15 +188,19 @@ FontSize.prototype = {
|
|
|
164
188
|
}
|
|
165
189
|
|
|
166
190
|
return false;
|
|
167
|
-
}
|
|
191
|
+
}
|
|
168
192
|
|
|
169
193
|
/**
|
|
170
|
-
* @
|
|
194
|
+
* @editorMethod Editor.Toolbar
|
|
195
|
+
* @description Executes the event function of toolbar's input tag - "keydown".
|
|
196
|
+
* @param {Object} params
|
|
197
|
+
* @param {HTMLElement} params.target Input element
|
|
198
|
+
* @param {KeyboardEvent} params.event Event object
|
|
171
199
|
*/
|
|
172
200
|
onInputKeyDown({ target, event }) {
|
|
173
|
-
const keyCode = event.
|
|
201
|
+
const keyCode = event.code;
|
|
174
202
|
|
|
175
|
-
if (this._disableInput || keyCode
|
|
203
|
+
if (this._disableInput || keyCodeMap.isSpace(keyCode)) {
|
|
176
204
|
event.preventDefault();
|
|
177
205
|
return;
|
|
178
206
|
}
|
|
@@ -182,16 +210,17 @@ FontSize.prototype = {
|
|
|
182
210
|
const { value, unit } = this._getSize(target);
|
|
183
211
|
if (!value) return;
|
|
184
212
|
|
|
213
|
+
const numValue = numbers.get(value);
|
|
185
214
|
const unitMap = this.unitMap[unit];
|
|
186
|
-
let changeValue =
|
|
215
|
+
let changeValue = numValue;
|
|
187
216
|
switch (keyCode) {
|
|
188
|
-
case
|
|
217
|
+
case 'ArrowUp': //up
|
|
189
218
|
changeValue += unitMap.inc;
|
|
190
|
-
if (changeValue > unitMap.max) changeValue =
|
|
219
|
+
if (changeValue > unitMap.max) changeValue = numValue;
|
|
191
220
|
break;
|
|
192
|
-
case
|
|
221
|
+
case 'ArrowDown': //down
|
|
193
222
|
changeValue -= unitMap.inc;
|
|
194
|
-
if (changeValue < unitMap.min) changeValue =
|
|
223
|
+
if (changeValue < unitMap.min) changeValue = numValue;
|
|
195
224
|
}
|
|
196
225
|
|
|
197
226
|
event.preventDefault();
|
|
@@ -201,17 +230,19 @@ FontSize.prototype = {
|
|
|
201
230
|
const size = this._setSize(target, changeValue + unit);
|
|
202
231
|
if (this._disableInput) return;
|
|
203
232
|
|
|
204
|
-
const newNode =
|
|
205
|
-
this.format.
|
|
233
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + size + ';' });
|
|
234
|
+
this.format.applyInlineElement(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
206
235
|
|
|
207
|
-
if (keyCode
|
|
236
|
+
if (!keyCodeMap.isEnter(keyCode)) target.focus();
|
|
208
237
|
} finally {
|
|
209
238
|
this.isInputActive = false;
|
|
210
239
|
}
|
|
211
|
-
}
|
|
240
|
+
}
|
|
212
241
|
|
|
213
242
|
/**
|
|
214
|
-
* @
|
|
243
|
+
* @editorMethod Editor.Toolbar
|
|
244
|
+
* @description Executes the event function of toolbar's input tag - "change".
|
|
245
|
+
* @param {__se__PluginToolbarInputChangeEventInfo} params
|
|
215
246
|
*/
|
|
216
247
|
onInputChange({ target, value: changeValue, event }) {
|
|
217
248
|
if (this._disableInput) return;
|
|
@@ -224,17 +255,19 @@ FontSize.prototype = {
|
|
|
224
255
|
const { max, min } = this.unitMap[unit];
|
|
225
256
|
value = value > max ? max : value < min ? min : value;
|
|
226
257
|
|
|
227
|
-
const newNode =
|
|
228
|
-
this.format.
|
|
258
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + this._setSize(target, value + unit) + ';' });
|
|
259
|
+
this.format.applyInlineElement(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
229
260
|
} finally {
|
|
230
261
|
this.isInputActive = false;
|
|
231
262
|
event.preventDefault();
|
|
232
263
|
this.editor.focus();
|
|
233
264
|
}
|
|
234
|
-
}
|
|
265
|
+
}
|
|
235
266
|
|
|
236
267
|
/**
|
|
237
|
-
* @
|
|
268
|
+
* @editorMethod Modules.Dropdown
|
|
269
|
+
* @description Executes the method that is called when a plugin's dropdown menu is opened.
|
|
270
|
+
* @param {HTMLElement} target Line element at the current cursor position
|
|
238
271
|
*/
|
|
239
272
|
on(target) {
|
|
240
273
|
const { value, unit } = this._getSize(target);
|
|
@@ -245,44 +278,59 @@ FontSize.prototype = {
|
|
|
245
278
|
const sizeList = this.sizeList;
|
|
246
279
|
for (let i = 0, len = sizeList.length; i < len; i++) {
|
|
247
280
|
if (currentSize === sizeList[i].getAttribute('data-value')) {
|
|
248
|
-
|
|
281
|
+
dom.utils.addClass(sizeList[i], 'active');
|
|
249
282
|
} else {
|
|
250
|
-
|
|
283
|
+
dom.utils.removeClass(sizeList[i], 'active');
|
|
251
284
|
}
|
|
252
285
|
}
|
|
253
286
|
|
|
254
287
|
this.currentSize = currentSize;
|
|
255
|
-
}
|
|
288
|
+
}
|
|
256
289
|
|
|
257
290
|
/**
|
|
258
|
-
* @
|
|
259
|
-
* @
|
|
291
|
+
* @editorMethod Editor.core
|
|
292
|
+
* @description Executes the main execution method of the plugin.
|
|
293
|
+
* - Called when an item in the "dropdown" menu is clicked.
|
|
294
|
+
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
260
295
|
*/
|
|
261
296
|
action(target) {
|
|
262
297
|
const commandValue = target.getAttribute('data-command');
|
|
263
298
|
|
|
264
299
|
if (commandValue === FontSize.key) {
|
|
265
300
|
const { value, unit } = this._getSize(target);
|
|
266
|
-
let newSize = value + (target.getAttribute('data-value') === 'inc' ? 1 : -1);
|
|
301
|
+
let newSize = numbers.get(value) + (target.getAttribute('data-value') === 'inc' ? 1 : -1);
|
|
267
302
|
const { min, max } = this.unitMap[unit];
|
|
268
303
|
newSize = newSize < min ? min : newSize > max ? max : newSize;
|
|
269
304
|
|
|
270
|
-
const newNode =
|
|
271
|
-
this.format.
|
|
305
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + newSize + unit + ';' });
|
|
306
|
+
this.format.applyInlineElement(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
272
307
|
} else if (commandValue) {
|
|
273
|
-
const newNode =
|
|
274
|
-
this.format.
|
|
308
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + commandValue + ';' });
|
|
309
|
+
this.format.applyInlineElement(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
275
310
|
} else {
|
|
276
|
-
this.format.
|
|
311
|
+
this.format.applyInlineElement(null, { stylesToModify: ['font-size'], nodesToRemove: ['span'], strictRemove: true });
|
|
277
312
|
}
|
|
278
313
|
|
|
279
314
|
this.menu.dropdownOff();
|
|
280
|
-
}
|
|
315
|
+
}
|
|
281
316
|
|
|
317
|
+
/**
|
|
318
|
+
* @private
|
|
319
|
+
* @description Retrieves the default font size of the editor.
|
|
320
|
+
* @returns {string} - The computed font size from the editor.
|
|
321
|
+
*/
|
|
282
322
|
_getDefaultSize() {
|
|
283
323
|
return this.editor.frameContext.get('wwComputedStyle').fontSize;
|
|
284
|
-
}
|
|
324
|
+
}
|
|
285
325
|
|
|
326
|
+
/**
|
|
327
|
+
* @private
|
|
328
|
+
* @description Extracts the font size and unit from the given element or input value.
|
|
329
|
+
* @param {string|Element} target - The target input or element.
|
|
330
|
+
* @returns {{ unit: string, value: number|string }} - An object containing:
|
|
331
|
+
* - `unit` (string): The detected font size unit.
|
|
332
|
+
* - `value` (number|string): The numeric font size value or text-based size.
|
|
333
|
+
*/
|
|
286
334
|
_getSize(target) {
|
|
287
335
|
target = typeof target === 'string' ? target : target.parentElement.querySelector('.__se__font_size');
|
|
288
336
|
if (!target)
|
|
@@ -291,34 +339,39 @@ FontSize.prototype = {
|
|
|
291
339
|
value: this.sizeUnit ? 0 : ''
|
|
292
340
|
};
|
|
293
341
|
|
|
294
|
-
const size = typeof target === 'string' ? target :
|
|
342
|
+
const size = typeof target === 'string' ? target : dom.check.isInputElement(target) ? target.value : target.textContent;
|
|
295
343
|
const splitValue = this.sizeUnit ? size.split(/(\d+)/) : [size, ''];
|
|
296
344
|
|
|
297
345
|
let unit = (splitValue.pop() || '').trim().toLowerCase();
|
|
298
346
|
unit = this.options.get('fontSizeUnits').includes(unit) ? unit : this.sizeUnit;
|
|
299
347
|
|
|
300
|
-
|
|
301
|
-
value = unit ?
|
|
348
|
+
const tempValue = splitValue.pop();
|
|
349
|
+
const value = unit ? Number(tempValue) : tempValue;
|
|
302
350
|
|
|
303
351
|
return {
|
|
304
352
|
unit,
|
|
305
353
|
value
|
|
306
354
|
};
|
|
307
|
-
}
|
|
355
|
+
}
|
|
308
356
|
|
|
357
|
+
/**
|
|
358
|
+
* @private
|
|
359
|
+
* @description Sets the font size in the toolbar input field or button label.
|
|
360
|
+
* @param {HTMLElement} target - The target element in the toolbar.
|
|
361
|
+
* @param {string|number} value - The font size value.
|
|
362
|
+
* @returns {string|number} - The applied font size.
|
|
363
|
+
*/
|
|
309
364
|
_setSize(target, value) {
|
|
310
365
|
target = target.parentElement.querySelector('.__se__font_size');
|
|
311
366
|
if (!target) return 0;
|
|
312
367
|
|
|
313
|
-
if (
|
|
314
|
-
return (target.value = value);
|
|
368
|
+
if (dom.check.isInputElement(target)) {
|
|
369
|
+
return (target.value = String(value));
|
|
315
370
|
} else {
|
|
316
|
-
return (target.textContent = this.sizeUnit ? value : this.unitMap.text.list.find((v) => v.size === value)?.title || value);
|
|
371
|
+
return (target.textContent = String(this.sizeUnit ? value : this.unitMap.text.list.find((v) => v.size === value)?.title || value));
|
|
317
372
|
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
constructor: FontSize
|
|
321
|
-
};
|
|
373
|
+
}
|
|
374
|
+
}
|
|
322
375
|
|
|
323
376
|
function CreateHTML({ lang }, unitMap, sizeUnit, showDefaultSizeLabel) {
|
|
324
377
|
const sizeList = unitMap.list;
|
|
@@ -351,7 +404,7 @@ function CreateHTML({ lang }, unitMap, sizeUnit, showDefaultSizeLabel) {
|
|
|
351
404
|
</ul>
|
|
352
405
|
</div>`;
|
|
353
406
|
|
|
354
|
-
return
|
|
407
|
+
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer se-list-font-size' }, list);
|
|
355
408
|
}
|
|
356
409
|
|
|
357
410
|
export default FontSize;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import EditorInjector from '../../editorInjector';
|
|
2
|
+
import { dom } from '../../helper';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
* @description PageNavigator Plugin
|
|
7
|
+
* - This plugin provides functionality for navigating between pages within the editor's document.
|
|
8
|
+
* - It features an input field for entering the desired page number and a display element showing
|
|
9
|
+
* - the total number of pages. When the user changes the value in the input field, the plugin triggers
|
|
10
|
+
* - a page navigation event through the editor's document context.
|
|
11
|
+
*/
|
|
12
|
+
class PageNavigator extends EditorInjector {
|
|
13
|
+
static key = 'pageNavigator';
|
|
14
|
+
static type = 'input';
|
|
15
|
+
static className = 'se-btn-input se-btn-tool-pageNavigator';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @constructor
|
|
19
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
20
|
+
*/
|
|
21
|
+
constructor(editor) {
|
|
22
|
+
super(editor);
|
|
23
|
+
|
|
24
|
+
// create HTML
|
|
25
|
+
this.title = this.lang.pageNumber;
|
|
26
|
+
this.inner = CreateInner();
|
|
27
|
+
this.afterItem = dom.utils.createElement('span', { class: 'se-btn se-sub-btn' }, ``);
|
|
28
|
+
|
|
29
|
+
// members
|
|
30
|
+
this.pageNum = 1;
|
|
31
|
+
this.totalPages = 1;
|
|
32
|
+
|
|
33
|
+
// init
|
|
34
|
+
this.eventManager.addEvent(this.inner, 'change', this.#OnChangeInner.bind(this));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @editorMethod Editor.documentType
|
|
38
|
+
* @description Updates the displayed page number and total pages in the navigator.
|
|
39
|
+
* @param {number} pageNum - The current page number to display.
|
|
40
|
+
* @param {number} totalPages - The total number of pages in the document.
|
|
41
|
+
*/
|
|
42
|
+
display(pageNum, totalPages) {
|
|
43
|
+
// data update
|
|
44
|
+
this.pageNum = pageNum;
|
|
45
|
+
this.totalPages = totalPages;
|
|
46
|
+
// display
|
|
47
|
+
this.inner.value = String(pageNum);
|
|
48
|
+
this.afterItem.textContent = this.inner.max = String(totalPages);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @description Page number change event handler
|
|
53
|
+
* @param {InputEvent} e - Event object
|
|
54
|
+
*/
|
|
55
|
+
#OnChangeInner(e) {
|
|
56
|
+
if (!this.editor.frameContext.has('documentType-use-page')) return;
|
|
57
|
+
|
|
58
|
+
/** @type {HTMLInputElement} */
|
|
59
|
+
const eventTarget = dom.query.getEventTarget(e);
|
|
60
|
+
|
|
61
|
+
const value = Number(eventTarget.value) || 1;
|
|
62
|
+
this.editor.frameContext.get('documentType').pageGo(value);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function CreateInner() {
|
|
67
|
+
return /** @type {HTMLInputElement} */ (dom.utils.createElement('input', { type: 'number', class: 'se-not-arrow-text', placeholder: '1', value: '1', min: '1' }, null));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default PageNavigator;
|