suneditor 3.1.3 → 3.2.0
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/dist/suneditor-contents.min.css +1 -1
- package/dist/suneditor.min.css +28 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +2 -1
- package/src/assets/design/color.css +12 -0
- package/src/assets/design/size.css +9 -2
- package/src/assets/icons/defaultIcons.js +96 -47
- package/src/assets/suneditor-contents.css +3 -2
- package/src/assets/suneditor.css +480 -31
- package/src/core/config/contextProvider.js +2 -1
- package/src/core/config/eventManager.js +41 -2
- package/src/core/config/optionProvider.js +23 -2
- package/src/core/editor.js +32 -14
- package/src/core/event/actions/index.js +76 -9
- package/src/core/event/effects/common.registry.js +2 -1
- package/src/core/event/effects/keydown.registry.js +169 -33
- package/src/core/event/effects/ruleHelpers.js +20 -6
- package/src/core/event/eventOrchestrator.js +136 -23
- package/src/core/event/handlers/handler_toolbar.js +4 -2
- package/src/core/event/handlers/handler_ww_dragDrop.js +10 -0
- package/src/core/event/handlers/handler_ww_input.js +9 -2
- package/src/core/event/handlers/handler_ww_key.js +86 -17
- package/src/core/event/handlers/handler_ww_mouse.js +45 -8
- package/src/core/event/ports.js +23 -5
- package/src/core/event/reducers/keydown.reducer.js +15 -2
- package/src/core/event/rules/keydown.rule.arrow.js +12 -2
- package/src/core/event/rules/keydown.rule.backspace.js +110 -15
- package/src/core/event/rules/keydown.rule.delete.js +62 -7
- package/src/core/event/rules/keydown.rule.enter.js +62 -31
- package/src/core/event/support/defaultLineManager.js +9 -2
- package/src/core/event/support/selectionState.js +13 -3
- package/src/core/kernel/coreKernel.js +1 -0
- package/src/core/logic/dom/char.js +13 -3
- package/src/core/logic/dom/format.js +171 -39
- package/src/core/logic/dom/html.js +357 -87
- package/src/core/logic/dom/inline.js +229 -34
- package/src/core/logic/dom/listFormat.js +111 -20
- package/src/core/logic/dom/nodeTransform.js +36 -11
- package/src/core/logic/dom/offset.js +116 -31
- package/src/core/logic/dom/selection.js +147 -29
- package/src/core/logic/panel/blockHandle.js +785 -0
- package/src/core/logic/panel/blockResolver.js +278 -0
- package/src/core/logic/panel/finder.js +16 -6
- package/src/core/logic/panel/menu.js +119 -18
- package/src/core/logic/panel/toolbar.js +75 -19
- package/src/core/logic/panel/viewer.js +76 -20
- package/src/core/logic/shell/_commandExecutor.js +44 -9
- package/src/core/logic/shell/commandDispatcher.js +46 -4
- package/src/core/logic/shell/component.js +102 -25
- package/src/core/logic/shell/focusManager.js +13 -3
- package/src/core/logic/shell/history.js +21 -6
- package/src/core/logic/shell/pluginManager.js +21 -13
- package/src/core/logic/shell/shortcuts.js +9 -1
- package/src/core/logic/shell/ui.js +139 -37
- package/src/core/schema/frameContext.js +34 -3
- package/src/core/schema/options.js +61 -19
- package/src/core/section/constructor.js +537 -103
- package/src/core/section/documentType.js +35 -6
- package/src/helper/converter.js +24 -7
- package/src/helper/dom/domCheck.js +25 -5
- package/src/helper/dom/domQuery.js +2 -1
- package/src/helper/dom/domUtils.js +17 -4
- package/src/helper/env.js +11 -2
- package/src/helper/keyCodeMap.js +6 -2
- package/src/helper/markdown.js +24 -5
- package/src/helper/msOffice.js +9 -2
- package/src/interfaces/plugins.js +1 -1
- package/src/langs/ckb.js +0 -1
- package/src/langs/cs.js +0 -1
- package/src/langs/da.js +0 -1
- package/src/langs/de.js +0 -1
- package/src/langs/en.js +0 -1
- package/src/langs/es.js +0 -1
- package/src/langs/fa.js +0 -1
- package/src/langs/fr.js +0 -1
- package/src/langs/he.js +0 -1
- package/src/langs/hu.js +0 -1
- package/src/langs/index.js +27 -1
- package/src/langs/it.js +0 -1
- package/src/langs/ja.js +0 -1
- package/src/langs/km.js +0 -1
- package/src/langs/ko.js +0 -1
- package/src/langs/lv.js +0 -1
- package/src/langs/nl.js +0 -1
- package/src/langs/pl.js +0 -1
- package/src/langs/pt_br.js +0 -1
- package/src/langs/ro.js +0 -1
- package/src/langs/ru.js +0 -1
- package/src/langs/se.js +0 -1
- package/src/langs/tr.js +0 -1
- package/src/langs/uk.js +0 -1
- package/src/langs/ur.js +0 -1
- package/src/langs/zh_cn.js +0 -1
- package/src/modules/contract/Browser.js +68 -23
- package/src/modules/contract/ColorPicker.js +12 -4
- package/src/modules/contract/Controller.js +37 -7
- package/src/modules/contract/Figure.js +159 -36
- package/src/modules/contract/HueSlider.js +27 -4
- package/src/modules/contract/Modal.js +62 -11
- package/src/modules/manager/FileManager.js +50 -8
- package/src/modules/ui/CommandMenu.js +597 -0
- package/src/modules/ui/ModalAnchorEditor.js +41 -9
- package/src/modules/ui/SelectMenu.js +481 -36
- package/src/modules/ui/index.js +1 -0
- package/src/plugins/browser/audioGallery.js +8 -1
- package/src/plugins/browser/fileBrowser.js +15 -2
- package/src/plugins/browser/fileGallery.js +8 -1
- package/src/plugins/browser/imageGallery.js +24 -3
- package/src/plugins/browser/videoGallery.js +19 -4
- package/src/plugins/command/blockquote.js +6 -1
- package/src/plugins/command/codeBlock.js +43 -5
- package/src/plugins/command/exportPDF.js +20 -4
- package/src/plugins/command/fileUpload.js +46 -11
- package/src/plugins/command/list_bulleted.js +6 -1
- package/src/plugins/command/list_numbered.js +6 -1
- package/src/plugins/dropdown/align.js +21 -33
- package/src/plugins/dropdown/backgroundColor.js +10 -2
- package/src/plugins/dropdown/blockStyle.js +17 -22
- package/src/plugins/dropdown/font.js +34 -34
- package/src/plugins/dropdown/hr.js +15 -43
- package/src/plugins/dropdown/layout.js +10 -27
- package/src/plugins/dropdown/lineHeight.js +10 -33
- package/src/plugins/dropdown/list.js +19 -25
- package/src/plugins/dropdown/paragraphStyle.js +16 -24
- package/src/plugins/dropdown/table/index.js +72 -17
- package/src/plugins/dropdown/table/render/table.html.js +3 -1
- package/src/plugins/dropdown/table/services/table.cell.js +33 -7
- package/src/plugins/dropdown/table/services/table.clipboard.js +5 -1
- package/src/plugins/dropdown/table/services/table.grid.js +40 -9
- package/src/plugins/dropdown/table/services/table.resize.js +55 -11
- package/src/plugins/dropdown/table/services/table.selection.js +27 -7
- package/src/plugins/dropdown/table/services/table.style.js +120 -20
- package/src/plugins/dropdown/template.js +13 -29
- package/src/plugins/dropdown/textStyle.js +22 -35
- package/src/plugins/field/autocomplete.js +8 -4
- package/src/plugins/field/slashCommand.js +297 -0
- package/src/plugins/index.js +3 -0
- package/src/plugins/input/fontSize.js +37 -8
- package/src/plugins/input/pageNavigator.js +7 -1
- package/src/plugins/modal/audio.js +71 -17
- package/src/plugins/modal/drawing.js +41 -11
- package/src/plugins/modal/embed.js +132 -22
- package/src/plugins/modal/image/index.js +115 -28
- package/src/plugins/modal/image/services/image.size.js +9 -2
- package/src/plugins/modal/image/services/image.upload.js +38 -4
- package/src/plugins/modal/link.js +9 -2
- package/src/plugins/modal/math.js +10 -2
- package/src/plugins/modal/video/index.js +112 -26
- package/src/plugins/modal/video/render/video.html.js +4 -1
- package/src/plugins/modal/video/services/video.size.js +15 -4
- package/src/plugins/modal/video/services/video.upload.js +10 -2
- package/src/plugins/popup/anchor.js +14 -2
- package/src/suneditor.js +8 -2
- package/src/themes/cobalt.css +12 -0
- package/src/themes/cream.css +12 -0
- package/src/themes/dark.css +12 -0
- package/src/themes/midnight.css +12 -0
- package/src/typedef.js +32 -21
- package/types/assets/icons/defaultIcons.d.ts +1 -0
- package/types/core/config/contextProvider.d.ts +7 -1
- package/types/core/config/eventManager.d.ts +37 -4
- package/types/core/config/optionProvider.d.ts +5 -1
- package/types/core/event/actions/index.d.ts +44 -6
- package/types/core/event/effects/keydown.registry.d.ts +37 -7
- package/types/core/event/effects/ruleHelpers.d.ts +6 -1
- package/types/core/event/eventOrchestrator.d.ts +6 -1
- package/types/core/event/handlers/handler_ww_clipboard.d.ts +15 -3
- package/types/core/event/handlers/handler_ww_dragDrop.d.ts +14 -2
- package/types/core/event/handlers/handler_ww_input.d.ts +10 -2
- package/types/core/event/handlers/handler_ww_key.d.ts +10 -2
- package/types/core/event/handlers/handler_ww_mouse.d.ts +25 -5
- package/types/core/event/ports.d.ts +7 -2
- package/types/core/event/rules/keydown.rule.backspace.d.ts +6 -1
- package/types/core/kernel/store.d.ts +4 -1
- package/types/core/logic/dom/format.d.ts +32 -14
- package/types/core/logic/dom/html.d.ts +11 -3
- package/types/core/logic/dom/nodeTransform.d.ts +6 -6
- package/types/core/logic/panel/blockHandle.d.ts +64 -0
- package/types/core/logic/panel/blockResolver.d.ts +50 -0
- package/types/core/logic/panel/menu.d.ts +72 -3
- package/types/core/logic/shell/commandDispatcher.d.ts +8 -0
- package/types/core/logic/shell/component.d.ts +5 -3
- package/types/core/logic/shell/shortcuts.d.ts +10 -1
- package/types/core/logic/shell/ui.d.ts +7 -1
- package/types/core/schema/context.d.ts +7 -1
- package/types/core/schema/frameContext.d.ts +36 -4
- package/types/core/schema/options.d.ts +110 -37
- package/types/core/section/constructor.d.ts +38 -1
- package/types/events.d.ts +208 -32
- package/types/helper/converter.d.ts +4 -2
- package/types/helper/dom/domCheck.d.ts +12 -2
- package/types/helper/dom/domQuery.d.ts +35 -7
- package/types/helper/dom/domUtils.d.ts +4 -1
- package/types/interfaces/plugins.d.ts +2 -2
- package/types/langs/_Lang.d.ts +0 -1
- package/types/modules/contract/Browser.d.ts +7 -7
- package/types/modules/contract/ColorPicker.d.ts +2 -2
- package/types/modules/contract/Controller.d.ts +7 -0
- package/types/modules/contract/Figure.d.ts +31 -4
- package/types/modules/ui/CommandMenu.d.ts +262 -0
- package/types/modules/ui/ModalAnchorEditor.d.ts +6 -1
- package/types/modules/ui/SelectMenu.d.ts +56 -3
- package/types/modules/ui/index.d.ts +1 -0
- package/types/plugins/browser/audioGallery.d.ts +17 -1
- package/types/plugins/browser/fileBrowser.d.ts +17 -1
- package/types/plugins/browser/fileGallery.d.ts +17 -1
- package/types/plugins/browser/imageGallery.d.ts +17 -1
- package/types/plugins/browser/videoGallery.d.ts +17 -1
- package/types/plugins/dropdown/align.d.ts +1 -1
- package/types/plugins/dropdown/blockStyle.d.ts +3 -1
- package/types/plugins/dropdown/table/index.d.ts +4 -1
- package/types/plugins/dropdown/table/services/table.clipboard.d.ts +5 -1
- package/types/plugins/dropdown/table/services/table.grid.d.ts +10 -2
- package/types/plugins/field/autocomplete.d.ts +0 -1
- package/types/plugins/field/slashCommand.d.ts +165 -0
- package/types/plugins/index.d.ts +3 -0
- package/types/plugins/modal/embed.d.ts +34 -0
- package/types/plugins/modal/link.d.ts +4 -1
- package/types/typedef.d.ts +48 -23
|
@@ -4,7 +4,16 @@ import { _DragHandle } from '../ui/_DragHandle';
|
|
|
4
4
|
import { dom, numbers, env, converter, keyCodeMap } from '../../helper';
|
|
5
5
|
|
|
6
6
|
const { _w, ON_OVER_COMPONENT } = env;
|
|
7
|
-
const DIRECTION_CURSOR_MAP = {
|
|
7
|
+
const DIRECTION_CURSOR_MAP = {
|
|
8
|
+
tl: 'nwse-resize',
|
|
9
|
+
tr: 'nesw-resize',
|
|
10
|
+
bl: 'nesw-resize',
|
|
11
|
+
br: 'nwse-resize',
|
|
12
|
+
lw: 'ew-resize',
|
|
13
|
+
th: 'ns-resize',
|
|
14
|
+
rw: 'ew-resize',
|
|
15
|
+
bh: 'ns-resize',
|
|
16
|
+
};
|
|
8
17
|
const DIR_DIAGONAL = 'tl|bl|tr|br';
|
|
9
18
|
const DIR_W = 'lw|rw';
|
|
10
19
|
let __resizing_p_wh = false;
|
|
@@ -151,7 +160,9 @@ class Figure {
|
|
|
151
160
|
this._action = {};
|
|
152
161
|
|
|
153
162
|
const controllerEl = CreateHTML_controller(this, $, controls || []);
|
|
154
|
-
this.controller = controllerEl
|
|
163
|
+
this.controller = controllerEl
|
|
164
|
+
? new Controller(this, $, controllerEl, { position: 'bottom', disabled: true }, this.kind)
|
|
165
|
+
: null;
|
|
155
166
|
|
|
156
167
|
if (controllerEl) {
|
|
157
168
|
// align selectmenu
|
|
@@ -159,7 +170,9 @@ class Figure {
|
|
|
159
170
|
const alignMenus = CreateAlign(this, $, this.alignButton);
|
|
160
171
|
if (alignMenus) {
|
|
161
172
|
this.selectMenu_align = new SelectMenu($, { checkList: false, position: 'bottom-center' });
|
|
162
|
-
this.selectMenu_align.on(this.alignButton, this.#SetMenuAlign.bind(this), {
|
|
173
|
+
this.selectMenu_align.on(this.alignButton, this.#SetMenuAlign.bind(this), {
|
|
174
|
+
class: 'se-figure-select-list',
|
|
175
|
+
});
|
|
163
176
|
this.selectMenu_align.create(alignMenus.items, alignMenus.html);
|
|
164
177
|
}
|
|
165
178
|
// as [block, inline] selectmenu
|
|
@@ -241,7 +254,11 @@ class Figure {
|
|
|
241
254
|
* // figureInfo.cover → <figure> wrapping the imgEl
|
|
242
255
|
*/
|
|
243
256
|
static CreateContainer(element, className) {
|
|
244
|
-
dom.utils.createElement(
|
|
257
|
+
dom.utils.createElement(
|
|
258
|
+
'DIV',
|
|
259
|
+
{ class: 'se-component' + (className ? ' ' + className : '') },
|
|
260
|
+
dom.utils.createElement('FIGURE', null, element),
|
|
261
|
+
);
|
|
245
262
|
return Figure.GetContainer(element);
|
|
246
263
|
}
|
|
247
264
|
|
|
@@ -258,7 +275,11 @@ class Figure {
|
|
|
258
275
|
* // figureInfo.inlineCover → same as container (inline mode)
|
|
259
276
|
*/
|
|
260
277
|
static CreateInlineContainer(element, className) {
|
|
261
|
-
dom.utils.createElement(
|
|
278
|
+
dom.utils.createElement(
|
|
279
|
+
'SPAN',
|
|
280
|
+
{ class: 'se-component se-inline-component' + (className ? ' ' + className : '') },
|
|
281
|
+
element,
|
|
282
|
+
);
|
|
262
283
|
return Figure.GetContainer(element);
|
|
263
284
|
}
|
|
264
285
|
|
|
@@ -296,7 +317,9 @@ class Figure {
|
|
|
296
317
|
target: /** @type {HTMLElement} */ (target),
|
|
297
318
|
container: dom.query.getParentElement(target, Figure.is, 3) || cover,
|
|
298
319
|
cover: cover,
|
|
299
|
-
inlineCover: dom.utils.hasClass(inlineCover, 'se-inline-component')
|
|
320
|
+
inlineCover: dom.utils.hasClass(inlineCover, 'se-inline-component')
|
|
321
|
+
? /** @type {HTMLElement} */ (inlineCover)
|
|
322
|
+
: null,
|
|
300
323
|
caption: dom.query.getEdgeChild(target.parentElement, 'FIGCAPTION', false),
|
|
301
324
|
isVertical: IsVertical(target),
|
|
302
325
|
};
|
|
@@ -445,7 +468,9 @@ class Figure {
|
|
|
445
468
|
|
|
446
469
|
this.#setFigureInfo(figureInfo);
|
|
447
470
|
|
|
448
|
-
const sizeTarget = /** @type {HTMLElement} */ (
|
|
471
|
+
const sizeTarget = /** @type {HTMLElement} */ (
|
|
472
|
+
figureTarget ? this._cover || this._container || target : target
|
|
473
|
+
);
|
|
449
474
|
const w = sizeTarget.offsetWidth || null;
|
|
450
475
|
const h = sizeTarget.offsetHeight || null;
|
|
451
476
|
const { top, left, scrollX, scrollY } = this.#$.offset.getLocal(sizeTarget);
|
|
@@ -502,7 +527,10 @@ class Figure {
|
|
|
502
527
|
});
|
|
503
528
|
|
|
504
529
|
// percentage active
|
|
505
|
-
const value =
|
|
530
|
+
const value =
|
|
531
|
+
/%$/.test(target.style.width) && /%$/.test(figureInfo.container.style.width)
|
|
532
|
+
? numbers.get(figureInfo.container.style.width, 0) / 100 + ''
|
|
533
|
+
: '';
|
|
506
534
|
for (let i = 0, len = this.percentageButtons.length; i < len; i++) {
|
|
507
535
|
if (this.percentageButtons[i].getAttribute('data-value') === value) {
|
|
508
536
|
dom.utils.addClass(this.percentageButtons[i], 'active');
|
|
@@ -535,7 +563,10 @@ class Figure {
|
|
|
535
563
|
if (this.controller) {
|
|
536
564
|
// size display
|
|
537
565
|
const size = this.getSize(target);
|
|
538
|
-
dom.utils.changeTxt(
|
|
566
|
+
dom.utils.changeTxt(
|
|
567
|
+
_figure.display,
|
|
568
|
+
this.#$.lang[this.align === 'none' ? 'basic' : this.align] + ' (' + size.dw + ', ' + size.dh + ')',
|
|
569
|
+
);
|
|
539
570
|
|
|
540
571
|
// align button
|
|
541
572
|
this.#setAlignIcon();
|
|
@@ -560,7 +591,11 @@ class Figure {
|
|
|
560
591
|
|
|
561
592
|
// selecte
|
|
562
593
|
dom.utils.removeClass(this._cover, 'se-figure-over-selected');
|
|
563
|
-
this.controller?.open(_figure.main, null, {
|
|
594
|
+
this.controller?.open(_figure.main, null, {
|
|
595
|
+
initMethod: this.#offContainer,
|
|
596
|
+
isWWTarget: false,
|
|
597
|
+
addOffset: null,
|
|
598
|
+
});
|
|
564
599
|
_w.setTimeout(() => _DragHandle.set('__overInfo', false), 0);
|
|
565
600
|
} else {
|
|
566
601
|
dom.utils.addClass(this._cover, 'se-figure-over-selected');
|
|
@@ -572,7 +607,11 @@ class Figure {
|
|
|
572
607
|
this.#element_h = this.#resize_h = h;
|
|
573
608
|
|
|
574
609
|
// drag
|
|
575
|
-
if (
|
|
610
|
+
if (
|
|
611
|
+
!this._inlineCover &&
|
|
612
|
+
(_DragHandle.get('__overInfo') !== ON_OVER_COMPONENT ||
|
|
613
|
+
dom.utils.hasClass(figureInfo.container, 'se-input-component'))
|
|
614
|
+
) {
|
|
576
615
|
this.#setDragEvent(_figure.main);
|
|
577
616
|
}
|
|
578
617
|
|
|
@@ -663,9 +702,13 @@ class Figure {
|
|
|
663
702
|
h = target.style.height;
|
|
664
703
|
}
|
|
665
704
|
} else {
|
|
666
|
-
w = !/%$/.test(target.style.width)
|
|
705
|
+
w = !/%$/.test(target.style.width)
|
|
706
|
+
? target.style.width
|
|
707
|
+
: ((figure.container && numbers.get(figure.container.style.width, 2)) || 100) + '%';
|
|
667
708
|
h = figure.inlineCover
|
|
668
|
-
? figure.inlineCover.style.height ||
|
|
709
|
+
? figure.inlineCover.style.height ||
|
|
710
|
+
/** @type {HTMLElement} */ (targetNode).style.height ||
|
|
711
|
+
String(/** @type {HTMLImageElement} */ (targetNode).height || '')
|
|
669
712
|
: numbers.get(figure.cover?.style.paddingBottom, 0) > 0 && !v
|
|
670
713
|
? figure.cover?.style.height
|
|
671
714
|
: !/%$/.test(target.style.height) || !/%$/.test(target.style.width)
|
|
@@ -707,7 +750,11 @@ class Figure {
|
|
|
707
750
|
cover.style.width = container.style.width;
|
|
708
751
|
} else {
|
|
709
752
|
container.style.minWidth = '';
|
|
710
|
-
cover.style.width = this.isVertical
|
|
753
|
+
cover.style.width = this.isVertical
|
|
754
|
+
? target.style.height || target.offsetHeight + 'px'
|
|
755
|
+
: !target.style.width || target.style.width === 'auto'
|
|
756
|
+
? ''
|
|
757
|
+
: target.style.width || '100%';
|
|
711
758
|
}
|
|
712
759
|
|
|
713
760
|
if (!dom.utils.hasClass(container, '__se__float-' + align)) {
|
|
@@ -801,7 +848,12 @@ class Figure {
|
|
|
801
848
|
figure.container,
|
|
802
849
|
container.className
|
|
803
850
|
.split(' ')
|
|
804
|
-
.filter(
|
|
851
|
+
.filter(
|
|
852
|
+
(v) =>
|
|
853
|
+
v !== 'se-inline-component' &&
|
|
854
|
+
v !== 'se-figure-selected' &&
|
|
855
|
+
v !== 'se-component-selected',
|
|
856
|
+
)
|
|
805
857
|
.join('|'),
|
|
806
858
|
);
|
|
807
859
|
|
|
@@ -923,13 +975,17 @@ class Figure {
|
|
|
923
975
|
retainFigureFormat(container, originEl, anchorCover, fileManagerInst) {
|
|
924
976
|
const isInline = this.#$.component.isInline(container);
|
|
925
977
|
const originParent = originEl.parentNode;
|
|
926
|
-
let existElement =
|
|
978
|
+
let existElement =
|
|
979
|
+
this.#$.format.isBlock(originParent) || dom.check.isWysiwygFrame(originParent) || originParent.nodeType >= 9
|
|
980
|
+
? originEl
|
|
981
|
+
: Figure.GetContainer(originEl)?.container || originParent || originEl;
|
|
927
982
|
|
|
928
983
|
if (dom.query.getParentElement(originEl, dom.check.isExcludeFormat)) {
|
|
929
984
|
existElement = anchorCover && anchorCover !== originEl ? anchorCover : originEl;
|
|
930
985
|
existElement.parentNode.replaceChild(container, existElement);
|
|
931
986
|
} else if (isInline && this.#$.format.isLine(existElement)) {
|
|
932
|
-
const refer =
|
|
987
|
+
const refer =
|
|
988
|
+
isInline && /^SPAN$/i.test(originEl.parentElement.nodeName) ? originEl.parentElement : originEl;
|
|
933
989
|
refer.parentElement.replaceChild(container, refer);
|
|
934
990
|
} else if (dom.check.isListCell(existElement)) {
|
|
935
991
|
const refer = dom.query.getParentElement(originEl, (current) => current.parentNode === existElement);
|
|
@@ -945,11 +1001,17 @@ class Figure {
|
|
|
945
1001
|
} else {
|
|
946
1002
|
if (this.#$.format.isLine(existElement.parentNode)) {
|
|
947
1003
|
const formats = existElement.parentNode;
|
|
948
|
-
formats.parentNode.insertBefore(
|
|
949
|
-
|
|
1004
|
+
formats.parentNode.insertBefore(
|
|
1005
|
+
container,
|
|
1006
|
+
existElement.previousSibling ? formats.nextElementSibling : formats,
|
|
1007
|
+
);
|
|
1008
|
+
if (fileManagerInst?.__updateTags.map((current) => existElement.contains(current)).length === 0)
|
|
1009
|
+
dom.utils.removeItem(existElement);
|
|
950
1010
|
else if (dom.check.isZeroWidth(existElement)) dom.utils.removeItem(existElement);
|
|
951
1011
|
} else {
|
|
952
|
-
existElement = dom.check.isFigure(existElement.parentNode)
|
|
1012
|
+
existElement = dom.check.isFigure(existElement.parentNode)
|
|
1013
|
+
? dom.query.getParentElement(existElement.parentNode, Figure.is)
|
|
1014
|
+
: existElement;
|
|
953
1015
|
existElement.parentNode.replaceChild(container, existElement);
|
|
954
1016
|
}
|
|
955
1017
|
}
|
|
@@ -1097,7 +1159,10 @@ class Figure {
|
|
|
1097
1159
|
this._container = figureInfo.container;
|
|
1098
1160
|
this._caption = figureInfo.caption;
|
|
1099
1161
|
this._element = figureInfo.target;
|
|
1100
|
-
this.align =
|
|
1162
|
+
this.align =
|
|
1163
|
+
(this._container.className.match(/(?:^|\s)__se__float-(none|left|center|right)(?:$|\s)/) || [])[1] ||
|
|
1164
|
+
figureInfo.target.style.float ||
|
|
1165
|
+
'none';
|
|
1101
1166
|
this.as = this._inlineCover ? 'inline' : 'block';
|
|
1102
1167
|
this.isVertical = IsVertical(figureInfo.target);
|
|
1103
1168
|
}
|
|
@@ -1141,7 +1206,13 @@ class Figure {
|
|
|
1141
1206
|
element.style.maxWidth = '';
|
|
1142
1207
|
}
|
|
1143
1208
|
|
|
1144
|
-
element.style.transform =
|
|
1209
|
+
element.style.transform =
|
|
1210
|
+
'rotate(' +
|
|
1211
|
+
r +
|
|
1212
|
+
'deg)' +
|
|
1213
|
+
(x ? ' rotateX(' + x + 'deg)' : '') +
|
|
1214
|
+
(y ? ' rotateY(' + y + 'deg)' : '') +
|
|
1215
|
+
(translate ? ' translate' + translate + '(' + width + 'px)' : '');
|
|
1145
1216
|
}
|
|
1146
1217
|
|
|
1147
1218
|
/**
|
|
@@ -1195,7 +1266,9 @@ class Figure {
|
|
|
1195
1266
|
|
|
1196
1267
|
this._cover.style.height = h;
|
|
1197
1268
|
if (/%$/.test(w) && this.align === 'center') {
|
|
1198
|
-
this._cover.style.paddingBottom = !/%$/.test(h)
|
|
1269
|
+
this._cover.style.paddingBottom = !/%$/.test(h)
|
|
1270
|
+
? h
|
|
1271
|
+
: numbers.get((numbers.get(h, 2) / 100) * numbers.get(w, 2), 2) + '%';
|
|
1199
1272
|
} else {
|
|
1200
1273
|
this._cover.style.paddingBottom = h;
|
|
1201
1274
|
}
|
|
@@ -1235,8 +1308,19 @@ class Figure {
|
|
|
1235
1308
|
* @param {string|number} h Height percentage.
|
|
1236
1309
|
*/
|
|
1237
1310
|
_setPercentSize(w, h) {
|
|
1238
|
-
h ||= this.autoRatio
|
|
1239
|
-
|
|
1311
|
+
h ||= this.autoRatio
|
|
1312
|
+
? /%$/.test(this.autoRatio.current)
|
|
1313
|
+
? this.autoRatio.current
|
|
1314
|
+
: this.autoRatio.default
|
|
1315
|
+
: h;
|
|
1316
|
+
h =
|
|
1317
|
+
h && !/%$/.test(h + '') && !numbers.get(h, 0)
|
|
1318
|
+
? numbers.is(h)
|
|
1319
|
+
? h + '%'
|
|
1320
|
+
: h
|
|
1321
|
+
: numbers.is(h)
|
|
1322
|
+
? h + this.sizeUnit
|
|
1323
|
+
: h || (this.autoRatio ? this.autoRatio.default : '');
|
|
1240
1324
|
|
|
1241
1325
|
const heightPercentage = /%$/.test(h + '');
|
|
1242
1326
|
this._container.style.width = String(numbers.is(w) ? w + '%' : w);
|
|
@@ -1335,9 +1419,12 @@ class Figure {
|
|
|
1335
1419
|
* @param {HTMLElement} element Target element.
|
|
1336
1420
|
*/
|
|
1337
1421
|
#setCaptionPosition(element) {
|
|
1338
|
-
const figcaption = /** @type {HTMLElement} */ (
|
|
1422
|
+
const figcaption = /** @type {HTMLElement} */ (
|
|
1423
|
+
dom.query.getEdgeChild(dom.query.getParentElement(element, 'FIGURE'), 'FIGCAPTION', false)
|
|
1424
|
+
);
|
|
1339
1425
|
if (figcaption) {
|
|
1340
|
-
figcaption.style.marginTop =
|
|
1426
|
+
figcaption.style.marginTop =
|
|
1427
|
+
(this.isVertical && !this.autoRatio ? element.offsetWidth - element.offsetHeight : 0) + 'px';
|
|
1341
1428
|
if (this.isVertical && this.autoRatio) {
|
|
1342
1429
|
element.style.marginTop = figcaption.offsetHeight + 'px';
|
|
1343
1430
|
} else {
|
|
@@ -1351,7 +1438,9 @@ class Figure {
|
|
|
1351
1438
|
* @param {HTMLElement} element Target element.
|
|
1352
1439
|
*/
|
|
1353
1440
|
#deleteCaptionPosition(element) {
|
|
1354
|
-
const figcaption = /** @type {HTMLElement} */ (
|
|
1441
|
+
const figcaption = /** @type {HTMLElement} */ (
|
|
1442
|
+
dom.query.getEdgeChild(dom.query.getParentElement(element, 'FIGURE'), 'FIGCAPTION', false)
|
|
1443
|
+
);
|
|
1355
1444
|
if (figcaption) {
|
|
1356
1445
|
figcaption.style.marginTop = '';
|
|
1357
1446
|
}
|
|
@@ -1383,7 +1472,9 @@ class Figure {
|
|
|
1383
1472
|
* @param {Node} figureMain The main figure container element.
|
|
1384
1473
|
*/
|
|
1385
1474
|
#setDragEvent(figureMain) {
|
|
1386
|
-
const dragHandle = /** @type {HTMLElement} */ (
|
|
1475
|
+
const dragHandle = /** @type {HTMLElement} */ (
|
|
1476
|
+
this.#$.frameContext.get('wrapper').querySelector('.se-drag-handle')
|
|
1477
|
+
);
|
|
1387
1478
|
dom.utils.removeClass(dragHandle, 'se-drag-handle-full');
|
|
1388
1479
|
|
|
1389
1480
|
dragHandle.style.opacity = '';
|
|
@@ -1406,7 +1497,12 @@ class Figure {
|
|
|
1406
1497
|
*/
|
|
1407
1498
|
#OnScrollDragHandler(dragHandle, figureMain) {
|
|
1408
1499
|
dragHandle.style.display = 'block';
|
|
1409
|
-
dragHandle.style.left =
|
|
1500
|
+
dragHandle.style.left =
|
|
1501
|
+
figureMain.offsetLeft +
|
|
1502
|
+
(this.#$.options.get('_rtl')
|
|
1503
|
+
? dragHandle.offsetWidth
|
|
1504
|
+
: figureMain.offsetWidth - dragHandle.offsetWidth * 1.5) +
|
|
1505
|
+
'px';
|
|
1410
1506
|
dragHandle.style.top = figureMain.offsetTop - dragHandle.offsetHeight + 0.5 + 'px';
|
|
1411
1507
|
}
|
|
1412
1508
|
|
|
@@ -1424,7 +1520,11 @@ class Figure {
|
|
|
1424
1520
|
const direction = (inst._resize_direction = eventTarget.classList[0]);
|
|
1425
1521
|
inst._resizeClientX = e.clientX;
|
|
1426
1522
|
inst._resizeClientY = e.clientY;
|
|
1427
|
-
this.#$.frameContext.get('_figure').main.style.float = /l/.test(direction)
|
|
1523
|
+
this.#$.frameContext.get('_figure').main.style.float = /l/.test(direction)
|
|
1524
|
+
? 'right'
|
|
1525
|
+
: /r/.test(direction)
|
|
1526
|
+
? 'left'
|
|
1527
|
+
: 'none';
|
|
1428
1528
|
this.#$.ui.enableBackWrapper(DIRECTION_CURSOR_MAP[direction]);
|
|
1429
1529
|
|
|
1430
1530
|
const { w, h, dw, dh } = this.getSize(inst._element);
|
|
@@ -1442,7 +1542,8 @@ class Figure {
|
|
|
1442
1542
|
if (__resizing_p_wh || __resizing_p_ow) {
|
|
1443
1543
|
const sizeTarget = inst._cover || inst._element;
|
|
1444
1544
|
__resizing_sw = sizeTarget.offsetWidth;
|
|
1445
|
-
__resizing_cw =
|
|
1545
|
+
__resizing_cw =
|
|
1546
|
+
converter.getWidthInPercentage(sizeTarget, this.#$.frameContext.get('wysiwygFrame')) / 100;
|
|
1446
1547
|
}
|
|
1447
1548
|
}
|
|
1448
1549
|
|
|
@@ -1492,7 +1593,10 @@ class Figure {
|
|
|
1492
1593
|
const resize_w = /** @type {number} */ (!v && /h$/.test(direction) ? this.#width : Math.round(resultW));
|
|
1493
1594
|
const resize_h = /** @type {number} */ (!v && /w$/.test(direction) ? this.#height : Math.round(resultH));
|
|
1494
1595
|
const rw = __resizing_cw ? (resize_w / __resizing_sw) * __resizing_cw * 100 : resize_w;
|
|
1495
|
-
dom.utils.changeTxt(
|
|
1596
|
+
dom.utils.changeTxt(
|
|
1597
|
+
this.#$.frameContext.get('_figure').display,
|
|
1598
|
+
__resizing_cw ? numbers.get(rw > 100 ? 100 : rw, 2).toFixed(2) + '%' : rw + ' * ' + resize_h,
|
|
1599
|
+
);
|
|
1496
1600
|
|
|
1497
1601
|
this.#resize_w = resize_w;
|
|
1498
1602
|
this.#resize_h = resize_h;
|
|
@@ -1553,6 +1657,7 @@ class Figure {
|
|
|
1553
1657
|
this.setAlign(this._element, value);
|
|
1554
1658
|
this.selectMenu_align.close();
|
|
1555
1659
|
this.#$.component.select(this._element, this.kind);
|
|
1660
|
+
this.#$.history.push(false);
|
|
1556
1661
|
}
|
|
1557
1662
|
|
|
1558
1663
|
/**
|
|
@@ -1561,6 +1666,7 @@ class Figure {
|
|
|
1561
1666
|
#SetMenuAs(value) {
|
|
1562
1667
|
this.convertAsFormat(this._element, value);
|
|
1563
1668
|
this.selectMenu_as.close();
|
|
1669
|
+
this.#$.history.push(false);
|
|
1564
1670
|
}
|
|
1565
1671
|
|
|
1566
1672
|
/**
|
|
@@ -1583,6 +1689,7 @@ class Figure {
|
|
|
1583
1689
|
|
|
1584
1690
|
this.selectMenu_resize.close();
|
|
1585
1691
|
this.#$.component.select(this._element, this.kind);
|
|
1692
|
+
this.#$.history.push(false);
|
|
1586
1693
|
}
|
|
1587
1694
|
|
|
1588
1695
|
#OffFigureContainer() {
|
|
@@ -1642,7 +1749,11 @@ function GetRotateValue(element) {
|
|
|
1642
1749
|
* @returns {boolean} Whether to rotate vertically
|
|
1643
1750
|
*/
|
|
1644
1751
|
function IsVertical(elementOrDeg) {
|
|
1645
|
-
return /^(90|270)$/.test(
|
|
1752
|
+
return /^(90|270)$/.test(
|
|
1753
|
+
Math.abs(
|
|
1754
|
+
numbers.is(elementOrDeg) ? elementOrDeg : GetRotateValue(/** @type{Node} */ (elementOrDeg)).r,
|
|
1755
|
+
).toString(),
|
|
1756
|
+
);
|
|
1646
1757
|
}
|
|
1647
1758
|
|
|
1648
1759
|
/**
|
|
@@ -1715,7 +1826,15 @@ function CreateResize($, button) {
|
|
|
1715
1826
|
n = numbers.is(v);
|
|
1716
1827
|
c = n ? 'resize_percent' + v : 'auto';
|
|
1717
1828
|
l = n ? v + '%' : $.lang.autoSize;
|
|
1718
|
-
html.push(
|
|
1829
|
+
html.push(
|
|
1830
|
+
'<button type="button" class="se-btn-list" data-command="' +
|
|
1831
|
+
c +
|
|
1832
|
+
'" data-value="' +
|
|
1833
|
+
v +
|
|
1834
|
+
'"><span>' +
|
|
1835
|
+
l +
|
|
1836
|
+
'</span></button>',
|
|
1837
|
+
);
|
|
1719
1838
|
}
|
|
1720
1839
|
|
|
1721
1840
|
return { html: html, items: items };
|
|
@@ -1738,7 +1857,11 @@ function CreateHTML_resizeDot() {
|
|
|
1738
1857
|
<div class="se-resize-display"></div>
|
|
1739
1858
|
</div>`;
|
|
1740
1859
|
|
|
1741
|
-
return dom.utils.createElement(
|
|
1860
|
+
return dom.utils.createElement(
|
|
1861
|
+
'DIV',
|
|
1862
|
+
{ class: 'se-controller se-resizing-container', style: 'display: none;' },
|
|
1863
|
+
html,
|
|
1864
|
+
);
|
|
1742
1865
|
}
|
|
1743
1866
|
|
|
1744
1867
|
/**
|
|
@@ -135,7 +135,13 @@ class HueSlider {
|
|
|
135
135
|
if (!params.isNewForm) {
|
|
136
136
|
const hueController = CreateHTML_basicControllerForm($, className);
|
|
137
137
|
this.circle = hueController.querySelector('.se-hue');
|
|
138
|
-
this.controller = new Controller(this, $, hueController, {
|
|
138
|
+
this.controller = new Controller(this, $, hueController, {
|
|
139
|
+
position: 'bottom',
|
|
140
|
+
isWWTarget: false,
|
|
141
|
+
parents: [inst.form],
|
|
142
|
+
parentsHide: true,
|
|
143
|
+
...params.controllerOptions,
|
|
144
|
+
});
|
|
139
145
|
}
|
|
140
146
|
}
|
|
141
147
|
|
|
@@ -224,7 +230,10 @@ class HueSlider {
|
|
|
224
230
|
// touch event
|
|
225
231
|
if (isTouchDevice) {
|
|
226
232
|
// mobile name
|
|
227
|
-
this.#globalTouchStart = this.#$.eventManager.addGlobalEvent('touchstart', OnTouchstart, {
|
|
233
|
+
this.#globalTouchStart = this.#$.eventManager.addGlobalEvent('touchstart', OnTouchstart, {
|
|
234
|
+
passive: false,
|
|
235
|
+
capture: true,
|
|
236
|
+
});
|
|
228
237
|
this.#globalTouchMove = this.#$.eventManager.addGlobalEvent('touchmove', OnTouchmove, true);
|
|
229
238
|
this.#globalTouchEnd = this.#$.eventManager.addGlobalEvent(
|
|
230
239
|
'touchend',
|
|
@@ -237,7 +246,10 @@ class HueSlider {
|
|
|
237
246
|
}
|
|
238
247
|
|
|
239
248
|
// mouse event
|
|
240
|
-
this.#globalMouseDown = this.#$.eventManager.addGlobalEvent('mousedown', OnMousedown, {
|
|
249
|
+
this.#globalMouseDown = this.#$.eventManager.addGlobalEvent('mousedown', OnMousedown, {
|
|
250
|
+
passive: false,
|
|
251
|
+
capture: true,
|
|
252
|
+
});
|
|
241
253
|
this.#globalMouseMove = this.#$.eventManager.addGlobalEvent('mousemove', OnMousemove, true);
|
|
242
254
|
this.#globalMouseUp = this.#$.eventManager.addGlobalEvent(
|
|
243
255
|
'mouseup',
|
|
@@ -271,7 +283,18 @@ class HueSlider {
|
|
|
271
283
|
}
|
|
272
284
|
|
|
273
285
|
// init
|
|
274
|
-
const {
|
|
286
|
+
const {
|
|
287
|
+
slider,
|
|
288
|
+
offscreenCanvas,
|
|
289
|
+
offscreenCtx,
|
|
290
|
+
wheel,
|
|
291
|
+
wheelCtx,
|
|
292
|
+
wheelPointer,
|
|
293
|
+
gradientBar,
|
|
294
|
+
gradientPointer,
|
|
295
|
+
fanalColorHex,
|
|
296
|
+
fanalColorBackground,
|
|
297
|
+
} = CreateSliderCtx();
|
|
275
298
|
|
|
276
299
|
// mobile
|
|
277
300
|
function OnTouchstart(event) {
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { dom, env, keyCodeMap } from '../../helper';
|
|
2
2
|
|
|
3
3
|
const { _w } = env;
|
|
4
|
-
const DIRECTION_CURSOR_MAP = {
|
|
4
|
+
const DIRECTION_CURSOR_MAP = {
|
|
5
|
+
w: 'ns-resize',
|
|
6
|
+
h: 'ew-resize',
|
|
7
|
+
c: 'nwse-resize',
|
|
8
|
+
wRTL: 'ns-resize',
|
|
9
|
+
hRTL: 'ew-resize',
|
|
10
|
+
cRTL: 'nesw-resize',
|
|
11
|
+
};
|
|
5
12
|
|
|
6
13
|
/**
|
|
7
14
|
* @class
|
|
@@ -10,6 +17,9 @@ const DIRECTION_CURSOR_MAP = { w: 'ns-resize', h: 'ew-resize', c: 'nwse-resize',
|
|
|
10
17
|
class Modal {
|
|
11
18
|
#$;
|
|
12
19
|
|
|
20
|
+
/** @type {Node} */
|
|
21
|
+
#targetElement;
|
|
22
|
+
|
|
13
23
|
/** @type {HTMLElement} */
|
|
14
24
|
#modalArea;
|
|
15
25
|
/** @type {HTMLElement} */
|
|
@@ -56,14 +66,38 @@ class Modal {
|
|
|
56
66
|
|
|
57
67
|
// init
|
|
58
68
|
this.#$.eventManager.addEvent(element.querySelector('form'), 'submit', this.#Action.bind(this));
|
|
59
|
-
this.#hasNoCloseButton = !this.#$.eventManager.addEvent(
|
|
69
|
+
this.#hasNoCloseButton = !this.#$.eventManager.addEvent(
|
|
70
|
+
element.querySelector('[data-command="close"]'),
|
|
71
|
+
'click',
|
|
72
|
+
this.close.bind(this),
|
|
73
|
+
);
|
|
60
74
|
|
|
61
75
|
// resize
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
if (
|
|
77
|
+
element.querySelector('.se-modal-resize-handle-w') ||
|
|
78
|
+
element.querySelector('.se-modal-resize-handle-h') ||
|
|
79
|
+
element.querySelector('.se-modal-resize-handle-c') ||
|
|
80
|
+
element.querySelector('.se-modal-resize-form')
|
|
81
|
+
) {
|
|
82
|
+
if (
|
|
83
|
+
!(this.#resizeBody = element.querySelector('.se-modal-resize-form')) &&
|
|
84
|
+
(this.#resizeBody = element.querySelector('.se-modal-body'))
|
|
85
|
+
) {
|
|
86
|
+
this.#$.eventManager.addEvent(
|
|
87
|
+
element.querySelector('.se-modal-resize-handle-w'),
|
|
88
|
+
'mousedown',
|
|
89
|
+
this.#OnResizeMouseDown.bind(this, 'w'),
|
|
90
|
+
);
|
|
91
|
+
this.#$.eventManager.addEvent(
|
|
92
|
+
element.querySelector('.se-modal-resize-handle-h'),
|
|
93
|
+
'mousedown',
|
|
94
|
+
this.#OnResizeMouseDown.bind(this, 'h'),
|
|
95
|
+
);
|
|
96
|
+
this.#$.eventManager.addEvent(
|
|
97
|
+
element.querySelector('.se-modal-resize-handle-c'),
|
|
98
|
+
'mousedown',
|
|
99
|
+
this.#OnResizeMouseDown.bind(this, 'c'),
|
|
100
|
+
);
|
|
67
101
|
|
|
68
102
|
this.#globalEventHandlers = {
|
|
69
103
|
mousemove: this.#OnResize.bind(this),
|
|
@@ -170,11 +204,14 @@ class Modal {
|
|
|
170
204
|
const mw = `${this.form.offsetWidth - offset.width}px`;
|
|
171
205
|
const mh = `${this.form.offsetTop + (this.form.offsetHeight - this.#resizeBody.offsetHeight)}px`;
|
|
172
206
|
// set max
|
|
173
|
-
if (maxWidth && typeof this.#resizeDir === 'string')
|
|
207
|
+
if (maxWidth && typeof this.#resizeDir === 'string')
|
|
208
|
+
dom.utils.setStyle(this.#resizeBody, 'max-width', `calc(${maxWidth} - ${mw})`);
|
|
174
209
|
if (maxHeight) dom.utils.setStyle(this.#resizeBody, 'max-height', `calc(${maxHeight} - ${mh})`);
|
|
175
210
|
}
|
|
176
211
|
|
|
177
212
|
if (this.focusElement) this.focusElement.focus();
|
|
213
|
+
|
|
214
|
+
this.#targetElement = this.#$.component.currentTarget;
|
|
178
215
|
}
|
|
179
216
|
|
|
180
217
|
/**
|
|
@@ -205,7 +242,13 @@ class Modal {
|
|
|
205
242
|
this.inst.modalInit?.();
|
|
206
243
|
this.inst.modalOff?.(this.isUpdate);
|
|
207
244
|
|
|
208
|
-
if (!this.isUpdate)
|
|
245
|
+
if (!this.isUpdate) {
|
|
246
|
+
this.#$.focusManager.focus();
|
|
247
|
+
} else if (this.#targetElement) {
|
|
248
|
+
this.inst.componentSelect?.(this.#targetElement);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
this.#targetElement = null;
|
|
209
252
|
}
|
|
210
253
|
|
|
211
254
|
/**
|
|
@@ -238,8 +281,16 @@ class Modal {
|
|
|
238
281
|
#addGlobalEvent(dir) {
|
|
239
282
|
this.#removeGlobalEvent();
|
|
240
283
|
this.#$.ui.enableBackWrapper(DIRECTION_CURSOR_MAP[dir]);
|
|
241
|
-
this.#bindClose_mousemove = this.#$.eventManager.addGlobalEvent(
|
|
242
|
-
|
|
284
|
+
this.#bindClose_mousemove = this.#$.eventManager.addGlobalEvent(
|
|
285
|
+
'mousemove',
|
|
286
|
+
this.#globalEventHandlers.mousemove,
|
|
287
|
+
true,
|
|
288
|
+
);
|
|
289
|
+
this.#bindClose_mouseup = this.#$.eventManager.addGlobalEvent(
|
|
290
|
+
'mouseup',
|
|
291
|
+
this.#globalEventHandlers.mouseup,
|
|
292
|
+
true,
|
|
293
|
+
);
|
|
243
294
|
}
|
|
244
295
|
|
|
245
296
|
/**
|