roosterjs 8.29.5 → 8.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rooster-amd-min.js +1 -1
- package/dist/rooster-amd-min.js.map +1 -1
- package/dist/rooster-amd.d.ts +53 -10
- package/dist/rooster-amd.js +137 -98
- package/dist/rooster-amd.js.map +1 -1
- package/dist/rooster-min.js +1 -1
- package/dist/rooster-min.js.map +1 -1
- package/dist/rooster.d.ts +53 -10
- package/dist/rooster.js +137 -98
- package/dist/rooster.js.map +1 -1
- package/package.json +7 -7
- package/tsconfig.child.tsbuildinfo +1 -1
package/dist/rooster-amd.js
CHANGED
|
@@ -2809,6 +2809,11 @@ function getElementBasedFormatState(editor, event) {
|
|
|
2809
2809
|
multiline = endingBlock && startingBlock ? !endingBlock.equals(startingBlock) : false;
|
|
2810
2810
|
}
|
|
2811
2811
|
var headerTag = (0, roosterjs_editor_dom_1.getTagOfNode)(editor.getElementAtCursor('H1,H2,H3,H4,H5,H6', null /*startFrom*/, event));
|
|
2812
|
+
var table = editor.queryElements('table', 1 /* OnSelection */)[0];
|
|
2813
|
+
var tableFormat = table ? (0, roosterjs_editor_dom_1.getTableFormatInfo)(table) : undefined;
|
|
2814
|
+
var hasHeader = (table === null || table === void 0 ? void 0 : table.rows[0])
|
|
2815
|
+
? (0, roosterjs_editor_dom_1.toArray)(table.rows[0].cells).every(function (cell) { return (0, roosterjs_editor_dom_1.getTagOfNode)(cell) == 'TH'; })
|
|
2816
|
+
: undefined;
|
|
2812
2817
|
return {
|
|
2813
2818
|
isBullet: listTag == 'UL',
|
|
2814
2819
|
isNumbering: listTag == 'OL',
|
|
@@ -2817,7 +2822,9 @@ function getElementBasedFormatState(editor, event) {
|
|
|
2817
2822
|
canUnlink: !!editor.queryElements('a[href]', 1 /* OnSelection */)[0],
|
|
2818
2823
|
canAddImageAltText: !!editor.queryElements('img', 1 /* OnSelection */)[0],
|
|
2819
2824
|
isBlockQuote: !!editor.queryElements('blockquote', 1 /* OnSelection */)[0],
|
|
2820
|
-
isInTable: !!
|
|
2825
|
+
isInTable: !!table,
|
|
2826
|
+
tableFormat: tableFormat,
|
|
2827
|
+
tableHasHeader: hasHeader,
|
|
2821
2828
|
};
|
|
2822
2829
|
}
|
|
2823
2830
|
exports.getElementBasedFormatState = getElementBasedFormatState;
|
|
@@ -5827,7 +5834,6 @@ function buildCss(table, coordinates, contentDivSelector) {
|
|
|
5827
5834
|
});
|
|
5828
5835
|
(_a = vTable.cells) === null || _a === void 0 ? void 0 : _a.forEach(function (row, rowIndex) {
|
|
5829
5836
|
var tdCount = 0;
|
|
5830
|
-
var thCount = 0;
|
|
5831
5837
|
firstSelected = null;
|
|
5832
5838
|
lastSelected = null;
|
|
5833
5839
|
//Get current TBODY/THEAD/TFOOT
|
|
@@ -5840,12 +5846,7 @@ function buildCss(table, coordinates, contentDivSelector) {
|
|
|
5840
5846
|
var cell = row[cellIndex].td;
|
|
5841
5847
|
if (cell) {
|
|
5842
5848
|
var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(cell);
|
|
5843
|
-
|
|
5844
|
-
tdCount++;
|
|
5845
|
-
}
|
|
5846
|
-
if (tag == 'TH') {
|
|
5847
|
-
thCount++;
|
|
5848
|
-
}
|
|
5849
|
+
tdCount++;
|
|
5849
5850
|
if (rowIndex >= tr1 && rowIndex <= tr2 && cellIndex >= td1 && cellIndex <= td2) {
|
|
5850
5851
|
if (isFirst) {
|
|
5851
5852
|
isFirst = false;
|
|
@@ -5854,7 +5855,7 @@ function buildCss(table, coordinates, contentDivSelector) {
|
|
|
5854
5855
|
css += ',';
|
|
5855
5856
|
}
|
|
5856
5857
|
removeImportant(cell);
|
|
5857
|
-
var selector = generateCssFromCell(contentDivSelector, table.id, middleElSelector, currentRow, tag,
|
|
5858
|
+
var selector = generateCssFromCell(contentDivSelector, table.id, middleElSelector, currentRow, tag, tdCount);
|
|
5858
5859
|
css += selector;
|
|
5859
5860
|
firstSelected = firstSelected || table.querySelector(selector);
|
|
5860
5861
|
lastSelected = table.querySelector(selector);
|
|
@@ -6319,10 +6320,9 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
6319
6320
|
function CopyPastePlugin(options) {
|
|
6320
6321
|
var _this = this;
|
|
6321
6322
|
this.onPaste = function (event) {
|
|
6322
|
-
var _a
|
|
6323
|
+
var _a;
|
|
6323
6324
|
var range;
|
|
6324
6325
|
(0, roosterjs_editor_dom_1.extractClipboardEvent)(event, function (clipboardData) { var _a; return (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.paste(clipboardData); }, {
|
|
6325
|
-
allowLinkPreview: (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.isFeatureEnabled("PasteWithLinkPreview" /* PasteWithLinkPreview */),
|
|
6326
6326
|
allowedCustomPasteType: _this.state.allowedCustomPasteType,
|
|
6327
6327
|
getTempDiv: function () {
|
|
6328
6328
|
var _a;
|
|
@@ -6332,7 +6332,7 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
6332
6332
|
removeTempDiv: function (div) {
|
|
6333
6333
|
_this.cleanUpAndRestoreSelection(div, range, false /* isCopy */);
|
|
6334
6334
|
},
|
|
6335
|
-
}, (
|
|
6335
|
+
}, (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.getSelectionRange());
|
|
6336
6336
|
};
|
|
6337
6337
|
this.state = {
|
|
6338
6338
|
allowedCustomPasteType: options.allowedCustomPasteType || [],
|
|
@@ -6377,16 +6377,19 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
6377
6377
|
if (selection && !selection.areAllCollapsed) {
|
|
6378
6378
|
var html = this.editor.getContent(2 /* RawHTMLWithSelection */);
|
|
6379
6379
|
var tempDiv_1 = this.getTempDiv(true /*forceInLightMode*/);
|
|
6380
|
-
var
|
|
6381
|
-
|
|
6382
|
-
(0, roosterjs_editor_dom_1.
|
|
6383
|
-
|
|
6380
|
+
var metadata = (0, roosterjs_editor_dom_1.setHtmlWithMetadata)(tempDiv_1, html, this.editor.getTrustedHTMLHandler());
|
|
6381
|
+
var newRange = (metadata === null || metadata === void 0 ? void 0 : metadata.type) === 0 /* Normal */
|
|
6382
|
+
? (0, roosterjs_editor_dom_1.createRange)(tempDiv_1, metadata.start, metadata.end)
|
|
6383
|
+
: null;
|
|
6384
6384
|
this.editor.triggerPluginEvent(9 /* BeforeCutCopy */, {
|
|
6385
6385
|
clonedRoot: tempDiv_1,
|
|
6386
6386
|
range: newRange,
|
|
6387
6387
|
rawEvent: event,
|
|
6388
6388
|
isCut: isCut,
|
|
6389
6389
|
});
|
|
6390
|
+
if (newRange) {
|
|
6391
|
+
(0, roosterjs_editor_dom_1.addRangeToSelection)(newRange);
|
|
6392
|
+
}
|
|
6390
6393
|
this.editor.runAsync(function (editor) {
|
|
6391
6394
|
_this.cleanUpAndRestoreSelection(tempDiv_1, selection, !isCut /* isCopy */);
|
|
6392
6395
|
if (isCut) {
|
|
@@ -7405,6 +7408,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7405
7408
|
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
7406
7409
|
/**
|
|
7407
7410
|
* @internal
|
|
7411
|
+
* TODO: Rename this plugin since it is not only for table now
|
|
7412
|
+
*
|
|
7408
7413
|
* NormalizeTable plugin makes sure each table in editor has TBODY/THEAD/TFOOT tag around TR tags
|
|
7409
7414
|
*
|
|
7410
7415
|
* When we retrieve HTML content using innerHTML, browser will always add TBODY around TR nodes if there is not.
|
|
@@ -7461,6 +7466,11 @@ var NormalizeTablePlugin = /** @class */ (function () {
|
|
|
7461
7466
|
this.normalizeTableFromEvent(event.rawEvent);
|
|
7462
7467
|
}
|
|
7463
7468
|
break;
|
|
7469
|
+
case 8 /* ExtractContentWithDom */:
|
|
7470
|
+
if (this.editor.isFeatureEnabled("NormalizeList" /* NormalizeList */)) {
|
|
7471
|
+
normalizeListsForExport(event.clonedRoot);
|
|
7472
|
+
}
|
|
7473
|
+
break;
|
|
7464
7474
|
}
|
|
7465
7475
|
};
|
|
7466
7476
|
NormalizeTablePlugin.prototype.normalizeTableFromEvent = function (event) {
|
|
@@ -7532,6 +7542,15 @@ function normalizeTables(tables) {
|
|
|
7532
7542
|
});
|
|
7533
7543
|
return isDOMChanged;
|
|
7534
7544
|
}
|
|
7545
|
+
function normalizeListsForExport(root) {
|
|
7546
|
+
(0, roosterjs_editor_dom_1.toArray)(root.querySelectorAll('li')).forEach(function (li) {
|
|
7547
|
+
var prevElement = li.previousSibling;
|
|
7548
|
+
if (li.style.display == 'block' && (0, roosterjs_editor_dom_1.safeInstanceOf)(prevElement, 'HTMLLIElement')) {
|
|
7549
|
+
delete li.style.display;
|
|
7550
|
+
prevElement.appendChild((0, roosterjs_editor_dom_1.changeElementTag)(li, 'div'));
|
|
7551
|
+
}
|
|
7552
|
+
});
|
|
7553
|
+
}
|
|
7535
7554
|
|
|
7536
7555
|
|
|
7537
7556
|
/***/ }),
|
|
@@ -9200,17 +9219,6 @@ function removeContents(range) {
|
|
|
9200
9219
|
|
|
9201
9220
|
"use strict";
|
|
9202
9221
|
|
|
9203
|
-
var __assign = (this && this.__assign) || function () {
|
|
9204
|
-
__assign = Object.assign || function(t) {
|
|
9205
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9206
|
-
s = arguments[i];
|
|
9207
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
9208
|
-
t[p] = s[p];
|
|
9209
|
-
}
|
|
9210
|
-
return t;
|
|
9211
|
-
};
|
|
9212
|
-
return __assign.apply(this, arguments);
|
|
9213
|
-
};
|
|
9214
9222
|
var _a;
|
|
9215
9223
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9216
9224
|
var readFile_1 = __webpack_require__(/*! ../utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
|
|
@@ -9233,6 +9241,7 @@ var ContentHandlers = (_a = {},
|
|
|
9233
9241
|
},
|
|
9234
9242
|
_a["text/plain" /* PlainText */] = function (data, value) { return (data.text = value); },
|
|
9235
9243
|
_a[OTHER_TEXT_TYPE] = function (data, value, type) { return !!type && (data.customValues[type] = value); },
|
|
9244
|
+
_a["text/" /* Text */ + EDGE_LINK_PREVIEW] = tryParseLinkPreview,
|
|
9236
9245
|
_a);
|
|
9237
9246
|
/**
|
|
9238
9247
|
* Extract clipboard items to be a ClipboardData object for IE
|
|
@@ -9255,10 +9264,6 @@ function extractClipboardItems(items, options) {
|
|
|
9255
9264
|
rawHtml: null,
|
|
9256
9265
|
customValues: {},
|
|
9257
9266
|
};
|
|
9258
|
-
var contentHandlers = __assign({}, ContentHandlers);
|
|
9259
|
-
if (options === null || options === void 0 ? void 0 : options.allowLinkPreview) {
|
|
9260
|
-
contentHandlers["text/" /* Text */ + EDGE_LINK_PREVIEW] = tryParseLinkPreview;
|
|
9261
|
-
}
|
|
9262
9267
|
return Promise.all((items || []).map(function (item) {
|
|
9263
9268
|
var type = item.type;
|
|
9264
9269
|
if (type.indexOf("image/" /* Image */) == 0 && !data.image && item.kind == 'file') {
|
|
@@ -9288,7 +9293,7 @@ function extractClipboardItems(items, options) {
|
|
|
9288
9293
|
}
|
|
9289
9294
|
else {
|
|
9290
9295
|
var customType_1 = getAllowedCustomType(type, options === null || options === void 0 ? void 0 : options.allowedCustomPasteType);
|
|
9291
|
-
var handler_1 =
|
|
9296
|
+
var handler_1 = ContentHandlers[type] || (customType_1 ? ContentHandlers[OTHER_TEXT_TYPE] : null);
|
|
9292
9297
|
return new Promise(function (resolve) {
|
|
9293
9298
|
return handler_1
|
|
9294
9299
|
? item.getAsString(function (value) {
|
|
@@ -11542,8 +11547,8 @@ exports.default = getPredefinedCssForElement;
|
|
|
11542
11547
|
|
|
11543
11548
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11544
11549
|
exports.VTable = exports.moveChildNodes = exports.KnownCreateElementData = exports.createElement = exports.matchesSelector = exports.setColor = exports.getInnerHTML = exports.readFile = exports.safeInstanceOf = exports.normalizeRect = exports.splitTextNode = exports.getLastLeafNode = exports.getFirstLeafNode = exports.getPreviousLeafSibling = exports.getNextLeafSibling = exports.wrap = exports.unwrap = exports.splitBalancedNodeRange = exports.splitParentNode = exports.queryElements = exports.matchLink = exports.isVoidHtmlElement = exports.isNodeEmpty = exports.isBlockElement = exports.getTagOfNode = exports.PendableFormatCommandMap = exports.getPendableFormatState = exports.getComputedStyle = exports.getComputedStyles = exports.fromHtml = exports.findClosestElementAncestor = exports.contains = exports.collapseNodes = exports.changeElementTag = exports.applyFormat = exports.getBrowserInfo = exports.Browser = exports.extractClipboardItemsForIE = exports.extractClipboardItems = exports.extractClipboardEvent = exports.applyTextStyle = exports.PartialInlineElement = exports.NodeInlineElement = exports.LinkInlineElement = exports.ImageInlineElement = exports.getInlineElementAtNode = exports.PositionContentSearcher = exports.ContentTraverser = exports.getFirstLastBlockElement = exports.getBlockElementAtNode = void 0;
|
|
11545
|
-
exports.
|
|
11546
|
-
exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = void 0;
|
|
11550
|
+
exports.createNumberDefinition = exports.validate = exports.getTextContent = exports.deleteSelectedContent = exports.adjustInsertPosition = exports.setStyles = exports.getStyles = exports.isCtrlOrMetaPressed = exports.isCharacterValue = exports.isModifierKey = exports.clearEventDataCache = exports.cacheGetEventData = exports.getEntitySelector = exports.getEntityFromElement = exports.commitEntity = exports.chainSanitizerCallback = exports.createDefaultHtmlSanitizerOptions = exports.getInheritableStyles = exports.HtmlSanitizer = exports.canUndoAutoComplete = exports.createSnapshots = exports.moveCurrentSnapsnot = exports.moveCurrentSnapshot = exports.clearProceedingSnapshotsV2 = exports.clearProceedingSnapshots = exports.canMoveCurrentSnapshot = exports.addSnapshotV2 = exports.addSnapshot = exports.addRangeToSelection = exports.setHtmlWithMetadata = exports.setHtmlWithSelectionPath = exports.getHtmlWithSelectionPath = exports.getSelectionPath = exports.isPositionAtBeginningOf = exports.getPositionRect = exports.createRange = exports.Position = exports.mergeBlocksInRegion = exports.getSelectionRangeInRegion = exports.isNodeInRegion = exports.collapseNodesInRegion = exports.getSelectedBlockElementsInRegion = exports.getRegionsFromRange = exports.getTableFormatInfo = exports.setListItemStyle = exports.VListChain = exports.createVListFromRegion = exports.VListItem = exports.VList = exports.isWholeTableSelected = void 0;
|
|
11551
|
+
exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = void 0;
|
|
11547
11552
|
var getBlockElementAtNode_1 = __webpack_require__(/*! ./blockElements/getBlockElementAtNode */ "./packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts");
|
|
11548
11553
|
Object.defineProperty(exports, "getBlockElementAtNode", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });
|
|
11549
11554
|
var getFirstLastBlockElement_1 = __webpack_require__(/*! ./blockElements/getFirstLastBlockElement */ "./packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts");
|
|
@@ -11649,6 +11654,8 @@ var VListChain_1 = __webpack_require__(/*! ./list/VListChain */ "./packages/roos
|
|
|
11649
11654
|
Object.defineProperty(exports, "VListChain", { enumerable: true, get: function () { return VListChain_1.default; } });
|
|
11650
11655
|
var setListItemStyle_1 = __webpack_require__(/*! ./list/setListItemStyle */ "./packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts");
|
|
11651
11656
|
Object.defineProperty(exports, "setListItemStyle", { enumerable: true, get: function () { return setListItemStyle_1.default; } });
|
|
11657
|
+
var tableFormatInfo_1 = __webpack_require__(/*! ./table/tableFormatInfo */ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts");
|
|
11658
|
+
Object.defineProperty(exports, "getTableFormatInfo", { enumerable: true, get: function () { return tableFormatInfo_1.getTableFormatInfo; } });
|
|
11652
11659
|
var getRegionsFromRange_1 = __webpack_require__(/*! ./region/getRegionsFromRange */ "./packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts");
|
|
11653
11660
|
Object.defineProperty(exports, "getRegionsFromRange", { enumerable: true, get: function () { return getRegionsFromRange_1.default; } });
|
|
11654
11661
|
var getSelectedBlockElementsInRegion_1 = __webpack_require__(/*! ./region/getSelectedBlockElementsInRegion */ "./packages/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.ts");
|
|
@@ -16583,11 +16590,10 @@ var TableFormatMetadata = (0, definitionCreators_1.createObjectDefinition)({
|
|
|
16583
16590
|
hasBandedRows: BooleanDefinition,
|
|
16584
16591
|
bgColorEven: NullStringDefinition,
|
|
16585
16592
|
bgColorOdd: NullStringDefinition,
|
|
16586
|
-
tableBorderFormat: (0, definitionCreators_1.createNumberDefinition)(false /** isOptional */, undefined /* value */, 0 /*
|
|
16587
|
-
keepCellShade:
|
|
16593
|
+
tableBorderFormat: (0, definitionCreators_1.createNumberDefinition)(false /** isOptional */, undefined /* value */, 0 /* DEFAULT */, 8 /* CLEAR */),
|
|
16594
|
+
keepCellShade: (0, definitionCreators_1.createBooleanDefinition)(true /** isOptional */),
|
|
16588
16595
|
}, false /* isOptional */, true /** allowNull */);
|
|
16589
16596
|
/**
|
|
16590
|
-
* @internal
|
|
16591
16597
|
* Get the format info of a table
|
|
16592
16598
|
* If the table does not have a info saved, it will be retrieved from the css styles
|
|
16593
16599
|
* @param table The table that has the info
|
|
@@ -16649,11 +16655,11 @@ function getBrowserInfo(userAgent, appVersion, vendor) {
|
|
|
16649
16655
|
// The default regex on the website doesn't consider tablet.
|
|
16650
16656
|
// To support tablet, add |android|ipad|playbook|silk to the first regex according to the info in /about page
|
|
16651
16657
|
(function (userAgentOrVendor) {
|
|
16652
|
-
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(userAgentOrVendor)
|
|
16653
|
-
|
|
16658
|
+
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(userAgentOrVendor) ||
|
|
16659
|
+
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(userAgentOrVendor.substr(0, 4))) {
|
|
16654
16660
|
isMobileOrTablet = true;
|
|
16655
16661
|
}
|
|
16656
|
-
})(userAgent || vendor ||
|
|
16662
|
+
})(userAgent || vendor || '');
|
|
16657
16663
|
if (!isIE) {
|
|
16658
16664
|
isChrome = userAgent.indexOf('Chrome') != -1;
|
|
16659
16665
|
isFirefox = userAgent.indexOf('Firefox') != -1;
|
|
@@ -16690,7 +16696,7 @@ exports.getBrowserInfo = getBrowserInfo;
|
|
|
16690
16696
|
/**
|
|
16691
16697
|
* Browser object contains browser and operating system information of current environment
|
|
16692
16698
|
*/
|
|
16693
|
-
exports.Browser = window
|
|
16699
|
+
exports.Browser = typeof window !== 'undefined' && window
|
|
16694
16700
|
? getBrowserInfo(window.navigator.userAgent, window.navigator.appVersion, window.navigator.vendor)
|
|
16695
16701
|
: {};
|
|
16696
16702
|
|
|
@@ -18671,23 +18677,21 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
|
|
|
18671
18677
|
/**
|
|
18672
18678
|
* Generate event names and getXY function based on different platforms to be compatible with desktop and mobile browsers
|
|
18673
18679
|
*/
|
|
18674
|
-
var
|
|
18675
|
-
|
|
18676
|
-
|
|
18677
|
-
|
|
18678
|
-
|
|
18679
|
-
|
|
18680
|
-
|
|
18681
|
-
|
|
18682
|
-
|
|
18683
|
-
|
|
18684
|
-
|
|
18685
|
-
|
|
18686
|
-
|
|
18687
|
-
|
|
18688
|
-
|
|
18689
|
-
};
|
|
18690
|
-
}
|
|
18680
|
+
var MOUSE_EVENT_INFO_DESKTOP = (function () {
|
|
18681
|
+
return {
|
|
18682
|
+
MOUSEDOWN: 'mousedown',
|
|
18683
|
+
MOUSEMOVE: 'mousemove',
|
|
18684
|
+
MOUSEUP: 'mouseup',
|
|
18685
|
+
getPageXY: getMouseEventPageXY,
|
|
18686
|
+
};
|
|
18687
|
+
})();
|
|
18688
|
+
var MOUSE_EVENT_INFO_MOBILE = (function () {
|
|
18689
|
+
return {
|
|
18690
|
+
MOUSEDOWN: 'touchstart',
|
|
18691
|
+
MOUSEMOVE: 'touchmove',
|
|
18692
|
+
MOUSEUP: 'touchend',
|
|
18693
|
+
getPageXY: getTouchEventPageXY,
|
|
18694
|
+
};
|
|
18691
18695
|
})();
|
|
18692
18696
|
function getMouseEventPageXY(e) {
|
|
18693
18697
|
return [e.pageX, e.pageY];
|
|
@@ -18715,8 +18719,10 @@ var DragAndDropHelper = /** @class */ (function () {
|
|
|
18715
18719
|
* so that the handler object knows which element it is triggered from.
|
|
18716
18720
|
* @param onSubmit A callback that will be invoked when event handler in handler object returns true
|
|
18717
18721
|
* @param handler The event handler object, see DragAndDropHandler interface for more information
|
|
18722
|
+
* @param zoomScale The zoom scale of the editor
|
|
18723
|
+
* @param forceMobile A boolean to force the use of touch controls for the helper
|
|
18718
18724
|
*/
|
|
18719
|
-
function DragAndDropHelper(trigger, context, onSubmit, handler, zoomScale) {
|
|
18725
|
+
function DragAndDropHelper(trigger, context, onSubmit, handler, zoomScale, forceMobile) {
|
|
18720
18726
|
var _this = this;
|
|
18721
18727
|
this.trigger = trigger;
|
|
18722
18728
|
this.context = context;
|
|
@@ -18729,13 +18735,13 @@ var DragAndDropHelper = /** @class */ (function () {
|
|
|
18729
18735
|
e.preventDefault();
|
|
18730
18736
|
e.stopPropagation();
|
|
18731
18737
|
_this.addDocumentEvents();
|
|
18732
|
-
_a =
|
|
18738
|
+
_a = _this.dndMouse.getPageXY(e), _this.initX = _a[0], _this.initY = _a[1];
|
|
18733
18739
|
_this.initValue = (_c = (_b = _this.handler).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b, _this.context, e);
|
|
18734
18740
|
};
|
|
18735
18741
|
this.onMouseMove = function (e) {
|
|
18736
18742
|
var _a, _b, _c;
|
|
18737
18743
|
e.preventDefault();
|
|
18738
|
-
var _d =
|
|
18744
|
+
var _d = _this.dndMouse.getPageXY(e), pageX = _d[0], pageY = _d[1];
|
|
18739
18745
|
var deltaX = (pageX - _this.initX) / _this.zoomScale;
|
|
18740
18746
|
var deltaY = (pageY - _this.initY) / _this.zoomScale;
|
|
18741
18747
|
if ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue, deltaX, deltaY)) {
|
|
@@ -18750,24 +18756,28 @@ var DragAndDropHelper = /** @class */ (function () {
|
|
|
18750
18756
|
(_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
|
|
18751
18757
|
}
|
|
18752
18758
|
};
|
|
18753
|
-
|
|
18759
|
+
this.dndMouse =
|
|
18760
|
+
forceMobile || roosterjs_editor_dom_1.Browser.isMobileOrTablet
|
|
18761
|
+
? MOUSE_EVENT_INFO_MOBILE
|
|
18762
|
+
: MOUSE_EVENT_INFO_DESKTOP;
|
|
18763
|
+
trigger.addEventListener(this.dndMouse.MOUSEDOWN, this.onMouseDown);
|
|
18754
18764
|
}
|
|
18755
18765
|
/**
|
|
18756
18766
|
* Dispose this object, remove all event listeners that has been attached
|
|
18757
18767
|
*/
|
|
18758
18768
|
DragAndDropHelper.prototype.dispose = function () {
|
|
18759
|
-
this.trigger.removeEventListener(
|
|
18769
|
+
this.trigger.removeEventListener(this.dndMouse.MOUSEDOWN, this.onMouseDown);
|
|
18760
18770
|
this.removeDocumentEvents();
|
|
18761
18771
|
};
|
|
18762
18772
|
DragAndDropHelper.prototype.addDocumentEvents = function () {
|
|
18763
18773
|
var doc = this.trigger.ownerDocument;
|
|
18764
|
-
doc.addEventListener(
|
|
18765
|
-
doc.addEventListener(
|
|
18774
|
+
doc.addEventListener(this.dndMouse.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
|
|
18775
|
+
doc.addEventListener(this.dndMouse.MOUSEUP, this.onMouseUp, true /*useCapture*/);
|
|
18766
18776
|
};
|
|
18767
18777
|
DragAndDropHelper.prototype.removeDocumentEvents = function () {
|
|
18768
18778
|
var doc = this.trigger.ownerDocument;
|
|
18769
|
-
doc.removeEventListener(
|
|
18770
|
-
doc.removeEventListener(
|
|
18779
|
+
doc.removeEventListener(this.dndMouse.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
|
|
18780
|
+
doc.removeEventListener(this.dndMouse.MOUSEUP, this.onMouseUp, true /*useCapture*/);
|
|
18771
18781
|
};
|
|
18772
18782
|
return DragAndDropHelper;
|
|
18773
18783
|
}());
|
|
@@ -21137,7 +21147,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
21137
21147
|
}
|
|
21138
21148
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21139
21149
|
};
|
|
21140
|
-
var _a
|
|
21150
|
+
var _a;
|
|
21141
21151
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21142
21152
|
var applyChange_1 = __webpack_require__(/*! ./editInfoUtils/applyChange */ "./packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/applyChange.ts");
|
|
21143
21153
|
var canRegenerateImage_1 = __webpack_require__(/*! ./api/canRegenerateImage */ "./packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/canRegenerateImage.ts");
|
|
@@ -21155,14 +21165,6 @@ var ALT_KEYCODE = 18;
|
|
|
21155
21165
|
var DIRECTIONS = 8;
|
|
21156
21166
|
var DirectionRad = (Math.PI * 2) / DIRECTIONS;
|
|
21157
21167
|
var DirectionOrder = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
|
|
21158
|
-
/**
|
|
21159
|
-
* Map the experimental features to image edit operations to help determine which operation is allowed
|
|
21160
|
-
*/
|
|
21161
|
-
var FeatureToOperationMap = (_a = {},
|
|
21162
|
-
_a["SingleDirectionResize" /* SingleDirectionResize */] = 2 /* SideResize */,
|
|
21163
|
-
_a["ImageRotate" /* ImageRotate */] = 4 /* Rotate */,
|
|
21164
|
-
_a["ImageCrop" /* ImageCrop */] = 8 /* Crop */,
|
|
21165
|
-
_a);
|
|
21166
21168
|
/**
|
|
21167
21169
|
* Default image edit options
|
|
21168
21170
|
*/
|
|
@@ -21174,17 +21176,20 @@ var DefaultOptions = {
|
|
|
21174
21176
|
minRotateDeg: 5,
|
|
21175
21177
|
imageSelector: 'img',
|
|
21176
21178
|
rotateIconHTML: null,
|
|
21179
|
+
disableCrop: false,
|
|
21180
|
+
disableRotate: false,
|
|
21181
|
+
disableSideResize: false,
|
|
21177
21182
|
};
|
|
21178
21183
|
/**
|
|
21179
21184
|
* Map the image edit operation to a function that returns editing elements HTML to help
|
|
21180
21185
|
* build image editing UI
|
|
21181
21186
|
*/
|
|
21182
|
-
var ImageEditHTMLMap = (
|
|
21183
|
-
|
|
21184
|
-
|
|
21185
|
-
|
|
21186
|
-
|
|
21187
|
-
|
|
21187
|
+
var ImageEditHTMLMap = (_a = {},
|
|
21188
|
+
_a[1 /* CornerResize */] = Resizer_1.getCornerResizeHTML,
|
|
21189
|
+
_a[2 /* SideResize */] = Resizer_1.getSideResizeHTML,
|
|
21190
|
+
_a[4 /* Rotate */] = Rotator_1.getRotateHTML,
|
|
21191
|
+
_a[8 /* Crop */] = Cropper_1.getCropHTML,
|
|
21192
|
+
_a);
|
|
21188
21193
|
/**
|
|
21189
21194
|
* Image edit entity name
|
|
21190
21195
|
*/
|
|
@@ -21212,8 +21217,6 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21212
21217
|
function ImageEdit(options, onShowResizeHandle) {
|
|
21213
21218
|
var _this = this;
|
|
21214
21219
|
this.onShowResizeHandle = onShowResizeHandle;
|
|
21215
|
-
// Allowed editing operations
|
|
21216
|
-
this.allowedOperations = 1 /* CornerResize */;
|
|
21217
21220
|
/**
|
|
21218
21221
|
* quit editing mode when editor lose focus
|
|
21219
21222
|
*/
|
|
@@ -21297,6 +21300,11 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21297
21300
|
}
|
|
21298
21301
|
};
|
|
21299
21302
|
this.options = __assign(__assign({}, DefaultOptions), (options || {}));
|
|
21303
|
+
this.allowedOperations =
|
|
21304
|
+
1 /* CornerResize */ |
|
|
21305
|
+
(this.options.disableCrop ? 0 : 8 /* Crop */) |
|
|
21306
|
+
(this.options.disableRotate ? 0 : 4 /* Rotate */) |
|
|
21307
|
+
(this.options.disableSideResize ? 0 : 2 /* SideResize */);
|
|
21300
21308
|
}
|
|
21301
21309
|
/**
|
|
21302
21310
|
* Get a friendly name of this plugin
|
|
@@ -21309,15 +21317,8 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21309
21317
|
* @param editor Editor instance
|
|
21310
21318
|
*/
|
|
21311
21319
|
ImageEdit.prototype.initialize = function (editor) {
|
|
21312
|
-
var _this = this;
|
|
21313
21320
|
this.editor = editor;
|
|
21314
21321
|
this.disposer = editor.addDomEventHandler('blur', this.onBlur);
|
|
21315
|
-
// Read current enabled features from editor to determine which editing operations are allowed
|
|
21316
|
-
(0, roosterjs_editor_dom_1.getObjectKeys)(FeatureToOperationMap).forEach(function (key) {
|
|
21317
|
-
_this.allowedOperations |= _this.editor.isFeatureEnabled(key)
|
|
21318
|
-
? FeatureToOperationMap[key]
|
|
21319
|
-
: 0;
|
|
21320
|
-
});
|
|
21321
21322
|
};
|
|
21322
21323
|
/**
|
|
21323
21324
|
* Dispose this plugin
|
|
@@ -21390,6 +21391,14 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21390
21391
|
break;
|
|
21391
21392
|
}
|
|
21392
21393
|
};
|
|
21394
|
+
/**
|
|
21395
|
+
* Check if the given image edit operation is allowed by this pluign
|
|
21396
|
+
* @param operation The image edit operation to check
|
|
21397
|
+
* @returns True means it is allowed, otherwise false
|
|
21398
|
+
*/
|
|
21399
|
+
ImageEdit.prototype.isOperationAllowed = function (operation) {
|
|
21400
|
+
return !!(this.allowedOperations & operation);
|
|
21401
|
+
};
|
|
21393
21402
|
ImageEdit.prototype.setEditingImage = function (image, operationOrSelect) {
|
|
21394
21403
|
var _this = this;
|
|
21395
21404
|
var operation = typeof operationOrSelect === 'number' ? operationOrSelect : 0 /* None */;
|
|
@@ -21442,7 +21451,9 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21442
21451
|
wrapper.style.position = 'relative';
|
|
21443
21452
|
wrapper.style.maxWidth = '100%';
|
|
21444
21453
|
// keep the same vertical align
|
|
21445
|
-
var originalVerticalAlign = this.image.ownerDocument.defaultView
|
|
21454
|
+
var originalVerticalAlign = this.image.ownerDocument.defaultView
|
|
21455
|
+
.getComputedStyle(this.image)
|
|
21456
|
+
.getPropertyValue('vertical-align');
|
|
21446
21457
|
if (originalVerticalAlign) {
|
|
21447
21458
|
wrapper.style.verticalAlign = originalVerticalAlign;
|
|
21448
21459
|
}
|
|
@@ -23104,6 +23115,12 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
|
|
|
23104
23115
|
var WORD_ONLINE_IDENTIFYING_SELECTOR = 'div.ListContainerWrapper>ul[class^="BulletListStyle"],div.ListContainerWrapper>ol[class^="NumberListStyle"],span.WACImageContainer > img';
|
|
23105
23116
|
var LIST_CONTAINER_ELEMENT_CLASS_NAME = 'ListContainerWrapper';
|
|
23106
23117
|
var IMAGE_CONTAINER_ELEMENT_CLASS_NAME = 'WACImageContainer';
|
|
23118
|
+
//When the list style is a symbol and the value is not in the clipboard, WordOnline
|
|
23119
|
+
var VALID_LIST_STYLE_CHAR_CODES = [
|
|
23120
|
+
'111',
|
|
23121
|
+
'9643',
|
|
23122
|
+
'9830', //'♦'
|
|
23123
|
+
];
|
|
23107
23124
|
/**
|
|
23108
23125
|
* @internal
|
|
23109
23126
|
*/
|
|
@@ -23185,7 +23202,7 @@ function convertPastedContentFromWordOnline(fragment) {
|
|
|
23185
23202
|
var listType = getContainerListType(listItemContainer); // list type that is contained by iterator.
|
|
23186
23203
|
// Initialize processed element with proper listType if this is the first element
|
|
23187
23204
|
if (!convertedListElement) {
|
|
23188
|
-
convertedListElement = doc
|
|
23205
|
+
convertedListElement = createNewList(listItemContainer, doc, listType);
|
|
23189
23206
|
}
|
|
23190
23207
|
// Get all list items(<li>) in the current iterator element.
|
|
23191
23208
|
var currentListItems = (0, roosterjs_editor_dom_1.toArray)(listItemContainer.querySelectorAll('li'));
|
|
@@ -23199,7 +23216,7 @@ function convertPastedContentFromWordOnline(fragment) {
|
|
|
23199
23216
|
// and keep the processing going.
|
|
23200
23217
|
if ((0, roosterjs_editor_dom_1.getTagOfNode)(convertedListElement) != listType && itemLevel == 1) {
|
|
23201
23218
|
insertConvertedListToDoc(convertedListElement, fragment, itemBlock);
|
|
23202
|
-
convertedListElement = doc
|
|
23219
|
+
convertedListElement = createNewList(listItemContainer, doc, listType);
|
|
23203
23220
|
}
|
|
23204
23221
|
insertListItem(convertedListElement, item, listType, doc);
|
|
23205
23222
|
});
|
|
@@ -23236,6 +23253,15 @@ function convertPastedContentFromWordOnline(fragment) {
|
|
|
23236
23253
|
});
|
|
23237
23254
|
}
|
|
23238
23255
|
exports.default = convertPastedContentFromWordOnline;
|
|
23256
|
+
function createNewList(listItemContainer, doc, tag) {
|
|
23257
|
+
var _a;
|
|
23258
|
+
var newList = doc.createElement(tag);
|
|
23259
|
+
var startAttribute = (_a = listItemContainer.firstElementChild) === null || _a === void 0 ? void 0 : _a.getAttribute('start');
|
|
23260
|
+
if (startAttribute) {
|
|
23261
|
+
newList.setAttribute('start', startAttribute);
|
|
23262
|
+
}
|
|
23263
|
+
return newList;
|
|
23264
|
+
}
|
|
23239
23265
|
/**
|
|
23240
23266
|
* The node processing is based on the premise of only ol/ul is in ListContainerWrapper class
|
|
23241
23267
|
* However the html might be malformed, this function is to split all the other elements out of ListContainerWrapper
|
|
@@ -23318,11 +23344,19 @@ function getContainerListType(listItemContainer) {
|
|
|
23318
23344
|
* @param listType Type of list(ul/ol)
|
|
23319
23345
|
*/
|
|
23320
23346
|
function insertListItem(listRootElement, itemToInsert, listType, doc) {
|
|
23347
|
+
var _a;
|
|
23321
23348
|
if (!listType) {
|
|
23322
23349
|
return;
|
|
23323
23350
|
}
|
|
23324
23351
|
// Get item level from 'data-aria-level' attribute
|
|
23325
|
-
var itemLevel = parseInt(itemToInsert.getAttribute('data-aria-level'));
|
|
23352
|
+
var itemLevel = parseInt((_a = itemToInsert.getAttribute('data-aria-level')) !== null && _a !== void 0 ? _a : '');
|
|
23353
|
+
// Try to reuse the List Marker
|
|
23354
|
+
var style = itemToInsert.getAttribute('data-leveltext');
|
|
23355
|
+
if (listType == 'UL' &&
|
|
23356
|
+
style &&
|
|
23357
|
+
VALID_LIST_STYLE_CHAR_CODES.indexOf(style.charCodeAt(0).toString()) > -1) {
|
|
23358
|
+
itemToInsert.style.listStyleType = "\"" + style + " \"";
|
|
23359
|
+
}
|
|
23326
23360
|
var curListLevel = listRootElement; // Level iterator to find the correct place for the current element.
|
|
23327
23361
|
// if the itemLevel is 1 it means the level iterator is at the correct place.
|
|
23328
23362
|
while (itemLevel > 1) {
|
|
@@ -27491,15 +27525,15 @@ var CompatibleExperimentalFeatures;
|
|
|
27491
27525
|
*/
|
|
27492
27526
|
CompatibleExperimentalFeatures["MergePastedLine"] = "MergePastedLine";
|
|
27493
27527
|
/**
|
|
27494
|
-
*
|
|
27528
|
+
* @deprecated This feature is always enabled
|
|
27495
27529
|
*/
|
|
27496
27530
|
CompatibleExperimentalFeatures["SingleDirectionResize"] = "SingleDirectionResize";
|
|
27497
27531
|
/**
|
|
27498
|
-
*
|
|
27532
|
+
* @deprecated This feature is always enabled
|
|
27499
27533
|
*/
|
|
27500
27534
|
CompatibleExperimentalFeatures["PasteWithLinkPreview"] = "PasteWithLinkPreview";
|
|
27501
27535
|
/**
|
|
27502
|
-
*
|
|
27536
|
+
* @deprecated This feature is always enabled
|
|
27503
27537
|
*/
|
|
27504
27538
|
CompatibleExperimentalFeatures["ImageRotate"] = "ImageRotate";
|
|
27505
27539
|
/**
|
|
@@ -27546,6 +27580,11 @@ var CompatibleExperimentalFeatures;
|
|
|
27546
27580
|
* when selection is collapsed. Instead, we will hold the pending format in memory and only apply it when type something
|
|
27547
27581
|
*/
|
|
27548
27582
|
CompatibleExperimentalFeatures["PendingStyleBasedFormat"] = "PendingStyleBasedFormat";
|
|
27583
|
+
/**
|
|
27584
|
+
* Normalize list to make sure it can be displayed correctly in other client
|
|
27585
|
+
* e.g. We will move list items with "display: block" into previous list item and change tag to be DIV
|
|
27586
|
+
*/
|
|
27587
|
+
CompatibleExperimentalFeatures["NormalizeList"] = "NormalizeList";
|
|
27549
27588
|
})(CompatibleExperimentalFeatures = exports.CompatibleExperimentalFeatures || (exports.CompatibleExperimentalFeatures = {}));
|
|
27550
27589
|
|
|
27551
27590
|
|