suneditor 2.44.3 → 2.44.4
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/LICENSE.txt +20 -20
- package/README.md +1585 -1585
- package/dist/css/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +2 -2
- package/package.json +71 -71
- package/src/assets/css/suneditor-contents.css +556 -556
- package/src/assets/css/suneditor.css +0 -0
- package/src/assets/defaultIcons.js +103 -103
- package/src/lang/Lang.d.ts +143 -143
- package/src/lang/ckb.d.ts +4 -4
- package/src/lang/ckb.js +187 -187
- package/src/lang/da.d.ts +4 -4
- package/src/lang/da.js +191 -191
- package/src/lang/de.d.ts +4 -4
- package/src/lang/de.js +187 -187
- package/src/lang/en.d.ts +4 -4
- package/src/lang/en.js +187 -187
- package/src/lang/es.d.ts +4 -4
- package/src/lang/es.js +187 -187
- package/src/lang/fr.d.ts +4 -4
- package/src/lang/fr.js +188 -188
- package/src/lang/he.d.ts +4 -4
- package/src/lang/he.js +188 -188
- package/src/lang/index.d.ts +22 -21
- package/src/lang/index.js +25 -24
- package/src/lang/it.d.ts +4 -4
- package/src/lang/it.js +188 -188
- package/src/lang/ja.d.ts +4 -4
- package/src/lang/ja.js +187 -187
- package/src/lang/ko.d.ts +4 -4
- package/src/lang/ko.js +187 -187
- package/src/lang/lv.d.ts +4 -4
- package/src/lang/lv.js +187 -187
- package/src/lang/nl.d.ts +4 -4
- package/src/lang/nl.js +187 -187
- package/src/lang/pl.d.ts +4 -4
- package/src/lang/pl.js +187 -187
- package/src/lang/pt_br.d.ts +4 -4
- package/src/lang/pt_br.js +189 -189
- package/src/lang/ro.d.ts +4 -4
- package/src/lang/ro.js +187 -187
- package/src/lang/ru.d.ts +4 -4
- package/src/lang/ru.js +187 -187
- package/src/lang/se.d.ts +4 -4
- package/src/lang/se.js +191 -191
- package/src/lang/ua.d.ts +5 -5
- package/src/lang/ua.js +188 -188
- package/src/lang/ur.d.ts +5 -0
- package/src/lang/ur.js +188 -0
- package/src/lang/zh_cn.d.ts +4 -4
- package/src/lang/zh_cn.js +187 -187
- package/src/lib/constructor.js +1 -2
- package/src/lib/context.d.ts +42 -42
- package/src/lib/context.js +0 -0
- package/src/lib/core.d.ts +1101 -1101
- package/src/lib/core.js +205 -88
- package/src/lib/history.d.ts +48 -48
- package/src/lib/history.js +218 -218
- package/src/lib/util.d.ts +677 -677
- package/src/lib/util.js +38 -12
- package/src/options.d.ts +608 -608
- package/src/plugins/CommandPlugin.d.ts +7 -7
- package/src/plugins/DialogPlugin.d.ts +19 -19
- package/src/plugins/FileBrowserPlugin.d.ts +29 -29
- package/src/plugins/Module.d.ts +14 -14
- package/src/plugins/Plugin.d.ts +41 -41
- package/src/plugins/SubmenuPlugin.d.ts +7 -7
- package/src/plugins/command/blockquote.d.ts +4 -4
- package/src/plugins/command/blockquote.js +46 -46
- package/src/plugins/dialog/audio.d.ts +4 -4
- package/src/plugins/dialog/audio.js +556 -554
- package/src/plugins/dialog/image.d.ts +4 -4
- package/src/plugins/dialog/image.js +1122 -1107
- package/src/plugins/dialog/link.d.ts +4 -4
- package/src/plugins/dialog/link.js +223 -223
- package/src/plugins/dialog/math.d.ts +4 -4
- package/src/plugins/dialog/math.js +294 -294
- package/src/plugins/dialog/mention.d.ts +5 -5
- package/src/plugins/dialog/mention.js +242 -242
- package/src/plugins/dialog/video.d.ts +4 -4
- package/src/plugins/dialog/video.js +983 -981
- package/src/plugins/fileBrowser/imageGallery.d.ts +4 -4
- package/src/plugins/fileBrowser/imageGallery.js +63 -63
- package/src/plugins/index.d.ts +79 -79
- package/src/plugins/index.js +32 -32
- package/src/plugins/modules/_anchor.js +461 -462
- package/src/plugins/modules/_colorPicker.d.ts +59 -59
- package/src/plugins/modules/_colorPicker.js +0 -0
- package/src/plugins/modules/_notice.d.ts +20 -20
- package/src/plugins/modules/_notice.js +72 -72
- package/src/plugins/modules/_selectMenu.js +118 -118
- package/src/plugins/modules/component.d.ts +24 -24
- package/src/plugins/modules/component.js +82 -82
- package/src/plugins/modules/dialog.d.ts +27 -27
- package/src/plugins/modules/dialog.js +174 -174
- package/src/plugins/modules/fileBrowser.d.ts +41 -41
- package/src/plugins/modules/fileBrowser.js +373 -373
- package/src/plugins/modules/fileManager.d.ts +66 -66
- package/src/plugins/modules/fileManager.js +325 -324
- package/src/plugins/modules/index.d.ts +10 -10
- package/src/plugins/modules/index.js +8 -8
- package/src/plugins/modules/resizing.d.ts +153 -153
- package/src/plugins/modules/resizing.js +895 -895
- package/src/plugins/submenu/align.d.ts +4 -4
- package/src/plugins/submenu/align.js +160 -160
- package/src/plugins/submenu/font.d.ts +4 -4
- package/src/plugins/submenu/font.js +120 -120
- package/src/plugins/submenu/fontColor.d.ts +4 -4
- package/src/plugins/submenu/fontColor.js +0 -0
- package/src/plugins/submenu/fontSize.d.ts +4 -4
- package/src/plugins/submenu/fontSize.js +112 -112
- package/src/plugins/submenu/formatBlock.d.ts +4 -4
- package/src/plugins/submenu/formatBlock.js +273 -273
- package/src/plugins/submenu/hiliteColor.d.ts +4 -4
- package/src/plugins/submenu/hiliteColor.js +0 -0
- package/src/plugins/submenu/horizontalRule.d.ts +4 -4
- package/src/plugins/submenu/horizontalRule.js +98 -98
- package/src/plugins/submenu/lineHeight.d.ts +4 -4
- package/src/plugins/submenu/lineHeight.js +104 -104
- package/src/plugins/submenu/list.d.ts +4 -4
- package/src/plugins/submenu/list.js +456 -455
- package/src/plugins/submenu/paragraphStyle.d.ts +4 -4
- package/src/plugins/submenu/paragraphStyle.js +135 -135
- package/src/plugins/submenu/table.d.ts +4 -4
- package/src/plugins/submenu/template.d.ts +4 -4
- package/src/plugins/submenu/template.js +71 -71
- package/src/plugins/submenu/textStyle.d.ts +4 -4
- package/src/plugins/submenu/textStyle.js +167 -167
- package/src/suneditor.d.ts +9 -9
- package/src/suneditor.js +75 -75
- package/src/suneditor_build.js +17 -17
package/src/lib/history.d.ts
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { Core } from "./core";
|
|
2
|
-
|
|
3
|
-
export interface History {
|
|
4
|
-
/**
|
|
5
|
-
* @description History stack
|
|
6
|
-
*/
|
|
7
|
-
stack: any[];
|
|
8
|
-
/**
|
|
9
|
-
* @description Saving the current status to the history object stack
|
|
10
|
-
* If "delay" is true, it will be saved after (options.historyStackDelayTime || 400) miliseconds
|
|
11
|
-
* If the function is called again with the "delay" argument true before it is saved, the delay time is renewal
|
|
12
|
-
* You can specify the delay time by sending a number.
|
|
13
|
-
* @param {Boolean} delay If true, Add stack without delay time.
|
|
14
|
-
*/
|
|
15
|
-
push: (delay: boolean | number) => void;
|
|
16
|
-
/**
|
|
17
|
-
* @description Undo function
|
|
18
|
-
*/
|
|
19
|
-
undo: () => void;
|
|
20
|
-
/**
|
|
21
|
-
* @description Redo function
|
|
22
|
-
*/
|
|
23
|
-
redo: () => void;
|
|
24
|
-
/**
|
|
25
|
-
* @description Go to the history stack for that index.
|
|
26
|
-
* If "index" is -1, go to the last stack
|
|
27
|
-
* @param {Number} index Stack index
|
|
28
|
-
*/
|
|
29
|
-
go: (index: number) => void;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @description Get the current history stack index.
|
|
33
|
-
* @returns
|
|
34
|
-
*/
|
|
35
|
-
getCurrentIndex: () => number;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* @description Reset the history object
|
|
39
|
-
*/
|
|
40
|
-
reset: (ignoreChangeEvent: any) => void;
|
|
41
|
-
/**
|
|
42
|
-
* @description Remove all stacks and remove the timeout function.
|
|
43
|
-
* @private
|
|
44
|
-
*/
|
|
45
|
-
_destroy: () => void;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export default function _default(core: Core, change: any): History;
|
|
1
|
+
import { Core } from "./core";
|
|
2
|
+
|
|
3
|
+
export interface History {
|
|
4
|
+
/**
|
|
5
|
+
* @description History stack
|
|
6
|
+
*/
|
|
7
|
+
stack: any[];
|
|
8
|
+
/**
|
|
9
|
+
* @description Saving the current status to the history object stack
|
|
10
|
+
* If "delay" is true, it will be saved after (options.historyStackDelayTime || 400) miliseconds
|
|
11
|
+
* If the function is called again with the "delay" argument true before it is saved, the delay time is renewal
|
|
12
|
+
* You can specify the delay time by sending a number.
|
|
13
|
+
* @param {Boolean} delay If true, Add stack without delay time.
|
|
14
|
+
*/
|
|
15
|
+
push: (delay: boolean | number) => void;
|
|
16
|
+
/**
|
|
17
|
+
* @description Undo function
|
|
18
|
+
*/
|
|
19
|
+
undo: () => void;
|
|
20
|
+
/**
|
|
21
|
+
* @description Redo function
|
|
22
|
+
*/
|
|
23
|
+
redo: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* @description Go to the history stack for that index.
|
|
26
|
+
* If "index" is -1, go to the last stack
|
|
27
|
+
* @param {Number} index Stack index
|
|
28
|
+
*/
|
|
29
|
+
go: (index: number) => void;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @description Get the current history stack index.
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
getCurrentIndex: () => number;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @description Reset the history object
|
|
39
|
+
*/
|
|
40
|
+
reset: (ignoreChangeEvent: any) => void;
|
|
41
|
+
/**
|
|
42
|
+
* @description Remove all stacks and remove the timeout function.
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
_destroy: () => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default function _default(core: Core, change: any): History;
|
package/src/lib/history.js
CHANGED
|
@@ -1,219 +1,219 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* wysiwyg web editor
|
|
3
|
-
*
|
|
4
|
-
* suneditor.js
|
|
5
|
-
* Copyright 2019 JiHong Lee.
|
|
6
|
-
* MIT license.
|
|
7
|
-
*/
|
|
8
|
-
'use strict';
|
|
9
|
-
|
|
10
|
-
export default function (core, change) {
|
|
11
|
-
const _w = core._w;
|
|
12
|
-
const util = core.util;
|
|
13
|
-
const delayTime = core.options.historyStackDelayTime;
|
|
14
|
-
let editor = core.context.element;
|
|
15
|
-
let undo = core.context.tool.undo;
|
|
16
|
-
let redo = core.context.tool.redo;
|
|
17
|
-
|
|
18
|
-
let pushDelay = null;
|
|
19
|
-
let stackIndex = 0;
|
|
20
|
-
let stack = [];
|
|
21
|
-
|
|
22
|
-
function setContentsFromStack () {
|
|
23
|
-
const item = stack[stackIndex];
|
|
24
|
-
editor.wysiwyg.innerHTML = item.contents;
|
|
25
|
-
|
|
26
|
-
core.setRange(util.getNodeFromPath(item.s.path, editor.wysiwyg), item.s.offset, util.getNodeFromPath(item.e.path, editor.wysiwyg), item.e.offset);
|
|
27
|
-
core.focus();
|
|
28
|
-
|
|
29
|
-
if (stack.length <= 1) {
|
|
30
|
-
if (undo) undo.setAttribute('disabled', true);
|
|
31
|
-
if (redo) redo.setAttribute('disabled', true);
|
|
32
|
-
} else {
|
|
33
|
-
if (stackIndex === 0) {
|
|
34
|
-
if (undo) undo.setAttribute('disabled', true);
|
|
35
|
-
if (redo) redo.removeAttribute('disabled');
|
|
36
|
-
} else if (stackIndex === stack.length - 1) {
|
|
37
|
-
if (undo) undo.removeAttribute('disabled');
|
|
38
|
-
if (redo) redo.setAttribute('disabled', true);
|
|
39
|
-
} else {
|
|
40
|
-
if (undo) undo.removeAttribute('disabled');
|
|
41
|
-
if (redo) redo.removeAttribute('disabled');
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
core.controllersOff();
|
|
46
|
-
core._checkComponents();
|
|
47
|
-
core._setCharCount();
|
|
48
|
-
core._resourcesStateChange();
|
|
49
|
-
|
|
50
|
-
// onChange
|
|
51
|
-
change();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function pushStack () {
|
|
55
|
-
core._checkComponents();
|
|
56
|
-
const current = core.getContents(true);
|
|
57
|
-
if (!current || (!!stack[stackIndex] && current === stack[stackIndex].contents)) return;
|
|
58
|
-
|
|
59
|
-
stackIndex++;
|
|
60
|
-
const range = core._variable._range;
|
|
61
|
-
|
|
62
|
-
if (stack.length > stackIndex) {
|
|
63
|
-
stack = stack.slice(0, stackIndex);
|
|
64
|
-
if (redo) redo.setAttribute('disabled', true);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (!range) {
|
|
68
|
-
stack[stackIndex] = {
|
|
69
|
-
contents: current,
|
|
70
|
-
s: { path: [0, 0], offset: [0, 0] },
|
|
71
|
-
e: { path: 0, offset: 0 }
|
|
72
|
-
};
|
|
73
|
-
} else {
|
|
74
|
-
stack[stackIndex] = {
|
|
75
|
-
contents: current,
|
|
76
|
-
s: {
|
|
77
|
-
path: util.getNodePath(range.startContainer, null, null),
|
|
78
|
-
offset: range.startOffset
|
|
79
|
-
},
|
|
80
|
-
e: {
|
|
81
|
-
path: util.getNodePath(range.endContainer, null, null),
|
|
82
|
-
offset: range.endOffset
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (stackIndex === 1 && undo) undo.removeAttribute('disabled');
|
|
88
|
-
|
|
89
|
-
core._setCharCount();
|
|
90
|
-
// onChange
|
|
91
|
-
change();
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return {
|
|
95
|
-
/**
|
|
96
|
-
* @description History stack
|
|
97
|
-
*/
|
|
98
|
-
stack: stack,
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* @description Saving the current status to the history object stack
|
|
102
|
-
* If "delay" is true, it will be saved after (options.historyStackDelayTime || 400) miliseconds
|
|
103
|
-
* If the function is called again with the "delay" argument true before it is saved, the delay time is renewal
|
|
104
|
-
* You can specify the delay time by sending a number.
|
|
105
|
-
* @param {Boolean|Number} delay If true, Add stack without delay time.
|
|
106
|
-
*/
|
|
107
|
-
push: function (delay) {
|
|
108
|
-
_w.setTimeout(core._resourcesStateChange.bind(core));
|
|
109
|
-
const time = typeof delay === 'number' ? (delay > 0 ? delay : 0) : (!delay ? 0 : delayTime);
|
|
110
|
-
|
|
111
|
-
if (!time || pushDelay) {
|
|
112
|
-
_w.clearTimeout(pushDelay);
|
|
113
|
-
if (!time) {
|
|
114
|
-
pushStack();
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
pushDelay = _w.setTimeout(function () {
|
|
120
|
-
_w.clearTimeout(pushDelay);
|
|
121
|
-
pushDelay = null;
|
|
122
|
-
pushStack();
|
|
123
|
-
}, time);
|
|
124
|
-
},
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* @description Undo function
|
|
128
|
-
*/
|
|
129
|
-
undo: function () {
|
|
130
|
-
if (stackIndex > 0) {
|
|
131
|
-
stackIndex--;
|
|
132
|
-
setContentsFromStack();
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* @description Redo function
|
|
138
|
-
*/
|
|
139
|
-
redo: function () {
|
|
140
|
-
if (stack.length - 1 > stackIndex) {
|
|
141
|
-
stackIndex++;
|
|
142
|
-
setContentsFromStack();
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* @description Go to the history stack for that index.
|
|
148
|
-
* If "index" is -1, go to the last stack
|
|
149
|
-
*/
|
|
150
|
-
go: function (index) {
|
|
151
|
-
stackIndex = index < 0 ? (stack.length - 1) : index;
|
|
152
|
-
setContentsFromStack();
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* @description Get the current history stack index.
|
|
157
|
-
* @returns {Number} Current Stack index
|
|
158
|
-
*/
|
|
159
|
-
getCurrentIndex: function () {
|
|
160
|
-
return stackIndex;
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* @description Reset the history object
|
|
165
|
-
*/
|
|
166
|
-
reset: function (ignoreChangeEvent) {
|
|
167
|
-
if (undo) undo.setAttribute('disabled', true);
|
|
168
|
-
if (redo) redo.setAttribute('disabled', true);
|
|
169
|
-
core._variable.isChanged = false;
|
|
170
|
-
if (core.context.tool.save) core.context.tool.save.setAttribute('disabled', true);
|
|
171
|
-
|
|
172
|
-
stack.splice(0);
|
|
173
|
-
stackIndex = 0;
|
|
174
|
-
|
|
175
|
-
// pushStack
|
|
176
|
-
stack[stackIndex] = {
|
|
177
|
-
contents: core.getContents(true),
|
|
178
|
-
s: {
|
|
179
|
-
path: [0, 0],
|
|
180
|
-
offset: 0
|
|
181
|
-
},
|
|
182
|
-
e: {
|
|
183
|
-
path: [0, 0],
|
|
184
|
-
offset: 0
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
if (!ignoreChangeEvent) change();
|
|
189
|
-
},
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* @description Reset the disabled state of the buttons to fit the current stack.
|
|
193
|
-
* @private
|
|
194
|
-
*/
|
|
195
|
-
_resetCachingButton: function () {
|
|
196
|
-
editor = core.context.element;
|
|
197
|
-
undo = core.context.tool.undo;
|
|
198
|
-
redo = core.context.tool.redo;
|
|
199
|
-
|
|
200
|
-
if (stackIndex === 0) {
|
|
201
|
-
if (undo) undo.setAttribute('disabled', true);
|
|
202
|
-
if (redo && stackIndex === stack.length - 1) redo.setAttribute('disabled', true);
|
|
203
|
-
core._variable.isChanged = false;
|
|
204
|
-
if (core.context.tool.save) core.context.tool.save.setAttribute('disabled', true);
|
|
205
|
-
} else if (stackIndex === stack.length - 1) {
|
|
206
|
-
if (redo) redo.setAttribute('disabled', true);
|
|
207
|
-
}
|
|
208
|
-
},
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* @description Remove all stacks and remove the timeout function.
|
|
212
|
-
* @private
|
|
213
|
-
*/
|
|
214
|
-
_destroy: function () {
|
|
215
|
-
if (pushDelay) _w.clearTimeout(pushDelay);
|
|
216
|
-
stack = null;
|
|
217
|
-
}
|
|
218
|
-
};
|
|
1
|
+
/*
|
|
2
|
+
* wysiwyg web editor
|
|
3
|
+
*
|
|
4
|
+
* suneditor.js
|
|
5
|
+
* Copyright 2019 JiHong Lee.
|
|
6
|
+
* MIT license.
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
export default function (core, change) {
|
|
11
|
+
const _w = core._w;
|
|
12
|
+
const util = core.util;
|
|
13
|
+
const delayTime = core.options.historyStackDelayTime;
|
|
14
|
+
let editor = core.context.element;
|
|
15
|
+
let undo = core.context.tool.undo;
|
|
16
|
+
let redo = core.context.tool.redo;
|
|
17
|
+
|
|
18
|
+
let pushDelay = null;
|
|
19
|
+
let stackIndex = 0;
|
|
20
|
+
let stack = [];
|
|
21
|
+
|
|
22
|
+
function setContentsFromStack () {
|
|
23
|
+
const item = stack[stackIndex];
|
|
24
|
+
editor.wysiwyg.innerHTML = item.contents;
|
|
25
|
+
|
|
26
|
+
core.setRange(util.getNodeFromPath(item.s.path, editor.wysiwyg), item.s.offset, util.getNodeFromPath(item.e.path, editor.wysiwyg), item.e.offset);
|
|
27
|
+
core.focus();
|
|
28
|
+
|
|
29
|
+
if (stack.length <= 1) {
|
|
30
|
+
if (undo) undo.setAttribute('disabled', true);
|
|
31
|
+
if (redo) redo.setAttribute('disabled', true);
|
|
32
|
+
} else {
|
|
33
|
+
if (stackIndex === 0) {
|
|
34
|
+
if (undo) undo.setAttribute('disabled', true);
|
|
35
|
+
if (redo) redo.removeAttribute('disabled');
|
|
36
|
+
} else if (stackIndex === stack.length - 1) {
|
|
37
|
+
if (undo) undo.removeAttribute('disabled');
|
|
38
|
+
if (redo) redo.setAttribute('disabled', true);
|
|
39
|
+
} else {
|
|
40
|
+
if (undo) undo.removeAttribute('disabled');
|
|
41
|
+
if (redo) redo.removeAttribute('disabled');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
core.controllersOff();
|
|
46
|
+
core._checkComponents();
|
|
47
|
+
core._setCharCount();
|
|
48
|
+
core._resourcesStateChange();
|
|
49
|
+
|
|
50
|
+
// onChange
|
|
51
|
+
change();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function pushStack () {
|
|
55
|
+
core._checkComponents();
|
|
56
|
+
const current = core.getContents(true);
|
|
57
|
+
if (!current || (!!stack[stackIndex] && current === stack[stackIndex].contents)) return;
|
|
58
|
+
|
|
59
|
+
stackIndex++;
|
|
60
|
+
const range = core._variable._range;
|
|
61
|
+
|
|
62
|
+
if (stack.length > stackIndex) {
|
|
63
|
+
stack = stack.slice(0, stackIndex);
|
|
64
|
+
if (redo) redo.setAttribute('disabled', true);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!range) {
|
|
68
|
+
stack[stackIndex] = {
|
|
69
|
+
contents: current,
|
|
70
|
+
s: { path: [0, 0], offset: [0, 0] },
|
|
71
|
+
e: { path: 0, offset: 0 }
|
|
72
|
+
};
|
|
73
|
+
} else {
|
|
74
|
+
stack[stackIndex] = {
|
|
75
|
+
contents: current,
|
|
76
|
+
s: {
|
|
77
|
+
path: util.getNodePath(range.startContainer, null, null),
|
|
78
|
+
offset: range.startOffset
|
|
79
|
+
},
|
|
80
|
+
e: {
|
|
81
|
+
path: util.getNodePath(range.endContainer, null, null),
|
|
82
|
+
offset: range.endOffset
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (stackIndex === 1 && undo) undo.removeAttribute('disabled');
|
|
88
|
+
|
|
89
|
+
core._setCharCount();
|
|
90
|
+
// onChange
|
|
91
|
+
change();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
/**
|
|
96
|
+
* @description History stack
|
|
97
|
+
*/
|
|
98
|
+
stack: stack,
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @description Saving the current status to the history object stack
|
|
102
|
+
* If "delay" is true, it will be saved after (options.historyStackDelayTime || 400) miliseconds
|
|
103
|
+
* If the function is called again with the "delay" argument true before it is saved, the delay time is renewal
|
|
104
|
+
* You can specify the delay time by sending a number.
|
|
105
|
+
* @param {Boolean|Number} delay If true, Add stack without delay time.
|
|
106
|
+
*/
|
|
107
|
+
push: function (delay) {
|
|
108
|
+
_w.setTimeout(core._resourcesStateChange.bind(core));
|
|
109
|
+
const time = typeof delay === 'number' ? (delay > 0 ? delay : 0) : (!delay ? 0 : delayTime);
|
|
110
|
+
|
|
111
|
+
if (!time || pushDelay) {
|
|
112
|
+
_w.clearTimeout(pushDelay);
|
|
113
|
+
if (!time) {
|
|
114
|
+
pushStack();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
pushDelay = _w.setTimeout(function () {
|
|
120
|
+
_w.clearTimeout(pushDelay);
|
|
121
|
+
pushDelay = null;
|
|
122
|
+
pushStack();
|
|
123
|
+
}, time);
|
|
124
|
+
},
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @description Undo function
|
|
128
|
+
*/
|
|
129
|
+
undo: function () {
|
|
130
|
+
if (stackIndex > 0) {
|
|
131
|
+
stackIndex--;
|
|
132
|
+
setContentsFromStack();
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @description Redo function
|
|
138
|
+
*/
|
|
139
|
+
redo: function () {
|
|
140
|
+
if (stack.length - 1 > stackIndex) {
|
|
141
|
+
stackIndex++;
|
|
142
|
+
setContentsFromStack();
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @description Go to the history stack for that index.
|
|
148
|
+
* If "index" is -1, go to the last stack
|
|
149
|
+
*/
|
|
150
|
+
go: function (index) {
|
|
151
|
+
stackIndex = index < 0 ? (stack.length - 1) : index;
|
|
152
|
+
setContentsFromStack();
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @description Get the current history stack index.
|
|
157
|
+
* @returns {Number} Current Stack index
|
|
158
|
+
*/
|
|
159
|
+
getCurrentIndex: function () {
|
|
160
|
+
return stackIndex;
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @description Reset the history object
|
|
165
|
+
*/
|
|
166
|
+
reset: function (ignoreChangeEvent) {
|
|
167
|
+
if (undo) undo.setAttribute('disabled', true);
|
|
168
|
+
if (redo) redo.setAttribute('disabled', true);
|
|
169
|
+
core._variable.isChanged = false;
|
|
170
|
+
if (core.context.tool.save) core.context.tool.save.setAttribute('disabled', true);
|
|
171
|
+
|
|
172
|
+
stack.splice(0);
|
|
173
|
+
stackIndex = 0;
|
|
174
|
+
|
|
175
|
+
// pushStack
|
|
176
|
+
stack[stackIndex] = {
|
|
177
|
+
contents: core.getContents(true),
|
|
178
|
+
s: {
|
|
179
|
+
path: [0, 0],
|
|
180
|
+
offset: 0
|
|
181
|
+
},
|
|
182
|
+
e: {
|
|
183
|
+
path: [0, 0],
|
|
184
|
+
offset: 0
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
if (!ignoreChangeEvent) change();
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @description Reset the disabled state of the buttons to fit the current stack.
|
|
193
|
+
* @private
|
|
194
|
+
*/
|
|
195
|
+
_resetCachingButton: function () {
|
|
196
|
+
editor = core.context.element;
|
|
197
|
+
undo = core.context.tool.undo;
|
|
198
|
+
redo = core.context.tool.redo;
|
|
199
|
+
|
|
200
|
+
if (stackIndex === 0) {
|
|
201
|
+
if (undo) undo.setAttribute('disabled', true);
|
|
202
|
+
if (redo && stackIndex === stack.length - 1) redo.setAttribute('disabled', true);
|
|
203
|
+
core._variable.isChanged = false;
|
|
204
|
+
if (core.context.tool.save) core.context.tool.save.setAttribute('disabled', true);
|
|
205
|
+
} else if (stackIndex === stack.length - 1) {
|
|
206
|
+
if (redo) redo.setAttribute('disabled', true);
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @description Remove all stacks and remove the timeout function.
|
|
212
|
+
* @private
|
|
213
|
+
*/
|
|
214
|
+
_destroy: function () {
|
|
215
|
+
if (pushDelay) _w.clearTimeout(pushDelay);
|
|
216
|
+
stack = null;
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
219
|
}
|