suneditor 3.0.5 → 3.1.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.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +1 -1
- package/src/assets/suneditor.css +53 -5
- package/src/core/editor.js +20 -3
- package/src/core/event/eventOrchestrator.js +2 -1
- package/src/core/event/handlers/handler_ww_key.js +2 -2
- package/src/core/logic/dom/html.js +23 -1
- package/src/core/logic/dom/offset.js +24 -1
- package/src/core/logic/panel/viewer.js +6 -4
- package/src/core/logic/shell/_commandExecutor.js +38 -1
- package/src/core/logic/shell/shortcuts.js +1 -1
- package/src/core/schema/options.js +1 -1
- package/src/core/section/constructor.js +3 -3
- package/src/helper/index.js +3 -0
- package/src/helper/msOffice.js +849 -0
- package/src/interfaces/plugins.js +1 -1
- package/src/langs/ckb.js +1 -0
- package/src/langs/cs.js +1 -0
- package/src/langs/da.js +1 -0
- package/src/langs/de.js +1 -0
- package/src/langs/en.js +1 -1
- package/src/langs/es.js +1 -0
- package/src/langs/fa.js +1 -0
- package/src/langs/fr.js +1 -0
- package/src/langs/he.js +1 -0
- package/src/langs/hu.js +1 -0
- package/src/langs/it.js +1 -0
- package/src/langs/ja.js +1 -0
- package/src/langs/km.js +1 -0
- package/src/langs/ko.js +1 -0
- package/src/langs/lv.js +1 -0
- package/src/langs/nl.js +1 -0
- package/src/langs/pl.js +1 -0
- package/src/langs/pt_br.js +1 -0
- package/src/langs/ro.js +1 -0
- package/src/langs/ru.js +1 -0
- package/src/langs/se.js +1 -0
- package/src/langs/tr.js +1 -0
- package/src/langs/uk.js +1 -0
- package/src/langs/ur.js +1 -0
- package/src/langs/zh_cn.js +1 -0
- package/src/modules/contract/Browser.js +99 -10
- package/src/modules/ui/ModalAnchorEditor.js +16 -1
- package/src/plugins/browser/audioGallery.js +13 -0
- package/src/plugins/browser/fileBrowser.js +22 -0
- package/src/plugins/browser/fileGallery.js +14 -0
- package/src/plugins/browser/imageGallery.js +14 -0
- package/src/plugins/browser/videoGallery.js +14 -0
- package/src/plugins/command/fileUpload.js +12 -0
- package/src/plugins/dropdown/layout.js +1 -1
- package/src/plugins/dropdown/template.js +2 -1
- package/src/plugins/field/autocomplete.js +346 -0
- package/src/plugins/index.js +3 -3
- package/src/plugins/modal/audio.js +12 -0
- package/src/plugins/modal/embed.js +12 -0
- package/src/plugins/modal/image/index.js +12 -0
- package/src/plugins/modal/link.js +12 -0
- package/src/plugins/modal/video/index.js +12 -0
- package/src/typedef.js +1 -1
- package/types/core/logic/shell/shortcuts.d.ts +2 -2
- package/types/core/schema/options.d.ts +2 -2
- package/types/helper/index.d.ts +4 -0
- package/types/helper/msOffice.d.ts +11 -0
- package/types/interfaces/plugins.d.ts +1 -1
- package/types/langs/_Lang.d.ts +1 -1
- package/types/modules/contract/Browser.d.ts +32 -0
- package/types/modules/ui/ModalAnchorEditor.d.ts +32 -2
- package/types/plugins/browser/audioGallery.d.ts +26 -0
- package/types/plugins/browser/fileBrowser.d.ts +45 -0
- package/types/plugins/browser/fileGallery.d.ts +28 -0
- package/types/plugins/browser/imageGallery.d.ts +28 -0
- package/types/plugins/browser/videoGallery.d.ts +28 -0
- package/types/plugins/command/fileUpload.d.ts +24 -0
- package/types/plugins/field/autocomplete.d.ts +177 -0
- package/types/plugins/index.d.ts +3 -3
- package/types/plugins/modal/audio.d.ts +24 -0
- package/types/plugins/modal/embed.d.ts +24 -0
- package/types/plugins/modal/image/index.d.ts +24 -0
- package/types/plugins/modal/link.d.ts +28 -1
- package/types/plugins/modal/video/index.d.ts +24 -0
- package/types/typedef.d.ts +1 -1
- package/src/plugins/field/mention.js +0 -251
- package/types/plugins/field/mention.d.ts +0 -104
package/package.json
CHANGED
package/src/assets/suneditor.css
CHANGED
|
@@ -368,6 +368,26 @@
|
|
|
368
368
|
z-index: 1;
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
+
/** -- plain text button */
|
|
372
|
+
.sun-editor .se-btn.se-btn-plain {
|
|
373
|
+
background-color: transparent;
|
|
374
|
+
border-color: transparent;
|
|
375
|
+
box-shadow: none;
|
|
376
|
+
}
|
|
377
|
+
.sun-editor .se-btn.se-btn-plain:not(.on):not(.active):enabled:hover,
|
|
378
|
+
.sun-editor .se-btn.se-btn-plain:not(.on):not(.active):enabled:focus {
|
|
379
|
+
background-color: transparent;
|
|
380
|
+
border-color: transparent;
|
|
381
|
+
box-shadow: none;
|
|
382
|
+
}
|
|
383
|
+
.sun-editor .se-btn.se-btn-plain:not(.on):not(.active):enabled:active,
|
|
384
|
+
.sun-editor .se-btn.se-btn-plain:not(.on):not(.active):enabled.__se__active {
|
|
385
|
+
background-color: transparent;
|
|
386
|
+
border-color: transparent !important;
|
|
387
|
+
box-shadow: none;
|
|
388
|
+
outline: none !important;
|
|
389
|
+
}
|
|
390
|
+
|
|
371
391
|
/** --- primary button */
|
|
372
392
|
.sun-editor .se-btn-primary {
|
|
373
393
|
background-color: var(--se-active-light2-color);
|
|
@@ -3232,11 +3252,14 @@
|
|
|
3232
3252
|
margin-left: 0;
|
|
3233
3253
|
margin-right: 0;
|
|
3234
3254
|
}
|
|
3235
|
-
|
|
3236
|
-
|
|
3255
|
+
.sun-editor .se-browser .se-browser-search-input-wrap {
|
|
3256
|
+
position: relative;
|
|
3237
3257
|
flex: auto;
|
|
3258
|
+
}
|
|
3259
|
+
.sun-editor .se-browser .se-browser-search-input-wrap input {
|
|
3260
|
+
width: 100%;
|
|
3261
|
+
padding: 3px 24px 3px 6px;
|
|
3238
3262
|
background-color: transparent;
|
|
3239
|
-
padding: 3px 6px;
|
|
3240
3263
|
color: var(--se-main-font-color);
|
|
3241
3264
|
text-decoration: none;
|
|
3242
3265
|
border-radius: var(--se-border-radius);
|
|
@@ -3245,6 +3268,18 @@
|
|
|
3245
3268
|
-moz-background-clip: padding;
|
|
3246
3269
|
-webkit-background-clip: padding-box;
|
|
3247
3270
|
background-clip: padding-box;
|
|
3271
|
+
box-sizing: border-box;
|
|
3272
|
+
}
|
|
3273
|
+
.sun-editor .se-browser .se-browser-search-clear {
|
|
3274
|
+
position: absolute;
|
|
3275
|
+
right: 2px;
|
|
3276
|
+
top: 50%;
|
|
3277
|
+
transform: translateY(-50%);
|
|
3278
|
+
padding: 0 2px;
|
|
3279
|
+
opacity: 0.35;
|
|
3280
|
+
}
|
|
3281
|
+
.sun-editor .se-browser .se-browser-search-clear:hover {
|
|
3282
|
+
opacity: 0.8;
|
|
3248
3283
|
}
|
|
3249
3284
|
|
|
3250
3285
|
.sun-editor .se-browser .se-browser-search button {
|
|
@@ -3396,6 +3431,12 @@
|
|
|
3396
3431
|
opacity: 0.6;
|
|
3397
3432
|
pointer-events: none;
|
|
3398
3433
|
}
|
|
3434
|
+
.sun-editor .se-browser .se-file-name-image mark {
|
|
3435
|
+
background-color: var(--se-active-color);
|
|
3436
|
+
color: var(--se-active-font-color);
|
|
3437
|
+
padding: 0 1px;
|
|
3438
|
+
border-radius: 2px;
|
|
3439
|
+
}
|
|
3399
3440
|
|
|
3400
3441
|
.sun-editor .se-browser .se-browser-list.se-preview-list .se-file-item-img > * {
|
|
3401
3442
|
display: flex;
|
|
@@ -4148,6 +4189,13 @@
|
|
|
4148
4189
|
margin: 2px 8px;
|
|
4149
4190
|
flex-direction: row-reverse;
|
|
4150
4191
|
}
|
|
4192
|
+
.sun-editor.se-rtl .se-browser .se-browser-search-input-wrap input {
|
|
4193
|
+
padding: 3px 6px 3px 24px;
|
|
4194
|
+
}
|
|
4195
|
+
.sun-editor.se-rtl .se-browser .se-browser-search-clear {
|
|
4196
|
+
right: auto;
|
|
4197
|
+
left: 2px;
|
|
4198
|
+
}
|
|
4151
4199
|
.sun-editor.se-rtl .se-browser .se-browser-side .se-menu-icon {
|
|
4152
4200
|
margin: 0 0 0 10px;
|
|
4153
4201
|
}
|
|
@@ -4329,8 +4377,8 @@
|
|
|
4329
4377
|
border-style: dashed none none;
|
|
4330
4378
|
}
|
|
4331
4379
|
|
|
4332
|
-
/**
|
|
4333
|
-
.sun-editor .se-select-menu .se-select-item .se-
|
|
4380
|
+
/** autocomplete */
|
|
4381
|
+
.sun-editor .se-select-menu .se-select-item .se-autocomplete-item span + span {
|
|
4334
4382
|
margin: 0 4px;
|
|
4335
4383
|
opacity: 0.5;
|
|
4336
4384
|
}
|
package/src/core/editor.js
CHANGED
|
@@ -267,10 +267,27 @@ class Editor {
|
|
|
267
267
|
|
|
268
268
|
if (e.get('options').get('iframe')) {
|
|
269
269
|
const iframeLoaded = new Promise((resolve) => {
|
|
270
|
-
|
|
271
|
-
this.#setIframeDocument(
|
|
270
|
+
const setupIframe = (target) => {
|
|
271
|
+
this.#setIframeDocument(target, this.$.optionProvider.options, e.get('options'));
|
|
272
272
|
resolve();
|
|
273
|
-
}
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
if (env.isGecko) {
|
|
276
|
+
// Firefox fires the iframe "load" event twice for sandboxed about:blank iframes —
|
|
277
|
+
// once for the initial document and again after sandbox processing replaces it.
|
|
278
|
+
// Debounce to ensure we initialize against the final document.
|
|
279
|
+
let debounceTimer = null;
|
|
280
|
+
this.$.eventManager.addEvent(e.get('wysiwygFrame'), 'load', ({ target }) => {
|
|
281
|
+
clearTimeout(debounceTimer);
|
|
282
|
+
debounceTimer = setTimeout(() => {
|
|
283
|
+
if (this.$) setupIframe(target);
|
|
284
|
+
}, 60);
|
|
285
|
+
});
|
|
286
|
+
} else {
|
|
287
|
+
this.$.eventManager.addEvent(e.get('wysiwygFrame'), 'load', ({ target }) => {
|
|
288
|
+
setupIframe(target);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
274
291
|
});
|
|
275
292
|
iframePromises.push(iframeLoaded);
|
|
276
293
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import KernelInjector from '../kernel/kernelInjector';
|
|
2
|
-
import { dom, unicode, numbers, env, converter } from '../../helper';
|
|
2
|
+
import { dom, unicode, numbers, env, converter, msOffice } from '../../helper';
|
|
3
3
|
import { _DragHandle } from '../../modules/ui';
|
|
4
4
|
|
|
5
5
|
// event handlers
|
|
@@ -256,6 +256,7 @@ class EventOrchestrator extends KernelInjector {
|
|
|
256
256
|
if (MSData) {
|
|
257
257
|
cleanData = cleanData.replace(/\n/g, ' ');
|
|
258
258
|
plainText = plainText.replace(/\n/g, ' ');
|
|
259
|
+
cleanData = msOffice.cleanHTML(cleanData);
|
|
259
260
|
}
|
|
260
261
|
}
|
|
261
262
|
|
|
@@ -42,9 +42,9 @@ export async function OnKeyDown_wysiwyg(fc, e) {
|
|
|
42
42
|
this.$.menu.dropdownOff();
|
|
43
43
|
|
|
44
44
|
if (this.$.store.mode.isBalloon) {
|
|
45
|
-
this._hideToolbar();
|
|
45
|
+
if (!this.$.store.mode.isBalloonAlways) this._hideToolbar();
|
|
46
46
|
} else if (this.$.store.mode.isSubBalloon) {
|
|
47
|
-
this._hideToolbar_sub();
|
|
47
|
+
if (!this.$.store.mode.isSubBalloonAlways) this._hideToolbar_sub();
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
// user event
|
|
@@ -1648,12 +1648,34 @@ class HTML {
|
|
|
1648
1648
|
|
|
1649
1649
|
for (let i = 0, len = withoutFormatCells.length, t, f; i < len; i++) {
|
|
1650
1650
|
t = withoutFormatCells[i];
|
|
1651
|
+
|
|
1651
1652
|
f = dom.utils.createElement('DIV');
|
|
1652
|
-
f.innerHTML = t.
|
|
1653
|
+
f.innerHTML = t.innerHTML;
|
|
1654
|
+
|
|
1655
|
+
if (t.textContent.trim().length === 0 && this.#isAllTextStyleNodes(t)) {
|
|
1656
|
+
let leaf = /** @type {Element} */ (f);
|
|
1657
|
+
while (leaf.firstElementChild) leaf = leaf.firstElementChild;
|
|
1658
|
+
leaf.innerHTML = '<br>';
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1653
1661
|
t.innerHTML = f.outerHTML;
|
|
1654
1662
|
}
|
|
1655
1663
|
}
|
|
1656
1664
|
|
|
1665
|
+
/**
|
|
1666
|
+
* @description Checks if all element descendants are text-style nodes (no focusable non-text elements like br, img, etc.).
|
|
1667
|
+
* @param {Element} el Target element
|
|
1668
|
+
* @returns {boolean}
|
|
1669
|
+
*/
|
|
1670
|
+
#isAllTextStyleNodes(el) {
|
|
1671
|
+
const nodes = el.querySelectorAll('*');
|
|
1672
|
+
const format = this.#$.format;
|
|
1673
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
1674
|
+
if (!format.isTextStyleNode(nodes[i])) return false;
|
|
1675
|
+
}
|
|
1676
|
+
return true;
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1657
1679
|
/**
|
|
1658
1680
|
* @description Removes attribute values such as style and converts tags that do not conform to the `html5` standard.
|
|
1659
1681
|
* @param {string} html HTML string
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { getParentElement } from '../../../helper/dom/domQuery';
|
|
2
2
|
import { isWysiwygFrame, isElement } from '../../../helper/dom/domCheck';
|
|
3
|
-
import { hasClass, addClass, removeClass, getClientSize } from '../../../helper/dom/domUtils';
|
|
3
|
+
import { hasClass, addClass, removeClass, getClientSize, createTextNode } from '../../../helper/dom/domUtils';
|
|
4
4
|
import { numbers } from '../../../helper';
|
|
5
5
|
import { _w, _d } from '../../../helper/env';
|
|
6
|
+
import { zeroWidthSpace } from '../../../helper/unicode';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @typedef {Object} RectsInfo Bounding rectangle information of the selection range.
|
|
@@ -639,6 +640,28 @@ class Offset {
|
|
|
639
640
|
const rectsObj = this.#$.selection.getRects(range, positionTop ? 'start' : 'end');
|
|
640
641
|
positionTop = rectsObj.position === 'start';
|
|
641
642
|
|
|
643
|
+
// fallback: when rects could not be obtained from the range (e.g. collapsed at <br>),
|
|
644
|
+
// insert a temporary zero-width space to get accurate viewport coordinates.
|
|
645
|
+
if (rectsObj.rects.noText) {
|
|
646
|
+
let refNode = range.startContainer;
|
|
647
|
+
if (refNode.nodeType === 1) refNode = refNode.childNodes[range.startOffset] || refNode;
|
|
648
|
+
const parentEl = refNode.parentNode;
|
|
649
|
+
if (parentEl) {
|
|
650
|
+
const zws = createTextNode(zeroWidthSpace);
|
|
651
|
+
parentEl.insertBefore(zws, refNode);
|
|
652
|
+
const tempRange = _d.createRange();
|
|
653
|
+
tempRange.setStart(zws, 1);
|
|
654
|
+
tempRange.setEnd(zws, 1);
|
|
655
|
+
const tempRects = tempRange.getClientRects()[0];
|
|
656
|
+
if (tempRects) {
|
|
657
|
+
rectsObj.rects = tempRects;
|
|
658
|
+
rectsObj.scrollLeft = _w.scrollX;
|
|
659
|
+
rectsObj.scrollTop = _w.scrollY;
|
|
660
|
+
}
|
|
661
|
+
parentEl.removeChild(zws);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
642
665
|
const isFullScreen = this.#frameContext.get('isFullScreen');
|
|
643
666
|
const topArea = this.#frameContext.get('topArea');
|
|
644
667
|
const isInCarrier = this.#carrierWrapper.contains(element);
|
|
@@ -526,6 +526,8 @@ class Viewer {
|
|
|
526
526
|
const printDocument = dom.query.getIframeDocument(iframe);
|
|
527
527
|
const wDoc = this.#frameContext.get('_wd');
|
|
528
528
|
const rtlClass = this.#options.get('_rtl') ? ' se-rtl' : '';
|
|
529
|
+
const themeClass = (this.#options.get('_themeClass') || '').trim();
|
|
530
|
+
const stripTheme = (cls) => (themeClass ? cls.replace(themeClass, '').trim() : cls);
|
|
529
531
|
const pageCSS = /*html*/ `
|
|
530
532
|
<style>
|
|
531
533
|
@page {
|
|
@@ -536,10 +538,10 @@ class Viewer {
|
|
|
536
538
|
|
|
537
539
|
if (this.#frameOptions.get('iframe')) {
|
|
538
540
|
const arrts = this.#options.get('printClass')
|
|
539
|
-
? 'class="' + this.#options.get('printClass') + rtlClass + '"'
|
|
541
|
+
? 'class="' + stripTheme(this.#options.get('printClass')) + rtlClass + '"'
|
|
540
542
|
: this.#frameOptions.get('iframe_fullPage')
|
|
541
|
-
? dom.utils.getAttributesToString(wDoc.body, ['contenteditable'])
|
|
542
|
-
: 'class="' + this.#options.get('_editableClass') + rtlClass + '"';
|
|
543
|
+
? dom.utils.getAttributesToString(wDoc.body, ['contenteditable']).replace(themeClass, '')
|
|
544
|
+
: 'class="' + stripTheme(this.#options.get('_editableClass')) + rtlClass + '"';
|
|
543
545
|
|
|
544
546
|
printDocument.write(/*html*/ `
|
|
545
547
|
<!DOCTYPE html>
|
|
@@ -570,7 +572,7 @@ class Viewer {
|
|
|
570
572
|
${linkHTML}
|
|
571
573
|
${pageCSS}
|
|
572
574
|
</head>
|
|
573
|
-
<body class="${(this.#options.get('printClass') || this.#options.get('_editableClass')) + rtlClass}" style="padding: 0; padding-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 0;">
|
|
575
|
+
<body class="${stripTheme(this.#options.get('printClass') || this.#options.get('_editableClass')) + rtlClass}" style="padding: 0; padding-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 0;">
|
|
574
576
|
${contentHTML}
|
|
575
577
|
</body>
|
|
576
578
|
</html>`);
|
|
@@ -59,12 +59,15 @@ export default class CommandExecutor {
|
|
|
59
59
|
* @description Execute default command of command button
|
|
60
60
|
*/
|
|
61
61
|
async execute(command, button) {
|
|
62
|
-
if (this.#frameContext.get('isReadOnly') && !/copy|cut|selectAll|codeView|markdownView|fullScreen|print|preview|showBlocks|finder/.test(command)) return;
|
|
62
|
+
if (this.#frameContext.get('isReadOnly') && !/copy|cut|selectAll|selectAll_full|codeView|markdownView|fullScreen|print|preview|showBlocks|finder/.test(command)) return;
|
|
63
63
|
|
|
64
64
|
switch (command) {
|
|
65
65
|
case 'selectAll':
|
|
66
66
|
this.#SELECT_ALL();
|
|
67
67
|
break;
|
|
68
|
+
case 'selectAll_full':
|
|
69
|
+
this.#SELECT_ALL_FULL();
|
|
70
|
+
break;
|
|
68
71
|
case 'copy': {
|
|
69
72
|
const range = this.#$.selection.getRange();
|
|
70
73
|
if (range.collapsed) break;
|
|
@@ -254,6 +257,40 @@ export default class CommandExecutor {
|
|
|
254
257
|
this.#$.toolbar._showBalloon(this.#$.selection.setRange(first, 0, last, last.textContent.length));
|
|
255
258
|
}
|
|
256
259
|
|
|
260
|
+
/**
|
|
261
|
+
* @description Selects all content in the entire editor without scope stepping.
|
|
262
|
+
*/
|
|
263
|
+
#SELECT_ALL_FULL() {
|
|
264
|
+
this.#$.ui.offCurrentController();
|
|
265
|
+
this.#$.menu.containerOff();
|
|
266
|
+
|
|
267
|
+
const ww = this.#frameContext.get('wysiwyg');
|
|
268
|
+
let { first, last } = __findFirstAndLast(ww);
|
|
269
|
+
|
|
270
|
+
if (!first || !last) return;
|
|
271
|
+
|
|
272
|
+
let info = null;
|
|
273
|
+
if (dom.check.isMedia(first) || (info = this.#$.component.get(first)) || dom.check.isTableElements(first)) {
|
|
274
|
+
info ||= this.#$.component.get(first);
|
|
275
|
+
const br = dom.utils.createElement('BR');
|
|
276
|
+
const format = dom.utils.createElement(this.#options.get('defaultLine'), null, br);
|
|
277
|
+
first = info ? info.container || info.cover : first;
|
|
278
|
+
first.parentElement.insertBefore(format, first);
|
|
279
|
+
first = br;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (dom.check.isMedia(last) || (info = this.#$.component.get(last)) || dom.check.isTableElements(last)) {
|
|
283
|
+
info ||= this.#$.component.get(last);
|
|
284
|
+
const br = dom.utils.createElement('BR');
|
|
285
|
+
const format = dom.utils.createElement(this.#options.get('defaultLine'), null, br);
|
|
286
|
+
last = info ? info.container || info.cover : last;
|
|
287
|
+
last.parentElement.appendChild(format);
|
|
288
|
+
last = br;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
this.#$.toolbar._showBalloon(this.#$.selection.setRange(first, 0, last, last.textContent.length));
|
|
292
|
+
}
|
|
293
|
+
|
|
257
294
|
/**
|
|
258
295
|
* @description Saves the editor content.
|
|
259
296
|
* @returns {Promise<void>}
|
|
@@ -16,7 +16,7 @@ import { CreateShortcuts } from '../../section/constructor';
|
|
|
16
16
|
* @property {string} type - Plugin's type. (`command`, `dropdown`, `modal`, `browser`, `input`, `field`, `popup`).
|
|
17
17
|
* @property {Node} button - The plugin command button.
|
|
18
18
|
* @property {Array<string>} r - An array of key codes generated with the reverseButtons option, used to reverse the action for a specific key combination.
|
|
19
|
-
* @property {string} textTrigger - Whether the event was triggered by a text input (e.g.,
|
|
19
|
+
* @property {string} textTrigger - Whether the event was triggered by a text input (e.g., autocomplete like @ab).
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -579,6 +579,7 @@ export const DEFAULTS = {
|
|
|
579
579
|
* @property {import('../../plugins/dropdown/align.js').AlignPluginOptions} [align]
|
|
580
580
|
* @property {import('../../plugins/modal/audio.js').AudioPluginOptions} [audio]
|
|
581
581
|
* @property {import('../../plugins/browser/audioGallery.js').AudioGalleryPluginOptions} [audioGallery]
|
|
582
|
+
* @property {import('../../plugins/field/autocomplete.js').AutocompletePluginOptions} [autocomplete]
|
|
582
583
|
* @property {import('../../plugins/dropdown/backgroundColor.js').BackgroundColorPluginOptions} [backgroundColor]
|
|
583
584
|
* @property {import('../../plugins/dropdown/blockStyle.js').BlockStylePluginOptions} [blockStyle]
|
|
584
585
|
* @property {import('../../plugins/command/codeBlock.js').CodeBlockPluginOptions} [codeBlock]
|
|
@@ -598,7 +599,6 @@ export const DEFAULTS = {
|
|
|
598
599
|
* @property {import('../../plugins/dropdown/lineHeight.js').LineHeightPluginOptions} [lineHeight]
|
|
599
600
|
* @property {import('../../plugins/modal/link.js').LinkPluginOptions} [link]
|
|
600
601
|
* @property {import('../../plugins/modal/math.js').MathPluginOptions} [math]
|
|
601
|
-
* @property {import('../../plugins/field/mention.js').MentionPluginOptions} [mention]
|
|
602
602
|
* @property {import('../../plugins/dropdown/paragraphStyle.js').ParagraphStylePluginOptions} [paragraphStyle]
|
|
603
603
|
* @property {import('../../plugins/dropdown/table/index.js').TablePluginOptions} [table]
|
|
604
604
|
* @property {import('../../plugins/dropdown/template.js').TemplatePluginOptions} [template]
|
|
@@ -946,7 +946,7 @@ function _initTargetElements(key, options, topDiv, targetOptions) {
|
|
|
946
946
|
// [sandbox] prop
|
|
947
947
|
let sandboxValue = frameAttrs.sandbox;
|
|
948
948
|
if (sandboxValue) {
|
|
949
|
-
const requiredSandbox = ['allow-same-origin'];
|
|
949
|
+
const requiredSandbox = ['allow-same-origin', 'allow-scripts'];
|
|
950
950
|
const userSandbox = sandboxValue.split(/\s+/);
|
|
951
951
|
const missingSandbox = requiredSandbox.filter((req) => !userSandbox.includes(req));
|
|
952
952
|
|
|
@@ -955,7 +955,7 @@ function _initTargetElements(key, options, topDiv, targetOptions) {
|
|
|
955
955
|
sandboxValue = userSandbox.concat(missingSandbox).join(' ');
|
|
956
956
|
}
|
|
957
957
|
} else {
|
|
958
|
-
sandboxValue = 'allow-same-origin';
|
|
958
|
+
sandboxValue = 'allow-same-origin allow-scripts';
|
|
959
959
|
}
|
|
960
960
|
|
|
961
961
|
// iframe [sandbox] attr
|
|
@@ -1132,7 +1132,7 @@ function _defaultButtons(isRTL, icons, lang) {
|
|
|
1132
1132
|
finder: ['se-component-enabled', lang.find, 'finder', '', icons.finder],
|
|
1133
1133
|
save: ['se-component-enabled', lang.save, 'save', '', icons.save],
|
|
1134
1134
|
newDocument: ['se-component-enabled', lang.newDocument, 'newDocument', '', icons.new_document],
|
|
1135
|
-
selectAll: ['se-component-enabled', lang.selectAll, '
|
|
1135
|
+
selectAll: ['se-component-enabled', lang.selectAll, 'selectAll_full', '', icons.select_all],
|
|
1136
1136
|
pageBreak: ['se-component-enabled', lang.pageBreak, 'pageBreak', '', icons.page_break],
|
|
1137
1137
|
// document type buttons
|
|
1138
1138
|
pageUp: ['se-component-enabled', lang.pageUp, 'pageUp', '', icons.page_up],
|
package/src/helper/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import Numbers from './numbers';
|
|
|
6
6
|
import KeyCodeMap from './keyCodeMap';
|
|
7
7
|
import Clipboard from './clipboard';
|
|
8
8
|
import Markdown from './markdown';
|
|
9
|
+
import MSOffice from './msOffice';
|
|
9
10
|
|
|
10
11
|
export const env = Env;
|
|
11
12
|
export const unicode = Unicode;
|
|
@@ -15,6 +16,7 @@ export const numbers = Numbers;
|
|
|
15
16
|
export const keyCodeMap = KeyCodeMap;
|
|
16
17
|
export const clipboard = Clipboard;
|
|
17
18
|
export const markdown = Markdown;
|
|
19
|
+
export const msOffice = MSOffice;
|
|
18
20
|
|
|
19
21
|
export default {
|
|
20
22
|
env,
|
|
@@ -25,4 +27,5 @@ export default {
|
|
|
25
27
|
keyCodeMap,
|
|
26
28
|
clipboard,
|
|
27
29
|
markdown,
|
|
30
|
+
msOffice,
|
|
28
31
|
};
|