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/dom/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
// index.js
|
|
2
|
-
import query from './domQuery';
|
|
3
|
-
import check from './domCheck';
|
|
4
|
-
import utils from './domUtils';
|
|
5
|
-
|
|
6
|
-
const dom = {
|
|
7
|
-
query,
|
|
8
|
-
check,
|
|
9
|
-
utils
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export default dom;
|
|
1
|
+
// index.js
|
|
2
|
+
import query from './domQuery';
|
|
3
|
+
import check from './domCheck';
|
|
4
|
+
import utils from './domUtils';
|
|
5
|
+
|
|
6
|
+
const dom = {
|
|
7
|
+
query,
|
|
8
|
+
check,
|
|
9
|
+
utils
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default dom;
|
package/src/helper/env.js
CHANGED
|
@@ -1,240 +1,249 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Environment helper functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/** @type {Window} */
|
|
6
|
-
export const _w = window;
|
|
7
|
-
/** @type {Document} */
|
|
8
|
-
export const _d = document;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @description No event symbol
|
|
12
|
-
* @type {Symbol}
|
|
13
|
-
*/
|
|
14
|
-
export const NO_EVENT = Symbol('noEventHandler');
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @description On over component symbol
|
|
18
|
-
* @type {Symbol}
|
|
19
|
-
*/
|
|
20
|
-
export const ON_OVER_COMPONENT = Symbol('onOverComponent');
|
|
21
|
-
|
|
22
|
-
const userAgent = navigator.userAgent.toLowerCase();
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @description Gets XMLHttpRequest object
|
|
26
|
-
* @returns {XMLHttpRequest}
|
|
27
|
-
*/
|
|
28
|
-
export function getXMLHttpRequest() {
|
|
29
|
-
return new XMLHttpRequest();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @deprecated
|
|
34
|
-
* @description Returns the CSS text that has been applied to the current page.
|
|
35
|
-
* @param {Document|null} doc To get the CSS text of an document. If null get the current document.
|
|
36
|
-
* @returns {string} Styles string
|
|
37
|
-
*/
|
|
38
|
-
export function getPageStyle(doc) {
|
|
39
|
-
let cssText = '';
|
|
40
|
-
const sheets = (doc || _d).styleSheets;
|
|
41
|
-
|
|
42
|
-
for (let i = 0, len = sheets.length, rules; i < len; i++) {
|
|
43
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
44
|
-
try {
|
|
45
|
-
rules = sheets[i].cssRules;
|
|
46
|
-
} catch (e) {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
50
|
-
|
|
51
|
-
if (rules) {
|
|
52
|
-
for (let c = 0, cLen = rules.length; c < cLen; c++) {
|
|
53
|
-
cssText += rules[c].cssText;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return cssText;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* @deprecated
|
|
63
|
-
* @description Get the the tag path of the arguments value
|
|
64
|
-
* @param {Array<string>} nameArray File name array
|
|
65
|
-
* @param {string} extension js, css
|
|
66
|
-
* @returns {string} If not found, return the first found value
|
|
67
|
-
*/
|
|
68
|
-
export function getIncludePath(nameArray, extension) {
|
|
69
|
-
let path = '';
|
|
70
|
-
const pathList = [];
|
|
71
|
-
const tagName = extension === 'js' ? 'script' : 'link';
|
|
72
|
-
const src = extension === 'js' ? 'src' : 'href';
|
|
73
|
-
|
|
74
|
-
let fileName = '(?:';
|
|
75
|
-
for (let i = 0, len = nameArray.length; i < len; i++) {
|
|
76
|
-
fileName += nameArray[i] + (i < len - 1 ? '|' : ')');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const regExp = new RegExp(`(^|.*[\\/])${fileName}(\\.[^\\/]+)?.${extension}(?:\\?.*|;.*)?$`, 'i');
|
|
80
|
-
const extRegExp = new RegExp(`.+\\.${extension}(?:\\?.*|;.*)?$`, 'i');
|
|
81
|
-
|
|
82
|
-
for (let c = _d.getElementsByTagName(tagName), i = 0; i < c.length; i++) {
|
|
83
|
-
if (extRegExp.test(c[i][src])) {
|
|
84
|
-
pathList.push(c[i]);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
for (let i = 0; i < pathList.length; i++) {
|
|
89
|
-
const editorTag = pathList[i][src].match(regExp);
|
|
90
|
-
if (editorTag) {
|
|
91
|
-
path = editorTag[0];
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (path === '') path = pathList.length > 0 ? pathList[0][src] : '';
|
|
97
|
-
|
|
98
|
-
if (!path.includes(':/') && '//' !== path.slice(0, 2)) {
|
|
99
|
-
path = false === path.includes('/') ? location.href.match(/^.*?:\/\/[^/]*/)[0] + path : location.href.match(/^[^?]*\/(?:)/)[0] + path;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (!path) {
|
|
103
|
-
throw '[SUNEDITOR.helper.env.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (path: +' + path + ', extension: ' + extension + ')';
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return path;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** --- Check browser --- */
|
|
110
|
-
/**
|
|
111
|
-
* @description Check if support ResizeObserver function
|
|
112
|
-
* @returns {boolean} Whether support ResizeObserver function or not.
|
|
113
|
-
*/
|
|
114
|
-
export const isResizeObserverSupported = (() => {
|
|
115
|
-
return typeof ResizeObserver === 'function';
|
|
116
|
-
})();
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* @description Check if support navigator.clipboard
|
|
120
|
-
* @returns {boolean} Whether support navigator.clipboard or not.
|
|
121
|
-
*/
|
|
122
|
-
export const isClipboardSupported = (() => {
|
|
123
|
-
/* eslint-disable-next-line compat/compat */
|
|
124
|
-
return typeof navigator.clipboard?.write === 'function';
|
|
125
|
-
})();
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* @description Check if User Agent is Edge
|
|
129
|
-
* @returns {boolean} Whether User Agent is Edge or not.
|
|
130
|
-
*/
|
|
131
|
-
export const isEdge = (() => {
|
|
132
|
-
return /Edg/.test(navigator.userAgent);
|
|
133
|
-
})();
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* @description Check if User Agent is OSX or IOS
|
|
137
|
-
* @type {boolean}
|
|
138
|
-
*/
|
|
139
|
-
export const isOSX_IOS = (() => {
|
|
140
|
-
return /(Mac|iPhone|iPod|iPad)/.test(navigator.userAgent);
|
|
141
|
-
})();
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* @description Check if User Agent Blink engine.
|
|
145
|
-
* @type {boolean}
|
|
146
|
-
*/
|
|
147
|
-
export const isBlink = (() => {
|
|
148
|
-
return userAgent.includes('chrome/') && !userAgent.includes('edge/');
|
|
149
|
-
})();
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* @description Check if User Agent is Firefox (Gecko).
|
|
153
|
-
* @type {boolean}
|
|
154
|
-
*/
|
|
155
|
-
export const isGecko = (() => {
|
|
156
|
-
return !!userAgent.match(/gecko\/\d+/);
|
|
157
|
-
})();
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* @description Check if User Agent is Chromium browser.
|
|
161
|
-
* @type {boolean}
|
|
162
|
-
*/
|
|
163
|
-
export const isChromium = (() => {
|
|
164
|
-
return !!(/** @type {Window & { chrome: any }} */ (_w).chrome);
|
|
165
|
-
})();
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* @description Check if User Agent is Safari.
|
|
169
|
-
* @type {boolean}
|
|
170
|
-
*/
|
|
171
|
-
export const isSafari = (() => {
|
|
172
|
-
return userAgent.includes('applewebkit/') && !userAgent.includes('chrome');
|
|
173
|
-
})();
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* @description Check if User Agent is Mobile device.
|
|
177
|
-
*
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
* @
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
return
|
|
191
|
-
})();
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* @description
|
|
195
|
-
* @type {
|
|
196
|
-
*/
|
|
197
|
-
export const
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Environment helper functions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/** @type {Window} */
|
|
6
|
+
export const _w = window;
|
|
7
|
+
/** @type {Document} */
|
|
8
|
+
export const _d = document;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @description No event symbol
|
|
12
|
+
* @type {Symbol}
|
|
13
|
+
*/
|
|
14
|
+
export const NO_EVENT = Symbol('noEventHandler');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @description On over component symbol
|
|
18
|
+
* @type {Symbol}
|
|
19
|
+
*/
|
|
20
|
+
export const ON_OVER_COMPONENT = Symbol('onOverComponent');
|
|
21
|
+
|
|
22
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @description Gets XMLHttpRequest object
|
|
26
|
+
* @returns {XMLHttpRequest}
|
|
27
|
+
*/
|
|
28
|
+
export function getXMLHttpRequest() {
|
|
29
|
+
return new XMLHttpRequest();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated
|
|
34
|
+
* @description Returns the CSS text that has been applied to the current page.
|
|
35
|
+
* @param {Document|null} doc To get the CSS text of an document. If null get the current document.
|
|
36
|
+
* @returns {string} Styles string
|
|
37
|
+
*/
|
|
38
|
+
export function getPageStyle(doc) {
|
|
39
|
+
let cssText = '';
|
|
40
|
+
const sheets = (doc || _d).styleSheets;
|
|
41
|
+
|
|
42
|
+
for (let i = 0, len = sheets.length, rules; i < len; i++) {
|
|
43
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
44
|
+
try {
|
|
45
|
+
rules = sheets[i].cssRules;
|
|
46
|
+
} catch (e) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
50
|
+
|
|
51
|
+
if (rules) {
|
|
52
|
+
for (let c = 0, cLen = rules.length; c < cLen; c++) {
|
|
53
|
+
cssText += rules[c].cssText;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return cssText;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @deprecated
|
|
63
|
+
* @description Get the the tag path of the arguments value
|
|
64
|
+
* @param {Array<string>} nameArray File name array
|
|
65
|
+
* @param {string} extension js, css
|
|
66
|
+
* @returns {string} If not found, return the first found value
|
|
67
|
+
*/
|
|
68
|
+
export function getIncludePath(nameArray, extension) {
|
|
69
|
+
let path = '';
|
|
70
|
+
const pathList = [];
|
|
71
|
+
const tagName = extension === 'js' ? 'script' : 'link';
|
|
72
|
+
const src = extension === 'js' ? 'src' : 'href';
|
|
73
|
+
|
|
74
|
+
let fileName = '(?:';
|
|
75
|
+
for (let i = 0, len = nameArray.length; i < len; i++) {
|
|
76
|
+
fileName += nameArray[i] + (i < len - 1 ? '|' : ')');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const regExp = new RegExp(`(^|.*[\\/])${fileName}(\\.[^\\/]+)?.${extension}(?:\\?.*|;.*)?$`, 'i');
|
|
80
|
+
const extRegExp = new RegExp(`.+\\.${extension}(?:\\?.*|;.*)?$`, 'i');
|
|
81
|
+
|
|
82
|
+
for (let c = _d.getElementsByTagName(tagName), i = 0; i < c.length; i++) {
|
|
83
|
+
if (extRegExp.test(c[i][src])) {
|
|
84
|
+
pathList.push(c[i]);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
for (let i = 0; i < pathList.length; i++) {
|
|
89
|
+
const editorTag = pathList[i][src].match(regExp);
|
|
90
|
+
if (editorTag) {
|
|
91
|
+
path = editorTag[0];
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (path === '') path = pathList.length > 0 ? pathList[0][src] : '';
|
|
97
|
+
|
|
98
|
+
if (!path.includes(':/') && '//' !== path.slice(0, 2)) {
|
|
99
|
+
path = false === path.includes('/') ? location.href.match(/^.*?:\/\/[^/]*/)[0] + path : location.href.match(/^[^?]*\/(?:)/)[0] + path;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (!path) {
|
|
103
|
+
throw '[SUNEDITOR.helper.env.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (path: +' + path + ', extension: ' + extension + ')';
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return path;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** --- Check browser --- */
|
|
110
|
+
/**
|
|
111
|
+
* @description Check if support ResizeObserver function
|
|
112
|
+
* @returns {boolean} Whether support ResizeObserver function or not.
|
|
113
|
+
*/
|
|
114
|
+
export const isResizeObserverSupported = (() => {
|
|
115
|
+
return typeof ResizeObserver === 'function';
|
|
116
|
+
})();
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @description Check if support navigator.clipboard
|
|
120
|
+
* @returns {boolean} Whether support navigator.clipboard or not.
|
|
121
|
+
*/
|
|
122
|
+
export const isClipboardSupported = (() => {
|
|
123
|
+
/* eslint-disable-next-line compat/compat */
|
|
124
|
+
return typeof navigator.clipboard?.write === 'function';
|
|
125
|
+
})();
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @description Check if User Agent is Edge
|
|
129
|
+
* @returns {boolean} Whether User Agent is Edge or not.
|
|
130
|
+
*/
|
|
131
|
+
export const isEdge = (() => {
|
|
132
|
+
return /Edg/.test(navigator.userAgent);
|
|
133
|
+
})();
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @description Check if User Agent is OSX or IOS
|
|
137
|
+
* @type {boolean}
|
|
138
|
+
*/
|
|
139
|
+
export const isOSX_IOS = (() => {
|
|
140
|
+
return /(Mac|iPhone|iPod|iPad)/.test(navigator.userAgent);
|
|
141
|
+
})();
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @description Check if User Agent Blink engine.
|
|
145
|
+
* @type {boolean}
|
|
146
|
+
*/
|
|
147
|
+
export const isBlink = (() => {
|
|
148
|
+
return userAgent.includes('chrome/') && !userAgent.includes('edge/');
|
|
149
|
+
})();
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @description Check if User Agent is Firefox (Gecko).
|
|
153
|
+
* @type {boolean}
|
|
154
|
+
*/
|
|
155
|
+
export const isGecko = (() => {
|
|
156
|
+
return !!userAgent.match(/gecko\/\d+/);
|
|
157
|
+
})();
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* @description Check if User Agent is Chromium browser.
|
|
161
|
+
* @type {boolean}
|
|
162
|
+
*/
|
|
163
|
+
export const isChromium = (() => {
|
|
164
|
+
return !!(/** @type {Window & { chrome: any }} */ (_w).chrome);
|
|
165
|
+
})();
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @description Check if User Agent is Safari.
|
|
169
|
+
* @type {boolean}
|
|
170
|
+
*/
|
|
171
|
+
export const isSafari = (() => {
|
|
172
|
+
return userAgent.includes('applewebkit/') && !userAgent.includes('chrome');
|
|
173
|
+
})();
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* @description Check if User Agent is Mobile device.
|
|
177
|
+
* @type {boolean}
|
|
178
|
+
*/
|
|
179
|
+
export const isMobile = (() => {
|
|
180
|
+
/* eslint-disable-next-line compat/compat */
|
|
181
|
+
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);
|
|
182
|
+
})();
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @description Check if the device is touchable.
|
|
186
|
+
* @type {boolean}
|
|
187
|
+
*/
|
|
188
|
+
export const isTouchDevice = (() => {
|
|
189
|
+
/* eslint-disable-next-line compat/compat */
|
|
190
|
+
return navigator.maxTouchPoints > 0 && 'ontouchstart' in _w;
|
|
191
|
+
})();
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @description Check if User Agent is Android mobile device.
|
|
195
|
+
* @type {boolean}
|
|
196
|
+
*/
|
|
197
|
+
export const isAndroid = (() => {
|
|
198
|
+
return userAgent.includes('android');
|
|
199
|
+
})();
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @description Command(Mac) or CTRL(Window) icon.
|
|
203
|
+
* @type {string}
|
|
204
|
+
*/
|
|
205
|
+
export const cmdIcon = isOSX_IOS ? '⌘' : 'CTRL';
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* @description SHIFT(Mac, Window) icon.
|
|
209
|
+
* @type {string}
|
|
210
|
+
*/
|
|
211
|
+
export const shiftIcon = isOSX_IOS ? '⇧' : '+SHIFT';
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* @description Device pixel ratio
|
|
215
|
+
* @type {number}
|
|
216
|
+
*/
|
|
217
|
+
export const DPI = _w.devicePixelRatio;
|
|
218
|
+
|
|
219
|
+
/** --- editor env --- */
|
|
220
|
+
export const KATEX_WEBSITE = 'https://katex.org/docs/supported.html';
|
|
221
|
+
export const MATHJAX_WEBSITE = 'https://www.mathjax.org/';
|
|
222
|
+
|
|
223
|
+
const env = {
|
|
224
|
+
_w,
|
|
225
|
+
_d,
|
|
226
|
+
NO_EVENT,
|
|
227
|
+
ON_OVER_COMPONENT,
|
|
228
|
+
getXMLHttpRequest,
|
|
229
|
+
getPageStyle,
|
|
230
|
+
getIncludePath,
|
|
231
|
+
isResizeObserverSupported,
|
|
232
|
+
isClipboardSupported,
|
|
233
|
+
isEdge,
|
|
234
|
+
isBlink,
|
|
235
|
+
isGecko,
|
|
236
|
+
isChromium,
|
|
237
|
+
isSafari,
|
|
238
|
+
isOSX_IOS,
|
|
239
|
+
isAndroid,
|
|
240
|
+
isMobile,
|
|
241
|
+
isTouchDevice,
|
|
242
|
+
cmdIcon,
|
|
243
|
+
shiftIcon,
|
|
244
|
+
DPI,
|
|
245
|
+
KATEX_WEBSITE,
|
|
246
|
+
MATHJAX_WEBSITE
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export default env;
|
package/src/helper/index.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import Env from './env';
|
|
2
|
-
import Unicode from './unicode';
|
|
3
|
-
import Converter from './converter';
|
|
4
|
-
import Dom from './dom';
|
|
5
|
-
import Numbers from './numbers';
|
|
6
|
-
import KeyCodeMap from './keyCodeMap';
|
|
7
|
-
import Clipboard from './clipboard';
|
|
8
|
-
|
|
9
|
-
export const env = Env;
|
|
10
|
-
export const unicode = Unicode;
|
|
11
|
-
export const converter = Converter;
|
|
12
|
-
export const dom = Dom;
|
|
13
|
-
export const numbers = Numbers;
|
|
14
|
-
export const keyCodeMap = KeyCodeMap;
|
|
15
|
-
export const clipboard = Clipboard;
|
|
16
|
-
|
|
17
|
-
export default {
|
|
18
|
-
env,
|
|
19
|
-
unicode,
|
|
20
|
-
converter,
|
|
21
|
-
dom,
|
|
22
|
-
numbers,
|
|
23
|
-
keyCodeMap,
|
|
24
|
-
clipboard
|
|
25
|
-
};
|
|
1
|
+
import Env from './env';
|
|
2
|
+
import Unicode from './unicode';
|
|
3
|
+
import Converter from './converter';
|
|
4
|
+
import Dom from './dom';
|
|
5
|
+
import Numbers from './numbers';
|
|
6
|
+
import KeyCodeMap from './keyCodeMap';
|
|
7
|
+
import Clipboard from './clipboard';
|
|
8
|
+
|
|
9
|
+
export const env = Env;
|
|
10
|
+
export const unicode = Unicode;
|
|
11
|
+
export const converter = Converter;
|
|
12
|
+
export const dom = Dom;
|
|
13
|
+
export const numbers = Numbers;
|
|
14
|
+
export const keyCodeMap = KeyCodeMap;
|
|
15
|
+
export const clipboard = Clipboard;
|
|
16
|
+
|
|
17
|
+
export default {
|
|
18
|
+
env,
|
|
19
|
+
unicode,
|
|
20
|
+
converter,
|
|
21
|
+
dom,
|
|
22
|
+
numbers,
|
|
23
|
+
keyCodeMap,
|
|
24
|
+
clipboard
|
|
25
|
+
};
|