suneditor 3.0.0-alpha.2 → 3.0.0-alpha.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/.eslintrc.json +4 -3
- package/CONTRIBUTING.md +4 -2
- package/README.md +19 -11
- package/README_V3_TEMP.md +705 -0
- package/dist/suneditor.min.css +1 -0
- package/dist/suneditor.min.js +1 -0
- package/example.md +587 -0
- package/package.json +15 -9
- package/src/assets/icons/_default.js +166 -131
- package/src/assets/{suneditor-content.css → suneditor-contents.css} +182 -45
- package/src/assets/suneditor.css +1195 -556
- package/src/assets/variables.css +138 -0
- package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
- package/src/core/base/eventHandlers/handler_ww_clipboard.js +29 -4
- package/src/core/base/eventHandlers/handler_ww_dragDrop.js +59 -15
- package/src/core/base/eventHandlers/handler_ww_key_input.js +426 -212
- package/src/core/base/eventHandlers/handler_ww_mouse.js +108 -32
- package/src/core/base/eventManager.js +540 -209
- package/src/core/base/events.js +616 -320
- package/src/core/base/history.js +93 -39
- package/src/core/class/char.js +29 -13
- package/src/core/class/component.js +332 -145
- package/src/core/class/format.js +671 -509
- package/src/core/class/html.js +504 -290
- package/src/core/class/menu.js +114 -47
- package/src/core/class/nodeTransform.js +111 -66
- package/src/core/class/offset.js +409 -105
- package/src/core/class/selection.js +220 -108
- package/src/core/class/shortcuts.js +68 -8
- package/src/core/class/toolbar.js +106 -116
- package/src/core/class/ui.js +330 -0
- package/src/core/class/viewer.js +178 -74
- package/src/core/editor.js +489 -384
- package/src/core/section/actives.js +118 -22
- package/src/core/section/constructor.js +504 -170
- 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/helper/converter.js +137 -19
- package/src/helper/dom/domCheck.js +294 -0
- package/src/helper/dom/domQuery.js +609 -0
- package/src/helper/dom/domUtils.js +533 -0
- package/src/helper/dom/index.js +12 -0
- package/src/helper/env.js +42 -19
- package/src/helper/index.js +7 -4
- package/src/helper/keyCodeMap.js +183 -0
- package/src/helper/numbers.js +8 -8
- package/src/helper/unicode.js +5 -5
- package/src/langs/ckb.js +69 -3
- package/src/langs/cs.js +67 -1
- package/src/langs/da.js +68 -2
- package/src/langs/de.js +68 -3
- package/src/langs/en.js +29 -1
- package/src/langs/es.js +68 -3
- package/src/langs/fa.js +70 -2
- package/src/langs/fr.js +68 -2
- package/src/langs/he.js +68 -3
- package/src/langs/hu.js +226 -0
- package/src/langs/index.js +3 -2
- package/src/langs/it.js +65 -0
- package/src/langs/ja.js +68 -3
- package/src/langs/ko.js +66 -1
- package/src/langs/lv.js +68 -3
- package/src/langs/nl.js +68 -3
- package/src/langs/pl.js +68 -3
- package/src/langs/pt_br.js +65 -0
- package/src/langs/ro.js +69 -4
- package/src/langs/ru.js +68 -3
- package/src/langs/se.js +68 -3
- package/src/langs/tr.js +68 -0
- package/src/langs/ua.js +68 -3
- package/src/langs/ur.js +71 -6
- package/src/langs/zh_cn.js +69 -4
- 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 +233 -136
- package/src/modules/Figure.js +913 -489
- package/src/modules/FileManager.js +141 -72
- package/src/modules/HueSlider.js +113 -61
- package/src/modules/Modal.js +292 -113
- package/src/modules/ModalAnchorEditor.js +380 -230
- 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 +226 -158
- package/src/plugins/command/list_bulleted.js +93 -47
- package/src/plugins/command/list_numbered.js +93 -47
- package/src/plugins/dropdown/align.js +66 -54
- package/src/plugins/dropdown/backgroundColor.js +76 -45
- package/src/plugins/dropdown/font.js +71 -47
- package/src/plugins/dropdown/fontColor.js +78 -46
- package/src/plugins/dropdown/formatBlock.js +74 -33
- package/src/plugins/dropdown/hr.js +102 -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 +1269 -777
- package/src/plugins/dropdown/template.js +38 -26
- package/src/plugins/dropdown/textStyle.js +43 -31
- package/src/plugins/field/mention.js +144 -82
- 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 +341 -169
- package/src/plugins/modal/drawing.js +530 -0
- package/src/plugins/modal/embed.js +886 -0
- package/src/plugins/modal/image.js +673 -358
- package/src/plugins/modal/link.js +100 -71
- package/src/plugins/modal/math.js +384 -168
- package/src/plugins/modal/video.js +693 -336
- package/src/plugins/popup/anchor.js +222 -0
- package/src/suneditor.js +54 -12
- package/src/themes/dark.css +85 -0
- package/src/typedef.js +86 -0
- package/types/assets/icons/_default.d.ts +152 -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 +377 -0
- package/types/core/base/events.d.ts +297 -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 +259 -0
- package/types/core/class/format.d.ts +615 -0
- package/types/core/class/html.d.ts +377 -0
- package/types/core/class/menu.d.ts +118 -0
- package/types/core/class/nodeTransform.d.ts +93 -0
- package/types/core/class/offset.d.ts +512 -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 +144 -0
- package/types/core/class/viewer.d.ts +140 -0
- package/types/core/editor.d.ts +606 -0
- package/types/core/section/actives.d.ts +46 -0
- package/types/core/section/constructor.d.ts +748 -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/helper/converter.d.ts +150 -0
- package/types/helper/dom/domCheck.d.ts +182 -0
- package/types/helper/dom/domQuery.d.ts +214 -0
- package/types/helper/dom/domUtils.d.ts +211 -0
- package/types/helper/dom/index.d.ts +9 -0
- package/types/helper/env.d.ts +149 -0
- package/types/helper/index.d.ts +163 -0
- package/types/helper/keyCodeMap.d.ts +110 -0
- package/types/helper/numbers.d.ts +43 -0
- package/types/helper/unicode.d.ts +28 -0
- package/types/index.d.ts +0 -0
- package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +170 -103
- package/types/langs/ckb.d.ts +384 -0
- package/types/langs/cs.d.ts +384 -0
- package/types/langs/da.d.ts +384 -0
- package/types/langs/de.d.ts +384 -0
- package/types/langs/en.d.ts +384 -0
- package/types/langs/es.d.ts +384 -0
- package/types/langs/fa.d.ts +384 -0
- package/types/langs/fr.d.ts +384 -0
- package/types/langs/he.d.ts +384 -0
- package/types/langs/hu.d.ts +384 -0
- package/types/langs/index.d.ts +48 -0
- package/types/langs/it.d.ts +384 -0
- package/types/langs/ja.d.ts +384 -0
- package/types/langs/ko.d.ts +384 -0
- package/types/langs/lv.d.ts +384 -0
- package/types/langs/nl.d.ts +384 -0
- package/types/langs/pl.d.ts +384 -0
- package/types/langs/pt_br.d.ts +384 -0
- package/types/langs/ro.d.ts +384 -0
- package/types/langs/ru.d.ts +384 -0
- package/types/langs/se.d.ts +384 -0
- package/types/langs/tr.d.ts +384 -0
- package/types/langs/ua.d.ts +384 -0
- package/types/langs/ur.d.ts +384 -0
- package/types/langs/zh_cn.d.ts +384 -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 +231 -0
- package/types/modules/Figure.d.ts +504 -0
- package/types/modules/FileManager.d.ts +202 -0
- package/types/modules/HueSlider.d.ts +136 -0
- package/types/modules/Modal.d.ts +117 -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 +56 -0
- package/types/plugins/command/list_numbered.d.ts +56 -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 +58 -0
- package/types/plugins/dropdown/hr.d.ts +81 -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 +579 -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-global.d.ts +144 -0
- 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 = element
|
|
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
|
-
name: element
|
|
101
|
-
size: element
|
|
144
|
+
name: GetAttr(element, 'file-name') || (typeof element.src === 'string' ? element.src.split('/').pop() : ''),
|
|
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
|
};
|
|
@@ -140,27 +184,36 @@ FileManager.prototype = {
|
|
|
140
184
|
}
|
|
141
185
|
|
|
142
186
|
info.src = element.src;
|
|
143
|
-
info.name = element
|
|
144
|
-
info.size = element
|
|
187
|
+
info.name = GetAttr(element, 'file-name');
|
|
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(el
|
|
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
|
-
el.scrollIntoView(
|
|
155
|
-
|
|
202
|
+
el.scrollIntoView(this.options.get('componentScrollToOptions'));
|
|
203
|
+
const comp = this.component.get(el);
|
|
204
|
+
if (comp) {
|
|
205
|
+
this.component.select(comp.target, comp.pluginName, false);
|
|
206
|
+
} else if (typeof this.inst.select === 'function') {
|
|
207
|
+
this.inst.select(el);
|
|
208
|
+
}
|
|
156
209
|
}.bind(this, element);
|
|
157
210
|
|
|
158
|
-
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 };
|
|
159
212
|
if (typeof this.eventHandler === 'function') {
|
|
160
213
|
this.eventHandler(params);
|
|
161
214
|
}
|
|
162
215
|
this.triggerEvent('onFileManagerAction', { ...params, pluginName: this.kind });
|
|
163
|
-
}
|
|
216
|
+
}
|
|
164
217
|
|
|
165
218
|
/**
|
|
166
219
|
* @description Gets the sum of the sizes of the currently saved files.
|
|
@@ -172,18 +225,19 @@ FileManager.prototype = {
|
|
|
172
225
|
size += this.infoList[i].size * 1;
|
|
173
226
|
}
|
|
174
227
|
return size;
|
|
175
|
-
}
|
|
228
|
+
}
|
|
176
229
|
|
|
177
230
|
/**
|
|
178
|
-
* @description Checke the file's information and modify the tag that does not fit the format.
|
|
179
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
|
|
180
234
|
*/
|
|
181
235
|
_checkInfo(loaded) {
|
|
182
236
|
const tags = [].slice.call(this.editor.frameContext.get('wysiwyg').querySelectorAll(this.query));
|
|
183
237
|
const infoList = this.infoList;
|
|
184
238
|
if (tags.length === infoList.length) {
|
|
185
239
|
// reset
|
|
186
|
-
if (this._componentsInfoReset) {
|
|
240
|
+
if (this.editor._componentsInfoReset) {
|
|
187
241
|
for (let i = 0, len = tags.length; i < len; i++) {
|
|
188
242
|
this._setInfo(tags[i], null);
|
|
189
243
|
}
|
|
@@ -194,7 +248,7 @@ FileManager.prototype = {
|
|
|
194
248
|
info = infoList[i];
|
|
195
249
|
if (
|
|
196
250
|
tags.filter(function (t) {
|
|
197
|
-
return info.src === t.src && info.index.toString() === t
|
|
251
|
+
return info.src === t.src && info.index.toString() === GetAttr(t, 'index');
|
|
198
252
|
}).length === 0
|
|
199
253
|
) {
|
|
200
254
|
infoUpdate = true;
|
|
@@ -217,12 +271,12 @@ FileManager.prototype = {
|
|
|
217
271
|
|
|
218
272
|
while (tags.length > 0) {
|
|
219
273
|
const tag = tags.shift();
|
|
220
|
-
if (!tag
|
|
274
|
+
if (!GetAttr(tag, 'index') || !infoIndex.includes(Number(GetAttr(tag, 'index')))) {
|
|
221
275
|
currentTags.push(this.infoIndex);
|
|
222
276
|
tag.removeAttribute('data-se-index');
|
|
223
277
|
this._setInfo(tag, null);
|
|
224
278
|
} else {
|
|
225
|
-
currentTags.push(tag
|
|
279
|
+
currentTags.push(Number(GetAttr(tag, 'index')));
|
|
226
280
|
}
|
|
227
281
|
}
|
|
228
282
|
|
|
@@ -238,7 +292,7 @@ FileManager.prototype = {
|
|
|
238
292
|
|
|
239
293
|
infoList.splice(i, 1);
|
|
240
294
|
|
|
241
|
-
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 };
|
|
242
296
|
if (typeof this.eventHandler === 'function') {
|
|
243
297
|
this.eventHandler(params);
|
|
244
298
|
}
|
|
@@ -246,16 +300,15 @@ FileManager.prototype = {
|
|
|
246
300
|
|
|
247
301
|
i--;
|
|
248
302
|
}
|
|
249
|
-
}
|
|
303
|
+
}
|
|
250
304
|
|
|
251
305
|
/**
|
|
252
|
-
* @description Reset info object and "infoList = []", "infoIndex = 0"
|
|
253
|
-
* @param {string} this.kind Plugin name
|
|
254
306
|
* @private
|
|
307
|
+
* @description Reset info object and "infoList = []", "infoIndex = 0"
|
|
255
308
|
*/
|
|
256
309
|
_resetInfo() {
|
|
257
310
|
const eh = typeof this.eventHandler === 'function';
|
|
258
|
-
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 };
|
|
259
312
|
for (let i = 0, len = this.infoList.length; i < len; i++) {
|
|
260
313
|
if (eh) this.eventHandler({ ...params, index: this.infoList[i].index, pluginName: this.kind });
|
|
261
314
|
this.triggerEvent('onFileManagerAction', { ...params, index: this.infoList[i].index, pluginName: this.kind });
|
|
@@ -263,12 +316,12 @@ FileManager.prototype = {
|
|
|
263
316
|
|
|
264
317
|
this.infoList = [];
|
|
265
318
|
this.infoIndex = 0;
|
|
266
|
-
}
|
|
319
|
+
}
|
|
267
320
|
|
|
268
321
|
/**
|
|
322
|
+
* @private
|
|
269
323
|
* @description Delete info object at "infoList"
|
|
270
324
|
* @param {number} index index of info object infoList[].index)
|
|
271
|
-
* @private
|
|
272
325
|
*/
|
|
273
326
|
_deleteInfo(index) {
|
|
274
327
|
if (index >= 0) {
|
|
@@ -276,15 +329,31 @@ FileManager.prototype = {
|
|
|
276
329
|
if (index === this.infoList[i].index) {
|
|
277
330
|
this.infoList.splice(i, 1);
|
|
278
331
|
if (typeof this.eventHandler === 'function') {
|
|
279
|
-
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 });
|
|
280
333
|
}
|
|
281
334
|
return;
|
|
282
335
|
}
|
|
283
336
|
}
|
|
284
337
|
}
|
|
285
|
-
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
286
340
|
|
|
287
|
-
|
|
288
|
-
|
|
341
|
+
/**
|
|
342
|
+
* @private
|
|
343
|
+
* @param {Element} element - Element
|
|
344
|
+
* @param {string} name - Attribute name
|
|
345
|
+
* @returns {string|null}
|
|
346
|
+
*/
|
|
347
|
+
function GetAttr(element, name) {
|
|
348
|
+
const seAttr = element.getAttribute(`data-se-${name}`);
|
|
349
|
+
if (seAttr) return seAttr;
|
|
350
|
+
|
|
351
|
+
// v2-migration
|
|
352
|
+
const v2SeAttr = element.getAttribute(`data-${name}`);
|
|
353
|
+
if (!v2SeAttr) return null;
|
|
354
|
+
element.removeAttribute(`data-${name}`);
|
|
355
|
+
element.setAttribute(`data-se-${name}`, v2SeAttr);
|
|
356
|
+
return v2SeAttr;
|
|
357
|
+
}
|
|
289
358
|
|
|
290
359
|
export default FileManager;
|
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
|
|
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} [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*/ `
|