suneditor 3.0.0-alpha.9 → 3.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +170 -22
- package/{LICENSE.txt → LICENSE} +9 -9
- package/README.md +168 -30
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +47 -21
- package/src/assets/design/color.css +121 -0
- package/src/assets/design/index.css +3 -0
- package/src/assets/design/size.css +35 -0
- package/src/assets/design/typography.css +37 -0
- package/src/assets/icons/defaultIcons.js +232 -0
- package/src/assets/suneditor-contents.css +181 -46
- package/src/assets/suneditor.css +1403 -650
- package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
- package/src/core/base/eventHandlers/handler_ww_clipboard.js +23 -4
- package/src/core/base/eventHandlers/handler_ww_dragDrop.js +49 -10
- package/src/core/base/eventHandlers/handler_ww_key_input.js +422 -224
- package/src/core/base/eventHandlers/handler_ww_mouse.js +83 -36
- package/src/core/base/eventManager.js +520 -179
- package/src/core/base/history.js +95 -41
- package/src/core/class/char.js +26 -11
- package/src/core/class/component.js +345 -137
- package/src/core/class/format.js +683 -519
- package/src/core/class/html.js +485 -305
- package/src/core/class/menu.js +133 -47
- package/src/core/class/nodeTransform.js +90 -71
- package/src/core/class/offset.js +408 -92
- package/src/core/class/selection.js +216 -106
- package/src/core/class/shortcuts.js +68 -8
- package/src/core/class/toolbar.js +106 -116
- package/src/core/class/ui.js +422 -0
- package/src/core/class/viewer.js +178 -74
- package/src/core/editor.js +496 -389
- package/src/core/section/actives.js +123 -27
- package/src/core/section/constructor.js +615 -206
- package/src/core/section/context.js +28 -23
- package/src/core/section/documentType.js +561 -0
- package/src/editorInjector/_classes.js +19 -5
- package/src/editorInjector/_core.js +71 -7
- package/src/editorInjector/index.js +63 -1
- package/src/events.js +622 -0
- package/src/helper/clipboard.js +59 -0
- package/src/helper/converter.js +202 -26
- package/src/helper/dom/domCheck.js +304 -0
- package/src/helper/dom/domQuery.js +669 -0
- package/src/helper/dom/domUtils.js +557 -0
- package/src/helper/dom/index.js +12 -0
- package/src/helper/env.js +46 -56
- package/src/helper/index.js +10 -4
- package/src/helper/keyCodeMap.js +183 -0
- package/src/helper/numbers.js +12 -8
- package/src/helper/unicode.js +9 -5
- package/src/langs/ckb.js +74 -4
- package/src/langs/cs.js +72 -2
- package/src/langs/da.js +73 -3
- package/src/langs/de.js +73 -4
- package/src/langs/en.js +23 -3
- package/src/langs/es.js +73 -4
- package/src/langs/fa.js +75 -3
- package/src/langs/fr.js +73 -3
- package/src/langs/he.js +73 -4
- package/src/langs/hu.js +230 -0
- package/src/langs/index.js +7 -3
- package/src/langs/it.js +70 -1
- package/src/langs/ja.js +72 -4
- package/src/langs/km.js +230 -0
- package/src/langs/ko.js +22 -2
- package/src/langs/lv.js +74 -5
- package/src/langs/nl.js +73 -4
- package/src/langs/pl.js +73 -4
- package/src/langs/pt_br.js +70 -1
- package/src/langs/ro.js +74 -5
- package/src/langs/ru.js +73 -4
- package/src/langs/se.js +73 -4
- package/src/langs/tr.js +73 -1
- package/src/langs/{ua.js → uk.js} +75 -6
- package/src/langs/ur.js +77 -8
- package/src/langs/zh_cn.js +74 -5
- package/src/modules/ApiManager.js +77 -54
- package/src/modules/Browser.js +667 -0
- package/src/modules/ColorPicker.js +162 -102
- package/src/modules/Controller.js +273 -142
- package/src/modules/Figure.js +925 -484
- package/src/modules/FileManager.js +121 -69
- package/src/modules/HueSlider.js +113 -61
- package/src/modules/Modal.js +291 -122
- package/src/modules/ModalAnchorEditor.js +383 -234
- package/src/modules/SelectMenu.js +270 -168
- package/src/modules/_DragHandle.js +2 -1
- package/src/modules/index.js +3 -3
- package/src/plugins/browser/audioGallery.js +83 -0
- package/src/plugins/browser/fileBrowser.js +103 -0
- package/src/plugins/browser/fileGallery.js +83 -0
- package/src/plugins/browser/imageGallery.js +81 -0
- package/src/plugins/browser/videoGallery.js +103 -0
- package/src/plugins/command/blockquote.js +40 -27
- package/src/plugins/command/exportPDF.js +134 -0
- package/src/plugins/command/fileUpload.js +229 -162
- package/src/plugins/command/list_bulleted.js +83 -47
- package/src/plugins/command/list_numbered.js +83 -47
- package/src/plugins/dropdown/align.js +66 -54
- package/src/plugins/dropdown/backgroundColor.js +63 -49
- package/src/plugins/dropdown/font.js +71 -47
- package/src/plugins/dropdown/fontColor.js +63 -48
- package/src/plugins/dropdown/formatBlock.js +70 -33
- package/src/plugins/dropdown/hr.js +92 -51
- package/src/plugins/dropdown/layout.js +37 -26
- package/src/plugins/dropdown/lineHeight.js +54 -38
- package/src/plugins/dropdown/list.js +60 -45
- package/src/plugins/dropdown/paragraphStyle.js +51 -30
- package/src/plugins/dropdown/table.js +2003 -813
- package/src/plugins/dropdown/template.js +38 -26
- package/src/plugins/dropdown/textStyle.js +43 -31
- package/src/plugins/field/mention.js +147 -86
- package/src/plugins/index.js +32 -6
- package/src/plugins/input/fontSize.js +161 -108
- package/src/plugins/input/pageNavigator.js +70 -0
- package/src/plugins/modal/audio.js +358 -173
- package/src/plugins/modal/drawing.js +531 -0
- package/src/plugins/modal/embed.js +886 -0
- package/src/plugins/modal/image.js +674 -362
- package/src/plugins/modal/link.js +100 -71
- package/src/plugins/modal/math.js +367 -167
- package/src/plugins/modal/video.js +691 -335
- package/src/plugins/popup/anchor.js +222 -0
- package/src/suneditor.js +50 -13
- package/src/themes/dark.css +122 -0
- package/src/typedef.js +130 -0
- package/types/assets/icons/defaultIcons.d.ts +153 -0
- package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
- package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
- package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
- package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
- package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
- package/types/core/base/eventManager.d.ts +385 -0
- package/types/core/base/history.d.ts +81 -0
- package/types/core/class/char.d.ts +60 -0
- package/types/core/class/component.d.ts +212 -0
- package/types/core/class/format.d.ts +616 -0
- package/types/core/class/html.d.ts +422 -0
- package/types/core/class/menu.d.ts +126 -0
- package/types/core/class/nodeTransform.d.ts +93 -0
- package/types/core/class/offset.d.ts +522 -0
- package/types/core/class/selection.d.ts +188 -0
- package/types/core/class/shortcuts.d.ts +142 -0
- package/types/core/class/toolbar.d.ts +189 -0
- package/types/core/class/ui.d.ts +164 -0
- package/types/core/class/viewer.d.ts +140 -0
- package/types/core/editor.d.ts +610 -0
- package/types/core/section/actives.d.ts +46 -0
- package/types/core/section/constructor.d.ts +777 -0
- package/types/core/section/context.d.ts +45 -0
- package/types/core/section/documentType.d.ts +178 -0
- package/types/editorInjector/_classes.d.ts +41 -0
- package/types/editorInjector/_core.d.ts +92 -0
- package/types/editorInjector/index.d.ts +71 -0
- package/types/events.d.ts +273 -0
- package/types/helper/clipboard.d.ts +12 -0
- package/types/helper/converter.d.ts +197 -0
- package/types/helper/dom/domCheck.d.ts +189 -0
- package/types/helper/dom/domQuery.d.ts +223 -0
- package/types/helper/dom/domUtils.d.ts +226 -0
- package/types/helper/dom/index.d.ts +9 -0
- package/types/helper/env.d.ts +132 -0
- package/types/helper/index.d.ts +174 -0
- package/types/helper/keyCodeMap.d.ts +110 -0
- package/types/helper/numbers.d.ts +46 -0
- package/types/helper/unicode.d.ts +28 -0
- package/types/index.d.ts +120 -0
- package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +173 -103
- package/types/langs/ckb.d.ts +3 -0
- package/types/langs/cs.d.ts +3 -0
- package/types/langs/da.d.ts +3 -0
- package/types/langs/de.d.ts +3 -0
- package/types/langs/en.d.ts +3 -0
- package/types/langs/es.d.ts +3 -0
- package/types/langs/fa.d.ts +3 -0
- package/types/langs/fr.d.ts +3 -0
- package/types/langs/he.d.ts +3 -0
- package/types/langs/hu.d.ts +3 -0
- package/types/langs/index.d.ts +54 -0
- package/types/langs/it.d.ts +3 -0
- package/types/langs/ja.d.ts +3 -0
- package/types/langs/km.d.ts +3 -0
- package/types/langs/ko.d.ts +3 -0
- package/types/langs/lv.d.ts +3 -0
- package/types/langs/nl.d.ts +3 -0
- package/types/langs/pl.d.ts +3 -0
- package/types/langs/pt_br.d.ts +3 -0
- package/types/langs/ro.d.ts +3 -0
- package/types/langs/ru.d.ts +3 -0
- package/types/langs/se.d.ts +3 -0
- package/types/langs/tr.d.ts +3 -0
- package/types/langs/uk.d.ts +3 -0
- package/types/langs/ur.d.ts +3 -0
- package/types/langs/zh_cn.d.ts +3 -0
- package/types/modules/ApiManager.d.ts +125 -0
- package/types/modules/Browser.d.ts +326 -0
- package/types/modules/ColorPicker.d.ts +131 -0
- package/types/modules/Controller.d.ts +251 -0
- package/types/modules/Figure.d.ts +517 -0
- package/types/modules/FileManager.d.ts +202 -0
- package/types/modules/HueSlider.d.ts +136 -0
- package/types/modules/Modal.d.ts +111 -0
- package/types/modules/ModalAnchorEditor.d.ts +236 -0
- package/types/modules/SelectMenu.d.ts +194 -0
- package/types/modules/_DragHandle.d.ts +7 -0
- package/types/modules/index.d.ts +26 -0
- package/types/plugins/browser/audioGallery.d.ts +55 -0
- package/types/plugins/browser/fileBrowser.d.ts +64 -0
- package/types/plugins/browser/fileGallery.d.ts +55 -0
- package/types/plugins/browser/imageGallery.d.ts +51 -0
- package/types/plugins/browser/videoGallery.d.ts +57 -0
- package/types/plugins/command/blockquote.d.ts +28 -0
- package/types/plugins/command/exportPDF.d.ts +46 -0
- package/types/plugins/command/fileUpload.d.ts +156 -0
- package/types/plugins/command/list_bulleted.d.ts +46 -0
- package/types/plugins/command/list_numbered.d.ts +46 -0
- package/types/plugins/dropdown/align.d.ts +60 -0
- package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
- package/types/plugins/dropdown/font.d.ts +54 -0
- package/types/plugins/dropdown/fontColor.d.ts +63 -0
- package/types/plugins/dropdown/formatBlock.d.ts +54 -0
- package/types/plugins/dropdown/hr.d.ts +71 -0
- package/types/plugins/dropdown/layout.d.ts +40 -0
- package/types/plugins/dropdown/lineHeight.d.ts +50 -0
- package/types/plugins/dropdown/list.d.ts +39 -0
- package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
- package/types/plugins/dropdown/table.d.ts +627 -0
- package/types/plugins/dropdown/template.d.ts +40 -0
- package/types/plugins/dropdown/textStyle.d.ts +41 -0
- package/types/plugins/field/mention.d.ts +102 -0
- package/types/plugins/index.d.ts +107 -0
- package/types/plugins/input/fontSize.d.ts +170 -0
- package/types/plugins/input/pageNavigator.d.ts +28 -0
- package/types/plugins/modal/audio.d.ts +269 -0
- package/types/plugins/modal/drawing.d.ts +246 -0
- package/types/plugins/modal/embed.d.ts +387 -0
- package/types/plugins/modal/image.d.ts +451 -0
- package/types/plugins/modal/link.d.ts +128 -0
- package/types/plugins/modal/math.d.ts +193 -0
- package/types/plugins/modal/video.d.ts +485 -0
- package/types/plugins/popup/anchor.d.ts +56 -0
- package/types/suneditor.d.ts +51 -0
- package/types/typedef.d.ts +233 -0
- package/.eslintignore +0 -7
- package/.eslintrc.json +0 -64
- package/src/assets/icons/_default.js +0 -194
- package/src/core/base/events.js +0 -320
- package/src/core/class/notice.js +0 -42
- package/src/helper/domUtils.js +0 -1177
- package/src/modules/FileBrowser.js +0 -271
- package/src/plugins/command/exportPdf.js +0 -168
- package/src/plugins/fileBrowser/imageGallery.js +0 -81
- package/src/themes/test.css +0 -61
- package/typings/CommandPlugin.d.ts +0 -8
- package/typings/DialogPlugin.d.ts +0 -20
- package/typings/FileBrowserPlugin.d.ts +0 -30
- package/typings/Module.d.ts +0 -15
- package/typings/Plugin.d.ts +0 -42
- package/typings/SubmenuPlugin.d.ts +0 -8
- package/typings/_classes.d.ts +0 -17
- package/typings/_colorPicker.d.ts +0 -60
- package/typings/_core.d.ts +0 -55
- package/typings/align.d.ts +0 -5
- package/typings/audio.d.ts +0 -5
- package/typings/backgroundColor.d.ts +0 -5
- package/typings/blockquote.d.ts +0 -5
- package/typings/char.d.ts +0 -39
- package/typings/component.d.ts +0 -38
- package/typings/context.d.ts +0 -39
- package/typings/converter.d.ts +0 -33
- package/typings/dialog.d.ts +0 -28
- package/typings/domUtils.d.ts +0 -361
- package/typings/editor.d.ts +0 -7
- package/typings/editor.ts +0 -542
- package/typings/env.d.ts +0 -70
- package/typings/eventManager.d.ts +0 -37
- package/typings/events.d.ts +0 -262
- package/typings/fileBrowser.d.ts +0 -42
- package/typings/fileManager.d.ts +0 -67
- package/typings/font.d.ts +0 -5
- package/typings/fontColor.d.ts +0 -5
- package/typings/fontSize.d.ts +0 -5
- package/typings/format.d.ts +0 -191
- package/typings/formatBlock.d.ts +0 -5
- package/typings/history.d.ts +0 -48
- package/typings/horizontalRule.d.ts +0 -5
- package/typings/image.d.ts +0 -5
- package/typings/imageGallery.d.ts +0 -5
- package/typings/index.d.ts +0 -21
- package/typings/index.modules.d.ts +0 -11
- package/typings/index.plugins.d.ts +0 -58
- package/typings/lineHeight.d.ts +0 -5
- package/typings/link.d.ts +0 -5
- package/typings/list.d.ts +0 -5
- package/typings/math.d.ts +0 -5
- package/typings/mediaContainer.d.ts +0 -25
- package/typings/mention.d.ts +0 -5
- package/typings/node.d.ts +0 -57
- package/typings/notice.d.ts +0 -16
- package/typings/numbers.d.ts +0 -29
- package/typings/offset.d.ts +0 -24
- package/typings/options.d.ts +0 -589
- package/typings/paragraphStyle.d.ts +0 -5
- package/typings/resizing.d.ts +0 -141
- package/typings/selection.d.ts +0 -94
- package/typings/shortcuts.d.ts +0 -13
- package/typings/suneditor.d.ts +0 -9
- package/typings/table.d.ts +0 -5
- package/typings/template.d.ts +0 -5
- package/typings/textStyle.d.ts +0 -5
- package/typings/toolbar.d.ts +0 -32
- package/typings/unicode.d.ts +0 -25
- package/typings/video.d.ts +0 -5
package/src/core/base/history.js
CHANGED
|
@@ -3,17 +3,23 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { _w } from '../../helper/env';
|
|
6
|
-
import { getNodeFromPath, getNodePath } from '../../helper/
|
|
6
|
+
import { getNodeFromPath, getNodePath } from '../../helper/dom/domQuery';
|
|
7
7
|
import { numbers } from '../../helper';
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* @description History stack closure
|
|
11
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
12
|
+
*/
|
|
13
|
+
export default function History(editor) {
|
|
10
14
|
const frameRoots = editor.frameRoots;
|
|
11
15
|
let delayTime = editor.options.get('historyStackDelayTime');
|
|
12
16
|
let pushDelay = null;
|
|
13
17
|
let stackIndex, stack, rootStack, rootInitContents;
|
|
18
|
+
let waiting = false;
|
|
19
|
+
let waitingTime = null;
|
|
14
20
|
|
|
15
|
-
function change(fc, index) {
|
|
16
|
-
if (editor.status.hasFocus) editor.eventManager.applyTagEffect();
|
|
21
|
+
function change(fc, index, isSetFocus) {
|
|
22
|
+
if (isSetFocus && editor.status.hasFocus) editor.eventManager.applyTagEffect();
|
|
17
23
|
editor.history.resetButtons(fc.get('key'), index);
|
|
18
24
|
|
|
19
25
|
// user event
|
|
@@ -25,6 +31,7 @@ export default function (editor) {
|
|
|
25
31
|
function setContentFromStack(increase) {
|
|
26
32
|
const prevKey = stack[stackIndex];
|
|
27
33
|
const prevRoot = rootStack[prevKey];
|
|
34
|
+
const fc = editor.frameContext;
|
|
28
35
|
|
|
29
36
|
stackIndex += increase;
|
|
30
37
|
const rootKey = increase < 0 && prevKey !== stack[stackIndex] && prevRoot.index > 0 ? prevKey : stack[stackIndex];
|
|
@@ -60,13 +67,18 @@ export default function (editor) {
|
|
|
60
67
|
if (stackIndex < 0) stackIndex = 0;
|
|
61
68
|
else if (stackIndex >= stack.length) stackIndex = stack.length - 1;
|
|
62
69
|
|
|
63
|
-
editor._offCurrentController();
|
|
64
|
-
editor._checkComponents();
|
|
70
|
+
editor.ui._offCurrentController();
|
|
71
|
+
editor._checkComponents(false);
|
|
65
72
|
editor.char.display();
|
|
66
|
-
editor._resourcesStateChange(
|
|
73
|
+
editor._resourcesStateChange(fc);
|
|
74
|
+
|
|
75
|
+
// document type
|
|
76
|
+
if (fc.has('documentType-use-header')) {
|
|
77
|
+
fc.get('documentType').reHeader();
|
|
78
|
+
}
|
|
67
79
|
|
|
68
80
|
// onChange
|
|
69
|
-
change(
|
|
81
|
+
change(fc, root.index, true);
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
function setStack(content, range, rootKey, increase) {
|
|
@@ -126,7 +138,7 @@ export default function (editor) {
|
|
|
126
138
|
stack = stack.slice(0, stackIndex + 1);
|
|
127
139
|
root.value.splice(stackIndex + 1);
|
|
128
140
|
editor.applyCommandTargets('redo', (e) => {
|
|
129
|
-
e.
|
|
141
|
+
e.disabled = true;
|
|
130
142
|
});
|
|
131
143
|
|
|
132
144
|
for (let i = 0, len = deleteRoot.length; i < len; i++) {
|
|
@@ -135,7 +147,7 @@ export default function (editor) {
|
|
|
135
147
|
}
|
|
136
148
|
|
|
137
149
|
function pushStack(rootKey, range) {
|
|
138
|
-
editor._checkComponents();
|
|
150
|
+
editor._checkComponents(false);
|
|
139
151
|
|
|
140
152
|
const fc = frameRoots.get(rootKey);
|
|
141
153
|
const current = fc.get('wysiwyg').innerHTML;
|
|
@@ -148,23 +160,26 @@ export default function (editor) {
|
|
|
148
160
|
|
|
149
161
|
if (stackIndex === 1) {
|
|
150
162
|
editor.applyCommandTargets('undo', (e) => {
|
|
151
|
-
e.
|
|
163
|
+
e.disabled = false;
|
|
152
164
|
});
|
|
153
165
|
}
|
|
154
166
|
|
|
155
167
|
editor.char.display();
|
|
156
|
-
change(fc, root.index);
|
|
168
|
+
change(fc, root.index, false);
|
|
157
169
|
}
|
|
158
170
|
|
|
159
171
|
return {
|
|
160
172
|
/**
|
|
161
173
|
* @description Saving the current status to the history object stack
|
|
162
|
-
* If "delay" is true, it will be saved after (options.get('historyStackDelayTime') || 400)
|
|
163
|
-
* If the function is called again with the "delay" argument true before it is saved, the delay time is
|
|
164
|
-
* You can specify the delay time by sending a number.
|
|
165
|
-
* @param {
|
|
174
|
+
* - If "delay" is true, it will be saved after (options.get('historyStackDelayTime') || 400) milliseconds.
|
|
175
|
+
* - If the function is called again with the "delay" argument true before it is saved, the delay time is renewed.
|
|
176
|
+
* - You can specify the delay time by sending a number.
|
|
177
|
+
* @param {boolean|number} delay If true, add stack without delay time.
|
|
178
|
+
* @param {*=} [rootKey] The key of the root frame to save history for.
|
|
166
179
|
*/
|
|
167
180
|
push(delay, rootKey) {
|
|
181
|
+
if (waiting) return;
|
|
182
|
+
|
|
168
183
|
rootKey = rootKey || editor.status.rootKey;
|
|
169
184
|
const range = editor.status._range;
|
|
170
185
|
|
|
@@ -186,6 +201,11 @@ export default function (editor) {
|
|
|
186
201
|
}, time);
|
|
187
202
|
},
|
|
188
203
|
|
|
204
|
+
/**
|
|
205
|
+
* @description Immediately saves the current state to the history stack if a delayed save is pending.
|
|
206
|
+
* @param {*} rootKey The key of the root frame.
|
|
207
|
+
* @param {Range} range The selection range object.
|
|
208
|
+
*/
|
|
189
209
|
check(rootKey, range) {
|
|
190
210
|
if (pushDelay) {
|
|
191
211
|
_w.clearTimeout(pushDelay);
|
|
@@ -195,7 +215,7 @@ export default function (editor) {
|
|
|
195
215
|
},
|
|
196
216
|
|
|
197
217
|
/**
|
|
198
|
-
* @description Undo function
|
|
218
|
+
* @description Undo function that restores the previous state from the history stack.
|
|
199
219
|
*/
|
|
200
220
|
undo() {
|
|
201
221
|
if (stackIndex > 0) {
|
|
@@ -204,7 +224,7 @@ export default function (editor) {
|
|
|
204
224
|
},
|
|
205
225
|
|
|
206
226
|
/**
|
|
207
|
-
* @description Redo function
|
|
227
|
+
* @description Redo function that re-applies a previously undone state from the history stack.
|
|
208
228
|
*/
|
|
209
229
|
redo() {
|
|
210
230
|
if (stack.length - 1 > stackIndex) {
|
|
@@ -212,24 +232,47 @@ export default function (editor) {
|
|
|
212
232
|
}
|
|
213
233
|
},
|
|
214
234
|
|
|
235
|
+
/**
|
|
236
|
+
* @description Overwrites the current state in the history stack with the latest content.
|
|
237
|
+
* @param {string=} [rootKey] The key of the root frame to overwrite.
|
|
238
|
+
*/
|
|
215
239
|
overwrite(rootKey) {
|
|
216
240
|
setStack(frameRoots.get(rootKey || editor.status.rootKey).get('wysiwyg').innerHTML, null, editor.status.rootKey, 0);
|
|
217
241
|
},
|
|
218
242
|
|
|
219
243
|
/**
|
|
220
|
-
* @description
|
|
244
|
+
* @description Pauses the history stack, preventing new entries from being added for up to 5 seconds.
|
|
221
245
|
*/
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
e.setAttribute('disabled', true);
|
|
225
|
-
});
|
|
226
|
-
editor.applyCommandTargets('redo', (e) => {
|
|
227
|
-
e.setAttribute('disabled', true);
|
|
228
|
-
});
|
|
246
|
+
pause() {
|
|
247
|
+
waiting = true;
|
|
229
248
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
249
|
+
if (waitingTime) {
|
|
250
|
+
_w.clearTimeout(waitingTime);
|
|
251
|
+
waitingTime = null;
|
|
252
|
+
}
|
|
253
|
+
waitingTime = _w.setTimeout(() => {
|
|
254
|
+
waiting = false;
|
|
255
|
+
}, 5000);
|
|
256
|
+
},
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* @description Resumes history tracking by allowing new entries to be added to the stack.
|
|
260
|
+
*/
|
|
261
|
+
resume() {
|
|
262
|
+
if (waitingTime) {
|
|
263
|
+
_w.clearTimeout(waitingTime);
|
|
264
|
+
waitingTime = null;
|
|
265
|
+
}
|
|
266
|
+
waiting = false;
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* @description Resets the history stack and disables related UI buttons.
|
|
271
|
+
*/
|
|
272
|
+
reset() {
|
|
273
|
+
editor.applyCommandTargets('undo', (e) => (e.disabled = true));
|
|
274
|
+
editor.applyCommandTargets('redo', (e) => (e.disabled = true));
|
|
275
|
+
editor.applyCommandTargets('save', (e) => (e.disabled = true));
|
|
233
276
|
|
|
234
277
|
editor.applyFrameRoots((e) => e.set('historyIndex', -1));
|
|
235
278
|
editor.applyFrameRoots((e) => e.set('isChanged', false));
|
|
@@ -238,6 +281,7 @@ export default function (editor) {
|
|
|
238
281
|
stack = [];
|
|
239
282
|
rootStack = {};
|
|
240
283
|
rootInitContents = {};
|
|
284
|
+
waiting = false;
|
|
241
285
|
|
|
242
286
|
const rootKeys = editor.rootKeys;
|
|
243
287
|
for (let i = 0, len = rootKeys.length; i < len; i++) {
|
|
@@ -246,7 +290,9 @@ export default function (editor) {
|
|
|
246
290
|
},
|
|
247
291
|
|
|
248
292
|
/**
|
|
249
|
-
* @description
|
|
293
|
+
* @description Updates the state of history-related buttons (undo, redo, save) based on the current history stack.
|
|
294
|
+
* @param {*} rootKey The key of the root frame.
|
|
295
|
+
* @param {number} [index] The index of the current history state.
|
|
250
296
|
*/
|
|
251
297
|
resetButtons(rootKey, index) {
|
|
252
298
|
const isReset = !numbers.is(index);
|
|
@@ -256,12 +302,12 @@ export default function (editor) {
|
|
|
256
302
|
const rootLen = root.value.length - 1;
|
|
257
303
|
|
|
258
304
|
editor.applyCommandTargets('undo', (e) => {
|
|
259
|
-
if (index > 0 && index <= rootLen) e.
|
|
260
|
-
else e.
|
|
305
|
+
if (index > 0 && index <= rootLen) e.disabled = false;
|
|
306
|
+
else e.disabled = true;
|
|
261
307
|
});
|
|
262
308
|
editor.applyCommandTargets('redo', (e) => {
|
|
263
|
-
if (index > -1 && index < rootLen) e.
|
|
264
|
-
else e.
|
|
309
|
+
if (index > -1 && index < rootLen) e.disabled = false;
|
|
310
|
+
else e.disabled = true;
|
|
265
311
|
});
|
|
266
312
|
|
|
267
313
|
const savedIndex = target.get('savedIndex');
|
|
@@ -271,27 +317,35 @@ export default function (editor) {
|
|
|
271
317
|
target.set('historyIndex', index);
|
|
272
318
|
target.set('isChanged', isChanged);
|
|
273
319
|
editor.applyCommandTargets('save', (e) => {
|
|
274
|
-
if (isChanged) e.
|
|
275
|
-
else e.
|
|
320
|
+
if (isChanged) e.disabled = false;
|
|
321
|
+
else e.disabled = true;
|
|
276
322
|
});
|
|
277
323
|
|
|
278
324
|
editor.triggerEvent('onResetButtons', { rootKey });
|
|
279
325
|
},
|
|
280
326
|
|
|
327
|
+
/**
|
|
328
|
+
* @description Returns the root stack containing the history of each frame.
|
|
329
|
+
* @returns {{content: string, s: {path: number|number[], offset: number|number[]}, e: {path: number|number[], offset: number|number[]}, frame: HTMLElement}} The root stack object.
|
|
330
|
+
* - content: content html string
|
|
331
|
+
* - s: depth info of the "start" range
|
|
332
|
+
* - e: depth info of the "end" range
|
|
333
|
+
* - frame: wysiwyg editable element.
|
|
334
|
+
*/
|
|
281
335
|
getRootStack() {
|
|
282
336
|
return rootStack;
|
|
283
337
|
},
|
|
284
338
|
|
|
285
339
|
/**
|
|
286
|
-
* @description
|
|
287
|
-
* @param {number} time
|
|
340
|
+
* @description Resets the delay time for saving history.
|
|
341
|
+
* @param {number} ms The new delay time in milliseconds.
|
|
288
342
|
*/
|
|
289
|
-
resetDelayTime(
|
|
290
|
-
delayTime =
|
|
343
|
+
resetDelayTime(ms) {
|
|
344
|
+
delayTime = ms;
|
|
291
345
|
},
|
|
292
346
|
|
|
293
347
|
/**
|
|
294
|
-
* @description
|
|
348
|
+
* @description Clears the entire history stack and cancels any pending save operations.
|
|
295
349
|
*/
|
|
296
350
|
destroy() {
|
|
297
351
|
if (pushDelay) _w.clearTimeout(pushDelay);
|
package/src/core/class/char.js
CHANGED
|
@@ -4,22 +4,33 @@
|
|
|
4
4
|
|
|
5
5
|
import CoreInjector from '../../editorInjector/_core';
|
|
6
6
|
import { _w, isEdge } from '../../helper/env';
|
|
7
|
-
import { addClass, removeClass, hasClass } from '../../helper/domUtils';
|
|
7
|
+
import { addClass, removeClass, hasClass } from '../../helper/dom/domUtils';
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {Omit<Char & Partial<__se__EditorInjector>, 'char'>} CharThis
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @constructor
|
|
15
|
+
* @this {CharThis}
|
|
16
|
+
* @description character count, character limit, etc. management class
|
|
17
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
18
|
+
*/
|
|
19
|
+
function Char(editor) {
|
|
10
20
|
CoreInjector.call(this, editor);
|
|
11
|
-
}
|
|
21
|
+
}
|
|
12
22
|
|
|
13
23
|
Char.prototype = {
|
|
14
24
|
/**
|
|
25
|
+
* @this {CharThis}
|
|
15
26
|
* @description Returns false if char count is greater than "frameOptions.get('charCounter_max')" when "html" is added to the current editor.
|
|
16
|
-
* @param {Node|
|
|
27
|
+
* @param {Node|string} html Element node or String.
|
|
17
28
|
* @returns {boolean}
|
|
18
29
|
*/
|
|
19
30
|
check(html) {
|
|
20
31
|
const maxCharCount = this.editor.frameOptions.get('charCounter_max');
|
|
21
32
|
if (maxCharCount) {
|
|
22
|
-
const length = this.getLength(typeof html === 'string' ? html : this.editor.frameOptions.get('charCounter_type') === 'byte-html' && html.nodeType === 1 ? html.outerHTML : html.textContent);
|
|
33
|
+
const length = this.getLength(typeof html === 'string' ? html : this.editor.frameOptions.get('charCounter_type') === 'byte-html' && html.nodeType === 1 ? /** @type {HTMLElement} */ (html).outerHTML : html.textContent);
|
|
23
34
|
if (length > 0 && length + this.getLength() > maxCharCount) {
|
|
24
35
|
CounterBlink(this.editor.frameContext.get('charWrapper'));
|
|
25
36
|
return false;
|
|
@@ -29,9 +40,10 @@ Char.prototype = {
|
|
|
29
40
|
},
|
|
30
41
|
|
|
31
42
|
/**
|
|
43
|
+
* @this {CharThis}
|
|
32
44
|
* @description Get the [content]'s number of characters or binary data size. (frameOptions.get('charCounter_type'))
|
|
33
|
-
* If [content] is undefined, get the current editor's number of characters or binary data size.
|
|
34
|
-
* @param {string
|
|
45
|
+
* - If [content] is undefined, get the current editor's number of characters or binary data size.
|
|
46
|
+
* @param {string=} content Content to count. (defalut: this.editor.frameContext.get('wysiwyg'))
|
|
35
47
|
* @returns {number}
|
|
36
48
|
*/
|
|
37
49
|
getLength(content) {
|
|
@@ -42,6 +54,7 @@ Char.prototype = {
|
|
|
42
54
|
},
|
|
43
55
|
|
|
44
56
|
/**
|
|
57
|
+
* @this {CharThis}
|
|
45
58
|
* @descriptionGets Get the length in bytes of a string.
|
|
46
59
|
* @param {string} text String text
|
|
47
60
|
* @returns {number}
|
|
@@ -61,7 +74,7 @@ Char.prototype = {
|
|
|
61
74
|
|
|
62
75
|
return cl + cr;
|
|
63
76
|
} else {
|
|
64
|
-
cl = new TextEncoder(
|
|
77
|
+
cl = new TextEncoder().encode(text).length;
|
|
65
78
|
cr = 0;
|
|
66
79
|
|
|
67
80
|
if (encodeURIComponent(text).match(/(%0A|%0D)/gi) !== null) {
|
|
@@ -73,6 +86,7 @@ Char.prototype = {
|
|
|
73
86
|
},
|
|
74
87
|
|
|
75
88
|
/**
|
|
89
|
+
* @this {CharThis}
|
|
76
90
|
* @description Set the char count to charCounter element textContent.
|
|
77
91
|
*/
|
|
78
92
|
display() {
|
|
@@ -85,8 +99,9 @@ Char.prototype = {
|
|
|
85
99
|
},
|
|
86
100
|
|
|
87
101
|
/**
|
|
102
|
+
* @this {CharThis}
|
|
88
103
|
* @description Returns false if char count is greater than "frameOptions.get('charCounter_max')" when "inputText" is added to the current editor.
|
|
89
|
-
* If the current number of characters is greater than "charCounter_max", the excess characters are removed.
|
|
104
|
+
* - If the current number of characters is greater than "charCounter_max", the excess characters are removed.
|
|
90
105
|
* And call the char.display()
|
|
91
106
|
* @param {string} inputText Text added.
|
|
92
107
|
* @returns {boolean}
|
|
@@ -131,9 +146,9 @@ Char.prototype = {
|
|
|
131
146
|
};
|
|
132
147
|
|
|
133
148
|
/**
|
|
134
|
-
* @description The character counter blinks.
|
|
135
|
-
* @param charWrapper {Element} this.editor.frameContext.get('charWrapper')
|
|
136
149
|
* @private
|
|
150
|
+
* @description The character counter blinks.
|
|
151
|
+
* @param {Element} charWrapper this.editor.frameContext.get('charWrapper')
|
|
137
152
|
*/
|
|
138
153
|
function CounterBlink(charWrapper) {
|
|
139
154
|
if (charWrapper && !hasClass(charWrapper, 'se-blink')) {
|