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
package/src/helper/keyCodeMap.js
CHANGED
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview keyCode helper
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
const _arrow = 'ArrowLeft|ArrowUp|ArrowRight|ArrowDown';
|
|
6
|
-
const _fN = 'F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12';
|
|
7
|
-
// const DIR_KEYCODE = /^(3[7-9]|40)$/;
|
|
8
|
-
const DIR_KEYCODE = _arrow.split('|');
|
|
9
|
-
// const DELETE_KEYCODE = /^(8|46)$/;
|
|
10
|
-
const DELETE_KEYCODE = 'Backspace|Delete'.split('|');
|
|
11
|
-
// const NON_TEXT_KEYCODE = /^(8|9|13|1[6-9]|20|27|3[3-9]|40|45|46|11[2-9]|12[0-3]|144|145|229)$/;
|
|
12
|
-
const NON_TEXT_KEYCODE = `Backspace|Tab|Enter|ShiftLeft|ShiftRight|ControlLeft|ControlRight|AltLeft|AltRight|Pause|CapsLock|Escape|PageUp|PageDown|End|Home|${_arrow}|Insert|Delete|${_fN}|NumLock|ScrollLock`.split('|');
|
|
13
|
-
// const HISTORY_RELEVANT_KEYS = /^(9|13|46)$/;
|
|
14
|
-
const HISTORY_RELEVANT_KEYS = `Backspace|Enter|Delete`.split('|');
|
|
15
|
-
// const DOCUMENT_TYPE_OBSERVER_KEYCODE = /^(8|13|46)$/;
|
|
16
|
-
const DOCUMENT_TYPE_OBSERVER_KEYCODE = 'Backspace|Enter|Delete'.split('|');
|
|
17
|
-
// const NON_RESPONSE_KEYCODE = /^(1[7-9]|20|27|45|11[2-9]|12[0-3]|144|145)$/;
|
|
18
|
-
const NON_RESPONSE_CODE = `ControlLeft|ControlRight|AltLeft|AltRight|Pause|CapsLock|Escape|Insert|${_fN}|NumLock|ScrollLock`.split('|');
|
|
19
|
-
|
|
20
|
-
/** ------------------------------------------------------- [meta] ------------------------------------------------------- */
|
|
21
|
-
/**
|
|
22
|
-
* @description Shift check
|
|
23
|
-
* @param {KeyboardEvent} e Event object
|
|
24
|
-
* @returns {boolean}
|
|
25
|
-
*/
|
|
26
|
-
export function isShift(e) {
|
|
27
|
-
return e.shiftKey || e.keyCode === 16;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @description [Ctrl|Meta] check
|
|
32
|
-
* @param {KeyboardEvent} e Event object
|
|
33
|
-
* @returns {boolean}
|
|
34
|
-
*/
|
|
35
|
-
export function isCtrl(e) {
|
|
36
|
-
const keyCode = e.code;
|
|
37
|
-
// return e.ctrlKey || e.metaKey || keyCode === 91 || keyCode === 92 || keyCode === 224;
|
|
38
|
-
return e.ctrlKey || e.metaKey || keyCode === 'MetaLeft' || keyCode === 'MetaRight';
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @description Alt check
|
|
43
|
-
* @param {KeyboardEvent} e Event object
|
|
44
|
-
* @returns {boolean}
|
|
45
|
-
*/
|
|
46
|
-
export function isAlt(e) {
|
|
47
|
-
return e.altKey;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* @description event.isComposing check
|
|
52
|
-
* @param {KeyboardEvent} e Event object
|
|
53
|
-
* @returns {boolean}
|
|
54
|
-
*/
|
|
55
|
-
export function isComposing(e) {
|
|
56
|
-
return e.isComposing || e.keyCode === 229;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* @description Backspace key check
|
|
61
|
-
* @param {string} code Event.code
|
|
62
|
-
* @returns {boolean}
|
|
63
|
-
*/
|
|
64
|
-
export function isBackspace(code) {
|
|
65
|
-
// return code === 8;
|
|
66
|
-
return code === 'Backspace';
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* @description Tab key check
|
|
71
|
-
* @param {string} code Event.code
|
|
72
|
-
* @returns {boolean}
|
|
73
|
-
*/
|
|
74
|
-
export function isTab(code) {
|
|
75
|
-
// return code === 9;
|
|
76
|
-
return code === 'Tab';
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* @description Enter key check
|
|
81
|
-
* @param {string} code Event.code
|
|
82
|
-
* @returns {boolean}
|
|
83
|
-
*/
|
|
84
|
-
export function isEnter(code) {
|
|
85
|
-
// return code === 13;
|
|
86
|
-
return code === 'Enter';
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* @description ESC key check
|
|
91
|
-
* @param {string} code Event.code
|
|
92
|
-
* @returns {boolean}
|
|
93
|
-
*/
|
|
94
|
-
export function isEsc(code) {
|
|
95
|
-
// return code === 27;
|
|
96
|
-
return code === 'Escape';
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* @description Space key check
|
|
101
|
-
* @param {string} code Event.code
|
|
102
|
-
* @returns {boolean}
|
|
103
|
-
*/
|
|
104
|
-
export function isSpace(code) {
|
|
105
|
-
// return code === 32;
|
|
106
|
-
return code === 'Space';
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** ------------------------------------------------------- [key] ------------------------------------------------------- */
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* @description Direction key check
|
|
113
|
-
* @param {string} code Event.code
|
|
114
|
-
* @returns {boolean}
|
|
115
|
-
*/
|
|
116
|
-
export function isDirectionKey(code) {
|
|
117
|
-
return DIR_KEYCODE.includes(code);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* @description [delete, backspace] key check
|
|
122
|
-
* @param {string} code Event.code
|
|
123
|
-
* @returns {boolean}
|
|
124
|
-
*/
|
|
125
|
-
export function isRemoveKey(code) {
|
|
126
|
-
return DELETE_KEYCODE.includes(code);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* @description Non-text key check
|
|
131
|
-
* @param {string} code Event.code
|
|
132
|
-
* @returns {boolean}
|
|
133
|
-
*/
|
|
134
|
-
export function isNonTextKey(code) {
|
|
135
|
-
return NON_TEXT_KEYCODE.includes(code);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* @description Check if the given key is relevant for history push
|
|
140
|
-
* @param {string} code - Event.code
|
|
141
|
-
* @returns {boolean}
|
|
142
|
-
*/
|
|
143
|
-
export function isHistoryRelevantKey(code) {
|
|
144
|
-
return HISTORY_RELEVANT_KEYS.includes(code);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* @description Document type observer key check
|
|
149
|
-
* @param {string} code Event.code
|
|
150
|
-
* @returns {boolean}
|
|
151
|
-
*/
|
|
152
|
-
export function isDocumentTypeObserverKey(code) {
|
|
153
|
-
return DOCUMENT_TYPE_OBSERVER_KEYCODE.includes(code);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* @description Non-response key check
|
|
158
|
-
* @param {string} code Event.code
|
|
159
|
-
* @returns {boolean}
|
|
160
|
-
*/
|
|
161
|
-
export function isNonResponseKey(code) {
|
|
162
|
-
return NON_RESPONSE_CODE.includes(code);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const keyCodeMap = {
|
|
166
|
-
isShift,
|
|
167
|
-
isCtrl,
|
|
168
|
-
isAlt,
|
|
169
|
-
isComposing,
|
|
170
|
-
isBackspace,
|
|
171
|
-
isTab,
|
|
172
|
-
isEnter,
|
|
173
|
-
isEsc,
|
|
174
|
-
isSpace,
|
|
175
|
-
isDirectionKey,
|
|
176
|
-
isRemoveKey,
|
|
177
|
-
isNonTextKey,
|
|
178
|
-
isHistoryRelevantKey,
|
|
179
|
-
isDocumentTypeObserverKey,
|
|
180
|
-
isNonResponseKey
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
export default keyCodeMap;
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview keyCode helper
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const _arrow = 'ArrowLeft|ArrowUp|ArrowRight|ArrowDown';
|
|
6
|
+
const _fN = 'F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12';
|
|
7
|
+
// const DIR_KEYCODE = /^(3[7-9]|40)$/;
|
|
8
|
+
const DIR_KEYCODE = _arrow.split('|');
|
|
9
|
+
// const DELETE_KEYCODE = /^(8|46)$/;
|
|
10
|
+
const DELETE_KEYCODE = 'Backspace|Delete'.split('|');
|
|
11
|
+
// const NON_TEXT_KEYCODE = /^(8|9|13|1[6-9]|20|27|3[3-9]|40|45|46|11[2-9]|12[0-3]|144|145|229)$/;
|
|
12
|
+
const NON_TEXT_KEYCODE = `Backspace|Tab|Enter|ShiftLeft|ShiftRight|ControlLeft|ControlRight|AltLeft|AltRight|Pause|CapsLock|Escape|PageUp|PageDown|End|Home|${_arrow}|Insert|Delete|${_fN}|NumLock|ScrollLock`.split('|');
|
|
13
|
+
// const HISTORY_RELEVANT_KEYS = /^(9|13|46)$/;
|
|
14
|
+
const HISTORY_RELEVANT_KEYS = `Backspace|Enter|Delete`.split('|');
|
|
15
|
+
// const DOCUMENT_TYPE_OBSERVER_KEYCODE = /^(8|13|46)$/;
|
|
16
|
+
const DOCUMENT_TYPE_OBSERVER_KEYCODE = 'Backspace|Enter|Delete'.split('|');
|
|
17
|
+
// const NON_RESPONSE_KEYCODE = /^(1[7-9]|20|27|45|11[2-9]|12[0-3]|144|145)$/;
|
|
18
|
+
const NON_RESPONSE_CODE = `ControlLeft|ControlRight|AltLeft|AltRight|Pause|CapsLock|Escape|Insert|${_fN}|NumLock|ScrollLock`.split('|');
|
|
19
|
+
|
|
20
|
+
/** ------------------------------------------------------- [meta] ------------------------------------------------------- */
|
|
21
|
+
/**
|
|
22
|
+
* @description Shift check
|
|
23
|
+
* @param {KeyboardEvent} e Event object
|
|
24
|
+
* @returns {boolean}
|
|
25
|
+
*/
|
|
26
|
+
export function isShift(e) {
|
|
27
|
+
return e.shiftKey || e.keyCode === 16;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @description [Ctrl|Meta] check
|
|
32
|
+
* @param {KeyboardEvent} e Event object
|
|
33
|
+
* @returns {boolean}
|
|
34
|
+
*/
|
|
35
|
+
export function isCtrl(e) {
|
|
36
|
+
const keyCode = e.code;
|
|
37
|
+
// return e.ctrlKey || e.metaKey || keyCode === 91 || keyCode === 92 || keyCode === 224;
|
|
38
|
+
return e.ctrlKey || e.metaKey || keyCode === 'MetaLeft' || keyCode === 'MetaRight';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @description Alt check
|
|
43
|
+
* @param {KeyboardEvent} e Event object
|
|
44
|
+
* @returns {boolean}
|
|
45
|
+
*/
|
|
46
|
+
export function isAlt(e) {
|
|
47
|
+
return e.altKey;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @description event.isComposing check
|
|
52
|
+
* @param {KeyboardEvent} e Event object
|
|
53
|
+
* @returns {boolean}
|
|
54
|
+
*/
|
|
55
|
+
export function isComposing(e) {
|
|
56
|
+
return e.isComposing || e.keyCode === 229;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @description Backspace key check
|
|
61
|
+
* @param {string} code Event.code
|
|
62
|
+
* @returns {boolean}
|
|
63
|
+
*/
|
|
64
|
+
export function isBackspace(code) {
|
|
65
|
+
// return code === 8;
|
|
66
|
+
return code === 'Backspace';
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @description Tab key check
|
|
71
|
+
* @param {string} code Event.code
|
|
72
|
+
* @returns {boolean}
|
|
73
|
+
*/
|
|
74
|
+
export function isTab(code) {
|
|
75
|
+
// return code === 9;
|
|
76
|
+
return code === 'Tab';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @description Enter key check
|
|
81
|
+
* @param {string} code Event.code
|
|
82
|
+
* @returns {boolean}
|
|
83
|
+
*/
|
|
84
|
+
export function isEnter(code) {
|
|
85
|
+
// return code === 13;
|
|
86
|
+
return code === 'Enter';
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @description ESC key check
|
|
91
|
+
* @param {string} code Event.code
|
|
92
|
+
* @returns {boolean}
|
|
93
|
+
*/
|
|
94
|
+
export function isEsc(code) {
|
|
95
|
+
// return code === 27;
|
|
96
|
+
return code === 'Escape';
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @description Space key check
|
|
101
|
+
* @param {string} code Event.code
|
|
102
|
+
* @returns {boolean}
|
|
103
|
+
*/
|
|
104
|
+
export function isSpace(code) {
|
|
105
|
+
// return code === 32;
|
|
106
|
+
return code === 'Space';
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** ------------------------------------------------------- [key] ------------------------------------------------------- */
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @description Direction key check
|
|
113
|
+
* @param {string} code Event.code
|
|
114
|
+
* @returns {boolean}
|
|
115
|
+
*/
|
|
116
|
+
export function isDirectionKey(code) {
|
|
117
|
+
return DIR_KEYCODE.includes(code);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @description [delete, backspace] key check
|
|
122
|
+
* @param {string} code Event.code
|
|
123
|
+
* @returns {boolean}
|
|
124
|
+
*/
|
|
125
|
+
export function isRemoveKey(code) {
|
|
126
|
+
return DELETE_KEYCODE.includes(code);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @description Non-text key check
|
|
131
|
+
* @param {string} code Event.code
|
|
132
|
+
* @returns {boolean}
|
|
133
|
+
*/
|
|
134
|
+
export function isNonTextKey(code) {
|
|
135
|
+
return NON_TEXT_KEYCODE.includes(code);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @description Check if the given key is relevant for history push
|
|
140
|
+
* @param {string} code - Event.code
|
|
141
|
+
* @returns {boolean}
|
|
142
|
+
*/
|
|
143
|
+
export function isHistoryRelevantKey(code) {
|
|
144
|
+
return HISTORY_RELEVANT_KEYS.includes(code);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @description Document type observer key check
|
|
149
|
+
* @param {string} code Event.code
|
|
150
|
+
* @returns {boolean}
|
|
151
|
+
*/
|
|
152
|
+
export function isDocumentTypeObserverKey(code) {
|
|
153
|
+
return DOCUMENT_TYPE_OBSERVER_KEYCODE.includes(code);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @description Non-response key check
|
|
158
|
+
* @param {string} code Event.code
|
|
159
|
+
* @returns {boolean}
|
|
160
|
+
*/
|
|
161
|
+
export function isNonResponseKey(code) {
|
|
162
|
+
return NON_RESPONSE_CODE.includes(code);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const keyCodeMap = {
|
|
166
|
+
isShift,
|
|
167
|
+
isCtrl,
|
|
168
|
+
isAlt,
|
|
169
|
+
isComposing,
|
|
170
|
+
isBackspace,
|
|
171
|
+
isTab,
|
|
172
|
+
isEnter,
|
|
173
|
+
isEsc,
|
|
174
|
+
isSpace,
|
|
175
|
+
isDirectionKey,
|
|
176
|
+
isRemoveKey,
|
|
177
|
+
isNonTextKey,
|
|
178
|
+
isHistoryRelevantKey,
|
|
179
|
+
isDocumentTypeObserverKey,
|
|
180
|
+
isNonResponseKey
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
export default keyCodeMap;
|
package/src/helper/numbers.js
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Number-related helper functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @description Checks for numeric (with decimal point).
|
|
7
|
-
* @param {*} text Text string or number
|
|
8
|
-
* @returns {boolean}
|
|
9
|
-
*/
|
|
10
|
-
export function is(text) {
|
|
11
|
-
return /^-?\d+(\.\d+)?$/.test(text + '');
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @description Get a number.
|
|
16
|
-
* @param {string|number} value Text string or number
|
|
17
|
-
* @param {number} [maxDec=0] Maximum number of decimal places (-1 : Infinity)
|
|
18
|
-
* @returns {number}
|
|
19
|
-
*/
|
|
20
|
-
export function get(value, maxDec = 0) {
|
|
21
|
-
if (!value) return 0;
|
|
22
|
-
|
|
23
|
-
const matched = (value + '').match(/-?\d+(\.\d+)?/);
|
|
24
|
-
if (!matched || !matched[0]) return 0;
|
|
25
|
-
|
|
26
|
-
const number = Number(matched[0]);
|
|
27
|
-
return maxDec < 0 ? number : maxDec === 0 ? Math.round(number) : Number(number.toFixed(maxDec));
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @description It compares the start and end indexes of 'a' and 'b' and returns the number of overlapping indexes in the range.
|
|
32
|
-
* - e.g.) 1, 5, 4, 6 => '2' (4,5)
|
|
33
|
-
* @param {number} aStart Start index of 'a'
|
|
34
|
-
* @param {number} aEnd End index of 'a'
|
|
35
|
-
* @param {number} bStart Start index of 'b'
|
|
36
|
-
* @param {number} bEnd Start index of 'b'
|
|
37
|
-
* @returns {number}
|
|
38
|
-
*/
|
|
39
|
-
export function getOverlapRangeAtIndex(aStart, aEnd, bStart, bEnd) {
|
|
40
|
-
if (aStart <= bEnd ? aEnd < bStart : aEnd > bStart) return 0;
|
|
41
|
-
|
|
42
|
-
const overlap = (aStart > bStart ? aStart : bStart) - (aEnd < bEnd ? aEnd : bEnd);
|
|
43
|
-
return (overlap < 0 ? overlap * -1 : overlap) + 1;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @description Discriminate an even number
|
|
48
|
-
* @param {number} value number
|
|
49
|
-
* @returns {boolean}
|
|
50
|
-
*/
|
|
51
|
-
export function isEven(value) {
|
|
52
|
-
return (value & 1) === 0;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* @description Discriminate an odd number
|
|
57
|
-
* @param {number} value number
|
|
58
|
-
* @returns {boolean}
|
|
59
|
-
*/
|
|
60
|
-
export function isOdd(value) {
|
|
61
|
-
return (value & 1) === 1;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const numbers = {
|
|
65
|
-
is,
|
|
66
|
-
get,
|
|
67
|
-
getOverlapRangeAtIndex,
|
|
68
|
-
isEven,
|
|
69
|
-
isOdd
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export default numbers;
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Number-related helper functions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @description Checks for numeric (with decimal point).
|
|
7
|
+
* @param {*} text Text string or number
|
|
8
|
+
* @returns {boolean}
|
|
9
|
+
*/
|
|
10
|
+
export function is(text) {
|
|
11
|
+
return /^-?\d+(\.\d+)?$/.test(text + '');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @description Get a number.
|
|
16
|
+
* @param {string|number} value Text string or number
|
|
17
|
+
* @param {number} [maxDec=0] Maximum number of decimal places (-1 : Infinity)
|
|
18
|
+
* @returns {number}
|
|
19
|
+
*/
|
|
20
|
+
export function get(value, maxDec = 0) {
|
|
21
|
+
if (!value) return 0;
|
|
22
|
+
|
|
23
|
+
const matched = (value + '').match(/-?\d+(\.\d+)?/);
|
|
24
|
+
if (!matched || !matched[0]) return 0;
|
|
25
|
+
|
|
26
|
+
const number = Number(matched[0]);
|
|
27
|
+
return maxDec < 0 ? number : maxDec === 0 ? Math.round(number) : Number(number.toFixed(maxDec));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @description It compares the start and end indexes of 'a' and 'b' and returns the number of overlapping indexes in the range.
|
|
32
|
+
* - e.g.) 1, 5, 4, 6 => '2' (4,5)
|
|
33
|
+
* @param {number} aStart Start index of 'a'
|
|
34
|
+
* @param {number} aEnd End index of 'a'
|
|
35
|
+
* @param {number} bStart Start index of 'b'
|
|
36
|
+
* @param {number} bEnd Start index of 'b'
|
|
37
|
+
* @returns {number}
|
|
38
|
+
*/
|
|
39
|
+
export function getOverlapRangeAtIndex(aStart, aEnd, bStart, bEnd) {
|
|
40
|
+
if (aStart <= bEnd ? aEnd < bStart : aEnd > bStart) return 0;
|
|
41
|
+
|
|
42
|
+
const overlap = (aStart > bStart ? aStart : bStart) - (aEnd < bEnd ? aEnd : bEnd);
|
|
43
|
+
return (overlap < 0 ? overlap * -1 : overlap) + 1;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @description Discriminate an even number
|
|
48
|
+
* @param {number} value number
|
|
49
|
+
* @returns {boolean}
|
|
50
|
+
*/
|
|
51
|
+
export function isEven(value) {
|
|
52
|
+
return (value & 1) === 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @description Discriminate an odd number
|
|
57
|
+
* @param {number} value number
|
|
58
|
+
* @returns {boolean}
|
|
59
|
+
*/
|
|
60
|
+
export function isOdd(value) {
|
|
61
|
+
return (value & 1) === 1;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const numbers = {
|
|
65
|
+
is,
|
|
66
|
+
get,
|
|
67
|
+
getOverlapRangeAtIndex,
|
|
68
|
+
isEven,
|
|
69
|
+
isOdd
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export default numbers;
|
package/src/helper/unicode.js
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unicode helper functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
const zwsp = 8203;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @description Unicode Character 'ZERO WIDTH SPACE' (\u200B)
|
|
9
|
-
* @type {string}
|
|
10
|
-
*/
|
|
11
|
-
export const zeroWidthSpace = String.fromCharCode(zwsp);
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @description Regular expression to find 'zero width space' (/\u200B/g)
|
|
15
|
-
* @type {RegExp}
|
|
16
|
-
*/
|
|
17
|
-
export const zeroWidthRegExp = new RegExp(String.fromCharCode(zwsp), 'g');
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @description Regular expression to find only 'zero width space' (/\u200B/g)
|
|
21
|
-
* @type {RegExp}
|
|
22
|
-
*/
|
|
23
|
-
export const onlyZeroWidthRegExp = new RegExp('^' + String.fromCharCode(zwsp) + '+$');
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @description Escape a string for safe use in regular expressions.
|
|
27
|
-
* @param {string} string String to escape
|
|
28
|
-
* @returns {string}
|
|
29
|
-
*/
|
|
30
|
-
export function escapeStringRegexp(string) {
|
|
31
|
-
if (typeof string !== 'string') {
|
|
32
|
-
throw new TypeError('Expected a string');
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Escape characters with special meaning either inside or outside character sets.
|
|
36
|
-
// Use a simple backslash escape when it’s always valid, and a `\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.
|
|
37
|
-
return string.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const unicode = {
|
|
41
|
-
zeroWidthSpace,
|
|
42
|
-
zeroWidthRegExp,
|
|
43
|
-
onlyZeroWidthRegExp,
|
|
44
|
-
escapeStringRegexp
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
export default unicode;
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Unicode helper functions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const zwsp = 8203;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @description Unicode Character 'ZERO WIDTH SPACE' (\u200B)
|
|
9
|
+
* @type {string}
|
|
10
|
+
*/
|
|
11
|
+
export const zeroWidthSpace = String.fromCharCode(zwsp);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @description Regular expression to find 'zero width space' (/\u200B/g)
|
|
15
|
+
* @type {RegExp}
|
|
16
|
+
*/
|
|
17
|
+
export const zeroWidthRegExp = new RegExp(String.fromCharCode(zwsp), 'g');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @description Regular expression to find only 'zero width space' (/\u200B/g)
|
|
21
|
+
* @type {RegExp}
|
|
22
|
+
*/
|
|
23
|
+
export const onlyZeroWidthRegExp = new RegExp('^' + String.fromCharCode(zwsp) + '+$');
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @description Escape a string for safe use in regular expressions.
|
|
27
|
+
* @param {string} string String to escape
|
|
28
|
+
* @returns {string}
|
|
29
|
+
*/
|
|
30
|
+
export function escapeStringRegexp(string) {
|
|
31
|
+
if (typeof string !== 'string') {
|
|
32
|
+
throw new TypeError('Expected a string');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Escape characters with special meaning either inside or outside character sets.
|
|
36
|
+
// Use a simple backslash escape when it’s always valid, and a `\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.
|
|
37
|
+
return string.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const unicode = {
|
|
41
|
+
zeroWidthSpace,
|
|
42
|
+
zeroWidthRegExp,
|
|
43
|
+
onlyZeroWidthRegExp,
|
|
44
|
+
escapeStringRegexp
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export default unicode;
|