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.js
CHANGED
|
@@ -2810,6 +2810,11 @@ function getElementBasedFormatState(editor, event) {
|
|
|
2810
2810
|
multiline = endingBlock && startingBlock ? !endingBlock.equals(startingBlock) : false;
|
|
2811
2811
|
}
|
|
2812
2812
|
var headerTag = (0, roosterjs_editor_dom_1.getTagOfNode)(editor.getElementAtCursor('H1,H2,H3,H4,H5,H6', null /*startFrom*/, event));
|
|
2813
|
+
var table = editor.queryElements('table', 1 /* OnSelection */)[0];
|
|
2814
|
+
var tableFormat = table ? (0, roosterjs_editor_dom_1.getTableFormatInfo)(table) : undefined;
|
|
2815
|
+
var hasHeader = (table === null || table === void 0 ? void 0 : table.rows[0])
|
|
2816
|
+
? (0, roosterjs_editor_dom_1.toArray)(table.rows[0].cells).every(function (cell) { return (0, roosterjs_editor_dom_1.getTagOfNode)(cell) == 'TH'; })
|
|
2817
|
+
: undefined;
|
|
2813
2818
|
return {
|
|
2814
2819
|
isBullet: listTag == 'UL',
|
|
2815
2820
|
isNumbering: listTag == 'OL',
|
|
@@ -2818,7 +2823,9 @@ function getElementBasedFormatState(editor, event) {
|
|
|
2818
2823
|
canUnlink: !!editor.queryElements('a[href]', 1 /* OnSelection */)[0],
|
|
2819
2824
|
canAddImageAltText: !!editor.queryElements('img', 1 /* OnSelection */)[0],
|
|
2820
2825
|
isBlockQuote: !!editor.queryElements('blockquote', 1 /* OnSelection */)[0],
|
|
2821
|
-
isInTable: !!
|
|
2826
|
+
isInTable: !!table,
|
|
2827
|
+
tableFormat: tableFormat,
|
|
2828
|
+
tableHasHeader: hasHeader,
|
|
2822
2829
|
};
|
|
2823
2830
|
}
|
|
2824
2831
|
exports.getElementBasedFormatState = getElementBasedFormatState;
|
|
@@ -5828,7 +5835,6 @@ function buildCss(table, coordinates, contentDivSelector) {
|
|
|
5828
5835
|
});
|
|
5829
5836
|
(_a = vTable.cells) === null || _a === void 0 ? void 0 : _a.forEach(function (row, rowIndex) {
|
|
5830
5837
|
var tdCount = 0;
|
|
5831
|
-
var thCount = 0;
|
|
5832
5838
|
firstSelected = null;
|
|
5833
5839
|
lastSelected = null;
|
|
5834
5840
|
//Get current TBODY/THEAD/TFOOT
|
|
@@ -5841,12 +5847,7 @@ function buildCss(table, coordinates, contentDivSelector) {
|
|
|
5841
5847
|
var cell = row[cellIndex].td;
|
|
5842
5848
|
if (cell) {
|
|
5843
5849
|
var tag = (0, roosterjs_editor_dom_1.getTagOfNode)(cell);
|
|
5844
|
-
|
|
5845
|
-
tdCount++;
|
|
5846
|
-
}
|
|
5847
|
-
if (tag == 'TH') {
|
|
5848
|
-
thCount++;
|
|
5849
|
-
}
|
|
5850
|
+
tdCount++;
|
|
5850
5851
|
if (rowIndex >= tr1 && rowIndex <= tr2 && cellIndex >= td1 && cellIndex <= td2) {
|
|
5851
5852
|
if (isFirst) {
|
|
5852
5853
|
isFirst = false;
|
|
@@ -5855,7 +5856,7 @@ function buildCss(table, coordinates, contentDivSelector) {
|
|
|
5855
5856
|
css += ',';
|
|
5856
5857
|
}
|
|
5857
5858
|
removeImportant(cell);
|
|
5858
|
-
var selector = generateCssFromCell(contentDivSelector, table.id, middleElSelector, currentRow, tag,
|
|
5859
|
+
var selector = generateCssFromCell(contentDivSelector, table.id, middleElSelector, currentRow, tag, tdCount);
|
|
5859
5860
|
css += selector;
|
|
5860
5861
|
firstSelected = firstSelected || table.querySelector(selector);
|
|
5861
5862
|
lastSelected = table.querySelector(selector);
|
|
@@ -6320,10 +6321,9 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
6320
6321
|
function CopyPastePlugin(options) {
|
|
6321
6322
|
var _this = this;
|
|
6322
6323
|
this.onPaste = function (event) {
|
|
6323
|
-
var _a
|
|
6324
|
+
var _a;
|
|
6324
6325
|
var range;
|
|
6325
6326
|
(0, roosterjs_editor_dom_1.extractClipboardEvent)(event, function (clipboardData) { var _a; return (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.paste(clipboardData); }, {
|
|
6326
|
-
allowLinkPreview: (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.isFeatureEnabled("PasteWithLinkPreview" /* PasteWithLinkPreview */),
|
|
6327
6327
|
allowedCustomPasteType: _this.state.allowedCustomPasteType,
|
|
6328
6328
|
getTempDiv: function () {
|
|
6329
6329
|
var _a;
|
|
@@ -6333,7 +6333,7 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
6333
6333
|
removeTempDiv: function (div) {
|
|
6334
6334
|
_this.cleanUpAndRestoreSelection(div, range, false /* isCopy */);
|
|
6335
6335
|
},
|
|
6336
|
-
}, (
|
|
6336
|
+
}, (_a = _this.editor) === null || _a === void 0 ? void 0 : _a.getSelectionRange());
|
|
6337
6337
|
};
|
|
6338
6338
|
this.state = {
|
|
6339
6339
|
allowedCustomPasteType: options.allowedCustomPasteType || [],
|
|
@@ -6378,16 +6378,19 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
6378
6378
|
if (selection && !selection.areAllCollapsed) {
|
|
6379
6379
|
var html = this.editor.getContent(2 /* RawHTMLWithSelection */);
|
|
6380
6380
|
var tempDiv_1 = this.getTempDiv(true /*forceInLightMode*/);
|
|
6381
|
-
var
|
|
6382
|
-
|
|
6383
|
-
(0, roosterjs_editor_dom_1.
|
|
6384
|
-
|
|
6381
|
+
var metadata = (0, roosterjs_editor_dom_1.setHtmlWithMetadata)(tempDiv_1, html, this.editor.getTrustedHTMLHandler());
|
|
6382
|
+
var newRange = (metadata === null || metadata === void 0 ? void 0 : metadata.type) === 0 /* Normal */
|
|
6383
|
+
? (0, roosterjs_editor_dom_1.createRange)(tempDiv_1, metadata.start, metadata.end)
|
|
6384
|
+
: null;
|
|
6385
6385
|
this.editor.triggerPluginEvent(9 /* BeforeCutCopy */, {
|
|
6386
6386
|
clonedRoot: tempDiv_1,
|
|
6387
6387
|
range: newRange,
|
|
6388
6388
|
rawEvent: event,
|
|
6389
6389
|
isCut: isCut,
|
|
6390
6390
|
});
|
|
6391
|
+
if (newRange) {
|
|
6392
|
+
(0, roosterjs_editor_dom_1.addRangeToSelection)(newRange);
|
|
6393
|
+
}
|
|
6391
6394
|
this.editor.runAsync(function (editor) {
|
|
6392
6395
|
_this.cleanUpAndRestoreSelection(tempDiv_1, selection, !isCut /* isCopy */);
|
|
6393
6396
|
if (isCut) {
|
|
@@ -7406,6 +7409,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7406
7409
|
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
7407
7410
|
/**
|
|
7408
7411
|
* @internal
|
|
7412
|
+
* TODO: Rename this plugin since it is not only for table now
|
|
7413
|
+
*
|
|
7409
7414
|
* NormalizeTable plugin makes sure each table in editor has TBODY/THEAD/TFOOT tag around TR tags
|
|
7410
7415
|
*
|
|
7411
7416
|
* When we retrieve HTML content using innerHTML, browser will always add TBODY around TR nodes if there is not.
|
|
@@ -7462,6 +7467,11 @@ var NormalizeTablePlugin = /** @class */ (function () {
|
|
|
7462
7467
|
this.normalizeTableFromEvent(event.rawEvent);
|
|
7463
7468
|
}
|
|
7464
7469
|
break;
|
|
7470
|
+
case 8 /* ExtractContentWithDom */:
|
|
7471
|
+
if (this.editor.isFeatureEnabled("NormalizeList" /* NormalizeList */)) {
|
|
7472
|
+
normalizeListsForExport(event.clonedRoot);
|
|
7473
|
+
}
|
|
7474
|
+
break;
|
|
7465
7475
|
}
|
|
7466
7476
|
};
|
|
7467
7477
|
NormalizeTablePlugin.prototype.normalizeTableFromEvent = function (event) {
|
|
@@ -7533,6 +7543,15 @@ function normalizeTables(tables) {
|
|
|
7533
7543
|
});
|
|
7534
7544
|
return isDOMChanged;
|
|
7535
7545
|
}
|
|
7546
|
+
function normalizeListsForExport(root) {
|
|
7547
|
+
(0, roosterjs_editor_dom_1.toArray)(root.querySelectorAll('li')).forEach(function (li) {
|
|
7548
|
+
var prevElement = li.previousSibling;
|
|
7549
|
+
if (li.style.display == 'block' && (0, roosterjs_editor_dom_1.safeInstanceOf)(prevElement, 'HTMLLIElement')) {
|
|
7550
|
+
delete li.style.display;
|
|
7551
|
+
prevElement.appendChild((0, roosterjs_editor_dom_1.changeElementTag)(li, 'div'));
|
|
7552
|
+
}
|
|
7553
|
+
});
|
|
7554
|
+
}
|
|
7536
7555
|
|
|
7537
7556
|
|
|
7538
7557
|
/***/ }),
|
|
@@ -9201,17 +9220,6 @@ function removeContents(range) {
|
|
|
9201
9220
|
|
|
9202
9221
|
"use strict";
|
|
9203
9222
|
|
|
9204
|
-
var __assign = (this && this.__assign) || function () {
|
|
9205
|
-
__assign = Object.assign || function(t) {
|
|
9206
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9207
|
-
s = arguments[i];
|
|
9208
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
9209
|
-
t[p] = s[p];
|
|
9210
|
-
}
|
|
9211
|
-
return t;
|
|
9212
|
-
};
|
|
9213
|
-
return __assign.apply(this, arguments);
|
|
9214
|
-
};
|
|
9215
9223
|
var _a;
|
|
9216
9224
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9217
9225
|
var readFile_1 = __webpack_require__(/*! ../utils/readFile */ "./packages/roosterjs-editor-dom/lib/utils/readFile.ts");
|
|
@@ -9234,6 +9242,7 @@ var ContentHandlers = (_a = {},
|
|
|
9234
9242
|
},
|
|
9235
9243
|
_a["text/plain" /* PlainText */] = function (data, value) { return (data.text = value); },
|
|
9236
9244
|
_a[OTHER_TEXT_TYPE] = function (data, value, type) { return !!type && (data.customValues[type] = value); },
|
|
9245
|
+
_a["text/" /* Text */ + EDGE_LINK_PREVIEW] = tryParseLinkPreview,
|
|
9237
9246
|
_a);
|
|
9238
9247
|
/**
|
|
9239
9248
|
* Extract clipboard items to be a ClipboardData object for IE
|
|
@@ -9256,10 +9265,6 @@ function extractClipboardItems(items, options) {
|
|
|
9256
9265
|
rawHtml: null,
|
|
9257
9266
|
customValues: {},
|
|
9258
9267
|
};
|
|
9259
|
-
var contentHandlers = __assign({}, ContentHandlers);
|
|
9260
|
-
if (options === null || options === void 0 ? void 0 : options.allowLinkPreview) {
|
|
9261
|
-
contentHandlers["text/" /* Text */ + EDGE_LINK_PREVIEW] = tryParseLinkPreview;
|
|
9262
|
-
}
|
|
9263
9268
|
return Promise.all((items || []).map(function (item) {
|
|
9264
9269
|
var type = item.type;
|
|
9265
9270
|
if (type.indexOf("image/" /* Image */) == 0 && !data.image && item.kind == 'file') {
|
|
@@ -9289,7 +9294,7 @@ function extractClipboardItems(items, options) {
|
|
|
9289
9294
|
}
|
|
9290
9295
|
else {
|
|
9291
9296
|
var customType_1 = getAllowedCustomType(type, options === null || options === void 0 ? void 0 : options.allowedCustomPasteType);
|
|
9292
|
-
var handler_1 =
|
|
9297
|
+
var handler_1 = ContentHandlers[type] || (customType_1 ? ContentHandlers[OTHER_TEXT_TYPE] : null);
|
|
9293
9298
|
return new Promise(function (resolve) {
|
|
9294
9299
|
return handler_1
|
|
9295
9300
|
? item.getAsString(function (value) {
|
|
@@ -11543,8 +11548,8 @@ exports.default = getPredefinedCssForElement;
|
|
|
11543
11548
|
|
|
11544
11549
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11545
11550
|
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;
|
|
11546
|
-
exports.
|
|
11547
|
-
exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = void 0;
|
|
11551
|
+
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;
|
|
11552
|
+
exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = void 0;
|
|
11548
11553
|
var getBlockElementAtNode_1 = __webpack_require__(/*! ./blockElements/getBlockElementAtNode */ "./packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts");
|
|
11549
11554
|
Object.defineProperty(exports, "getBlockElementAtNode", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });
|
|
11550
11555
|
var getFirstLastBlockElement_1 = __webpack_require__(/*! ./blockElements/getFirstLastBlockElement */ "./packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts");
|
|
@@ -11650,6 +11655,8 @@ var VListChain_1 = __webpack_require__(/*! ./list/VListChain */ "./packages/roos
|
|
|
11650
11655
|
Object.defineProperty(exports, "VListChain", { enumerable: true, get: function () { return VListChain_1.default; } });
|
|
11651
11656
|
var setListItemStyle_1 = __webpack_require__(/*! ./list/setListItemStyle */ "./packages/roosterjs-editor-dom/lib/list/setListItemStyle.ts");
|
|
11652
11657
|
Object.defineProperty(exports, "setListItemStyle", { enumerable: true, get: function () { return setListItemStyle_1.default; } });
|
|
11658
|
+
var tableFormatInfo_1 = __webpack_require__(/*! ./table/tableFormatInfo */ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts");
|
|
11659
|
+
Object.defineProperty(exports, "getTableFormatInfo", { enumerable: true, get: function () { return tableFormatInfo_1.getTableFormatInfo; } });
|
|
11653
11660
|
var getRegionsFromRange_1 = __webpack_require__(/*! ./region/getRegionsFromRange */ "./packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts");
|
|
11654
11661
|
Object.defineProperty(exports, "getRegionsFromRange", { enumerable: true, get: function () { return getRegionsFromRange_1.default; } });
|
|
11655
11662
|
var getSelectedBlockElementsInRegion_1 = __webpack_require__(/*! ./region/getSelectedBlockElementsInRegion */ "./packages/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.ts");
|
|
@@ -16584,11 +16591,10 @@ var TableFormatMetadata = (0, definitionCreators_1.createObjectDefinition)({
|
|
|
16584
16591
|
hasBandedRows: BooleanDefinition,
|
|
16585
16592
|
bgColorEven: NullStringDefinition,
|
|
16586
16593
|
bgColorOdd: NullStringDefinition,
|
|
16587
|
-
tableBorderFormat: (0, definitionCreators_1.createNumberDefinition)(false /** isOptional */, undefined /* value */, 0 /*
|
|
16588
|
-
keepCellShade:
|
|
16594
|
+
tableBorderFormat: (0, definitionCreators_1.createNumberDefinition)(false /** isOptional */, undefined /* value */, 0 /* DEFAULT */, 8 /* CLEAR */),
|
|
16595
|
+
keepCellShade: (0, definitionCreators_1.createBooleanDefinition)(true /** isOptional */),
|
|
16589
16596
|
}, false /* isOptional */, true /** allowNull */);
|
|
16590
16597
|
/**
|
|
16591
|
-
* @internal
|
|
16592
16598
|
* Get the format info of a table
|
|
16593
16599
|
* If the table does not have a info saved, it will be retrieved from the css styles
|
|
16594
16600
|
* @param table The table that has the info
|
|
@@ -16650,11 +16656,11 @@ function getBrowserInfo(userAgent, appVersion, vendor) {
|
|
|
16650
16656
|
// The default regex on the website doesn't consider tablet.
|
|
16651
16657
|
// To support tablet, add |android|ipad|playbook|silk to the first regex according to the info in /about page
|
|
16652
16658
|
(function (userAgentOrVendor) {
|
|
16653
|
-
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)
|
|
16654
|
-
|
|
16659
|
+
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) ||
|
|
16660
|
+
/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))) {
|
|
16655
16661
|
isMobileOrTablet = true;
|
|
16656
16662
|
}
|
|
16657
|
-
})(userAgent || vendor ||
|
|
16663
|
+
})(userAgent || vendor || '');
|
|
16658
16664
|
if (!isIE) {
|
|
16659
16665
|
isChrome = userAgent.indexOf('Chrome') != -1;
|
|
16660
16666
|
isFirefox = userAgent.indexOf('Firefox') != -1;
|
|
@@ -16691,7 +16697,7 @@ exports.getBrowserInfo = getBrowserInfo;
|
|
|
16691
16697
|
/**
|
|
16692
16698
|
* Browser object contains browser and operating system information of current environment
|
|
16693
16699
|
*/
|
|
16694
|
-
exports.Browser = window
|
|
16700
|
+
exports.Browser = typeof window !== 'undefined' && window
|
|
16695
16701
|
? getBrowserInfo(window.navigator.userAgent, window.navigator.appVersion, window.navigator.vendor)
|
|
16696
16702
|
: {};
|
|
16697
16703
|
|
|
@@ -18672,23 +18678,21 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
|
|
|
18672
18678
|
/**
|
|
18673
18679
|
* Generate event names and getXY function based on different platforms to be compatible with desktop and mobile browsers
|
|
18674
18680
|
*/
|
|
18675
|
-
var
|
|
18676
|
-
|
|
18677
|
-
|
|
18678
|
-
|
|
18679
|
-
|
|
18680
|
-
|
|
18681
|
-
|
|
18682
|
-
|
|
18683
|
-
|
|
18684
|
-
|
|
18685
|
-
|
|
18686
|
-
|
|
18687
|
-
|
|
18688
|
-
|
|
18689
|
-
|
|
18690
|
-
};
|
|
18691
|
-
}
|
|
18681
|
+
var MOUSE_EVENT_INFO_DESKTOP = (function () {
|
|
18682
|
+
return {
|
|
18683
|
+
MOUSEDOWN: 'mousedown',
|
|
18684
|
+
MOUSEMOVE: 'mousemove',
|
|
18685
|
+
MOUSEUP: 'mouseup',
|
|
18686
|
+
getPageXY: getMouseEventPageXY,
|
|
18687
|
+
};
|
|
18688
|
+
})();
|
|
18689
|
+
var MOUSE_EVENT_INFO_MOBILE = (function () {
|
|
18690
|
+
return {
|
|
18691
|
+
MOUSEDOWN: 'touchstart',
|
|
18692
|
+
MOUSEMOVE: 'touchmove',
|
|
18693
|
+
MOUSEUP: 'touchend',
|
|
18694
|
+
getPageXY: getTouchEventPageXY,
|
|
18695
|
+
};
|
|
18692
18696
|
})();
|
|
18693
18697
|
function getMouseEventPageXY(e) {
|
|
18694
18698
|
return [e.pageX, e.pageY];
|
|
@@ -18716,8 +18720,10 @@ var DragAndDropHelper = /** @class */ (function () {
|
|
|
18716
18720
|
* so that the handler object knows which element it is triggered from.
|
|
18717
18721
|
* @param onSubmit A callback that will be invoked when event handler in handler object returns true
|
|
18718
18722
|
* @param handler The event handler object, see DragAndDropHandler interface for more information
|
|
18723
|
+
* @param zoomScale The zoom scale of the editor
|
|
18724
|
+
* @param forceMobile A boolean to force the use of touch controls for the helper
|
|
18719
18725
|
*/
|
|
18720
|
-
function DragAndDropHelper(trigger, context, onSubmit, handler, zoomScale) {
|
|
18726
|
+
function DragAndDropHelper(trigger, context, onSubmit, handler, zoomScale, forceMobile) {
|
|
18721
18727
|
var _this = this;
|
|
18722
18728
|
this.trigger = trigger;
|
|
18723
18729
|
this.context = context;
|
|
@@ -18730,13 +18736,13 @@ var DragAndDropHelper = /** @class */ (function () {
|
|
|
18730
18736
|
e.preventDefault();
|
|
18731
18737
|
e.stopPropagation();
|
|
18732
18738
|
_this.addDocumentEvents();
|
|
18733
|
-
_a =
|
|
18739
|
+
_a = _this.dndMouse.getPageXY(e), _this.initX = _a[0], _this.initY = _a[1];
|
|
18734
18740
|
_this.initValue = (_c = (_b = _this.handler).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b, _this.context, e);
|
|
18735
18741
|
};
|
|
18736
18742
|
this.onMouseMove = function (e) {
|
|
18737
18743
|
var _a, _b, _c;
|
|
18738
18744
|
e.preventDefault();
|
|
18739
|
-
var _d =
|
|
18745
|
+
var _d = _this.dndMouse.getPageXY(e), pageX = _d[0], pageY = _d[1];
|
|
18740
18746
|
var deltaX = (pageX - _this.initX) / _this.zoomScale;
|
|
18741
18747
|
var deltaY = (pageY - _this.initY) / _this.zoomScale;
|
|
18742
18748
|
if ((_b = (_a = _this.handler).onDragging) === null || _b === void 0 ? void 0 : _b.call(_a, _this.context, e, _this.initValue, deltaX, deltaY)) {
|
|
@@ -18751,24 +18757,28 @@ var DragAndDropHelper = /** @class */ (function () {
|
|
|
18751
18757
|
(_c = _this.onSubmit) === null || _c === void 0 ? void 0 : _c.call(_this, _this.context, _this.trigger);
|
|
18752
18758
|
}
|
|
18753
18759
|
};
|
|
18754
|
-
|
|
18760
|
+
this.dndMouse =
|
|
18761
|
+
forceMobile || roosterjs_editor_dom_1.Browser.isMobileOrTablet
|
|
18762
|
+
? MOUSE_EVENT_INFO_MOBILE
|
|
18763
|
+
: MOUSE_EVENT_INFO_DESKTOP;
|
|
18764
|
+
trigger.addEventListener(this.dndMouse.MOUSEDOWN, this.onMouseDown);
|
|
18755
18765
|
}
|
|
18756
18766
|
/**
|
|
18757
18767
|
* Dispose this object, remove all event listeners that has been attached
|
|
18758
18768
|
*/
|
|
18759
18769
|
DragAndDropHelper.prototype.dispose = function () {
|
|
18760
|
-
this.trigger.removeEventListener(
|
|
18770
|
+
this.trigger.removeEventListener(this.dndMouse.MOUSEDOWN, this.onMouseDown);
|
|
18761
18771
|
this.removeDocumentEvents();
|
|
18762
18772
|
};
|
|
18763
18773
|
DragAndDropHelper.prototype.addDocumentEvents = function () {
|
|
18764
18774
|
var doc = this.trigger.ownerDocument;
|
|
18765
|
-
doc.addEventListener(
|
|
18766
|
-
doc.addEventListener(
|
|
18775
|
+
doc.addEventListener(this.dndMouse.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
|
|
18776
|
+
doc.addEventListener(this.dndMouse.MOUSEUP, this.onMouseUp, true /*useCapture*/);
|
|
18767
18777
|
};
|
|
18768
18778
|
DragAndDropHelper.prototype.removeDocumentEvents = function () {
|
|
18769
18779
|
var doc = this.trigger.ownerDocument;
|
|
18770
|
-
doc.removeEventListener(
|
|
18771
|
-
doc.removeEventListener(
|
|
18780
|
+
doc.removeEventListener(this.dndMouse.MOUSEMOVE, this.onMouseMove, true /*useCapture*/);
|
|
18781
|
+
doc.removeEventListener(this.dndMouse.MOUSEUP, this.onMouseUp, true /*useCapture*/);
|
|
18772
18782
|
};
|
|
18773
18783
|
return DragAndDropHelper;
|
|
18774
18784
|
}());
|
|
@@ -21138,7 +21148,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
21138
21148
|
}
|
|
21139
21149
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21140
21150
|
};
|
|
21141
|
-
var _a
|
|
21151
|
+
var _a;
|
|
21142
21152
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21143
21153
|
var applyChange_1 = __webpack_require__(/*! ./editInfoUtils/applyChange */ "./packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/editInfoUtils/applyChange.ts");
|
|
21144
21154
|
var canRegenerateImage_1 = __webpack_require__(/*! ./api/canRegenerateImage */ "./packages/roosterjs-editor-plugins/lib/plugins/ImageEdit/api/canRegenerateImage.ts");
|
|
@@ -21156,14 +21166,6 @@ var ALT_KEYCODE = 18;
|
|
|
21156
21166
|
var DIRECTIONS = 8;
|
|
21157
21167
|
var DirectionRad = (Math.PI * 2) / DIRECTIONS;
|
|
21158
21168
|
var DirectionOrder = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
|
|
21159
|
-
/**
|
|
21160
|
-
* Map the experimental features to image edit operations to help determine which operation is allowed
|
|
21161
|
-
*/
|
|
21162
|
-
var FeatureToOperationMap = (_a = {},
|
|
21163
|
-
_a["SingleDirectionResize" /* SingleDirectionResize */] = 2 /* SideResize */,
|
|
21164
|
-
_a["ImageRotate" /* ImageRotate */] = 4 /* Rotate */,
|
|
21165
|
-
_a["ImageCrop" /* ImageCrop */] = 8 /* Crop */,
|
|
21166
|
-
_a);
|
|
21167
21169
|
/**
|
|
21168
21170
|
* Default image edit options
|
|
21169
21171
|
*/
|
|
@@ -21175,17 +21177,20 @@ var DefaultOptions = {
|
|
|
21175
21177
|
minRotateDeg: 5,
|
|
21176
21178
|
imageSelector: 'img',
|
|
21177
21179
|
rotateIconHTML: null,
|
|
21180
|
+
disableCrop: false,
|
|
21181
|
+
disableRotate: false,
|
|
21182
|
+
disableSideResize: false,
|
|
21178
21183
|
};
|
|
21179
21184
|
/**
|
|
21180
21185
|
* Map the image edit operation to a function that returns editing elements HTML to help
|
|
21181
21186
|
* build image editing UI
|
|
21182
21187
|
*/
|
|
21183
|
-
var ImageEditHTMLMap = (
|
|
21184
|
-
|
|
21185
|
-
|
|
21186
|
-
|
|
21187
|
-
|
|
21188
|
-
|
|
21188
|
+
var ImageEditHTMLMap = (_a = {},
|
|
21189
|
+
_a[1 /* CornerResize */] = Resizer_1.getCornerResizeHTML,
|
|
21190
|
+
_a[2 /* SideResize */] = Resizer_1.getSideResizeHTML,
|
|
21191
|
+
_a[4 /* Rotate */] = Rotator_1.getRotateHTML,
|
|
21192
|
+
_a[8 /* Crop */] = Cropper_1.getCropHTML,
|
|
21193
|
+
_a);
|
|
21189
21194
|
/**
|
|
21190
21195
|
* Image edit entity name
|
|
21191
21196
|
*/
|
|
@@ -21213,8 +21218,6 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21213
21218
|
function ImageEdit(options, onShowResizeHandle) {
|
|
21214
21219
|
var _this = this;
|
|
21215
21220
|
this.onShowResizeHandle = onShowResizeHandle;
|
|
21216
|
-
// Allowed editing operations
|
|
21217
|
-
this.allowedOperations = 1 /* CornerResize */;
|
|
21218
21221
|
/**
|
|
21219
21222
|
* quit editing mode when editor lose focus
|
|
21220
21223
|
*/
|
|
@@ -21298,6 +21301,11 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21298
21301
|
}
|
|
21299
21302
|
};
|
|
21300
21303
|
this.options = __assign(__assign({}, DefaultOptions), (options || {}));
|
|
21304
|
+
this.allowedOperations =
|
|
21305
|
+
1 /* CornerResize */ |
|
|
21306
|
+
(this.options.disableCrop ? 0 : 8 /* Crop */) |
|
|
21307
|
+
(this.options.disableRotate ? 0 : 4 /* Rotate */) |
|
|
21308
|
+
(this.options.disableSideResize ? 0 : 2 /* SideResize */);
|
|
21301
21309
|
}
|
|
21302
21310
|
/**
|
|
21303
21311
|
* Get a friendly name of this plugin
|
|
@@ -21310,15 +21318,8 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21310
21318
|
* @param editor Editor instance
|
|
21311
21319
|
*/
|
|
21312
21320
|
ImageEdit.prototype.initialize = function (editor) {
|
|
21313
|
-
var _this = this;
|
|
21314
21321
|
this.editor = editor;
|
|
21315
21322
|
this.disposer = editor.addDomEventHandler('blur', this.onBlur);
|
|
21316
|
-
// Read current enabled features from editor to determine which editing operations are allowed
|
|
21317
|
-
(0, roosterjs_editor_dom_1.getObjectKeys)(FeatureToOperationMap).forEach(function (key) {
|
|
21318
|
-
_this.allowedOperations |= _this.editor.isFeatureEnabled(key)
|
|
21319
|
-
? FeatureToOperationMap[key]
|
|
21320
|
-
: 0;
|
|
21321
|
-
});
|
|
21322
21323
|
};
|
|
21323
21324
|
/**
|
|
21324
21325
|
* Dispose this plugin
|
|
@@ -21391,6 +21392,14 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21391
21392
|
break;
|
|
21392
21393
|
}
|
|
21393
21394
|
};
|
|
21395
|
+
/**
|
|
21396
|
+
* Check if the given image edit operation is allowed by this pluign
|
|
21397
|
+
* @param operation The image edit operation to check
|
|
21398
|
+
* @returns True means it is allowed, otherwise false
|
|
21399
|
+
*/
|
|
21400
|
+
ImageEdit.prototype.isOperationAllowed = function (operation) {
|
|
21401
|
+
return !!(this.allowedOperations & operation);
|
|
21402
|
+
};
|
|
21394
21403
|
ImageEdit.prototype.setEditingImage = function (image, operationOrSelect) {
|
|
21395
21404
|
var _this = this;
|
|
21396
21405
|
var operation = typeof operationOrSelect === 'number' ? operationOrSelect : 0 /* None */;
|
|
@@ -21443,7 +21452,9 @@ var ImageEdit = /** @class */ (function () {
|
|
|
21443
21452
|
wrapper.style.position = 'relative';
|
|
21444
21453
|
wrapper.style.maxWidth = '100%';
|
|
21445
21454
|
// keep the same vertical align
|
|
21446
|
-
var originalVerticalAlign = this.image.ownerDocument.defaultView
|
|
21455
|
+
var originalVerticalAlign = this.image.ownerDocument.defaultView
|
|
21456
|
+
.getComputedStyle(this.image)
|
|
21457
|
+
.getPropertyValue('vertical-align');
|
|
21447
21458
|
if (originalVerticalAlign) {
|
|
21448
21459
|
wrapper.style.verticalAlign = originalVerticalAlign;
|
|
21449
21460
|
}
|
|
@@ -23105,6 +23116,12 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
|
|
|
23105
23116
|
var WORD_ONLINE_IDENTIFYING_SELECTOR = 'div.ListContainerWrapper>ul[class^="BulletListStyle"],div.ListContainerWrapper>ol[class^="NumberListStyle"],span.WACImageContainer > img';
|
|
23106
23117
|
var LIST_CONTAINER_ELEMENT_CLASS_NAME = 'ListContainerWrapper';
|
|
23107
23118
|
var IMAGE_CONTAINER_ELEMENT_CLASS_NAME = 'WACImageContainer';
|
|
23119
|
+
//When the list style is a symbol and the value is not in the clipboard, WordOnline
|
|
23120
|
+
var VALID_LIST_STYLE_CHAR_CODES = [
|
|
23121
|
+
'111',
|
|
23122
|
+
'9643',
|
|
23123
|
+
'9830', //'♦'
|
|
23124
|
+
];
|
|
23108
23125
|
/**
|
|
23109
23126
|
* @internal
|
|
23110
23127
|
*/
|
|
@@ -23186,7 +23203,7 @@ function convertPastedContentFromWordOnline(fragment) {
|
|
|
23186
23203
|
var listType = getContainerListType(listItemContainer); // list type that is contained by iterator.
|
|
23187
23204
|
// Initialize processed element with proper listType if this is the first element
|
|
23188
23205
|
if (!convertedListElement) {
|
|
23189
|
-
convertedListElement = doc
|
|
23206
|
+
convertedListElement = createNewList(listItemContainer, doc, listType);
|
|
23190
23207
|
}
|
|
23191
23208
|
// Get all list items(<li>) in the current iterator element.
|
|
23192
23209
|
var currentListItems = (0, roosterjs_editor_dom_1.toArray)(listItemContainer.querySelectorAll('li'));
|
|
@@ -23200,7 +23217,7 @@ function convertPastedContentFromWordOnline(fragment) {
|
|
|
23200
23217
|
// and keep the processing going.
|
|
23201
23218
|
if ((0, roosterjs_editor_dom_1.getTagOfNode)(convertedListElement) != listType && itemLevel == 1) {
|
|
23202
23219
|
insertConvertedListToDoc(convertedListElement, fragment, itemBlock);
|
|
23203
|
-
convertedListElement = doc
|
|
23220
|
+
convertedListElement = createNewList(listItemContainer, doc, listType);
|
|
23204
23221
|
}
|
|
23205
23222
|
insertListItem(convertedListElement, item, listType, doc);
|
|
23206
23223
|
});
|
|
@@ -23237,6 +23254,15 @@ function convertPastedContentFromWordOnline(fragment) {
|
|
|
23237
23254
|
});
|
|
23238
23255
|
}
|
|
23239
23256
|
exports.default = convertPastedContentFromWordOnline;
|
|
23257
|
+
function createNewList(listItemContainer, doc, tag) {
|
|
23258
|
+
var _a;
|
|
23259
|
+
var newList = doc.createElement(tag);
|
|
23260
|
+
var startAttribute = (_a = listItemContainer.firstElementChild) === null || _a === void 0 ? void 0 : _a.getAttribute('start');
|
|
23261
|
+
if (startAttribute) {
|
|
23262
|
+
newList.setAttribute('start', startAttribute);
|
|
23263
|
+
}
|
|
23264
|
+
return newList;
|
|
23265
|
+
}
|
|
23240
23266
|
/**
|
|
23241
23267
|
* The node processing is based on the premise of only ol/ul is in ListContainerWrapper class
|
|
23242
23268
|
* However the html might be malformed, this function is to split all the other elements out of ListContainerWrapper
|
|
@@ -23319,11 +23345,19 @@ function getContainerListType(listItemContainer) {
|
|
|
23319
23345
|
* @param listType Type of list(ul/ol)
|
|
23320
23346
|
*/
|
|
23321
23347
|
function insertListItem(listRootElement, itemToInsert, listType, doc) {
|
|
23348
|
+
var _a;
|
|
23322
23349
|
if (!listType) {
|
|
23323
23350
|
return;
|
|
23324
23351
|
}
|
|
23325
23352
|
// Get item level from 'data-aria-level' attribute
|
|
23326
|
-
var itemLevel = parseInt(itemToInsert.getAttribute('data-aria-level'));
|
|
23353
|
+
var itemLevel = parseInt((_a = itemToInsert.getAttribute('data-aria-level')) !== null && _a !== void 0 ? _a : '');
|
|
23354
|
+
// Try to reuse the List Marker
|
|
23355
|
+
var style = itemToInsert.getAttribute('data-leveltext');
|
|
23356
|
+
if (listType == 'UL' &&
|
|
23357
|
+
style &&
|
|
23358
|
+
VALID_LIST_STYLE_CHAR_CODES.indexOf(style.charCodeAt(0).toString()) > -1) {
|
|
23359
|
+
itemToInsert.style.listStyleType = "\"" + style + " \"";
|
|
23360
|
+
}
|
|
23327
23361
|
var curListLevel = listRootElement; // Level iterator to find the correct place for the current element.
|
|
23328
23362
|
// if the itemLevel is 1 it means the level iterator is at the correct place.
|
|
23329
23363
|
while (itemLevel > 1) {
|
|
@@ -27492,15 +27526,15 @@ var CompatibleExperimentalFeatures;
|
|
|
27492
27526
|
*/
|
|
27493
27527
|
CompatibleExperimentalFeatures["MergePastedLine"] = "MergePastedLine";
|
|
27494
27528
|
/**
|
|
27495
|
-
*
|
|
27529
|
+
* @deprecated This feature is always enabled
|
|
27496
27530
|
*/
|
|
27497
27531
|
CompatibleExperimentalFeatures["SingleDirectionResize"] = "SingleDirectionResize";
|
|
27498
27532
|
/**
|
|
27499
|
-
*
|
|
27533
|
+
* @deprecated This feature is always enabled
|
|
27500
27534
|
*/
|
|
27501
27535
|
CompatibleExperimentalFeatures["PasteWithLinkPreview"] = "PasteWithLinkPreview";
|
|
27502
27536
|
/**
|
|
27503
|
-
*
|
|
27537
|
+
* @deprecated This feature is always enabled
|
|
27504
27538
|
*/
|
|
27505
27539
|
CompatibleExperimentalFeatures["ImageRotate"] = "ImageRotate";
|
|
27506
27540
|
/**
|
|
@@ -27547,6 +27581,11 @@ var CompatibleExperimentalFeatures;
|
|
|
27547
27581
|
* when selection is collapsed. Instead, we will hold the pending format in memory and only apply it when type something
|
|
27548
27582
|
*/
|
|
27549
27583
|
CompatibleExperimentalFeatures["PendingStyleBasedFormat"] = "PendingStyleBasedFormat";
|
|
27584
|
+
/**
|
|
27585
|
+
* Normalize list to make sure it can be displayed correctly in other client
|
|
27586
|
+
* e.g. We will move list items with "display: block" into previous list item and change tag to be DIV
|
|
27587
|
+
*/
|
|
27588
|
+
CompatibleExperimentalFeatures["NormalizeList"] = "NormalizeList";
|
|
27550
27589
|
})(CompatibleExperimentalFeatures = exports.CompatibleExperimentalFeatures || (exports.CompatibleExperimentalFeatures = {}));
|
|
27551
27590
|
|
|
27552
27591
|
|