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
|
@@ -1,240 +1,248 @@
|
|
|
1
|
-
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import { Modal, Controller, ModalAnchorEditor } from '../../modules';
|
|
3
|
-
import { dom, numbers } from '../../helper';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @typedef {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* @
|
|
11
|
-
* @property {
|
|
12
|
-
* @property {
|
|
13
|
-
* @property {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
this.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
* @
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
* @
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
+
import EditorInjector from '../../editorInjector';
|
|
2
|
+
import { Modal, Controller, ModalAnchorEditor } from '../../modules';
|
|
3
|
+
import { dom, numbers } from '../../helper';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import('../../modules/ModalAnchorEditor').ModalAnchorEditorParams} ModalAnchorEditorParams
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {Object} LinkOptions
|
|
11
|
+
* @property {string} [uploadUrl] - The URL endpoint for file uploads.
|
|
12
|
+
* @property {Object<string, string>} [uploadHeaders] - Additional headers for file upload requests.
|
|
13
|
+
* @property {number} [uploadSizeLimit] - The total file upload size limit in bytes.
|
|
14
|
+
* @property {number} [uploadSingleSizeLimit] - The single file upload size limit in bytes.
|
|
15
|
+
* @property {string} [acceptedFormats] - Accepted file formats for link uploads.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {Omit<LinkOptions & ModalAnchorEditorParams, ''>} LinkPluginOptions
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @class
|
|
24
|
+
* @description Link plugin.
|
|
25
|
+
* - This plugin provides link insertion and editing functionality within the editor.
|
|
26
|
+
* - It also supports file uploads if an upload URL is provided.
|
|
27
|
+
*/
|
|
28
|
+
class Link extends EditorInjector {
|
|
29
|
+
static key = 'link';
|
|
30
|
+
static type = 'modal';
|
|
31
|
+
static className = 'se-icon-flip-rtl';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @constructor
|
|
35
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
36
|
+
* @param {LinkPluginOptions} pluginOptions
|
|
37
|
+
*/
|
|
38
|
+
constructor(editor, pluginOptions) {
|
|
39
|
+
// plugin bisic properties
|
|
40
|
+
super(editor);
|
|
41
|
+
this.title = this.lang.link;
|
|
42
|
+
this.icon = 'link';
|
|
43
|
+
|
|
44
|
+
// define plugin options
|
|
45
|
+
pluginOptions.textToDisplay = true;
|
|
46
|
+
pluginOptions.title = true;
|
|
47
|
+
|
|
48
|
+
// create HTML
|
|
49
|
+
const modalEl = CreateHTML_modal(editor);
|
|
50
|
+
const controllerEl = CreateHTML_controller(editor);
|
|
51
|
+
|
|
52
|
+
// members
|
|
53
|
+
const uploadUrl = typeof pluginOptions.uploadUrl === 'string' ? pluginOptions.uploadUrl : null;
|
|
54
|
+
this.isUpdateState = false;
|
|
55
|
+
this.pluginOptions = {
|
|
56
|
+
...pluginOptions,
|
|
57
|
+
uploadUrl,
|
|
58
|
+
uploadHeaders: pluginOptions.uploadHeaders || null,
|
|
59
|
+
uploadSizeLimit: numbers.get(pluginOptions.uploadSizeLimit, 0),
|
|
60
|
+
uploadSingleSizeLimit: numbers.get(pluginOptions.uploadSingleSizeLimit, 0),
|
|
61
|
+
acceptedFormats: typeof pluginOptions.acceptedFormats === 'string' ? pluginOptions.acceptedFormats.trim() : null,
|
|
62
|
+
enableFileUpload: !!uploadUrl
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// modules
|
|
66
|
+
this.anchor = new ModalAnchorEditor(this, modalEl, this.pluginOptions);
|
|
67
|
+
this.modal = new Modal(this, modalEl);
|
|
68
|
+
this.controller = new Controller(this, controllerEl, { position: 'bottom', disabled: false });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @editorMethod Editor.EventManager
|
|
73
|
+
* @description Executes the method that is called whenever the cursor position changes.
|
|
74
|
+
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
75
|
+
* @returns {boolean} - Whether the plugin is active
|
|
76
|
+
* - If it returns "undefined", it will no longer be called in this scope.
|
|
77
|
+
*/
|
|
78
|
+
active(element) {
|
|
79
|
+
if (dom.check.isAnchor(element) && !element.hasAttribute('data-se-non-link')) {
|
|
80
|
+
const tempLink = this.controller.form.querySelector('a');
|
|
81
|
+
tempLink.href = element.href;
|
|
82
|
+
tempLink.title = element.textContent;
|
|
83
|
+
tempLink.textContent = element.textContent;
|
|
84
|
+
|
|
85
|
+
dom.utils.addClass(element, 'on');
|
|
86
|
+
|
|
87
|
+
this.anchor.set(element);
|
|
88
|
+
this.controller.open(element, null, { isWWTarget: false, initMethod: null, addOffset: null });
|
|
89
|
+
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
this.controller.close();
|
|
94
|
+
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @editorMethod Modules.Modal
|
|
100
|
+
* @description Executes the method that is called when a "Modal" module's is opened.
|
|
101
|
+
*/
|
|
102
|
+
open() {
|
|
103
|
+
this.modal.open();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @editorMethod Modules.Modal
|
|
108
|
+
* @description Executes the method that is called when a plugin's modal is opened.
|
|
109
|
+
* @param {boolean} isUpdate "Indicates whether the modal is for editing an existing component (true) or registering a new one (false)."
|
|
110
|
+
*/
|
|
111
|
+
on(isUpdate) {
|
|
112
|
+
this.isUpdateState = isUpdate;
|
|
113
|
+
this.anchor.on(isUpdate);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @editorMethod Modules.Modal
|
|
118
|
+
* @description This function is called when a form within a modal window is "submit".
|
|
119
|
+
* @returns {boolean} Success or failure
|
|
120
|
+
*/
|
|
121
|
+
modalAction() {
|
|
122
|
+
const oA = this.anchor.create(false);
|
|
123
|
+
if (oA === null) return false;
|
|
124
|
+
|
|
125
|
+
if (!this.isUpdateState) {
|
|
126
|
+
const selectedFormats = this.format.getLines();
|
|
127
|
+
if (selectedFormats.length > 1) {
|
|
128
|
+
if (!this.html.insertNode(dom.utils.createElement(selectedFormats[0].nodeName, null, oA), { afterNode: null, skipCharCount: false })) return true;
|
|
129
|
+
} else {
|
|
130
|
+
if (!this.html.insertNode(oA, { afterNode: null, skipCharCount: false })) return true;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
this.selection.setRange(oA.childNodes[0], 0, oA.childNodes[0], oA.textContent.length);
|
|
134
|
+
} else {
|
|
135
|
+
// set range
|
|
136
|
+
const textNode = this.controller.currentTarget.childNodes[0];
|
|
137
|
+
this.selection.setRange(textNode, 0, textNode, textNode.textContent.length);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
this.history.push(false);
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @editorMethod Modules.Modal
|
|
146
|
+
* @description This function is called before the modal window is opened, but before it is closed.
|
|
147
|
+
*/
|
|
148
|
+
init() {
|
|
149
|
+
this.controller.close();
|
|
150
|
+
this.anchor.init();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @editorMethod Modules.Controller
|
|
155
|
+
* @description Executes the method that is called when a button is clicked in the "controller".
|
|
156
|
+
* @param {HTMLButtonElement} target Target button element
|
|
157
|
+
*/
|
|
158
|
+
controllerAction(target) {
|
|
159
|
+
const command = target.getAttribute('data-command');
|
|
160
|
+
|
|
161
|
+
if (/update/.test(command)) {
|
|
162
|
+
this.modal.open();
|
|
163
|
+
} else if (/unlink/.test(command)) {
|
|
164
|
+
const sc = dom.query.getEdgeChild(
|
|
165
|
+
this.controller.currentTarget,
|
|
166
|
+
function (current) {
|
|
167
|
+
return current.childNodes.length === 0 || current.nodeType === 3;
|
|
168
|
+
},
|
|
169
|
+
false
|
|
170
|
+
);
|
|
171
|
+
const ec = dom.query.getEdgeChild(
|
|
172
|
+
this.controller.currentTarget,
|
|
173
|
+
function (current) {
|
|
174
|
+
return current.childNodes.length === 0 || current.nodeType === 3;
|
|
175
|
+
},
|
|
176
|
+
true
|
|
177
|
+
);
|
|
178
|
+
this.selection.setRange(sc, 0, ec, ec.textContent.length);
|
|
179
|
+
this.format.applyInlineElement(null, { stylesToModify: null, nodesToRemove: ['A'], strictRemove: false });
|
|
180
|
+
} else {
|
|
181
|
+
/** delete */
|
|
182
|
+
dom.utils.removeItem(this.controller.currentTarget);
|
|
183
|
+
this.controller.currentTarget = null;
|
|
184
|
+
this.editor.focus();
|
|
185
|
+
this.history.push(false);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* @editorMethod Modules.Controller
|
|
191
|
+
* @description This function is called before the "controller" before it is closed.
|
|
192
|
+
*/
|
|
193
|
+
close() {
|
|
194
|
+
dom.utils.removeClass(this.controller.currentTarget, 'on');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function CreateHTML_modal({ lang, icons }) {
|
|
199
|
+
const html = /*html*/ `
|
|
200
|
+
<form>
|
|
201
|
+
<div class="se-modal-header">
|
|
202
|
+
<button type="button" data-command="close" class="se-btn se-close-btn" title="${lang.close}" aria-label="${lang.close}">
|
|
203
|
+
${icons.cancel}
|
|
204
|
+
</button>
|
|
205
|
+
<span class="se-modal-title">${lang.link_modal_title}</span>
|
|
206
|
+
</div>
|
|
207
|
+
<div class="se-anchor-editor"></div>
|
|
208
|
+
<div class="se-modal-footer">
|
|
209
|
+
<button type="submit" class="se-btn-primary" title="${lang.submitButton}" aria-label="${lang.submitButton}">
|
|
210
|
+
<span>${lang.submitButton}</span>
|
|
211
|
+
</button>
|
|
212
|
+
</div>
|
|
213
|
+
</form>`;
|
|
214
|
+
|
|
215
|
+
return dom.utils.createElement('DIV', { class: 'se-modal-content' }, html);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function CreateHTML_controller({ lang, icons }) {
|
|
219
|
+
const html = /*html*/ `
|
|
220
|
+
<div class="se-arrow se-arrow-up"></div>
|
|
221
|
+
<div class="link-content">
|
|
222
|
+
<span><a target="_blank" href=""></a> </span>
|
|
223
|
+
<div class="se-btn-group">
|
|
224
|
+
<button type="button" data-command="update" tabindex="-1" class="se-btn se-tooltip">
|
|
225
|
+
${icons.edit}
|
|
226
|
+
<span class="se-tooltip-inner">
|
|
227
|
+
<span class="se-tooltip-text">${lang.edit}</span>
|
|
228
|
+
</span>
|
|
229
|
+
</button>
|
|
230
|
+
<button type="button" data-command="unlink" tabindex="-1" class="se-btn se-tooltip se-icon-flip-rtl">
|
|
231
|
+
${icons.unlink}
|
|
232
|
+
<span class="se-tooltip-inner">
|
|
233
|
+
<span class="se-tooltip-text">${lang.unlink}</span>
|
|
234
|
+
</span>
|
|
235
|
+
</button>
|
|
236
|
+
<button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">
|
|
237
|
+
${icons.delete}
|
|
238
|
+
<span class="se-tooltip-inner">
|
|
239
|
+
<span class="se-tooltip-text">${lang.remove}</span>
|
|
240
|
+
</span>
|
|
241
|
+
</button>
|
|
242
|
+
</div>
|
|
243
|
+
</div>`;
|
|
244
|
+
|
|
245
|
+
return dom.utils.createElement('DIV', { class: 'se-controller se-controller-link' }, html);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export default Link;
|