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.
Files changed (177) hide show
  1. package/CONTRIBUTING.md +186 -184
  2. package/LICENSE +21 -21
  3. package/README.md +157 -180
  4. package/dist/suneditor.min.css +1 -1
  5. package/dist/suneditor.min.js +1 -1
  6. package/package.json +126 -123
  7. package/src/assets/design/color.css +131 -121
  8. package/src/assets/design/index.css +3 -3
  9. package/src/assets/design/size.css +37 -35
  10. package/src/assets/design/typography.css +37 -37
  11. package/src/assets/icons/defaultIcons.js +247 -232
  12. package/src/assets/suneditor-contents.css +779 -778
  13. package/src/assets/suneditor.css +43 -35
  14. package/src/core/base/eventHandlers/handler_toolbar.js +135 -135
  15. package/src/core/base/eventHandlers/handler_ww_clipboard.js +56 -56
  16. package/src/core/base/eventHandlers/handler_ww_dragDrop.js +115 -113
  17. package/src/core/base/eventHandlers/handler_ww_key_input.js +1200 -1200
  18. package/src/core/base/eventHandlers/handler_ww_mouse.js +194 -194
  19. package/src/core/base/eventManager.js +1550 -1484
  20. package/src/core/base/history.js +355 -355
  21. package/src/core/class/char.js +163 -162
  22. package/src/core/class/component.js +856 -842
  23. package/src/core/class/format.js +3433 -3422
  24. package/src/core/class/html.js +1927 -1890
  25. package/src/core/class/menu.js +357 -346
  26. package/src/core/class/nodeTransform.js +424 -424
  27. package/src/core/class/offset.js +858 -891
  28. package/src/core/class/selection.js +710 -620
  29. package/src/core/class/shortcuts.js +98 -98
  30. package/src/core/class/toolbar.js +438 -430
  31. package/src/core/class/ui.js +424 -422
  32. package/src/core/class/viewer.js +750 -750
  33. package/src/core/editor.js +1810 -1708
  34. package/src/core/section/actives.js +268 -241
  35. package/src/core/section/constructor.js +1348 -1661
  36. package/src/core/section/context.js +102 -102
  37. package/src/core/section/documentType.js +582 -561
  38. package/src/core/section/options.js +367 -0
  39. package/src/core/util/instanceCheck.js +59 -0
  40. package/src/editorInjector/_classes.js +36 -36
  41. package/src/editorInjector/_core.js +92 -92
  42. package/src/editorInjector/index.js +75 -75
  43. package/src/events.js +634 -622
  44. package/src/helper/clipboard.js +59 -59
  45. package/src/helper/converter.js +586 -564
  46. package/src/helper/dom/domCheck.js +304 -304
  47. package/src/helper/dom/domQuery.js +677 -669
  48. package/src/helper/dom/domUtils.js +618 -557
  49. package/src/helper/dom/index.js +12 -12
  50. package/src/helper/env.js +249 -240
  51. package/src/helper/index.js +25 -25
  52. package/src/helper/keyCodeMap.js +183 -183
  53. package/src/helper/numbers.js +72 -72
  54. package/src/helper/unicode.js +47 -47
  55. package/src/langs/ckb.js +231 -231
  56. package/src/langs/cs.js +231 -231
  57. package/src/langs/da.js +231 -231
  58. package/src/langs/de.js +231 -231
  59. package/src/langs/en.js +230 -230
  60. package/src/langs/es.js +231 -231
  61. package/src/langs/fa.js +231 -231
  62. package/src/langs/fr.js +231 -231
  63. package/src/langs/he.js +231 -231
  64. package/src/langs/hu.js +230 -230
  65. package/src/langs/index.js +28 -28
  66. package/src/langs/it.js +231 -231
  67. package/src/langs/ja.js +230 -230
  68. package/src/langs/km.js +230 -230
  69. package/src/langs/ko.js +230 -230
  70. package/src/langs/lv.js +231 -231
  71. package/src/langs/nl.js +231 -231
  72. package/src/langs/pl.js +231 -231
  73. package/src/langs/pt_br.js +231 -231
  74. package/src/langs/ro.js +231 -231
  75. package/src/langs/ru.js +231 -231
  76. package/src/langs/se.js +231 -231
  77. package/src/langs/tr.js +231 -231
  78. package/src/langs/uk.js +231 -231
  79. package/src/langs/ur.js +231 -231
  80. package/src/langs/zh_cn.js +231 -231
  81. package/src/modules/ApiManager.js +191 -191
  82. package/src/modules/Browser.js +669 -667
  83. package/src/modules/ColorPicker.js +364 -362
  84. package/src/modules/Controller.js +474 -454
  85. package/src/modules/Figure.js +1620 -1617
  86. package/src/modules/FileManager.js +359 -359
  87. package/src/modules/HueSlider.js +577 -565
  88. package/src/modules/Modal.js +346 -346
  89. package/src/modules/ModalAnchorEditor.js +643 -643
  90. package/src/modules/SelectMenu.js +549 -549
  91. package/src/modules/_DragHandle.js +17 -17
  92. package/src/modules/index.js +14 -14
  93. package/src/plugins/browser/audioGallery.js +83 -83
  94. package/src/plugins/browser/fileBrowser.js +103 -103
  95. package/src/plugins/browser/fileGallery.js +83 -83
  96. package/src/plugins/browser/imageGallery.js +81 -81
  97. package/src/plugins/browser/videoGallery.js +103 -103
  98. package/src/plugins/command/blockquote.js +61 -60
  99. package/src/plugins/command/exportPDF.js +134 -134
  100. package/src/plugins/command/fileUpload.js +456 -456
  101. package/src/plugins/command/list_bulleted.js +149 -148
  102. package/src/plugins/command/list_numbered.js +152 -151
  103. package/src/plugins/dropdown/align.js +157 -155
  104. package/src/plugins/dropdown/backgroundColor.js +108 -104
  105. package/src/plugins/dropdown/font.js +141 -137
  106. package/src/plugins/dropdown/fontColor.js +109 -105
  107. package/src/plugins/dropdown/formatBlock.js +170 -178
  108. package/src/plugins/dropdown/hr.js +152 -152
  109. package/src/plugins/dropdown/layout.js +83 -83
  110. package/src/plugins/dropdown/lineHeight.js +131 -130
  111. package/src/plugins/dropdown/list.js +123 -122
  112. package/src/plugins/dropdown/paragraphStyle.js +138 -138
  113. package/src/plugins/dropdown/table.js +4110 -4000
  114. package/src/plugins/dropdown/template.js +83 -83
  115. package/src/plugins/dropdown/textStyle.js +149 -149
  116. package/src/plugins/field/mention.js +242 -242
  117. package/src/plugins/index.js +120 -120
  118. package/src/plugins/input/fontSize.js +414 -410
  119. package/src/plugins/input/pageNavigator.js +71 -70
  120. package/src/plugins/modal/audio.js +677 -677
  121. package/src/plugins/modal/drawing.js +537 -531
  122. package/src/plugins/modal/embed.js +886 -886
  123. package/src/plugins/modal/image.js +1377 -1376
  124. package/src/plugins/modal/link.js +248 -240
  125. package/src/plugins/modal/math.js +563 -563
  126. package/src/plugins/modal/video.js +1226 -1226
  127. package/src/plugins/popup/anchor.js +224 -222
  128. package/src/suneditor.js +114 -107
  129. package/src/themes/dark.css +132 -122
  130. package/src/typedef.js +132 -130
  131. package/types/assets/icons/defaultIcons.d.ts +8 -0
  132. package/types/core/base/eventManager.d.ts +29 -4
  133. package/types/core/class/char.d.ts +2 -1
  134. package/types/core/class/component.d.ts +1 -2
  135. package/types/core/class/format.d.ts +8 -1
  136. package/types/core/class/html.d.ts +8 -0
  137. package/types/core/class/menu.d.ts +8 -0
  138. package/types/core/class/offset.d.ts +24 -26
  139. package/types/core/class/selection.d.ts +2 -0
  140. package/types/core/class/toolbar.d.ts +6 -0
  141. package/types/core/class/ui.d.ts +1 -1
  142. package/types/core/editor.d.ts +34 -12
  143. package/types/core/section/constructor.d.ts +5 -638
  144. package/types/core/section/documentType.d.ts +12 -2
  145. package/types/core/section/options.d.ts +740 -0
  146. package/types/core/util/instanceCheck.d.ts +50 -0
  147. package/types/editorInjector/_core.d.ts +5 -5
  148. package/types/editorInjector/index.d.ts +2 -2
  149. package/types/events.d.ts +2 -0
  150. package/types/helper/converter.d.ts +9 -0
  151. package/types/helper/dom/domQuery.d.ts +5 -5
  152. package/types/helper/dom/domUtils.d.ts +8 -0
  153. package/types/helper/env.d.ts +6 -1
  154. package/types/helper/index.d.ts +4 -1
  155. package/types/index.d.ts +122 -120
  156. package/types/langs/_Lang.d.ts +194 -194
  157. package/types/modules/ColorPicker.d.ts +5 -1
  158. package/types/modules/Controller.d.ts +8 -4
  159. package/types/modules/Figure.d.ts +2 -1
  160. package/types/modules/HueSlider.d.ts +4 -1
  161. package/types/modules/SelectMenu.d.ts +1 -1
  162. package/types/plugins/command/blockquote.d.ts +1 -0
  163. package/types/plugins/command/list_bulleted.d.ts +1 -0
  164. package/types/plugins/command/list_numbered.d.ts +1 -0
  165. package/types/plugins/dropdown/align.d.ts +1 -0
  166. package/types/plugins/dropdown/backgroundColor.d.ts +1 -0
  167. package/types/plugins/dropdown/font.d.ts +1 -0
  168. package/types/plugins/dropdown/fontColor.d.ts +1 -0
  169. package/types/plugins/dropdown/formatBlock.d.ts +3 -2
  170. package/types/plugins/dropdown/lineHeight.d.ts +1 -0
  171. package/types/plugins/dropdown/list.d.ts +1 -0
  172. package/types/plugins/dropdown/table.d.ts +6 -0
  173. package/types/plugins/input/fontSize.d.ts +1 -0
  174. package/types/plugins/modal/drawing.d.ts +4 -0
  175. package/types/plugins/modal/link.d.ts +32 -15
  176. package/types/suneditor.d.ts +13 -9
  177. package/types/typedef.d.ts +8 -0
@@ -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;
@@ -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;
@@ -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;