suneditor 3.0.0-alpha.9 → 3.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +170 -22
- package/{LICENSE.txt → LICENSE} +9 -9
- package/README.md +168 -30
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +47 -21
- package/src/assets/design/color.css +121 -0
- package/src/assets/design/index.css +3 -0
- package/src/assets/design/size.css +35 -0
- package/src/assets/design/typography.css +37 -0
- package/src/assets/icons/defaultIcons.js +232 -0
- package/src/assets/suneditor-contents.css +181 -46
- package/src/assets/suneditor.css +1403 -650
- package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
- package/src/core/base/eventHandlers/handler_ww_clipboard.js +23 -4
- package/src/core/base/eventHandlers/handler_ww_dragDrop.js +49 -10
- package/src/core/base/eventHandlers/handler_ww_key_input.js +422 -224
- package/src/core/base/eventHandlers/handler_ww_mouse.js +83 -36
- package/src/core/base/eventManager.js +520 -179
- package/src/core/base/history.js +95 -41
- package/src/core/class/char.js +26 -11
- package/src/core/class/component.js +345 -137
- package/src/core/class/format.js +683 -519
- package/src/core/class/html.js +485 -305
- package/src/core/class/menu.js +133 -47
- package/src/core/class/nodeTransform.js +90 -71
- package/src/core/class/offset.js +408 -92
- package/src/core/class/selection.js +216 -106
- package/src/core/class/shortcuts.js +68 -8
- package/src/core/class/toolbar.js +106 -116
- package/src/core/class/ui.js +422 -0
- package/src/core/class/viewer.js +178 -74
- package/src/core/editor.js +496 -389
- package/src/core/section/actives.js +123 -27
- package/src/core/section/constructor.js +615 -206
- package/src/core/section/context.js +28 -23
- package/src/core/section/documentType.js +561 -0
- package/src/editorInjector/_classes.js +19 -5
- package/src/editorInjector/_core.js +71 -7
- package/src/editorInjector/index.js +63 -1
- package/src/events.js +622 -0
- package/src/helper/clipboard.js +59 -0
- package/src/helper/converter.js +202 -26
- package/src/helper/dom/domCheck.js +304 -0
- package/src/helper/dom/domQuery.js +669 -0
- package/src/helper/dom/domUtils.js +557 -0
- package/src/helper/dom/index.js +12 -0
- package/src/helper/env.js +46 -56
- package/src/helper/index.js +10 -4
- package/src/helper/keyCodeMap.js +183 -0
- package/src/helper/numbers.js +12 -8
- package/src/helper/unicode.js +9 -5
- package/src/langs/ckb.js +74 -4
- package/src/langs/cs.js +72 -2
- package/src/langs/da.js +73 -3
- package/src/langs/de.js +73 -4
- package/src/langs/en.js +23 -3
- package/src/langs/es.js +73 -4
- package/src/langs/fa.js +75 -3
- package/src/langs/fr.js +73 -3
- package/src/langs/he.js +73 -4
- package/src/langs/hu.js +230 -0
- package/src/langs/index.js +7 -3
- package/src/langs/it.js +70 -1
- package/src/langs/ja.js +72 -4
- package/src/langs/km.js +230 -0
- package/src/langs/ko.js +22 -2
- package/src/langs/lv.js +74 -5
- package/src/langs/nl.js +73 -4
- package/src/langs/pl.js +73 -4
- package/src/langs/pt_br.js +70 -1
- package/src/langs/ro.js +74 -5
- package/src/langs/ru.js +73 -4
- package/src/langs/se.js +73 -4
- package/src/langs/tr.js +73 -1
- package/src/langs/{ua.js → uk.js} +75 -6
- package/src/langs/ur.js +77 -8
- package/src/langs/zh_cn.js +74 -5
- package/src/modules/ApiManager.js +77 -54
- package/src/modules/Browser.js +667 -0
- package/src/modules/ColorPicker.js +162 -102
- package/src/modules/Controller.js +273 -142
- package/src/modules/Figure.js +925 -484
- package/src/modules/FileManager.js +121 -69
- package/src/modules/HueSlider.js +113 -61
- package/src/modules/Modal.js +291 -122
- package/src/modules/ModalAnchorEditor.js +383 -234
- package/src/modules/SelectMenu.js +270 -168
- package/src/modules/_DragHandle.js +2 -1
- package/src/modules/index.js +3 -3
- package/src/plugins/browser/audioGallery.js +83 -0
- package/src/plugins/browser/fileBrowser.js +103 -0
- package/src/plugins/browser/fileGallery.js +83 -0
- package/src/plugins/browser/imageGallery.js +81 -0
- package/src/plugins/browser/videoGallery.js +103 -0
- package/src/plugins/command/blockquote.js +40 -27
- package/src/plugins/command/exportPDF.js +134 -0
- package/src/plugins/command/fileUpload.js +229 -162
- package/src/plugins/command/list_bulleted.js +83 -47
- package/src/plugins/command/list_numbered.js +83 -47
- package/src/plugins/dropdown/align.js +66 -54
- package/src/plugins/dropdown/backgroundColor.js +63 -49
- package/src/plugins/dropdown/font.js +71 -47
- package/src/plugins/dropdown/fontColor.js +63 -48
- package/src/plugins/dropdown/formatBlock.js +70 -33
- package/src/plugins/dropdown/hr.js +92 -51
- package/src/plugins/dropdown/layout.js +37 -26
- package/src/plugins/dropdown/lineHeight.js +54 -38
- package/src/plugins/dropdown/list.js +60 -45
- package/src/plugins/dropdown/paragraphStyle.js +51 -30
- package/src/plugins/dropdown/table.js +2003 -813
- package/src/plugins/dropdown/template.js +38 -26
- package/src/plugins/dropdown/textStyle.js +43 -31
- package/src/plugins/field/mention.js +147 -86
- package/src/plugins/index.js +32 -6
- package/src/plugins/input/fontSize.js +161 -108
- package/src/plugins/input/pageNavigator.js +70 -0
- package/src/plugins/modal/audio.js +358 -173
- package/src/plugins/modal/drawing.js +531 -0
- package/src/plugins/modal/embed.js +886 -0
- package/src/plugins/modal/image.js +674 -362
- package/src/plugins/modal/link.js +100 -71
- package/src/plugins/modal/math.js +367 -167
- package/src/plugins/modal/video.js +691 -335
- package/src/plugins/popup/anchor.js +222 -0
- package/src/suneditor.js +50 -13
- package/src/themes/dark.css +122 -0
- package/src/typedef.js +130 -0
- package/types/assets/icons/defaultIcons.d.ts +153 -0
- package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
- package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
- package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
- package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
- package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
- package/types/core/base/eventManager.d.ts +385 -0
- package/types/core/base/history.d.ts +81 -0
- package/types/core/class/char.d.ts +60 -0
- package/types/core/class/component.d.ts +212 -0
- package/types/core/class/format.d.ts +616 -0
- package/types/core/class/html.d.ts +422 -0
- package/types/core/class/menu.d.ts +126 -0
- package/types/core/class/nodeTransform.d.ts +93 -0
- package/types/core/class/offset.d.ts +522 -0
- package/types/core/class/selection.d.ts +188 -0
- package/types/core/class/shortcuts.d.ts +142 -0
- package/types/core/class/toolbar.d.ts +189 -0
- package/types/core/class/ui.d.ts +164 -0
- package/types/core/class/viewer.d.ts +140 -0
- package/types/core/editor.d.ts +610 -0
- package/types/core/section/actives.d.ts +46 -0
- package/types/core/section/constructor.d.ts +777 -0
- package/types/core/section/context.d.ts +45 -0
- package/types/core/section/documentType.d.ts +178 -0
- package/types/editorInjector/_classes.d.ts +41 -0
- package/types/editorInjector/_core.d.ts +92 -0
- package/types/editorInjector/index.d.ts +71 -0
- package/types/events.d.ts +273 -0
- package/types/helper/clipboard.d.ts +12 -0
- package/types/helper/converter.d.ts +197 -0
- package/types/helper/dom/domCheck.d.ts +189 -0
- package/types/helper/dom/domQuery.d.ts +223 -0
- package/types/helper/dom/domUtils.d.ts +226 -0
- package/types/helper/dom/index.d.ts +9 -0
- package/types/helper/env.d.ts +132 -0
- package/types/helper/index.d.ts +174 -0
- package/types/helper/keyCodeMap.d.ts +110 -0
- package/types/helper/numbers.d.ts +46 -0
- package/types/helper/unicode.d.ts +28 -0
- package/types/index.d.ts +120 -0
- package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +173 -103
- package/types/langs/ckb.d.ts +3 -0
- package/types/langs/cs.d.ts +3 -0
- package/types/langs/da.d.ts +3 -0
- package/types/langs/de.d.ts +3 -0
- package/types/langs/en.d.ts +3 -0
- package/types/langs/es.d.ts +3 -0
- package/types/langs/fa.d.ts +3 -0
- package/types/langs/fr.d.ts +3 -0
- package/types/langs/he.d.ts +3 -0
- package/types/langs/hu.d.ts +3 -0
- package/types/langs/index.d.ts +54 -0
- package/types/langs/it.d.ts +3 -0
- package/types/langs/ja.d.ts +3 -0
- package/types/langs/km.d.ts +3 -0
- package/types/langs/ko.d.ts +3 -0
- package/types/langs/lv.d.ts +3 -0
- package/types/langs/nl.d.ts +3 -0
- package/types/langs/pl.d.ts +3 -0
- package/types/langs/pt_br.d.ts +3 -0
- package/types/langs/ro.d.ts +3 -0
- package/types/langs/ru.d.ts +3 -0
- package/types/langs/se.d.ts +3 -0
- package/types/langs/tr.d.ts +3 -0
- package/types/langs/uk.d.ts +3 -0
- package/types/langs/ur.d.ts +3 -0
- package/types/langs/zh_cn.d.ts +3 -0
- package/types/modules/ApiManager.d.ts +125 -0
- package/types/modules/Browser.d.ts +326 -0
- package/types/modules/ColorPicker.d.ts +131 -0
- package/types/modules/Controller.d.ts +251 -0
- package/types/modules/Figure.d.ts +517 -0
- package/types/modules/FileManager.d.ts +202 -0
- package/types/modules/HueSlider.d.ts +136 -0
- package/types/modules/Modal.d.ts +111 -0
- package/types/modules/ModalAnchorEditor.d.ts +236 -0
- package/types/modules/SelectMenu.d.ts +194 -0
- package/types/modules/_DragHandle.d.ts +7 -0
- package/types/modules/index.d.ts +26 -0
- package/types/plugins/browser/audioGallery.d.ts +55 -0
- package/types/plugins/browser/fileBrowser.d.ts +64 -0
- package/types/plugins/browser/fileGallery.d.ts +55 -0
- package/types/plugins/browser/imageGallery.d.ts +51 -0
- package/types/plugins/browser/videoGallery.d.ts +57 -0
- package/types/plugins/command/blockquote.d.ts +28 -0
- package/types/plugins/command/exportPDF.d.ts +46 -0
- package/types/plugins/command/fileUpload.d.ts +156 -0
- package/types/plugins/command/list_bulleted.d.ts +46 -0
- package/types/plugins/command/list_numbered.d.ts +46 -0
- package/types/plugins/dropdown/align.d.ts +60 -0
- package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
- package/types/plugins/dropdown/font.d.ts +54 -0
- package/types/plugins/dropdown/fontColor.d.ts +63 -0
- package/types/plugins/dropdown/formatBlock.d.ts +54 -0
- package/types/plugins/dropdown/hr.d.ts +71 -0
- package/types/plugins/dropdown/layout.d.ts +40 -0
- package/types/plugins/dropdown/lineHeight.d.ts +50 -0
- package/types/plugins/dropdown/list.d.ts +39 -0
- package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
- package/types/plugins/dropdown/table.d.ts +627 -0
- package/types/plugins/dropdown/template.d.ts +40 -0
- package/types/plugins/dropdown/textStyle.d.ts +41 -0
- package/types/plugins/field/mention.d.ts +102 -0
- package/types/plugins/index.d.ts +107 -0
- package/types/plugins/input/fontSize.d.ts +170 -0
- package/types/plugins/input/pageNavigator.d.ts +28 -0
- package/types/plugins/modal/audio.d.ts +269 -0
- package/types/plugins/modal/drawing.d.ts +246 -0
- package/types/plugins/modal/embed.d.ts +387 -0
- package/types/plugins/modal/image.d.ts +451 -0
- package/types/plugins/modal/link.d.ts +128 -0
- package/types/plugins/modal/math.d.ts +193 -0
- package/types/plugins/modal/video.d.ts +485 -0
- package/types/plugins/popup/anchor.d.ts +56 -0
- package/types/suneditor.d.ts +51 -0
- package/types/typedef.d.ts +233 -0
- package/.eslintignore +0 -7
- package/.eslintrc.json +0 -64
- package/src/assets/icons/_default.js +0 -194
- package/src/core/base/events.js +0 -320
- package/src/core/class/notice.js +0 -42
- package/src/helper/domUtils.js +0 -1177
- package/src/modules/FileBrowser.js +0 -271
- package/src/plugins/command/exportPdf.js +0 -168
- package/src/plugins/fileBrowser/imageGallery.js +0 -81
- package/src/themes/test.css +0 -61
- package/typings/CommandPlugin.d.ts +0 -8
- package/typings/DialogPlugin.d.ts +0 -20
- package/typings/FileBrowserPlugin.d.ts +0 -30
- package/typings/Module.d.ts +0 -15
- package/typings/Plugin.d.ts +0 -42
- package/typings/SubmenuPlugin.d.ts +0 -8
- package/typings/_classes.d.ts +0 -17
- package/typings/_colorPicker.d.ts +0 -60
- package/typings/_core.d.ts +0 -55
- package/typings/align.d.ts +0 -5
- package/typings/audio.d.ts +0 -5
- package/typings/backgroundColor.d.ts +0 -5
- package/typings/blockquote.d.ts +0 -5
- package/typings/char.d.ts +0 -39
- package/typings/component.d.ts +0 -38
- package/typings/context.d.ts +0 -39
- package/typings/converter.d.ts +0 -33
- package/typings/dialog.d.ts +0 -28
- package/typings/domUtils.d.ts +0 -361
- package/typings/editor.d.ts +0 -7
- package/typings/editor.ts +0 -542
- package/typings/env.d.ts +0 -70
- package/typings/eventManager.d.ts +0 -37
- package/typings/events.d.ts +0 -262
- package/typings/fileBrowser.d.ts +0 -42
- package/typings/fileManager.d.ts +0 -67
- package/typings/font.d.ts +0 -5
- package/typings/fontColor.d.ts +0 -5
- package/typings/fontSize.d.ts +0 -5
- package/typings/format.d.ts +0 -191
- package/typings/formatBlock.d.ts +0 -5
- package/typings/history.d.ts +0 -48
- package/typings/horizontalRule.d.ts +0 -5
- package/typings/image.d.ts +0 -5
- package/typings/imageGallery.d.ts +0 -5
- package/typings/index.d.ts +0 -21
- package/typings/index.modules.d.ts +0 -11
- package/typings/index.plugins.d.ts +0 -58
- package/typings/lineHeight.d.ts +0 -5
- package/typings/link.d.ts +0 -5
- package/typings/list.d.ts +0 -5
- package/typings/math.d.ts +0 -5
- package/typings/mediaContainer.d.ts +0 -25
- package/typings/mention.d.ts +0 -5
- package/typings/node.d.ts +0 -57
- package/typings/notice.d.ts +0 -16
- package/typings/numbers.d.ts +0 -29
- package/typings/offset.d.ts +0 -24
- package/typings/options.d.ts +0 -589
- package/typings/paragraphStyle.d.ts +0 -5
- package/typings/resizing.d.ts +0 -141
- package/typings/selection.d.ts +0 -94
- package/typings/shortcuts.d.ts +0 -13
- package/typings/suneditor.d.ts +0 -9
- package/typings/table.d.ts +0 -5
- package/typings/template.d.ts +0 -5
- package/typings/textStyle.d.ts +0 -5
- package/typings/toolbar.d.ts +0 -32
- package/typings/unicode.d.ts +0 -25
- package/typings/video.d.ts +0 -5
|
@@ -2,44 +2,79 @@ import CoreInjector from '../editorInjector/_core';
|
|
|
2
2
|
import ApiManager from './ApiManager';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* @
|
|
7
|
-
* @
|
|
5
|
+
* @typedef {Object} FileStateInfo
|
|
6
|
+
* @property {string} src File source
|
|
7
|
+
* @property {number} index File index
|
|
8
|
+
* @property {string} name File name
|
|
9
|
+
* @property {number} size File size
|
|
8
10
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {Object} FileStateParams
|
|
14
|
+
* @property {__se__EditorCore} editor - The root editor instance
|
|
15
|
+
* @property {Node} element File element
|
|
16
|
+
* @property {number} index File index
|
|
17
|
+
* @property {string} state File state ("create"|"update"|"delete")
|
|
18
|
+
* @property {FileStateInfo} info File information
|
|
19
|
+
* @property {number} remainingFilesCount Remaining file count
|
|
20
|
+
* @property {string} pluginName Plugin name
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {Object} FileManagerParams
|
|
25
|
+
* @property {string} query The query selector used to find file elements in the editor
|
|
26
|
+
* @property {(params: Array<FileStateInfo>) => void=} loadHandler A function to handle the loaded file information
|
|
27
|
+
* @property {(info: FileStateParams) => void=} eventHandler A function to handle file-related events
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @class
|
|
32
|
+
* @description This module manages the file information of the editor.
|
|
33
|
+
*/
|
|
34
|
+
class FileManager extends CoreInjector {
|
|
35
|
+
/**
|
|
36
|
+
* @constructor
|
|
37
|
+
* @param {*} inst The instance object that called the constructor.
|
|
38
|
+
* @param {FileManagerParams} params FileManager options
|
|
39
|
+
*/
|
|
40
|
+
constructor(inst, params) {
|
|
41
|
+
super(inst.editor);
|
|
42
|
+
this.ui = this.editor.ui;
|
|
43
|
+
|
|
44
|
+
// members
|
|
45
|
+
inst.__fileManagement = this;
|
|
46
|
+
this.kind = inst.constructor.key || inst.constructor.name;
|
|
47
|
+
this.inst = inst;
|
|
48
|
+
this.component = inst.editor.component;
|
|
49
|
+
this.query = params.query;
|
|
50
|
+
this.loadHandler = params.loadHandler;
|
|
51
|
+
this.eventHandler = params.eventHandler;
|
|
52
|
+
this.infoList = [];
|
|
53
|
+
this.infoIndex = 0;
|
|
54
|
+
this.uploadFileLength = 0;
|
|
55
|
+
this.__updateTags = [];
|
|
56
|
+
// api manager
|
|
57
|
+
this.apiManager = new ApiManager(this, null);
|
|
58
|
+
|
|
59
|
+
// se-ts-ignore - call by editor
|
|
60
|
+
void this._resetInfo;
|
|
61
|
+
void this._checkInfo;
|
|
62
|
+
}
|
|
63
|
+
|
|
29
64
|
/**
|
|
30
65
|
* @description Upload the file to the server.
|
|
31
66
|
* @param {string} uploadUrl Upload server url
|
|
32
|
-
* @param {Object
|
|
33
|
-
* @param {
|
|
34
|
-
* @param {
|
|
35
|
-
* @param {
|
|
67
|
+
* @param {?Object<string, string>} uploadHeader Request header
|
|
68
|
+
* @param {FileList|File[]|{formData: FormData, size: number}} data FormData in body or Files array
|
|
69
|
+
* @param {?(xmlHttp: XMLHttpRequest) => boolean=} callBack Success call back function
|
|
70
|
+
* @param {?(res: *, xmlHttp: XMLHttpRequest) => string=} errorCallBack Error call back function
|
|
36
71
|
*/
|
|
37
72
|
upload(uploadUrl, uploadHeader, data, callBack, errorCallBack) {
|
|
38
|
-
this.
|
|
73
|
+
this.ui.showLoading();
|
|
39
74
|
|
|
40
75
|
let formData = null;
|
|
41
76
|
// create formData
|
|
42
|
-
if (data
|
|
77
|
+
if ('length' in data) {
|
|
43
78
|
formData = new FormData();
|
|
44
79
|
for (let i = 0, len = data.length; i < len; i++) {
|
|
45
80
|
formData.append('file-' + i, data[i]);
|
|
@@ -51,20 +86,21 @@ FileManager.prototype = {
|
|
|
51
86
|
}
|
|
52
87
|
|
|
53
88
|
this.apiManager.call({ method: 'POST', url: uploadUrl, headers: uploadHeader, data: formData, callBack, errorCallBack });
|
|
54
|
-
}
|
|
89
|
+
}
|
|
55
90
|
|
|
56
91
|
/**
|
|
57
92
|
* @description Upload the file to the server.
|
|
58
93
|
* @param {string} uploadUrl Upload server url
|
|
59
|
-
* @param {Object
|
|
60
|
-
* @param {
|
|
94
|
+
* @param {?Object<string, string>} uploadHeader Request header
|
|
95
|
+
* @param {FileList|File[]|{formData: FormData, size: number}} data FormData in body or Files array
|
|
96
|
+
* @returns {Promise<XMLHttpRequest>}
|
|
61
97
|
*/
|
|
62
98
|
async asyncUpload(uploadUrl, uploadHeader, data) {
|
|
63
|
-
this.
|
|
99
|
+
this.ui.showLoading();
|
|
64
100
|
|
|
65
101
|
let formData = null;
|
|
66
102
|
// create formData
|
|
67
|
-
if (data
|
|
103
|
+
if ('length' in data) {
|
|
68
104
|
formData = new FormData();
|
|
69
105
|
for (let i = 0, len = data.length; i < len; i++) {
|
|
70
106
|
formData.append('file-' + i, data[i]);
|
|
@@ -76,44 +112,52 @@ FileManager.prototype = {
|
|
|
76
112
|
}
|
|
77
113
|
|
|
78
114
|
return await this.apiManager.asyncCall({ method: 'POST', url: uploadUrl, headers: uploadHeader, data: formData });
|
|
79
|
-
}
|
|
115
|
+
}
|
|
80
116
|
|
|
117
|
+
/**
|
|
118
|
+
* @description Set the file information to the element.
|
|
119
|
+
* @param {Node} element File information element
|
|
120
|
+
* @param {Object} params
|
|
121
|
+
* @param {string} params.name File name
|
|
122
|
+
* @param {number} params.size File size
|
|
123
|
+
* @returns
|
|
124
|
+
*/
|
|
81
125
|
setFileData(element, { name, size }) {
|
|
82
126
|
if (!element) return;
|
|
83
|
-
element.setAttribute('data-se-file-name', name);
|
|
84
|
-
element.setAttribute('data-se-file-size', size);
|
|
85
|
-
}
|
|
127
|
+
/** @type {Element} */ (element).setAttribute('data-se-file-name', name);
|
|
128
|
+
/** @type {Element} */ (element).setAttribute('data-se-file-size', size + '');
|
|
129
|
+
}
|
|
86
130
|
|
|
87
131
|
/**
|
|
88
|
-
* @description Create info object of file and add it to "infoList"
|
|
89
132
|
* @private
|
|
90
|
-
* @
|
|
91
|
-
* @param {
|
|
133
|
+
* @description Create info object of file and add it to "infoList"
|
|
134
|
+
* @param {HTMLMediaElement} element
|
|
135
|
+
* @param {{name: string, size: number}|null} file File information
|
|
92
136
|
*/
|
|
93
137
|
_setInfo(element, file) {
|
|
94
|
-
let dataIndex = GetAttr(element, 'index');
|
|
138
|
+
let dataIndex = Number(GetAttr(element, 'index'));
|
|
95
139
|
let info = null;
|
|
96
140
|
let state = '';
|
|
97
141
|
|
|
98
142
|
if (!file) {
|
|
99
143
|
file = {
|
|
100
144
|
name: GetAttr(element, 'file-name') || (typeof element.src === 'string' ? element.src.split('/').pop() : ''),
|
|
101
|
-
size: GetAttr(element, 'file-size') || 0
|
|
145
|
+
size: Number(GetAttr(element, 'file-size')) || 0
|
|
102
146
|
};
|
|
103
147
|
}
|
|
104
148
|
|
|
105
149
|
// create
|
|
106
|
-
if (!dataIndex || this._componentsInfoInit) {
|
|
150
|
+
if (!dataIndex || this.editor._componentsInfoInit) {
|
|
107
151
|
state = 'create';
|
|
108
152
|
dataIndex = this.infoIndex++;
|
|
109
153
|
|
|
110
|
-
element.setAttribute('data-se-index', dataIndex);
|
|
154
|
+
element.setAttribute('data-se-index', dataIndex + '');
|
|
111
155
|
element.setAttribute('data-se-file-name', file.name);
|
|
112
|
-
element.setAttribute('data-se-file-size', file.size);
|
|
156
|
+
element.setAttribute('data-se-file-size', file.size + '');
|
|
113
157
|
|
|
114
158
|
info = {
|
|
115
159
|
src: element.src,
|
|
116
|
-
index: dataIndex
|
|
160
|
+
index: dataIndex,
|
|
117
161
|
name: file.name,
|
|
118
162
|
size: file.size
|
|
119
163
|
};
|
|
@@ -141,31 +185,35 @@ FileManager.prototype = {
|
|
|
141
185
|
|
|
142
186
|
info.src = element.src;
|
|
143
187
|
info.name = GetAttr(element, 'file-name');
|
|
144
|
-
info.size = GetAttr(element, 'file-size')
|
|
188
|
+
info.size = Number(GetAttr(element, 'file-size'));
|
|
145
189
|
}
|
|
146
190
|
|
|
147
191
|
// method bind
|
|
148
192
|
info.element = element;
|
|
193
|
+
|
|
149
194
|
info.delete = function (el) {
|
|
150
195
|
if (typeof this.inst.destroy === 'function') this.inst.destroy.call(this.inst, el);
|
|
151
|
-
this._deleteInfo(GetAttr(el, 'index')
|
|
196
|
+
this._deleteInfo(Number(GetAttr(el, 'index')));
|
|
152
197
|
}.bind(this, element);
|
|
198
|
+
// se-ts-ignore
|
|
199
|
+
void this._deleteInfo;
|
|
200
|
+
|
|
153
201
|
info.select = function (el) {
|
|
154
202
|
el.scrollIntoView(this.options.get('componentScrollToOptions'));
|
|
155
203
|
const comp = this.component.get(el);
|
|
156
204
|
if (comp) {
|
|
157
|
-
this.component.select(comp.target, comp.pluginName
|
|
205
|
+
this.component.select(comp.target, comp.pluginName);
|
|
158
206
|
} else if (typeof this.inst.select === 'function') {
|
|
159
207
|
this.inst.select(el);
|
|
160
208
|
}
|
|
161
209
|
}.bind(this, element);
|
|
162
210
|
|
|
163
|
-
const params = { editor: this.editor, element, index: dataIndex, state, info, remainingFilesCount: --this.uploadFileLength < 0 ? 0 : this.uploadFileLength };
|
|
211
|
+
const params = { editor: this.editor, element, index: dataIndex, state, info, remainingFilesCount: --this.uploadFileLength < 0 ? 0 : this.uploadFileLength, pluginName: this.kind };
|
|
164
212
|
if (typeof this.eventHandler === 'function') {
|
|
165
213
|
this.eventHandler(params);
|
|
166
214
|
}
|
|
167
215
|
this.triggerEvent('onFileManagerAction', { ...params, pluginName: this.kind });
|
|
168
|
-
}
|
|
216
|
+
}
|
|
169
217
|
|
|
170
218
|
/**
|
|
171
219
|
* @description Gets the sum of the sizes of the currently saved files.
|
|
@@ -177,18 +225,19 @@ FileManager.prototype = {
|
|
|
177
225
|
size += this.infoList[i].size * 1;
|
|
178
226
|
}
|
|
179
227
|
return size;
|
|
180
|
-
}
|
|
228
|
+
}
|
|
181
229
|
|
|
182
230
|
/**
|
|
183
|
-
* @description Checke the file's information and modify the tag that does not fit the format.
|
|
184
231
|
* @private
|
|
232
|
+
* @description Checke the file's information and modify the tag that does not fit the format.
|
|
233
|
+
* @param {boolean} loaded Whether the editor is loaded
|
|
185
234
|
*/
|
|
186
235
|
_checkInfo(loaded) {
|
|
187
236
|
const tags = [].slice.call(this.editor.frameContext.get('wysiwyg').querySelectorAll(this.query));
|
|
188
237
|
const infoList = this.infoList;
|
|
189
238
|
if (tags.length === infoList.length) {
|
|
190
239
|
// reset
|
|
191
|
-
if (this._componentsInfoReset) {
|
|
240
|
+
if (this.editor._componentsInfoReset) {
|
|
192
241
|
for (let i = 0, len = tags.length; i < len; i++) {
|
|
193
242
|
this._setInfo(tags[i], null);
|
|
194
243
|
}
|
|
@@ -222,12 +271,12 @@ FileManager.prototype = {
|
|
|
222
271
|
|
|
223
272
|
while (tags.length > 0) {
|
|
224
273
|
const tag = tags.shift();
|
|
225
|
-
if (!GetAttr(tag, 'index') || !infoIndex.includes(GetAttr(tag, 'index')
|
|
274
|
+
if (!GetAttr(tag, 'index') || !infoIndex.includes(Number(GetAttr(tag, 'index')))) {
|
|
226
275
|
currentTags.push(this.infoIndex);
|
|
227
276
|
tag.removeAttribute('data-se-index');
|
|
228
277
|
this._setInfo(tag, null);
|
|
229
278
|
} else {
|
|
230
|
-
currentTags.push(GetAttr(tag, 'index')
|
|
279
|
+
currentTags.push(Number(GetAttr(tag, 'index')));
|
|
231
280
|
}
|
|
232
281
|
}
|
|
233
282
|
|
|
@@ -243,7 +292,7 @@ FileManager.prototype = {
|
|
|
243
292
|
|
|
244
293
|
infoList.splice(i, 1);
|
|
245
294
|
|
|
246
|
-
const params = { editor: this.editor, element: null, index: dataIndex, state: 'delete', info: null, remainingFilesCount: 0 };
|
|
295
|
+
const params = { editor: this.editor, element: null, index: dataIndex, state: 'delete', info: null, remainingFilesCount: 0, pluginName: this.kind };
|
|
247
296
|
if (typeof this.eventHandler === 'function') {
|
|
248
297
|
this.eventHandler(params);
|
|
249
298
|
}
|
|
@@ -251,16 +300,15 @@ FileManager.prototype = {
|
|
|
251
300
|
|
|
252
301
|
i--;
|
|
253
302
|
}
|
|
254
|
-
}
|
|
303
|
+
}
|
|
255
304
|
|
|
256
305
|
/**
|
|
257
|
-
* @description Reset info object and "infoList = []", "infoIndex = 0"
|
|
258
|
-
* @param {string} this.kind Plugin name
|
|
259
306
|
* @private
|
|
307
|
+
* @description Reset info object and "infoList = []", "infoIndex = 0"
|
|
260
308
|
*/
|
|
261
309
|
_resetInfo() {
|
|
262
310
|
const eh = typeof this.eventHandler === 'function';
|
|
263
|
-
const params = { editor: this.editor, element: null, state: 'delete', info: null, remainingFilesCount: 0 };
|
|
311
|
+
const params = { editor: this.editor, element: null, state: 'delete', info: null, remainingFilesCount: 0, pluginName: this.kind };
|
|
264
312
|
for (let i = 0, len = this.infoList.length; i < len; i++) {
|
|
265
313
|
if (eh) this.eventHandler({ ...params, index: this.infoList[i].index, pluginName: this.kind });
|
|
266
314
|
this.triggerEvent('onFileManagerAction', { ...params, index: this.infoList[i].index, pluginName: this.kind });
|
|
@@ -268,12 +316,12 @@ FileManager.prototype = {
|
|
|
268
316
|
|
|
269
317
|
this.infoList = [];
|
|
270
318
|
this.infoIndex = 0;
|
|
271
|
-
}
|
|
319
|
+
}
|
|
272
320
|
|
|
273
321
|
/**
|
|
322
|
+
* @private
|
|
274
323
|
* @description Delete info object at "infoList"
|
|
275
324
|
* @param {number} index index of info object infoList[].index)
|
|
276
|
-
* @private
|
|
277
325
|
*/
|
|
278
326
|
_deleteInfo(index) {
|
|
279
327
|
if (index >= 0) {
|
|
@@ -281,17 +329,21 @@ FileManager.prototype = {
|
|
|
281
329
|
if (index === this.infoList[i].index) {
|
|
282
330
|
this.infoList.splice(i, 1);
|
|
283
331
|
if (typeof this.eventHandler === 'function') {
|
|
284
|
-
this.eventHandler({ editor: this.editor, element: null, index, state: 'delete', info: null, remainingFilesCount: 0 });
|
|
332
|
+
this.eventHandler({ editor: this.editor, element: null, index, state: 'delete', info: null, remainingFilesCount: 0, pluginName: this.kind });
|
|
285
333
|
}
|
|
286
334
|
return;
|
|
287
335
|
}
|
|
288
336
|
}
|
|
289
337
|
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
constructor: FileManager
|
|
293
|
-
};
|
|
338
|
+
}
|
|
339
|
+
}
|
|
294
340
|
|
|
341
|
+
/**
|
|
342
|
+
* @private
|
|
343
|
+
* @param {Element} element - Element
|
|
344
|
+
* @param {string} name - Attribute name
|
|
345
|
+
* @returns {string|null}
|
|
346
|
+
*/
|
|
295
347
|
function GetAttr(element, name) {
|
|
296
348
|
const seAttr = element.getAttribute(`data-se-${name}`);
|
|
297
349
|
if (seAttr) return seAttr;
|
package/src/modules/HueSlider.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Implements HueSlider.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { dom, env } from '../helper';
|
|
2
6
|
import Controller from './Controller';
|
|
3
7
|
|
|
4
8
|
const { isMobile } = env;
|
|
@@ -41,9 +45,9 @@ function CreateSliderCtx() {
|
|
|
41
45
|
</div>
|
|
42
46
|
`;
|
|
43
47
|
|
|
44
|
-
const slider =
|
|
45
|
-
const wheelCanvas = slider.querySelector('.se-hue-wheel');
|
|
46
|
-
const gradientBarCanvas = slider.querySelector('.se-hue-gradient');
|
|
48
|
+
const slider = dom.utils.createElement('DIV', { class: 'se-hue-slider' }, html);
|
|
49
|
+
const wheelCanvas = /** @type {HTMLCanvasElement} */ (slider.querySelector('.se-hue-wheel'));
|
|
50
|
+
const gradientBarCanvas = /** @type {HTMLCanvasElement} */ (slider.querySelector('.se-hue-gradient'));
|
|
47
51
|
const currentColors = slider.querySelector('.se-hue-final-hex').children;
|
|
48
52
|
|
|
49
53
|
return {
|
|
@@ -52,71 +56,110 @@ function CreateSliderCtx() {
|
|
|
52
56
|
offscreenCtx: offscreenCanvas.getContext('2d'),
|
|
53
57
|
wheel: wheelCanvas,
|
|
54
58
|
wheelCtx: wheelCanvas.getContext('2d'),
|
|
55
|
-
wheelPointer: slider.querySelector('.se-hue-wheel-pointer'),
|
|
59
|
+
wheelPointer: /** @type {HTMLElement} */ (slider.querySelector('.se-hue-wheel-pointer')),
|
|
56
60
|
gradientBar: gradientBarCanvas,
|
|
57
|
-
gradientPointer: slider.querySelector('.se-hue-gradient-pointer'),
|
|
58
|
-
fanalColorHex: currentColors[0],
|
|
59
|
-
fanalColorBackground: currentColors[1]
|
|
61
|
+
gradientPointer: /** @type {HTMLElement} */ (slider.querySelector('.se-hue-gradient-pointer')),
|
|
62
|
+
fanalColorHex: /** @type {HTMLElement} */ (currentColors[0]),
|
|
63
|
+
fanalColorBackground: /** @type {HTMLElement} */ (currentColors[1])
|
|
60
64
|
};
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
/**
|
|
68
|
+
* @typedef {import('../modules/Controller').ControllerParams} ControllerParams_hueSlider
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @typedef {Object} HueSliderColor
|
|
73
|
+
* @property {string} hex - HEX color
|
|
74
|
+
* @property {number} r - Red color value
|
|
75
|
+
* @property {number} g - Green color value
|
|
76
|
+
* @property {number} b - Blue color value
|
|
77
|
+
* @property {number} h - Hue color value
|
|
78
|
+
* @property {number} s - Saturation color value
|
|
79
|
+
* @property {number} l - Lightness color value
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @typedef {Object} HueSliderParams
|
|
84
|
+
* @property {Node} [form] The form element to attach the hue slider.
|
|
85
|
+
* @property {boolean} [isNewForm] Whether to create a new form element.
|
|
86
|
+
* @property {ControllerParams_hueSlider} [controllerOptions] Controller options
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @class
|
|
64
91
|
* @description Create a Hue slider. (only create one at a time)
|
|
65
|
-
* When you call the .attach() method, the hue slider is appended to the form element.
|
|
92
|
+
* - When you call the .attach() method, the hue slider is appended to the form element.
|
|
66
93
|
* It must be called every time it is used.
|
|
67
|
-
* @param {{form: Element}} params {form: Element}
|
|
68
94
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this.
|
|
97
|
-
this.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
95
|
+
class HueSlider {
|
|
96
|
+
/**
|
|
97
|
+
* @constructor
|
|
98
|
+
* @param {*} inst The instance object that called the constructor.
|
|
99
|
+
* @param {HueSliderParams} [params={}] Hue slider options
|
|
100
|
+
* @param {string} [className=""] The class name of the hue slider.
|
|
101
|
+
*/
|
|
102
|
+
constructor(inst, params, className) {
|
|
103
|
+
if (!params) params = {};
|
|
104
|
+
|
|
105
|
+
this.editor = inst.editor;
|
|
106
|
+
this.eventManager = inst.eventManager;
|
|
107
|
+
this.inst = inst;
|
|
108
|
+
|
|
109
|
+
// members
|
|
110
|
+
this.form = params.form;
|
|
111
|
+
this.ctx = {
|
|
112
|
+
wheelX: wheelX,
|
|
113
|
+
wheelY: wheelY,
|
|
114
|
+
lightness: LIGHTNESS,
|
|
115
|
+
wheelPointerX: '50%',
|
|
116
|
+
wheelPointerY: '50%',
|
|
117
|
+
gradientPointerX: 'calc(100% - 14px)',
|
|
118
|
+
color: DEFAULT_COLOR_VALUE
|
|
119
|
+
};
|
|
120
|
+
this.isOpen = false;
|
|
121
|
+
this.controlle = null;
|
|
122
|
+
this.__globalMouseDown = null;
|
|
123
|
+
this.__globalMouseMove = null;
|
|
124
|
+
this.__globalMouseUp = null;
|
|
125
|
+
|
|
126
|
+
// init default controller
|
|
127
|
+
if (!params.isNewForm) {
|
|
128
|
+
const hueController = CreateHTML_basicControllerForm(inst.editor, className);
|
|
129
|
+
this.form = hueController.querySelector('.se-hue');
|
|
130
|
+
this.controller = new Controller(this, hueController, { position: 'top', isWWTarget: false, ...params.controllerOptions });
|
|
131
|
+
|
|
132
|
+
// buttons
|
|
133
|
+
this.eventManager.addEvent(hueController.querySelector('.se-btn-success'), 'click', () => {
|
|
134
|
+
inst.hueSliderAction(this.get());
|
|
135
|
+
this.close();
|
|
136
|
+
});
|
|
137
|
+
this.eventManager.addEvent(hueController.querySelector('.se-btn-danger'), 'click', () => {
|
|
138
|
+
this.close();
|
|
139
|
+
});
|
|
140
|
+
}
|
|
107
141
|
}
|
|
108
|
-
};
|
|
109
142
|
|
|
110
|
-
|
|
143
|
+
/**
|
|
144
|
+
* @description Get the current color information.
|
|
145
|
+
* @returns {HueSliderColor} color information
|
|
146
|
+
*/
|
|
111
147
|
get() {
|
|
112
148
|
return finalColor;
|
|
113
|
-
}
|
|
149
|
+
}
|
|
114
150
|
|
|
151
|
+
/**
|
|
152
|
+
* @description Open the hue slider.
|
|
153
|
+
* @param {Node} target The element to attach the hue slider.
|
|
154
|
+
*/
|
|
115
155
|
open(target) {
|
|
116
156
|
this.attach();
|
|
117
157
|
this.controller.open(target, null, { isWWTarget: false, initMethod: null, addOffset: null });
|
|
118
|
-
}
|
|
158
|
+
}
|
|
119
159
|
|
|
160
|
+
/**
|
|
161
|
+
* @description Reset information and close the hue slider.
|
|
162
|
+
*/
|
|
120
163
|
off() {
|
|
121
164
|
this.ctx = {
|
|
122
165
|
gradientPointerX: gradientPointer.style.left,
|
|
@@ -130,13 +173,21 @@ HueSlider.prototype = {
|
|
|
130
173
|
|
|
131
174
|
this.controller.close();
|
|
132
175
|
this.init();
|
|
133
|
-
}
|
|
176
|
+
}
|
|
134
177
|
|
|
178
|
+
/**
|
|
179
|
+
* @description Close the hue slider. (include off method)
|
|
180
|
+
* - Call the instance's hueSliderCancelAction method.
|
|
181
|
+
*/
|
|
135
182
|
close() {
|
|
136
183
|
this.off();
|
|
137
184
|
this.inst.hueSliderCancelAction();
|
|
138
|
-
}
|
|
185
|
+
}
|
|
139
186
|
|
|
187
|
+
/**
|
|
188
|
+
* @description Attach the hue slider to the form element.
|
|
189
|
+
* @param {?Node=} form The element to attach the hue slider.
|
|
190
|
+
*/
|
|
140
191
|
attach(form) {
|
|
141
192
|
// drow
|
|
142
193
|
this.init();
|
|
@@ -176,12 +227,15 @@ HueSlider.prototype = {
|
|
|
176
227
|
moveEvent.func = OnTouchmove;
|
|
177
228
|
}
|
|
178
229
|
|
|
179
|
-
this.__globalMouseDown = this.eventManager.addGlobalEvent(downEvent.name, downEvent.func, { passive: false,
|
|
230
|
+
this.__globalMouseDown = this.eventManager.addGlobalEvent(downEvent.name, downEvent.func, { passive: false, capture: true });
|
|
180
231
|
this.__globalMouseMove = this.eventManager.addGlobalEvent(moveEvent.name, moveEvent.func, true);
|
|
181
232
|
this.__globalMouseUp = this.eventManager.addGlobalEvent(upEvent.name, upEvent.func, true);
|
|
182
233
|
this.isOpen = true;
|
|
183
|
-
}
|
|
234
|
+
}
|
|
184
235
|
|
|
236
|
+
/**
|
|
237
|
+
* @description Initialize the hue slider information.
|
|
238
|
+
*/
|
|
185
239
|
init() {
|
|
186
240
|
this.isOpen = false;
|
|
187
241
|
isWheelragging = false;
|
|
@@ -189,10 +243,8 @@ HueSlider.prototype = {
|
|
|
189
243
|
if (this.__globalMouseDown) this.__globalMouseDown = this.eventManager.removeGlobalEvent(this.__globalMouseDown);
|
|
190
244
|
if (this.__globalMouseMove) this.__globalMouseMove = this.eventManager.removeGlobalEvent(this.__globalMouseMove);
|
|
191
245
|
if (this.__globalMouseUp) this.__globalMouseUp = this.eventManager.removeGlobalEvent(this.__globalMouseUp);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
constructor: HueSlider
|
|
195
|
-
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
196
248
|
|
|
197
249
|
// init
|
|
198
250
|
const { slider, offscreenCanvas, offscreenCtx, wheel, wheelCtx, wheelPointer, gradientBar, gradientPointer, fanalColorHex, fanalColorBackground } = CreateSliderCtx();
|
|
@@ -495,7 +547,7 @@ drawColorWheelToContext(offscreenCtx);
|
|
|
495
547
|
drawColorWheel();
|
|
496
548
|
|
|
497
549
|
function CreateHTML_basicControllerForm({ lang, icons }, className) {
|
|
498
|
-
const hueController =
|
|
550
|
+
const hueController = dom.utils.createElement(
|
|
499
551
|
'DIV',
|
|
500
552
|
{ class: `se-controller ${className}` },
|
|
501
553
|
/*html*/ `
|