roosterjs 8.31.0 → 8.32.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/rooster-amd-min.js +1 -1
- package/dist/rooster-amd-min.js.map +1 -1
- package/dist/rooster-amd.d.ts +183 -12
- package/dist/rooster-amd.js +654 -170
- 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 +183 -12
- package/dist/rooster.js +654 -170
- package/dist/rooster.js.map +1 -1
- package/package.json +7 -7
- package/tsconfig.child.tsbuildinfo +1 -1
package/dist/rooster.js
CHANGED
|
@@ -3062,6 +3062,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3062
3062
|
var blockFormat_1 = __webpack_require__(/*! ../utils/blockFormat */ "./packages/roosterjs-editor-api/lib/utils/blockFormat.ts");
|
|
3063
3063
|
var execCommand_1 = __webpack_require__(/*! ../utils/execCommand */ "./packages/roosterjs-editor-api/lib/utils/execCommand.ts");
|
|
3064
3064
|
var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
|
|
3065
|
+
var normalizeBlockquote_1 = __webpack_require__(/*! ../utils/normalizeBlockquote */ "./packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts");
|
|
3065
3066
|
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
3066
3067
|
/**
|
|
3067
3068
|
* Set content alignment
|
|
@@ -3130,7 +3131,14 @@ function alignText(editor, alignment) {
|
|
|
3130
3131
|
align = 'right';
|
|
3131
3132
|
}
|
|
3132
3133
|
(0, execCommand_1.default)(editor, command);
|
|
3133
|
-
editor.queryElements('[align]', 1 /* OnSelection */, function (node) {
|
|
3134
|
+
var elements = editor.queryElements('[align]', 1 /* OnSelection */, function (node) {
|
|
3135
|
+
node.style.textAlign = align;
|
|
3136
|
+
(0, normalizeBlockquote_1.default)(node);
|
|
3137
|
+
});
|
|
3138
|
+
if (elements.length == 0) {
|
|
3139
|
+
var node = editor.getElementAtCursor();
|
|
3140
|
+
(0, normalizeBlockquote_1.default)(node);
|
|
3141
|
+
}
|
|
3134
3142
|
}
|
|
3135
3143
|
function isList(element) {
|
|
3136
3144
|
return (0, roosterjs_editor_dom_1.findClosestElementAncestor)(element, undefined /** root */, 'LI');
|
|
@@ -3319,6 +3327,7 @@ exports.default = setImageAltText;
|
|
|
3319
3327
|
|
|
3320
3328
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3321
3329
|
var blockFormat_1 = __webpack_require__(/*! ../utils/blockFormat */ "./packages/roosterjs-editor-api/lib/utils/blockFormat.ts");
|
|
3330
|
+
var normalizeBlockquote_1 = __webpack_require__(/*! ../utils/normalizeBlockquote */ "./packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts");
|
|
3322
3331
|
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
3323
3332
|
/**
|
|
3324
3333
|
* Set indentation at selection
|
|
@@ -3351,7 +3360,7 @@ function setIndentation(editor, indentation) {
|
|
|
3351
3360
|
indentation == 1 /* Decrease */
|
|
3352
3361
|
? vList.setIndentation(start, end, indentation, false /* softOutdent */, isTabKeyTextFeaturesEnabled /* preventItemRemoval */)
|
|
3353
3362
|
: vList.setIndentation(start, end, indentation);
|
|
3354
|
-
vList.writeBack();
|
|
3363
|
+
vList.writeBack(editor.isFeatureEnabled("ReuseAllAncestorListElements" /* ReuseAllAncestorListElements */));
|
|
3355
3364
|
blockGroups.push([]);
|
|
3356
3365
|
}
|
|
3357
3366
|
}
|
|
@@ -3375,12 +3384,14 @@ function setIndentation(editor, indentation) {
|
|
|
3375
3384
|
}
|
|
3376
3385
|
return true;
|
|
3377
3386
|
}, 'setIndentation');
|
|
3387
|
+
function indent(region, blocks) {
|
|
3388
|
+
var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);
|
|
3389
|
+
(0, roosterjs_editor_dom_1.wrap)(nodes, 2 /* BlockquoteWrapper */);
|
|
3390
|
+
var quotesHandled = [];
|
|
3391
|
+
nodes.forEach(function (node) { return (0, normalizeBlockquote_1.default)(node, quotesHandled); });
|
|
3392
|
+
}
|
|
3378
3393
|
}
|
|
3379
3394
|
exports.default = setIndentation;
|
|
3380
|
-
function indent(region, blocks) {
|
|
3381
|
-
var nodes = (0, roosterjs_editor_dom_1.collapseNodesInRegion)(region, blocks);
|
|
3382
|
-
(0, roosterjs_editor_dom_1.wrap)(nodes, 2 /* BlockquoteWrapper */);
|
|
3383
|
-
}
|
|
3384
3395
|
function outdent(region, blocks) {
|
|
3385
3396
|
blocks.forEach(function (blockElement) {
|
|
3386
3397
|
var node = blockElement.collapseToSingleElement();
|
|
@@ -3437,7 +3448,7 @@ function setOrderedListNumbering(editor, separator, startNumber) {
|
|
|
3437
3448
|
var vList = (0, roosterjs_editor_dom_1.createVListFromRegion)(regions[0], false /*includeSiblingLists*/, separator);
|
|
3438
3449
|
if (vList) {
|
|
3439
3450
|
vList.split(separator, startNumber);
|
|
3440
|
-
vList.writeBack();
|
|
3451
|
+
vList.writeBack(editor.isFeatureEnabled("ReuseAllAncestorListElements" /* ReuseAllAncestorListElements */));
|
|
3441
3452
|
}
|
|
3442
3453
|
}
|
|
3443
3454
|
}, 'setOrderedListNumbering');
|
|
@@ -3945,8 +3956,6 @@ Object.defineProperty(exports, "experimentCommitListChains", { enumerable: true,
|
|
|
3945
3956
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3946
3957
|
var formatUndoSnapshot_1 = __webpack_require__(/*! ../utils/formatUndoSnapshot */ "./packages/roosterjs-editor-api/lib/utils/formatUndoSnapshot.ts");
|
|
3947
3958
|
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
3948
|
-
var TEMP_BACKGROUND_COLOR = 'originalBackgroundColor';
|
|
3949
|
-
var CELL_SHADE = 'cellShade';
|
|
3950
3959
|
/**
|
|
3951
3960
|
* Set background color of cells.
|
|
3952
3961
|
* @param editor The editor instance
|
|
@@ -3959,9 +3968,7 @@ function applyCellShading(editor, color) {
|
|
|
3959
3968
|
regions.forEach(function (region) {
|
|
3960
3969
|
if ((0, roosterjs_editor_dom_1.safeInstanceOf)(region.rootNode, 'HTMLTableCellElement')) {
|
|
3961
3970
|
(0, roosterjs_editor_dom_1.setColor)(region.rootNode, color, true /* isBackgroundColor */, editor.isDarkMode(), true /** shouldAdaptFontColor */);
|
|
3962
|
-
region.rootNode
|
|
3963
|
-
region.rootNode.dataset[TEMP_BACKGROUND_COLOR] =
|
|
3964
|
-
region.rootNode.style.backgroundColor;
|
|
3971
|
+
(0, roosterjs_editor_dom_1.saveTableCellMetadata)(region.rootNode, { bgColorOverride: true });
|
|
3965
3972
|
}
|
|
3966
3973
|
});
|
|
3967
3974
|
}, 'applyCellShading');
|
|
@@ -4434,7 +4441,8 @@ function commitListChains(editor, chains) {
|
|
|
4434
4441
|
var range = editor.getSelectionRange();
|
|
4435
4442
|
var start = range && roosterjs_editor_dom_1.Position.getStart(range);
|
|
4436
4443
|
var end = range && roosterjs_editor_dom_1.Position.getEnd(range);
|
|
4437
|
-
|
|
4444
|
+
var shouldReuseAllAncestorListElements_1 = editor.isFeatureEnabled("ReuseAllAncestorListElements" /* ReuseAllAncestorListElements */);
|
|
4445
|
+
chains.forEach(function (chain) { return chain.commit(shouldReuseAllAncestorListElements_1); });
|
|
4438
4446
|
editor.select(start, end);
|
|
4439
4447
|
}
|
|
4440
4448
|
}
|
|
@@ -4533,6 +4541,61 @@ function formatUndoSnapshot(editor, callback, apiName) {
|
|
|
4533
4541
|
exports.default = formatUndoSnapshot;
|
|
4534
4542
|
|
|
4535
4543
|
|
|
4544
|
+
/***/ }),
|
|
4545
|
+
|
|
4546
|
+
/***/ "./packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts":
|
|
4547
|
+
/*!************************************************************************!*\
|
|
4548
|
+
!*** ./packages/roosterjs-editor-api/lib/utils/normalizeBlockquote.ts ***!
|
|
4549
|
+
\************************************************************************/
|
|
4550
|
+
/*! no static exports found */
|
|
4551
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
4552
|
+
|
|
4553
|
+
"use strict";
|
|
4554
|
+
|
|
4555
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4556
|
+
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
4557
|
+
/**
|
|
4558
|
+
* @internal
|
|
4559
|
+
* @param node start node to normalize
|
|
4560
|
+
* @param quotesHandled Optional parameter to prevent already modified quotes to be rechecked.
|
|
4561
|
+
* @returns
|
|
4562
|
+
*/
|
|
4563
|
+
function normalizeBlockquote(node, quotesHandled) {
|
|
4564
|
+
if ((0, roosterjs_editor_dom_1.safeInstanceOf)(node, 'HTMLElement')) {
|
|
4565
|
+
var alignment = node.style.textAlign;
|
|
4566
|
+
var quote = (0, roosterjs_editor_dom_1.findClosestElementAncestor)(node, undefined /* root */, 'blockquote');
|
|
4567
|
+
var isNodeRTL = isRTL(node);
|
|
4568
|
+
if (quotesHandled) {
|
|
4569
|
+
if (quotesHandled.indexOf(quote) > -1) {
|
|
4570
|
+
return;
|
|
4571
|
+
}
|
|
4572
|
+
quotesHandled.push(quote);
|
|
4573
|
+
}
|
|
4574
|
+
while (quote) {
|
|
4575
|
+
if (alignment == 'center') {
|
|
4576
|
+
if (isNodeRTL) {
|
|
4577
|
+
delete quote.style.marginInlineEnd;
|
|
4578
|
+
quote.style.marginInlineStart = 'auto';
|
|
4579
|
+
}
|
|
4580
|
+
else {
|
|
4581
|
+
delete quote.style.marginInlineStart;
|
|
4582
|
+
quote.style.marginInlineEnd = 'auto';
|
|
4583
|
+
}
|
|
4584
|
+
}
|
|
4585
|
+
else {
|
|
4586
|
+
delete quote.style.marginInlineStart;
|
|
4587
|
+
delete quote.style.marginInlineEnd;
|
|
4588
|
+
}
|
|
4589
|
+
quote = (0, roosterjs_editor_dom_1.findClosestElementAncestor)(quote.parentElement, undefined /* root */, 'blockquote');
|
|
4590
|
+
}
|
|
4591
|
+
}
|
|
4592
|
+
}
|
|
4593
|
+
exports.default = normalizeBlockquote;
|
|
4594
|
+
function isRTL(el) {
|
|
4595
|
+
return (0, roosterjs_editor_dom_1.getComputedStyle)(el, 'direction') == 'rtl' || el.getAttribute('dir') == 'rtl';
|
|
4596
|
+
}
|
|
4597
|
+
|
|
4598
|
+
|
|
4536
4599
|
/***/ }),
|
|
4537
4600
|
|
|
4538
4601
|
/***/ "./packages/roosterjs-editor-api/lib/utils/toggleListType.ts":
|
|
@@ -4580,7 +4643,7 @@ function toggleListType(editor, listType, startNumber, includeSiblingLists, orde
|
|
|
4580
4643
|
if (editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
|
|
4581
4644
|
vList.setListStyleType(orderedStyle, unorderedStyle);
|
|
4582
4645
|
}
|
|
4583
|
-
vList.writeBack();
|
|
4646
|
+
vList.writeBack(editor.isFeatureEnabled("ReuseAllAncestorListElements" /* ReuseAllAncestorListElements */));
|
|
4584
4647
|
}
|
|
4585
4648
|
}, undefined /* beforeRunCallback */, apiNameOverride || 'toggleListType');
|
|
4586
4649
|
}
|
|
@@ -4766,6 +4829,7 @@ var getStyleBasedFormatState_1 = __webpack_require__(/*! ./getStyleBasedFormatSt
|
|
|
4766
4829
|
var hasFocus_1 = __webpack_require__(/*! ./hasFocus */ "./packages/roosterjs-editor-core/lib/coreApi/hasFocus.ts");
|
|
4767
4830
|
var insertNode_1 = __webpack_require__(/*! ./insertNode */ "./packages/roosterjs-editor-core/lib/coreApi/insertNode.ts");
|
|
4768
4831
|
var restoreUndoSnapshot_1 = __webpack_require__(/*! ./restoreUndoSnapshot */ "./packages/roosterjs-editor-core/lib/coreApi/restoreUndoSnapshot.ts");
|
|
4832
|
+
var selectImage_1 = __webpack_require__(/*! ./selectImage */ "./packages/roosterjs-editor-core/lib/coreApi/selectImage.ts");
|
|
4769
4833
|
var selectRange_1 = __webpack_require__(/*! ./selectRange */ "./packages/roosterjs-editor-core/lib/coreApi/selectRange.ts");
|
|
4770
4834
|
var selectTable_1 = __webpack_require__(/*! ./selectTable */ "./packages/roosterjs-editor-core/lib/coreApi/selectTable.ts");
|
|
4771
4835
|
var setContent_1 = __webpack_require__(/*! ./setContent */ "./packages/roosterjs-editor-core/lib/coreApi/setContent.ts");
|
|
@@ -4795,6 +4859,7 @@ exports.coreApiMap = {
|
|
|
4795
4859
|
transformColor: transformColor_1.transformColor,
|
|
4796
4860
|
triggerEvent: triggerEvent_1.triggerEvent,
|
|
4797
4861
|
selectTable: selectTable_1.selectTable,
|
|
4862
|
+
selectImage: selectImage_1.selectImage,
|
|
4798
4863
|
};
|
|
4799
4864
|
|
|
4800
4865
|
|
|
@@ -4976,11 +5041,14 @@ function getCurrentFormat(core, node) {
|
|
|
4976
5041
|
};
|
|
4977
5042
|
}
|
|
4978
5043
|
function createBeforePasteEvent(core, clipboardData) {
|
|
5044
|
+
var options = (0, roosterjs_editor_dom_1.createDefaultHtmlSanitizerOptions)();
|
|
5045
|
+
// Remove "caret-color" style generated by Safari to make sure caret shows in right color after paste
|
|
5046
|
+
options.cssStyleCallbacks['caret-color'] = function () { return false; };
|
|
4979
5047
|
return {
|
|
4980
5048
|
eventType: 10 /* BeforePaste */,
|
|
4981
5049
|
clipboardData: clipboardData,
|
|
4982
5050
|
fragment: core.contentDiv.ownerDocument.createDocumentFragment(),
|
|
4983
|
-
sanitizingOption:
|
|
5051
|
+
sanitizingOption: options,
|
|
4984
5052
|
htmlBefore: '',
|
|
4985
5053
|
htmlAfter: '',
|
|
4986
5054
|
htmlAttributes: {},
|
|
@@ -5364,10 +5432,10 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
|
|
|
5364
5432
|
* @returns A Range object of the selection range
|
|
5365
5433
|
*/
|
|
5366
5434
|
var getSelectionRangeEx = function (core) {
|
|
5367
|
-
var _a, _b;
|
|
5435
|
+
var _a, _b, _c;
|
|
5368
5436
|
var result = null;
|
|
5369
5437
|
if (core.lifecycle.shadowEditFragment) {
|
|
5370
|
-
var
|
|
5438
|
+
var _d = core.lifecycle, shadowEditTableSelectionPath = _d.shadowEditTableSelectionPath, shadowEditSelectionPath = _d.shadowEditSelectionPath, shadowEditImageSelectionPath = _d.shadowEditImageSelectionPath;
|
|
5371
5439
|
if (((shadowEditTableSelectionPath === null || shadowEditTableSelectionPath === void 0 ? void 0 : shadowEditTableSelectionPath.length) || 0) > 0) {
|
|
5372
5440
|
var ranges = core.lifecycle.shadowEditTableSelectionPath.map(function (path) {
|
|
5373
5441
|
return (0, roosterjs_editor_dom_1.createRange)(core.contentDiv, path.start, path.end);
|
|
@@ -5380,6 +5448,18 @@ var getSelectionRangeEx = function (core) {
|
|
|
5380
5448
|
coordinates: undefined,
|
|
5381
5449
|
};
|
|
5382
5450
|
}
|
|
5451
|
+
else if (((shadowEditImageSelectionPath === null || shadowEditImageSelectionPath === void 0 ? void 0 : shadowEditImageSelectionPath.length) || 0) > 0) {
|
|
5452
|
+
var ranges = core.lifecycle.shadowEditImageSelectionPath.map(function (path) {
|
|
5453
|
+
return (0, roosterjs_editor_dom_1.createRange)(core.contentDiv, path.start, path.end);
|
|
5454
|
+
});
|
|
5455
|
+
return {
|
|
5456
|
+
type: 2 /* ImageSelection */,
|
|
5457
|
+
ranges: ranges,
|
|
5458
|
+
areAllCollapsed: checkAllCollapsed(ranges),
|
|
5459
|
+
image: (0, roosterjs_editor_dom_1.findClosestElementAncestor)(ranges[0].startContainer, core.contentDiv, 'img'),
|
|
5460
|
+
imageId: undefined,
|
|
5461
|
+
};
|
|
5462
|
+
}
|
|
5383
5463
|
else {
|
|
5384
5464
|
var shadowRange = shadowEditSelectionPath &&
|
|
5385
5465
|
(0, roosterjs_editor_dom_1.createRange)(core.contentDiv, shadowEditSelectionPath.start, shadowEditSelectionPath.end);
|
|
@@ -5391,6 +5471,9 @@ var getSelectionRangeEx = function (core) {
|
|
|
5391
5471
|
if (core.domEvent.tableSelectionRange) {
|
|
5392
5472
|
return core.domEvent.tableSelectionRange;
|
|
5393
5473
|
}
|
|
5474
|
+
if (core.domEvent.imageSelectionRange) {
|
|
5475
|
+
return core.domEvent.imageSelectionRange;
|
|
5476
|
+
}
|
|
5394
5477
|
var selection = (_a = core.contentDiv.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
5395
5478
|
if (!result && selection && selection.rangeCount > 0) {
|
|
5396
5479
|
var range = selection.getRangeAt(0);
|
|
@@ -5399,7 +5482,7 @@ var getSelectionRangeEx = function (core) {
|
|
|
5399
5482
|
}
|
|
5400
5483
|
}
|
|
5401
5484
|
}
|
|
5402
|
-
return ((_b = core.domEvent.tableSelectionRange) !== null && _b !== void 0 ? _b : createNormalSelectionEx(core.domEvent.selectionRange ? [core.domEvent.selectionRange] : []));
|
|
5485
|
+
return ((_c = (_b = core.domEvent.tableSelectionRange) !== null && _b !== void 0 ? _b : core.domEvent.imageSelectionRange) !== null && _c !== void 0 ? _c : createNormalSelectionEx(core.domEvent.selectionRange ? [core.domEvent.selectionRange] : []));
|
|
5403
5486
|
}
|
|
5404
5487
|
};
|
|
5405
5488
|
exports.getSelectionRangeEx = getSelectionRangeEx;
|
|
@@ -5709,6 +5792,71 @@ var restoreUndoSnapshot = function (core, step) {
|
|
|
5709
5792
|
exports.restoreUndoSnapshot = restoreUndoSnapshot;
|
|
5710
5793
|
|
|
5711
5794
|
|
|
5795
|
+
/***/ }),
|
|
5796
|
+
|
|
5797
|
+
/***/ "./packages/roosterjs-editor-core/lib/coreApi/selectImage.ts":
|
|
5798
|
+
/*!*******************************************************************!*\
|
|
5799
|
+
!*** ./packages/roosterjs-editor-core/lib/coreApi/selectImage.ts ***!
|
|
5800
|
+
\*******************************************************************/
|
|
5801
|
+
/*! no static exports found */
|
|
5802
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
5803
|
+
|
|
5804
|
+
"use strict";
|
|
5805
|
+
|
|
5806
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5807
|
+
exports.selectImage = void 0;
|
|
5808
|
+
var addSelectionStyle_1 = __webpack_require__(/*! ./utils/addSelectionStyle */ "./packages/roosterjs-editor-core/lib/coreApi/utils/addSelectionStyle.ts");
|
|
5809
|
+
var addUniqueId_1 = __webpack_require__(/*! ./utils/addUniqueId */ "./packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts");
|
|
5810
|
+
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
5811
|
+
var IMAGE_ID = 'imageSelected';
|
|
5812
|
+
var CONTENT_DIV_ID = 'contentDiv_';
|
|
5813
|
+
var STYLE_ID = 'imageStyle';
|
|
5814
|
+
/**
|
|
5815
|
+
* @internal
|
|
5816
|
+
* Select a image and save data of the selected range
|
|
5817
|
+
* @param image Image to select
|
|
5818
|
+
* @returns Selected image information
|
|
5819
|
+
*/
|
|
5820
|
+
var selectImage = function (core, image) {
|
|
5821
|
+
unselect(core);
|
|
5822
|
+
if (image) {
|
|
5823
|
+
var range = (0, roosterjs_editor_dom_1.createRange)(image);
|
|
5824
|
+
(0, addUniqueId_1.default)(image, IMAGE_ID);
|
|
5825
|
+
(0, addUniqueId_1.default)(core.contentDiv, CONTENT_DIV_ID);
|
|
5826
|
+
select(core, image);
|
|
5827
|
+
return {
|
|
5828
|
+
type: 2 /* ImageSelection */,
|
|
5829
|
+
ranges: [range],
|
|
5830
|
+
image: image,
|
|
5831
|
+
areAllCollapsed: range.collapsed,
|
|
5832
|
+
};
|
|
5833
|
+
}
|
|
5834
|
+
return null;
|
|
5835
|
+
};
|
|
5836
|
+
exports.selectImage = selectImage;
|
|
5837
|
+
var select = function (core, image) {
|
|
5838
|
+
var borderCSS = buildBorderCSS(core, image.id);
|
|
5839
|
+
(0, addSelectionStyle_1.default)(core, borderCSS, STYLE_ID);
|
|
5840
|
+
};
|
|
5841
|
+
var buildBorderCSS = function (core, imageId) {
|
|
5842
|
+
var borderColor = core.imageSelectionBorderColor || '#DB626C';
|
|
5843
|
+
return ('#' +
|
|
5844
|
+
core.contentDiv.id +
|
|
5845
|
+
' #' +
|
|
5846
|
+
imageId +
|
|
5847
|
+
' { margin: -2px; border: 2px solid' +
|
|
5848
|
+
borderColor +
|
|
5849
|
+
' !important; }');
|
|
5850
|
+
};
|
|
5851
|
+
var unselect = function (core) {
|
|
5852
|
+
var doc = core.contentDiv.ownerDocument;
|
|
5853
|
+
var styleTag = doc.getElementById(STYLE_ID + core.contentDiv.id);
|
|
5854
|
+
if (styleTag) {
|
|
5855
|
+
doc.head.removeChild(styleTag);
|
|
5856
|
+
}
|
|
5857
|
+
};
|
|
5858
|
+
|
|
5859
|
+
|
|
5712
5860
|
/***/ }),
|
|
5713
5861
|
|
|
5714
5862
|
/***/ "./packages/roosterjs-editor-core/lib/coreApi/selectRange.ts":
|
|
@@ -5786,6 +5934,8 @@ function restorePendingFormatState(core) {
|
|
|
5786
5934
|
|
|
5787
5935
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5788
5936
|
exports.selectTable = void 0;
|
|
5937
|
+
var addSelectionStyle_1 = __webpack_require__(/*! ./utils/addSelectionStyle */ "./packages/roosterjs-editor-core/lib/coreApi/utils/addSelectionStyle.ts");
|
|
5938
|
+
var addUniqueId_1 = __webpack_require__(/*! ./utils/addUniqueId */ "./packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts");
|
|
5789
5939
|
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
5790
5940
|
var TABLE_ID = 'tableSelected';
|
|
5791
5941
|
var CONTENT_DIV_ID = 'contentDiv_';
|
|
@@ -5803,8 +5953,8 @@ var selectTable = function (core, table, coordinates) {
|
|
|
5803
5953
|
var _a;
|
|
5804
5954
|
unselect(core);
|
|
5805
5955
|
if (areValidCoordinates(coordinates) && table) {
|
|
5806
|
-
|
|
5807
|
-
|
|
5956
|
+
(0, addUniqueId_1.default)(table, TABLE_ID);
|
|
5957
|
+
(0, addUniqueId_1.default)(core.contentDiv, CONTENT_DIV_ID);
|
|
5808
5958
|
var ranges = select(core, table, coordinates);
|
|
5809
5959
|
if (!isMergedCell(table, coordinates)) {
|
|
5810
5960
|
var cellToSelect = (_a = table.rows
|
|
@@ -5890,17 +6040,9 @@ function buildCss(table, coordinates, contentDivSelector) {
|
|
|
5890
6040
|
return { css: css, ranges: ranges };
|
|
5891
6041
|
}
|
|
5892
6042
|
function select(core, table, coordinates) {
|
|
5893
|
-
var _a;
|
|
5894
|
-
var doc = core.contentDiv.ownerDocument;
|
|
5895
6043
|
var contentDivSelector = '#' + core.contentDiv.id;
|
|
5896
|
-
var
|
|
5897
|
-
|
|
5898
|
-
if (!styleElement) {
|
|
5899
|
-
styleElement = doc.createElement('style');
|
|
5900
|
-
doc.head.appendChild(styleElement);
|
|
5901
|
-
styleElement.id = STYLE_ID + core.contentDiv.id;
|
|
5902
|
-
}
|
|
5903
|
-
(_a = styleElement.sheet) === null || _a === void 0 ? void 0 : _a.insertRule(css);
|
|
6044
|
+
var _a = buildCss(table, coordinates, contentDivSelector), css = _a.css, ranges = _a.ranges;
|
|
6045
|
+
(0, addSelectionStyle_1.default)(core, css, STYLE_ID);
|
|
5904
6046
|
return ranges;
|
|
5905
6047
|
}
|
|
5906
6048
|
function unselect(core) {
|
|
@@ -5913,27 +6055,6 @@ function unselect(core) {
|
|
|
5913
6055
|
}
|
|
5914
6056
|
}
|
|
5915
6057
|
}
|
|
5916
|
-
function ensureUniqueId(el, idPrefix) {
|
|
5917
|
-
var doc = el.ownerDocument;
|
|
5918
|
-
if (!el.id) {
|
|
5919
|
-
var cont_1 = 0;
|
|
5920
|
-
var getElement = function () { return doc.getElementById(idPrefix + cont_1); };
|
|
5921
|
-
//Ensure that there are no elements with the same ID
|
|
5922
|
-
var element = getElement();
|
|
5923
|
-
while (element) {
|
|
5924
|
-
cont_1++;
|
|
5925
|
-
element = getElement();
|
|
5926
|
-
}
|
|
5927
|
-
el.id = idPrefix + cont_1;
|
|
5928
|
-
}
|
|
5929
|
-
else {
|
|
5930
|
-
var elements = doc.querySelectorAll("#" + el.id);
|
|
5931
|
-
if (elements.length > 1) {
|
|
5932
|
-
el.removeAttribute('id');
|
|
5933
|
-
ensureUniqueId(el, idPrefix);
|
|
5934
|
-
}
|
|
5935
|
-
}
|
|
5936
|
-
}
|
|
5937
6058
|
function generateCssFromCell(contentDivSelector, tableId, middleElSelector, rowIndex, cellTag, index) {
|
|
5938
6059
|
return (contentDivSelector +
|
|
5939
6060
|
' #' +
|
|
@@ -6069,20 +6190,23 @@ var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./
|
|
|
6069
6190
|
*/
|
|
6070
6191
|
var switchShadowEdit = function (core, isOn) {
|
|
6071
6192
|
var lifecycle = core.lifecycle, contentDiv = core.contentDiv;
|
|
6072
|
-
var shadowEditFragment = lifecycle.shadowEditFragment, shadowEditSelectionPath = lifecycle.shadowEditSelectionPath, shadowEditTableSelectionPath = lifecycle.shadowEditTableSelectionPath;
|
|
6193
|
+
var shadowEditFragment = lifecycle.shadowEditFragment, shadowEditSelectionPath = lifecycle.shadowEditSelectionPath, shadowEditTableSelectionPath = lifecycle.shadowEditTableSelectionPath, shadowEditImageSelectionPath = lifecycle.shadowEditImageSelectionPath;
|
|
6073
6194
|
var wasInShadowEdit = !!shadowEditFragment;
|
|
6195
|
+
var getShadowEditSelectionPath = function (selectionType, shadowEditSelection) {
|
|
6196
|
+
return (((shadowEditSelection === null || shadowEditSelection === void 0 ? void 0 : shadowEditSelection.type) == selectionType &&
|
|
6197
|
+
shadowEditSelection.ranges
|
|
6198
|
+
.map(function (range) { return (0, roosterjs_editor_dom_1.getSelectionPath)(contentDiv, range); })
|
|
6199
|
+
.map(function (w) { return w; })) ||
|
|
6200
|
+
null);
|
|
6201
|
+
};
|
|
6074
6202
|
if (isOn) {
|
|
6075
6203
|
if (!wasInShadowEdit) {
|
|
6076
6204
|
var selection = core.api.getSelectionRangeEx(core);
|
|
6077
6205
|
var range = core.api.getSelectionRange(core, true /*tryGetFromCache*/);
|
|
6078
6206
|
shadowEditSelectionPath = range && (0, roosterjs_editor_dom_1.getSelectionPath)(contentDiv, range);
|
|
6079
|
-
shadowEditTableSelectionPath =
|
|
6080
|
-
((selection === null || selection === void 0 ? void 0 : selection.type) == 1 /* TableSelection */ &&
|
|
6081
|
-
selection.ranges
|
|
6082
|
-
.map(function (range) { return (0, roosterjs_editor_dom_1.getSelectionPath)(contentDiv, range); })
|
|
6083
|
-
.map(function (w) { return w; })) ||
|
|
6084
|
-
null;
|
|
6207
|
+
shadowEditTableSelectionPath = getShadowEditSelectionPath(1 /* TableSelection */, selection);
|
|
6085
6208
|
shadowEditFragment = core.contentDiv.ownerDocument.createDocumentFragment();
|
|
6209
|
+
shadowEditImageSelectionPath = getShadowEditSelectionPath(2 /* ImageSelection */, selection);
|
|
6086
6210
|
(0, roosterjs_editor_dom_1.moveChildNodes)(shadowEditFragment, contentDiv);
|
|
6087
6211
|
shadowEditFragment.normalize();
|
|
6088
6212
|
core.api.triggerEvent(core, {
|
|
@@ -6093,6 +6217,7 @@ var switchShadowEdit = function (core, isOn) {
|
|
|
6093
6217
|
lifecycle.shadowEditFragment = shadowEditFragment;
|
|
6094
6218
|
lifecycle.shadowEditSelectionPath = shadowEditSelectionPath;
|
|
6095
6219
|
lifecycle.shadowEditTableSelectionPath = shadowEditTableSelectionPath;
|
|
6220
|
+
lifecycle.shadowEditImageSelectionPath = shadowEditImageSelectionPath;
|
|
6096
6221
|
}
|
|
6097
6222
|
(0, roosterjs_editor_dom_1.moveChildNodes)(contentDiv);
|
|
6098
6223
|
if (lifecycle.shadowEditFragment) {
|
|
@@ -6114,6 +6239,13 @@ var switchShadowEdit = function (core, isOn) {
|
|
|
6114
6239
|
if (shadowEditSelectionPath) {
|
|
6115
6240
|
core.api.selectRange(core, (0, roosterjs_editor_dom_1.createRange)(contentDiv, shadowEditSelectionPath.start, shadowEditSelectionPath.end));
|
|
6116
6241
|
}
|
|
6242
|
+
if (core.domEvent.imageSelectionRange) {
|
|
6243
|
+
var image = core.domEvent.imageSelectionRange.image;
|
|
6244
|
+
var imageElement = core.contentDiv.querySelector('#' + image.id);
|
|
6245
|
+
if (imageElement) {
|
|
6246
|
+
core.domEvent.imageSelectionRange = core.api.selectImage(core, image);
|
|
6247
|
+
}
|
|
6248
|
+
}
|
|
6117
6249
|
if (core.domEvent.tableSelectionRange) {
|
|
6118
6250
|
var _a = core.domEvent.tableSelectionRange, table = _a.table, coordinates = _a.coordinates;
|
|
6119
6251
|
var tableId = table.id;
|
|
@@ -6314,6 +6446,83 @@ function handledExclusively(event, plugin) {
|
|
|
6314
6446
|
}
|
|
6315
6447
|
|
|
6316
6448
|
|
|
6449
|
+
/***/ }),
|
|
6450
|
+
|
|
6451
|
+
/***/ "./packages/roosterjs-editor-core/lib/coreApi/utils/addSelectionStyle.ts":
|
|
6452
|
+
/*!*******************************************************************************!*\
|
|
6453
|
+
!*** ./packages/roosterjs-editor-core/lib/coreApi/utils/addSelectionStyle.ts ***!
|
|
6454
|
+
\*******************************************************************************/
|
|
6455
|
+
/*! no static exports found */
|
|
6456
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
6457
|
+
|
|
6458
|
+
"use strict";
|
|
6459
|
+
|
|
6460
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6461
|
+
/**
|
|
6462
|
+
* Add style to selected elements
|
|
6463
|
+
* @param core The Editor core object
|
|
6464
|
+
* @param cssRule The css rule that must added to the selection
|
|
6465
|
+
* @param styleId the ID of the style tag
|
|
6466
|
+
*/
|
|
6467
|
+
function addSelectionStyle(core, cssRule, styleId) {
|
|
6468
|
+
var _a;
|
|
6469
|
+
var styleTagId = styleId + core.contentDiv.id;
|
|
6470
|
+
var doc = core.contentDiv.ownerDocument;
|
|
6471
|
+
var styleTag = doc.getElementById(styleTagId);
|
|
6472
|
+
if (!styleTag) {
|
|
6473
|
+
styleTag = doc.createElement('style');
|
|
6474
|
+
styleTag.id = styleTagId;
|
|
6475
|
+
doc.head.appendChild(styleTag);
|
|
6476
|
+
}
|
|
6477
|
+
(_a = styleTag.sheet) === null || _a === void 0 ? void 0 : _a.insertRule(cssRule);
|
|
6478
|
+
}
|
|
6479
|
+
exports.default = addSelectionStyle;
|
|
6480
|
+
|
|
6481
|
+
|
|
6482
|
+
/***/ }),
|
|
6483
|
+
|
|
6484
|
+
/***/ "./packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts":
|
|
6485
|
+
/*!*************************************************************************!*\
|
|
6486
|
+
!*** ./packages/roosterjs-editor-core/lib/coreApi/utils/addUniqueId.ts ***!
|
|
6487
|
+
\*************************************************************************/
|
|
6488
|
+
/*! no static exports found */
|
|
6489
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
6490
|
+
|
|
6491
|
+
"use strict";
|
|
6492
|
+
|
|
6493
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6494
|
+
/**
|
|
6495
|
+
* Add an unique id to element and ensure that is unique
|
|
6496
|
+
* @param el The HTMLElement that will receive the id
|
|
6497
|
+
* @param idPrefix The prefix that will antecede the id (Ex: tableSelected01)
|
|
6498
|
+
*/
|
|
6499
|
+
function addUniqueId(el, idPrefix) {
|
|
6500
|
+
var doc = el.ownerDocument;
|
|
6501
|
+
if (!el.id) {
|
|
6502
|
+
applyId(el, idPrefix, doc);
|
|
6503
|
+
}
|
|
6504
|
+
else {
|
|
6505
|
+
var elements = doc.querySelectorAll("#" + el.id);
|
|
6506
|
+
if (elements.length > 1) {
|
|
6507
|
+
el.removeAttribute('id');
|
|
6508
|
+
applyId(el, idPrefix, doc);
|
|
6509
|
+
}
|
|
6510
|
+
}
|
|
6511
|
+
}
|
|
6512
|
+
exports.default = addUniqueId;
|
|
6513
|
+
function applyId(el, idPrefix, doc) {
|
|
6514
|
+
var cont = 0;
|
|
6515
|
+
var getElement = function () { return doc.getElementById(idPrefix + cont); };
|
|
6516
|
+
//Ensure that there are no elements with the same ID
|
|
6517
|
+
var element = getElement();
|
|
6518
|
+
while (element) {
|
|
6519
|
+
cont++;
|
|
6520
|
+
element = getElement();
|
|
6521
|
+
}
|
|
6522
|
+
el.id = idPrefix + cont;
|
|
6523
|
+
}
|
|
6524
|
+
|
|
6525
|
+
|
|
6317
6526
|
/***/ }),
|
|
6318
6527
|
|
|
6319
6528
|
/***/ "./packages/roosterjs-editor-core/lib/corePlugins/CopyPastePlugin.ts":
|
|
@@ -6567,9 +6776,13 @@ var DOMEventPlugin = /** @class */ (function () {
|
|
|
6567
6776
|
};
|
|
6568
6777
|
this.onFocus = function () {
|
|
6569
6778
|
var _a = _this.state.tableSelectionRange || {}, table = _a.table, coordinates = _a.coordinates;
|
|
6779
|
+
var image = (_this.state.imageSelectionRange || {}).image;
|
|
6570
6780
|
if (table && coordinates) {
|
|
6571
6781
|
_this.editor.select(table, coordinates);
|
|
6572
6782
|
}
|
|
6783
|
+
else if (image) {
|
|
6784
|
+
_this.editor.select(image);
|
|
6785
|
+
}
|
|
6573
6786
|
else {
|
|
6574
6787
|
_this.editor.select(_this.state.selectionRange);
|
|
6575
6788
|
}
|
|
@@ -6633,6 +6846,7 @@ var DOMEventPlugin = /** @class */ (function () {
|
|
|
6633
6846
|
stopPrintableKeyboardEventPropagation: !options.allowKeyboardEventPropagation,
|
|
6634
6847
|
contextMenuProviders: ((_a = options.plugins) === null || _a === void 0 ? void 0 : _a.filter(isContextMenuProvider)) || [],
|
|
6635
6848
|
tableSelectionRange: null,
|
|
6849
|
+
imageSelectionRange: null,
|
|
6636
6850
|
};
|
|
6637
6851
|
}
|
|
6638
6852
|
/**
|
|
@@ -7269,6 +7483,7 @@ var LifecyclePlugin = /** @class */ (function () {
|
|
|
7269
7483
|
shadowEditFragment: null,
|
|
7270
7484
|
shadowEditSelectionPath: null,
|
|
7271
7485
|
shadowEditTableSelectionPath: null,
|
|
7486
|
+
shadowEditImageSelectionPath: null,
|
|
7272
7487
|
};
|
|
7273
7488
|
}
|
|
7274
7489
|
/**
|
|
@@ -7526,7 +7741,6 @@ var NormalizeTablePlugin = /** @class */ (function () {
|
|
|
7526
7741
|
case 11 /* EditorReady */:
|
|
7527
7742
|
case 7 /* ContentChanged */:
|
|
7528
7743
|
this.normalizeTables(this.editor.queryElements('table'));
|
|
7529
|
-
this.normalizeBlockquotes(this.editor.queryElements('blockquote'));
|
|
7530
7744
|
break;
|
|
7531
7745
|
case 10 /* BeforePaste */:
|
|
7532
7746
|
this.normalizeTables((0, roosterjs_editor_dom_1.toArray)(event.fragment.querySelectorAll('table')));
|
|
@@ -7567,31 +7781,9 @@ var NormalizeTablePlugin = /** @class */ (function () {
|
|
|
7567
7781
|
}
|
|
7568
7782
|
}
|
|
7569
7783
|
};
|
|
7570
|
-
NormalizeTablePlugin.prototype.normalizeBlockquotes = function (elements) {
|
|
7571
|
-
elements.forEach(function (quote) {
|
|
7572
|
-
var centeredElement = quote.querySelector('[style^="text-align: center"]');
|
|
7573
|
-
if (centeredElement) {
|
|
7574
|
-
if (isRTL(centeredElement)) {
|
|
7575
|
-
delete quote.style.marginInlineEnd;
|
|
7576
|
-
quote.style.marginInlineStart = 'auto';
|
|
7577
|
-
}
|
|
7578
|
-
else {
|
|
7579
|
-
delete quote.style.marginInlineStart;
|
|
7580
|
-
quote.style.marginInlineEnd = 'auto';
|
|
7581
|
-
}
|
|
7582
|
-
}
|
|
7583
|
-
else {
|
|
7584
|
-
delete quote.style.marginInlineStart;
|
|
7585
|
-
delete quote.style.marginInlineEnd;
|
|
7586
|
-
}
|
|
7587
|
-
});
|
|
7588
|
-
};
|
|
7589
7784
|
return NormalizeTablePlugin;
|
|
7590
7785
|
}());
|
|
7591
7786
|
exports.default = NormalizeTablePlugin;
|
|
7592
|
-
function isRTL(el) {
|
|
7593
|
-
return (0, roosterjs_editor_dom_1.getComputedStyle)(el, 'direction') == 'rtl' || el.getAttribute('dir') == 'rtl';
|
|
7594
|
-
}
|
|
7595
7787
|
function normalizeTables(tables) {
|
|
7596
7788
|
var isDOMChanged = false;
|
|
7597
7789
|
tables.forEach(function (table) {
|
|
@@ -8288,7 +8480,13 @@ var Editor = /** @class */ (function () {
|
|
|
8288
8480
|
}
|
|
8289
8481
|
});
|
|
8290
8482
|
var zoomScale = ((_a = options.zoomScale) !== null && _a !== void 0 ? _a : -1) > 0 ? options.zoomScale : 1;
|
|
8291
|
-
this.core = __assign(__assign({ contentDiv: contentDiv, api: __assign(__assign({}, coreApiMap_1.coreApiMap), (options.coreApiOverride || {})), originalApi: coreApiMap_1.coreApiMap, plugins: plugins.filter(function (x) { return !!x; }) }, (0, createCorePlugins_1.getPluginState)(corePlugins)), { trustedHTMLHandler: options.trustedHTMLHandler || (function (html) { return html; }), zoomScale: zoomScale, sizeTransformer: options.sizeTransformer || (function (size) { return size / zoomScale; })
|
|
8483
|
+
this.core = __assign(__assign({ contentDiv: contentDiv, api: __assign(__assign({}, coreApiMap_1.coreApiMap), (options.coreApiOverride || {})), originalApi: coreApiMap_1.coreApiMap, plugins: plugins.filter(function (x) { return !!x; }) }, (0, createCorePlugins_1.getPluginState)(corePlugins)), { trustedHTMLHandler: options.trustedHTMLHandler || (function (html) { return html; }), zoomScale: zoomScale, sizeTransformer: options.sizeTransformer || (function (size) { return size / zoomScale; }), getVisibleViewport: options.getVisibleViewport ||
|
|
8484
|
+
(function () {
|
|
8485
|
+
var scrollContainer = _this.getScrollContainer();
|
|
8486
|
+
return (0, roosterjs_editor_dom_1.getIntersectedRect)(scrollContainer == contentDiv
|
|
8487
|
+
? [scrollContainer]
|
|
8488
|
+
: [scrollContainer, contentDiv]);
|
|
8489
|
+
}), imageSelectionBorderColor: options.imageSelectionBorderColor });
|
|
8292
8490
|
// 3. Initialize plugins
|
|
8293
8491
|
this.core.plugins.forEach(function (plugin) { return plugin.initialize(_this); });
|
|
8294
8492
|
// 4. Ensure user will type in a container node, not the editor content DIV
|
|
@@ -8556,6 +8754,17 @@ var Editor = /** @class */ (function () {
|
|
|
8556
8754
|
core.api.selectTable(core, null);
|
|
8557
8755
|
core.domEvent.tableSelectionRange = null;
|
|
8558
8756
|
}
|
|
8757
|
+
if (this.isFeatureEnabled("ImageSelection" /* ImageSelection */) &&
|
|
8758
|
+
(0, roosterjs_editor_dom_1.safeInstanceOf)(arg1, 'HTMLImageElement') &&
|
|
8759
|
+
!arg2) {
|
|
8760
|
+
var selection = core.api.selectImage(core, arg1);
|
|
8761
|
+
core.domEvent.imageSelectionRange = selection;
|
|
8762
|
+
return !!selection;
|
|
8763
|
+
}
|
|
8764
|
+
else {
|
|
8765
|
+
core.api.selectImage(core, null);
|
|
8766
|
+
core.domEvent.imageSelectionRange = null;
|
|
8767
|
+
}
|
|
8559
8768
|
var range = !arg1
|
|
8560
8769
|
? null
|
|
8561
8770
|
: (0, roosterjs_editor_dom_1.safeInstanceOf)(arg1, 'Range')
|
|
@@ -8833,6 +9042,8 @@ var Editor = /** @class */ (function () {
|
|
|
8833
9042
|
return this.getCore().contentDiv.getAttribute(name);
|
|
8834
9043
|
};
|
|
8835
9044
|
/**
|
|
9045
|
+
* @deprecated Use getVisibleViewport() instead.
|
|
9046
|
+
*
|
|
8836
9047
|
* Get current relative distance from top-left corner of the given element to top-left corner of editor content DIV.
|
|
8837
9048
|
* @param element The element to calculate from. If the given element is not in editor, return value will be null
|
|
8838
9049
|
* @param addScroll When pass true, The return value will also add scrollLeft and scrollTop if any. So the value
|
|
@@ -9005,6 +9216,12 @@ var Editor = /** @class */ (function () {
|
|
|
9005
9216
|
}
|
|
9006
9217
|
}
|
|
9007
9218
|
};
|
|
9219
|
+
/**
|
|
9220
|
+
* Retrieves the rect of the visible viewport of the editor.
|
|
9221
|
+
*/
|
|
9222
|
+
Editor.prototype.getVisibleViewport = function () {
|
|
9223
|
+
return this.getCore().getVisibleViewport();
|
|
9224
|
+
};
|
|
9008
9225
|
/**
|
|
9009
9226
|
* @returns the current EditorCore object
|
|
9010
9227
|
* @throws a standard Error if there's no core object
|
|
@@ -11781,9 +11998,9 @@ exports.default = getPredefinedCssForElement;
|
|
|
11781
11998
|
"use strict";
|
|
11782
11999
|
|
|
11783
12000
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11784
|
-
exports.
|
|
11785
|
-
exports.
|
|
11786
|
-
exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = void 0;
|
|
12001
|
+
exports.getIntersectedRect = 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;
|
|
12002
|
+
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.saveTableCellMetadata = exports.getTableFormatInfo = exports.setListItemStyle = exports.VListChain = exports.createVListFromRegion = exports.VListItem = exports.VList = exports.isWholeTableSelected = exports.VTable = void 0;
|
|
12003
|
+
exports.toArray = exports.getObjectKeys = exports.arrayPush = exports.removeMetadata = exports.setMetadata = exports.getMetadata = exports.createObjectDefinition = exports.createArrayDefinition = exports.createStringDefinition = exports.createBooleanDefinition = exports.createNumberDefinition = exports.validate = void 0;
|
|
11787
12004
|
var getBlockElementAtNode_1 = __webpack_require__(/*! ./blockElements/getBlockElementAtNode */ "./packages/roosterjs-editor-dom/lib/blockElements/getBlockElementAtNode.ts");
|
|
11788
12005
|
Object.defineProperty(exports, "getBlockElementAtNode", { enumerable: true, get: function () { return getBlockElementAtNode_1.default; } });
|
|
11789
12006
|
var getFirstLastBlockElement_1 = __webpack_require__(/*! ./blockElements/getFirstLastBlockElement */ "./packages/roosterjs-editor-dom/lib/blockElements/getFirstLastBlockElement.ts");
|
|
@@ -11875,6 +12092,8 @@ Object.defineProperty(exports, "createElement", { enumerable: true, get: functio
|
|
|
11875
12092
|
Object.defineProperty(exports, "KnownCreateElementData", { enumerable: true, get: function () { return createElement_1.KnownCreateElementData; } });
|
|
11876
12093
|
var moveChildNodes_1 = __webpack_require__(/*! ./utils/moveChildNodes */ "./packages/roosterjs-editor-dom/lib/utils/moveChildNodes.ts");
|
|
11877
12094
|
Object.defineProperty(exports, "moveChildNodes", { enumerable: true, get: function () { return moveChildNodes_1.default; } });
|
|
12095
|
+
var getIntersectedRect_1 = __webpack_require__(/*! ./utils/getIntersectedRect */ "./packages/roosterjs-editor-dom/lib/utils/getIntersectedRect.ts");
|
|
12096
|
+
Object.defineProperty(exports, "getIntersectedRect", { enumerable: true, get: function () { return getIntersectedRect_1.default; } });
|
|
11878
12097
|
var VTable_1 = __webpack_require__(/*! ./table/VTable */ "./packages/roosterjs-editor-dom/lib/table/VTable.ts");
|
|
11879
12098
|
Object.defineProperty(exports, "VTable", { enumerable: true, get: function () { return VTable_1.default; } });
|
|
11880
12099
|
var isWholeTableSelected_1 = __webpack_require__(/*! ./table/isWholeTableSelected */ "./packages/roosterjs-editor-dom/lib/table/isWholeTableSelected.ts");
|
|
@@ -11891,6 +12110,8 @@ var setListItemStyle_1 = __webpack_require__(/*! ./list/setListItemStyle */ "./p
|
|
|
11891
12110
|
Object.defineProperty(exports, "setListItemStyle", { enumerable: true, get: function () { return setListItemStyle_1.default; } });
|
|
11892
12111
|
var tableFormatInfo_1 = __webpack_require__(/*! ./table/tableFormatInfo */ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts");
|
|
11893
12112
|
Object.defineProperty(exports, "getTableFormatInfo", { enumerable: true, get: function () { return tableFormatInfo_1.getTableFormatInfo; } });
|
|
12113
|
+
var tableCellInfo_1 = __webpack_require__(/*! ./table/tableCellInfo */ "./packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts");
|
|
12114
|
+
Object.defineProperty(exports, "saveTableCellMetadata", { enumerable: true, get: function () { return tableCellInfo_1.saveTableCellMetadata; } });
|
|
11894
12115
|
var getRegionsFromRange_1 = __webpack_require__(/*! ./region/getRegionsFromRange */ "./packages/roosterjs-editor-dom/lib/region/getRegionsFromRange.ts");
|
|
11895
12116
|
Object.defineProperty(exports, "getRegionsFromRange", { enumerable: true, get: function () { return getRegionsFromRange_1.default; } });
|
|
11896
12117
|
var getSelectedBlockElementsInRegion_1 = __webpack_require__(/*! ./region/getSelectedBlockElementsInRegion */ "./packages/roosterjs-editor-dom/lib/region/getSelectedBlockElementsInRegion.ts");
|
|
@@ -12861,8 +13082,10 @@ var VList = /** @class */ (function () {
|
|
|
12861
13082
|
/**
|
|
12862
13083
|
* Write the result back into DOM tree
|
|
12863
13084
|
* After that, this VList becomes unavailable because we set this.rootList to null
|
|
13085
|
+
*
|
|
13086
|
+
* @param shouldReuseAllAncestorListElements Optional - defaults to false.
|
|
12864
13087
|
*/
|
|
12865
|
-
VList.prototype.writeBack = function () {
|
|
13088
|
+
VList.prototype.writeBack = function (shouldReuseAllAncestorListElements) {
|
|
12866
13089
|
var _this = this;
|
|
12867
13090
|
if (!this.rootList) {
|
|
12868
13091
|
throw new Error('rootList must not be null');
|
|
@@ -12880,7 +13103,7 @@ var VList = /** @class */ (function () {
|
|
|
12880
13103
|
listStack.splice(1, listStack.length - 1);
|
|
12881
13104
|
start = newListStart;
|
|
12882
13105
|
}
|
|
12883
|
-
item.writeBack(listStack, _this.rootList);
|
|
13106
|
+
item.writeBack(listStack, _this.rootList, shouldReuseAllAncestorListElements);
|
|
12884
13107
|
var topList = listStack[1];
|
|
12885
13108
|
if ((0, safeInstanceOf_1.default)(topList, 'HTMLOListElement')) {
|
|
12886
13109
|
if (lastList != topList) {
|
|
@@ -13260,7 +13483,7 @@ var VListChain = /** @class */ (function () {
|
|
|
13260
13483
|
* After change the lists, commit the change to all lists in this chain to update the list number,
|
|
13261
13484
|
* and clear the temporary dataset values added to list node
|
|
13262
13485
|
*/
|
|
13263
|
-
VListChain.prototype.commit = function () {
|
|
13486
|
+
VListChain.prototype.commit = function (shouldReuseAllAncestorListElements) {
|
|
13264
13487
|
var lists = this.getLists();
|
|
13265
13488
|
var lastNumber = 0;
|
|
13266
13489
|
for (var i = 0; i < lists.length; i++) {
|
|
@@ -13270,7 +13493,7 @@ var VListChain = /** @class */ (function () {
|
|
|
13270
13493
|
lastNumber = vlist.getLastItemNumber() || 0;
|
|
13271
13494
|
delete list.dataset[CHAIN_DATASET_NAME];
|
|
13272
13495
|
delete list.dataset[AFTER_CURSOR_DATASET_NAME];
|
|
13273
|
-
vlist.writeBack();
|
|
13496
|
+
vlist.writeBack(shouldReuseAllAncestorListElements);
|
|
13274
13497
|
}
|
|
13275
13498
|
};
|
|
13276
13499
|
/**
|
|
@@ -13356,7 +13579,7 @@ var NEGATIVE_MARGIN = '-.25in';
|
|
|
13356
13579
|
*/
|
|
13357
13580
|
exports.ListStyleDefinitionMetadata = (0, definitionCreators_1.createObjectDefinition)({
|
|
13358
13581
|
orderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 20 /* Max */),
|
|
13359
|
-
unorderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */,
|
|
13582
|
+
unorderedStyleType: (0, definitionCreators_1.createNumberDefinition)(true /** isOptional */, undefined /** value **/, 1 /* Min */, 9 /* Max */),
|
|
13360
13583
|
}, true /** isOptional */, true /** allowNull */);
|
|
13361
13584
|
/**
|
|
13362
13585
|
* !!! Never directly create instance of this class. It should be created within VList class !!!
|
|
@@ -13544,19 +13767,41 @@ var VListItem = /** @class */ (function () {
|
|
|
13544
13767
|
* Write the change result back into DOM
|
|
13545
13768
|
* @param listStack current stack of list elements
|
|
13546
13769
|
* @param originalRoot Original list root element. It will be reused when write back if possible
|
|
13770
|
+
* @param shouldReuseAllAncestorListElements Optional - defaults to false. If true, only make
|
|
13771
|
+
* sure the direct parent of this list matches the list types when writing back.
|
|
13547
13772
|
*/
|
|
13548
|
-
VListItem.prototype.writeBack = function (listStack, originalRoot) {
|
|
13773
|
+
VListItem.prototype.writeBack = function (listStack, originalRoot, shouldReuseAllAncestorListElements) {
|
|
13549
13774
|
var _a;
|
|
13775
|
+
if (shouldReuseAllAncestorListElements === void 0) { shouldReuseAllAncestorListElements = false; }
|
|
13550
13776
|
var nextLevel = 1;
|
|
13551
|
-
|
|
13552
|
-
|
|
13553
|
-
|
|
13554
|
-
|
|
13555
|
-
|
|
13556
|
-
|
|
13557
|
-
if
|
|
13558
|
-
|
|
13559
|
-
|
|
13777
|
+
if (shouldReuseAllAncestorListElements) {
|
|
13778
|
+
// Remove any un-needed lists from the stack.
|
|
13779
|
+
if (listStack.length > this.listTypes.length) {
|
|
13780
|
+
listStack.splice(this.listTypes.length);
|
|
13781
|
+
}
|
|
13782
|
+
// 1. If the listStack is the same length as the listTypes for this item, check
|
|
13783
|
+
// if the last item needs to change, and remove it if needed. We can always re-use
|
|
13784
|
+
// the other lists even if the type doesn't match - since the display is the same
|
|
13785
|
+
// as long as the list immediately surrounding the item is correct.
|
|
13786
|
+
var listStackEndIndex = listStack.length - 1;
|
|
13787
|
+
if (listStackEndIndex === this.listTypes.length - 1 && // they are the same length
|
|
13788
|
+
(0, getListTypeFromNode_1.default)(listStack[listStackEndIndex]) !==
|
|
13789
|
+
this.listTypes[listStackEndIndex]) {
|
|
13790
|
+
listStack.splice(listStackEndIndex);
|
|
13791
|
+
}
|
|
13792
|
+
nextLevel = listStack.length;
|
|
13793
|
+
}
|
|
13794
|
+
else {
|
|
13795
|
+
// 1. Determine list elements that we can reuse
|
|
13796
|
+
// e.g.:
|
|
13797
|
+
// passed in listStack: Fragment > OL > UL > OL
|
|
13798
|
+
// local listTypes: null > OL > UL > UL > OL
|
|
13799
|
+
// then Fragment > OL > UL can be reused
|
|
13800
|
+
for (; nextLevel < listStack.length; nextLevel++) {
|
|
13801
|
+
if ((0, getListTypeFromNode_1.default)(listStack[nextLevel]) !== this.listTypes[nextLevel]) {
|
|
13802
|
+
listStack.splice(nextLevel);
|
|
13803
|
+
break;
|
|
13804
|
+
}
|
|
13560
13805
|
}
|
|
13561
13806
|
}
|
|
13562
13807
|
// 2. Add new list elements
|
|
@@ -13573,7 +13818,8 @@ var VListItem = /** @class */ (function () {
|
|
|
13573
13818
|
//apply the styles of the current parent list to the new list
|
|
13574
13819
|
if (this.getDeepChildIndex(originalRoot) == stackLength) {
|
|
13575
13820
|
var listStyleType = (_a = this.node.parentElement) === null || _a === void 0 ? void 0 : _a.style.listStyleType;
|
|
13576
|
-
if (listStyleType
|
|
13821
|
+
if (listStyleType &&
|
|
13822
|
+
(0, getTagOfNode_1.default)(this.node.parentElement) === (0, getTagOfNode_1.default)(newList)) {
|
|
13577
13823
|
newList.style.listStyleType = listStyleType;
|
|
13578
13824
|
}
|
|
13579
13825
|
}
|
|
@@ -14439,6 +14685,10 @@ function validate(input, def) {
|
|
|
14439
14685
|
if ((def.isOptional && typeof input === 'undefined') || (def.allowNull && input === null)) {
|
|
14440
14686
|
result = true;
|
|
14441
14687
|
}
|
|
14688
|
+
else if ((!def.isOptional && typeof input === 'undefined') ||
|
|
14689
|
+
(!def.allowNull && input === null)) {
|
|
14690
|
+
return false;
|
|
14691
|
+
}
|
|
14442
14692
|
else {
|
|
14443
14693
|
switch (def.type) {
|
|
14444
14694
|
case 2 /* String */:
|
|
@@ -15851,7 +16101,7 @@ var normalizeRect_1 = __webpack_require__(/*! ../utils/normalizeRect */ "./packa
|
|
|
15851
16101
|
var safeInstanceOf_1 = __webpack_require__(/*! ../utils/safeInstanceOf */ "./packages/roosterjs-editor-dom/lib/utils/safeInstanceOf.ts");
|
|
15852
16102
|
var toArray_1 = __webpack_require__(/*! ../jsUtils/toArray */ "./packages/roosterjs-editor-dom/lib/jsUtils/toArray.ts");
|
|
15853
16103
|
var tableFormatInfo_1 = __webpack_require__(/*! ./tableFormatInfo */ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts");
|
|
15854
|
-
var
|
|
16104
|
+
var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
|
|
15855
16105
|
var DEFAULT_FORMAT = {
|
|
15856
16106
|
topBorderColor: '#ABABAB',
|
|
15857
16107
|
bottomBorderColor: '#ABABAB',
|
|
@@ -16005,8 +16255,8 @@ var VTable = /** @class */ (function () {
|
|
|
16005
16255
|
VTable.prototype.deleteCellShadeDataset = function (cells) {
|
|
16006
16256
|
cells === null || cells === void 0 ? void 0 : cells.forEach(function (row) {
|
|
16007
16257
|
row.forEach(function (cell) {
|
|
16008
|
-
if (cell.td
|
|
16009
|
-
|
|
16258
|
+
if (cell.td) {
|
|
16259
|
+
(0, metadata_1.removeMetadata)(cell.td);
|
|
16010
16260
|
}
|
|
16011
16261
|
});
|
|
16012
16262
|
});
|
|
@@ -16550,10 +16800,10 @@ function cloneNode(node) {
|
|
|
16550
16800
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16551
16801
|
var changeElementTag_1 = __webpack_require__(/*! ../utils/changeElementTag */ "./packages/roosterjs-editor-dom/lib/utils/changeElementTag.ts");
|
|
16552
16802
|
var setColor_1 = __webpack_require__(/*! ../utils/setColor */ "./packages/roosterjs-editor-dom/lib/utils/setColor.ts");
|
|
16803
|
+
var tableCellInfo_1 = __webpack_require__(/*! ./tableCellInfo */ "./packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts");
|
|
16553
16804
|
var TRANSPARENT = 'transparent';
|
|
16554
16805
|
var TABLE_CELL_TAG_NAME = 'TD';
|
|
16555
16806
|
var TABLE_HEADER_TAG_NAME = 'TH';
|
|
16556
|
-
var CELL_SHADE = 'cellShade';
|
|
16557
16807
|
/**
|
|
16558
16808
|
* @internal
|
|
16559
16809
|
* Apply the given table format to this virtual table
|
|
@@ -16576,11 +16826,11 @@ exports.default = applyTableFormat;
|
|
|
16576
16826
|
* @returns
|
|
16577
16827
|
*/
|
|
16578
16828
|
function hasCellShade(cell) {
|
|
16829
|
+
var _a;
|
|
16579
16830
|
if (!cell.td) {
|
|
16580
16831
|
return false;
|
|
16581
16832
|
}
|
|
16582
|
-
|
|
16583
|
-
return colorShade ? true : false;
|
|
16833
|
+
return !!((_a = (0, tableCellInfo_1.getTableCellMetadata)(cell.td)) === null || _a === void 0 ? void 0 : _a.bgColorOverride);
|
|
16584
16834
|
}
|
|
16585
16835
|
/**
|
|
16586
16836
|
* Set color to the table
|
|
@@ -16858,6 +17108,47 @@ function isWholeTableSelected(vTable, selection) {
|
|
|
16858
17108
|
exports.default = isWholeTableSelected;
|
|
16859
17109
|
|
|
16860
17110
|
|
|
17111
|
+
/***/ }),
|
|
17112
|
+
|
|
17113
|
+
/***/ "./packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts":
|
|
17114
|
+
/*!******************************************************************!*\
|
|
17115
|
+
!*** ./packages/roosterjs-editor-dom/lib/table/tableCellInfo.ts ***!
|
|
17116
|
+
\******************************************************************/
|
|
17117
|
+
/*! no static exports found */
|
|
17118
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
17119
|
+
|
|
17120
|
+
"use strict";
|
|
17121
|
+
|
|
17122
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17123
|
+
exports.saveTableCellMetadata = exports.getTableCellMetadata = void 0;
|
|
17124
|
+
var definitionCreators_1 = __webpack_require__(/*! ../metadata/definitionCreators */ "./packages/roosterjs-editor-dom/lib/metadata/definitionCreators.ts");
|
|
17125
|
+
var metadata_1 = __webpack_require__(/*! ../metadata/metadata */ "./packages/roosterjs-editor-dom/lib/metadata/metadata.ts");
|
|
17126
|
+
var BooleanDefinition = (0, definitionCreators_1.createBooleanDefinition)(false /** isOptional */, undefined /** value */, true /** allowNull */);
|
|
17127
|
+
var TableCellFormatMetadata = (0, definitionCreators_1.createObjectDefinition)({
|
|
17128
|
+
bgColorOverride: BooleanDefinition,
|
|
17129
|
+
}, false /* isOptional */, true /** allowNull */);
|
|
17130
|
+
/**
|
|
17131
|
+
* @internal
|
|
17132
|
+
* Get the format info of a table cell
|
|
17133
|
+
* @param cell The table cell to use
|
|
17134
|
+
*/
|
|
17135
|
+
function getTableCellMetadata(cell) {
|
|
17136
|
+
return (0, metadata_1.getMetadata)(cell, TableCellFormatMetadata);
|
|
17137
|
+
}
|
|
17138
|
+
exports.getTableCellMetadata = getTableCellMetadata;
|
|
17139
|
+
/**
|
|
17140
|
+
* Add metadata to a cell
|
|
17141
|
+
* @param cell The table cell to add the metadata
|
|
17142
|
+
* @param format The format of the table
|
|
17143
|
+
*/
|
|
17144
|
+
function saveTableCellMetadata(cell, format) {
|
|
17145
|
+
if (cell && format) {
|
|
17146
|
+
(0, metadata_1.setMetadata)(cell, format, TableCellFormatMetadata);
|
|
17147
|
+
}
|
|
17148
|
+
}
|
|
17149
|
+
exports.saveTableCellMetadata = saveTableCellMetadata;
|
|
17150
|
+
|
|
17151
|
+
|
|
16861
17152
|
/***/ }),
|
|
16862
17153
|
|
|
16863
17154
|
/***/ "./packages/roosterjs-editor-dom/lib/table/tableFormatInfo.ts":
|
|
@@ -17509,6 +17800,61 @@ function getInnerHTML(node) {
|
|
|
17509
17800
|
exports.default = getInnerHTML;
|
|
17510
17801
|
|
|
17511
17802
|
|
|
17803
|
+
/***/ }),
|
|
17804
|
+
|
|
17805
|
+
/***/ "./packages/roosterjs-editor-dom/lib/utils/getIntersectedRect.ts":
|
|
17806
|
+
/*!***********************************************************************!*\
|
|
17807
|
+
!*** ./packages/roosterjs-editor-dom/lib/utils/getIntersectedRect.ts ***!
|
|
17808
|
+
\***********************************************************************/
|
|
17809
|
+
/*! no static exports found */
|
|
17810
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
17811
|
+
|
|
17812
|
+
"use strict";
|
|
17813
|
+
|
|
17814
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17815
|
+
var normalizeRect_1 = __webpack_require__(/*! ./normalizeRect */ "./packages/roosterjs-editor-dom/lib/utils/normalizeRect.ts");
|
|
17816
|
+
/**
|
|
17817
|
+
* Get the intersected Rect of elements provided
|
|
17818
|
+
*
|
|
17819
|
+
* @example
|
|
17820
|
+
* The result of the following Elements Rects would be:
|
|
17821
|
+
{
|
|
17822
|
+
top: Element2.top,
|
|
17823
|
+
bottom: Element1.bottom,
|
|
17824
|
+
left: Element2.left,
|
|
17825
|
+
right: Element2.right
|
|
17826
|
+
}
|
|
17827
|
+
+-------------------------+
|
|
17828
|
+
| Element 1 |
|
|
17829
|
+
| +-----------------+ |
|
|
17830
|
+
| | Element2 | |
|
|
17831
|
+
| | | |
|
|
17832
|
+
| | | |
|
|
17833
|
+
+-------------------------+
|
|
17834
|
+
| |
|
|
17835
|
+
+-----------------+
|
|
17836
|
+
|
|
17837
|
+
* @param elements Elements to use.
|
|
17838
|
+
* @param additionalRects additional rects to use
|
|
17839
|
+
* @returns If the Rect is valid return the rect, if not, return null.
|
|
17840
|
+
*/
|
|
17841
|
+
function getIntersectedRect(elements, additionalRects) {
|
|
17842
|
+
if (additionalRects === void 0) { additionalRects = []; }
|
|
17843
|
+
var rects = elements
|
|
17844
|
+
.map(function (element) { return (0, normalizeRect_1.default)(element.getBoundingClientRect()); })
|
|
17845
|
+
.filter(function (element) { return !!element; })
|
|
17846
|
+
.concat(additionalRects);
|
|
17847
|
+
var result = {
|
|
17848
|
+
top: Math.max.apply(Math, rects.map(function (r) { return r.top; })),
|
|
17849
|
+
bottom: Math.min.apply(Math, rects.map(function (r) { return r.bottom; })),
|
|
17850
|
+
left: Math.max.apply(Math, rects.map(function (r) { return r.left; })),
|
|
17851
|
+
right: Math.min.apply(Math, rects.map(function (r) { return r.right; })),
|
|
17852
|
+
};
|
|
17853
|
+
return result.top < result.bottom && result.left < result.right ? result : null;
|
|
17854
|
+
}
|
|
17855
|
+
exports.default = getIntersectedRect;
|
|
17856
|
+
|
|
17857
|
+
|
|
17512
17858
|
/***/ }),
|
|
17513
17859
|
|
|
17514
17860
|
/***/ "./packages/roosterjs-editor-dom/lib/utils/getLeafNode.ts":
|
|
@@ -18795,6 +19141,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18795
19141
|
__exportStar(__webpack_require__(/*! ./plugins/ImageResize/index */ "./packages/roosterjs-editor-plugins/lib/plugins/ImageResize/index.ts"), exports);
|
|
18796
19142
|
|
|
18797
19143
|
|
|
19144
|
+
/***/ }),
|
|
19145
|
+
|
|
19146
|
+
/***/ "./packages/roosterjs-editor-plugins/lib/ImageSelection.ts":
|
|
19147
|
+
/*!*****************************************************************!*\
|
|
19148
|
+
!*** ./packages/roosterjs-editor-plugins/lib/ImageSelection.ts ***!
|
|
19149
|
+
\*****************************************************************/
|
|
19150
|
+
/*! no static exports found */
|
|
19151
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
19152
|
+
|
|
19153
|
+
"use strict";
|
|
19154
|
+
|
|
19155
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19156
|
+
if (k2 === undefined) k2 = k;
|
|
19157
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
19158
|
+
}) : (function(o, m, k, k2) {
|
|
19159
|
+
if (k2 === undefined) k2 = k;
|
|
19160
|
+
o[k2] = m[k];
|
|
19161
|
+
}));
|
|
19162
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19163
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19164
|
+
};
|
|
19165
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19166
|
+
__exportStar(__webpack_require__(/*! ./plugins/ImageSelection/index */ "./packages/roosterjs-editor-plugins/lib/plugins/ImageSelection/index.ts"), exports);
|
|
19167
|
+
|
|
19168
|
+
|
|
18798
19169
|
/***/ }),
|
|
18799
19170
|
|
|
18800
19171
|
/***/ "./packages/roosterjs-editor-plugins/lib/Paste.ts":
|
|
@@ -18955,6 +19326,7 @@ __exportStar(__webpack_require__(/*! ./TableResize */ "./packages/roosterjs-edit
|
|
|
18955
19326
|
__exportStar(__webpack_require__(/*! ./Watermark */ "./packages/roosterjs-editor-plugins/lib/Watermark.ts"), exports);
|
|
18956
19327
|
__exportStar(__webpack_require__(/*! ./TableCellSelection */ "./packages/roosterjs-editor-plugins/lib/TableCellSelection.ts"), exports);
|
|
18957
19328
|
__exportStar(__webpack_require__(/*! ./AutoFormat */ "./packages/roosterjs-editor-plugins/lib/AutoFormat.ts"), exports);
|
|
19329
|
+
__exportStar(__webpack_require__(/*! ./ImageSelection */ "./packages/roosterjs-editor-plugins/lib/ImageSelection.ts"), exports);
|
|
18958
19330
|
|
|
18959
19331
|
|
|
18960
19332
|
/***/ }),
|
|
@@ -19638,7 +20010,7 @@ var MergeInNewLine = {
|
|
|
19638
20010
|
(0, roosterjs_editor_api_1.blockFormat)(editor, function (region, start, end) {
|
|
19639
20011
|
var vList = (0, roosterjs_editor_dom_1.createVListFromRegion)(region, false /*includeSiblingList*/, li);
|
|
19640
20012
|
vList.setIndentation(start, end, 1 /* Decrease */, true /*softOutdent*/);
|
|
19641
|
-
vList.writeBack();
|
|
20013
|
+
vList.writeBack(editor.isFeatureEnabled("ReuseAllAncestorListElements" /* ReuseAllAncestorListElements */));
|
|
19642
20014
|
event.rawEvent.preventDefault();
|
|
19643
20015
|
});
|
|
19644
20016
|
}
|
|
@@ -19714,7 +20086,8 @@ function isAListPattern(textBeforeCursor) {
|
|
|
19714
20086
|
var AutoBullet = {
|
|
19715
20087
|
keys: [32 /* SPACE */],
|
|
19716
20088
|
shouldHandleEvent: function (event, editor) {
|
|
19717
|
-
if (!cacheGetListElement(event, editor)
|
|
20089
|
+
if (!cacheGetListElement(event, editor) &&
|
|
20090
|
+
!editor.isFeatureEnabled("AutoFormatList" /* AutoFormatList */)) {
|
|
19718
20091
|
var searcher = editor.getContentSearcherOfCursor(event);
|
|
19719
20092
|
var textBeforeCursor = searcher.getSubStringBefore(4);
|
|
19720
20093
|
// Auto list is triggered if:
|
|
@@ -19802,23 +20175,13 @@ var AutoNumberingList = {
|
|
|
19802
20175
|
event.rawEvent.preventDefault();
|
|
19803
20176
|
editor.addUndoSnapshot(function () {
|
|
19804
20177
|
var _a;
|
|
19805
|
-
var regions;
|
|
19806
20178
|
var searcher = editor.getContentSearcherOfCursor();
|
|
19807
20179
|
var textBeforeCursor = searcher.getSubStringBefore(5);
|
|
19808
20180
|
var textRange = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/);
|
|
19809
|
-
if (
|
|
19810
|
-
// no op if the range can't be found
|
|
19811
|
-
}
|
|
19812
|
-
else if ((regions = editor.getSelectedRegions()) && regions.length == 1) {
|
|
19813
|
-
var num = parseInt(textBeforeCursor);
|
|
19814
|
-
var listStyle = (0, getAutoNumberingListStyle_1.default)(textBeforeCursor, num);
|
|
19815
|
-
prepareAutoBullet(editor, textRange);
|
|
19816
|
-
(0, roosterjs_editor_api_1.toggleNumbering)(editor, num, listStyle, 'autoToggleList' /** apiNameOverride */);
|
|
19817
|
-
}
|
|
19818
|
-
else {
|
|
20181
|
+
if (textRange) {
|
|
19819
20182
|
var listStyle = (0, getAutoNumberingListStyle_1.default)(textBeforeCursor);
|
|
19820
20183
|
prepareAutoBullet(editor, textRange);
|
|
19821
|
-
(0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined
|
|
20184
|
+
(0, roosterjs_editor_api_1.toggleNumbering)(editor, undefined /** startNumber */, listStyle, 'autoToggleList' /** apiNameOverride */);
|
|
19822
20185
|
}
|
|
19823
20186
|
(_a = searcher.getRangeFromText(textBeforeCursor, true /*exactMatch*/)) === null || _a === void 0 ? void 0 : _a.deleteContents();
|
|
19824
20187
|
}, null /*changeSource*/, true /*canUndoByBackspace*/);
|
|
@@ -19890,7 +20253,14 @@ function shouldTriggerList(event, editor, getListStyle) {
|
|
|
19890
20253
|
var searcher = editor.getContentSearcherOfCursor(event);
|
|
19891
20254
|
var textBeforeCursor = searcher.getSubStringBefore(4);
|
|
19892
20255
|
var itHasSpace = /\s/g.test(textBeforeCursor);
|
|
19893
|
-
|
|
20256
|
+
var element = editor.getElementAtCursor();
|
|
20257
|
+
var previousNode = editor.getBodyTraverser(element).getPreviousBlockElement();
|
|
20258
|
+
var isLi = previousNode
|
|
20259
|
+
? (0, roosterjs_editor_dom_1.getTagOfNode)(previousNode === null || previousNode === void 0 ? void 0 : previousNode.collapseToSingleElement()) === 'LI'
|
|
20260
|
+
: false;
|
|
20261
|
+
return (!itHasSpace &&
|
|
20262
|
+
!searcher.getNearestNonTextInlineElement() &&
|
|
20263
|
+
getListStyle(textBeforeCursor, !isLi));
|
|
19894
20264
|
}
|
|
19895
20265
|
/**
|
|
19896
20266
|
* @internal
|
|
@@ -19944,7 +20314,7 @@ function cacheGetRangeForMarkdownOperation(event, editor, triggerCharacter) {
|
|
|
19944
20314
|
var searcher = editor.getContentSearcherOfCursor(event);
|
|
19945
20315
|
var startPosition;
|
|
19946
20316
|
var endPosition;
|
|
19947
|
-
searcher.forEachTextInlineElement(function (textInlineElement) {
|
|
20317
|
+
searcher === null || searcher === void 0 ? void 0 : searcher.forEachTextInlineElement(function (textInlineElement) {
|
|
19948
20318
|
if (endPosition && startPosition) {
|
|
19949
20319
|
return true;
|
|
19950
20320
|
}
|
|
@@ -19988,7 +20358,8 @@ function handleMarkdownEvent(event, editor, triggerCharacter, elementTag) {
|
|
|
19988
20358
|
var textContentRange = range.cloneRange();
|
|
19989
20359
|
textContentRange.setStart(textContentRange.startContainer, textContentRange.startOffset + 1);
|
|
19990
20360
|
// set the removal range to include the typed last character.
|
|
19991
|
-
range.
|
|
20361
|
+
var lastIndex = range.endContainer.length;
|
|
20362
|
+
range.setEnd(range.endContainer, lastIndex);
|
|
19992
20363
|
// extract content and put it into a new element.
|
|
19993
20364
|
var elementToWrap = editor.getDocument().createElement(elementTag);
|
|
19994
20365
|
elementToWrap.appendChild(textContentRange.extractContents());
|
|
@@ -20006,19 +20377,19 @@ function handleMarkdownEvent(event, editor, triggerCharacter, elementTag) {
|
|
|
20006
20377
|
/**
|
|
20007
20378
|
* Markdown bold feature. Make bold text with markdown shortcuts.
|
|
20008
20379
|
*/
|
|
20009
|
-
var MarkdownBold = generateBasicMarkdownFeature(56 /* EIGHT_ASTERISK */, '*', 'b', true);
|
|
20380
|
+
var MarkdownBold = generateBasicMarkdownFeature(56 /* EIGHT_ASTERISK */, '*', 'b', true /* useShiftKey */);
|
|
20010
20381
|
/**
|
|
20011
20382
|
* Markdown italics feature. Make italic text with markdown shortcuts.
|
|
20012
20383
|
*/
|
|
20013
|
-
var MarkdownItalic = generateBasicMarkdownFeature(189 /* DASH_UNDERSCORE */, '_', 'i', true);
|
|
20384
|
+
var MarkdownItalic = generateBasicMarkdownFeature(189 /* DASH_UNDERSCORE */, '_', 'i', true /* useShiftKey */);
|
|
20014
20385
|
/**
|
|
20015
20386
|
* Markdown strikethrough feature. MAke strikethrough text with markdown shortcuts.
|
|
20016
20387
|
*/
|
|
20017
|
-
var MarkdownStrikethrough = generateBasicMarkdownFeature(192 /* GRAVE_TILDE */, '~', 's', true);
|
|
20388
|
+
var MarkdownStrikethrough = generateBasicMarkdownFeature(192 /* GRAVE_TILDE */, '~', 's', true /* useShiftKey */);
|
|
20018
20389
|
/**
|
|
20019
20390
|
* Markdown inline code feature. Marks specific text as inline code with markdown shortcuts.
|
|
20020
20391
|
*/
|
|
20021
|
-
var MarkdownInlineCode = generateBasicMarkdownFeature(192 /* GRAVE_TILDE */, '`', 'code', false);
|
|
20392
|
+
var MarkdownInlineCode = generateBasicMarkdownFeature(192 /* GRAVE_TILDE */, '`', 'code', false /* useShiftKey */);
|
|
20022
20393
|
/**
|
|
20023
20394
|
* @internal
|
|
20024
20395
|
*/
|
|
@@ -20738,13 +21109,7 @@ var characters = {
|
|
|
20738
21109
|
'-': 2 /* Dash */,
|
|
20739
21110
|
')': 3 /* Parenthesis */,
|
|
20740
21111
|
};
|
|
20741
|
-
var numberingTriggers =
|
|
20742
|
-
'1': 1 /* Decimal */,
|
|
20743
|
-
i: 4 /* LowerRoman */,
|
|
20744
|
-
I: 5 /* UpperRoman */,
|
|
20745
|
-
a: 2 /* LowerAlpha */,
|
|
20746
|
-
A: 3 /* UpperAlpha */,
|
|
20747
|
-
};
|
|
21112
|
+
var numberingTriggers = ['1', 'a', 'A', 'I', 'i'];
|
|
20748
21113
|
var identifyNumberingType = function (text) {
|
|
20749
21114
|
if (!isNaN(parseInt(text))) {
|
|
20750
21115
|
return 1 /* Decimal */;
|
|
@@ -20803,16 +21168,14 @@ var DecimalsTypes = (_f = {},
|
|
|
20803
21168
|
_f[3 /* Parenthesis */] = 3 /* DecimalParenthesis */,
|
|
20804
21169
|
_f[4 /* DoubleParenthesis */] = 4 /* DecimalDoubleParenthesis */,
|
|
20805
21170
|
_f);
|
|
20806
|
-
var identifyNumberingListType = function (numbering, isDoubleParenthesis
|
|
21171
|
+
var identifyNumberingListType = function (numbering, isDoubleParenthesis) {
|
|
20807
21172
|
var separatorCharacter = isDoubleParenthesis
|
|
20808
21173
|
? 4 /* DoubleParenthesis */
|
|
20809
21174
|
: characters[numbering[1]];
|
|
20810
21175
|
// if separator is not valid, no need to check if the number is valid.
|
|
20811
21176
|
if (separatorCharacter) {
|
|
20812
|
-
var number = numbering.length
|
|
20813
|
-
var numberingType =
|
|
20814
|
-
? identifyNumberingType(number)
|
|
20815
|
-
: numberingTriggers[number];
|
|
21177
|
+
var number = numbering[numbering.length - 2];
|
|
21178
|
+
var numberingType = identifyNumberingType(number);
|
|
20816
21179
|
return numberingType ? numberingListTypes[numberingType](separatorCharacter) : null;
|
|
20817
21180
|
}
|
|
20818
21181
|
return null;
|
|
@@ -20820,16 +21183,22 @@ var identifyNumberingListType = function (numbering, isDoubleParenthesis, startN
|
|
|
20820
21183
|
/**
|
|
20821
21184
|
* @internal
|
|
20822
21185
|
* @param textBeforeCursor The trigger character
|
|
20823
|
-
* @param
|
|
21186
|
+
* @param isTheFirstItem (Optional) Is the start number of a list.
|
|
20824
21187
|
* @returns The style of a numbering list triggered by a string
|
|
20825
21188
|
*/
|
|
20826
|
-
function getAutoNumberingListStyle(textBeforeCursor,
|
|
21189
|
+
function getAutoNumberingListStyle(textBeforeCursor, isTheFirstItem) {
|
|
20827
21190
|
var trigger = textBeforeCursor.trim();
|
|
21191
|
+
//Only the staring items ['1', 'a', 'A', 'I', 'i'] must trigger a new list. All the other triggers is used to keep the list chain.
|
|
21192
|
+
//The index is always the character before the last character
|
|
21193
|
+
var listIndex = trigger[trigger.length - 2];
|
|
21194
|
+
if (isTheFirstItem && numberingTriggers.indexOf(listIndex) < 0) {
|
|
21195
|
+
return null;
|
|
21196
|
+
}
|
|
20828
21197
|
// the marker must be a combination of 2 or 3 characters, so if the length is less than 2, no need to check
|
|
20829
21198
|
// If the marker length is 3, the marker style is double parenthesis such as (1), (A).
|
|
20830
21199
|
var isDoubleParenthesis = trigger.length === 3 && trigger[0] === '(' && trigger[2] === ')';
|
|
20831
21200
|
var numberingType = trigger.length === 2 || isDoubleParenthesis
|
|
20832
|
-
? identifyNumberingListType(trigger, isDoubleParenthesis
|
|
21201
|
+
? identifyNumberingListType(trigger, isDoubleParenthesis)
|
|
20833
21202
|
: null;
|
|
20834
21203
|
return numberingType;
|
|
20835
21204
|
}
|
|
@@ -22997,6 +23366,99 @@ var ImageResize_1 = __webpack_require__(/*! ./ImageResize */ "./packages/rooster
|
|
|
22997
23366
|
Object.defineProperty(exports, "ImageResize", { enumerable: true, get: function () { return ImageResize_1.default; } });
|
|
22998
23367
|
|
|
22999
23368
|
|
|
23369
|
+
/***/ }),
|
|
23370
|
+
|
|
23371
|
+
/***/ "./packages/roosterjs-editor-plugins/lib/plugins/ImageSelection/ImageSelection.ts":
|
|
23372
|
+
/*!****************************************************************************************!*\
|
|
23373
|
+
!*** ./packages/roosterjs-editor-plugins/lib/plugins/ImageSelection/ImageSelection.ts ***!
|
|
23374
|
+
\****************************************************************************************/
|
|
23375
|
+
/*! no static exports found */
|
|
23376
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
23377
|
+
|
|
23378
|
+
"use strict";
|
|
23379
|
+
|
|
23380
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23381
|
+
var roosterjs_editor_dom_1 = __webpack_require__(/*! roosterjs-editor-dom */ "./packages/roosterjs-editor-dom/lib/index.ts");
|
|
23382
|
+
/**
|
|
23383
|
+
* Detect image selection and help highlight the image
|
|
23384
|
+
*/
|
|
23385
|
+
var ImageSelection = /** @class */ (function () {
|
|
23386
|
+
function ImageSelection() {
|
|
23387
|
+
this.editor = null;
|
|
23388
|
+
this.imageId = null;
|
|
23389
|
+
}
|
|
23390
|
+
/**
|
|
23391
|
+
* Get a friendly name of this plugin
|
|
23392
|
+
*/
|
|
23393
|
+
ImageSelection.prototype.getName = function () {
|
|
23394
|
+
return 'ImageSelection';
|
|
23395
|
+
};
|
|
23396
|
+
/**
|
|
23397
|
+
* Initialize this plugin. This should only be called from Editor
|
|
23398
|
+
* @param editor Editor instance
|
|
23399
|
+
*/
|
|
23400
|
+
ImageSelection.prototype.initialize = function (editor) {
|
|
23401
|
+
this.editor = editor;
|
|
23402
|
+
};
|
|
23403
|
+
/**
|
|
23404
|
+
* Dispose this plugin
|
|
23405
|
+
*/
|
|
23406
|
+
ImageSelection.prototype.dispose = function () {
|
|
23407
|
+
this.editor.select(null);
|
|
23408
|
+
this.editor = null;
|
|
23409
|
+
this.imageId = null;
|
|
23410
|
+
};
|
|
23411
|
+
ImageSelection.prototype.onPluginEvent = function (event) {
|
|
23412
|
+
if (this.editor) {
|
|
23413
|
+
switch (event.eventType) {
|
|
23414
|
+
case 17 /* EnteredShadowEdit */:
|
|
23415
|
+
var selection = this.editor.getSelectionRangeEx();
|
|
23416
|
+
if (selection.type == 2 /* ImageSelection */) {
|
|
23417
|
+
this.editor.select(selection.image);
|
|
23418
|
+
}
|
|
23419
|
+
break;
|
|
23420
|
+
case 18 /* LeavingShadowEdit */:
|
|
23421
|
+
if (this.imageId) {
|
|
23422
|
+
var images = this.editor.queryElements('#' + this.imageId);
|
|
23423
|
+
if (images.length == 1) {
|
|
23424
|
+
var image = images[0];
|
|
23425
|
+
this.editor.select(image);
|
|
23426
|
+
}
|
|
23427
|
+
this.imageId = null;
|
|
23428
|
+
}
|
|
23429
|
+
break;
|
|
23430
|
+
case 5 /* MouseDown */:
|
|
23431
|
+
var target = event.rawEvent.target;
|
|
23432
|
+
if ((0, roosterjs_editor_dom_1.safeInstanceOf)(target, 'HTMLImageElement')) {
|
|
23433
|
+
this.editor.select(target);
|
|
23434
|
+
this.imageId = target.id;
|
|
23435
|
+
}
|
|
23436
|
+
break;
|
|
23437
|
+
}
|
|
23438
|
+
}
|
|
23439
|
+
};
|
|
23440
|
+
return ImageSelection;
|
|
23441
|
+
}());
|
|
23442
|
+
exports.default = ImageSelection;
|
|
23443
|
+
|
|
23444
|
+
|
|
23445
|
+
/***/ }),
|
|
23446
|
+
|
|
23447
|
+
/***/ "./packages/roosterjs-editor-plugins/lib/plugins/ImageSelection/index.ts":
|
|
23448
|
+
/*!*******************************************************************************!*\
|
|
23449
|
+
!*** ./packages/roosterjs-editor-plugins/lib/plugins/ImageSelection/index.ts ***!
|
|
23450
|
+
\*******************************************************************************/
|
|
23451
|
+
/*! no static exports found */
|
|
23452
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
23453
|
+
|
|
23454
|
+
"use strict";
|
|
23455
|
+
|
|
23456
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23457
|
+
exports.ImageSelection = void 0;
|
|
23458
|
+
var ImageSelection_1 = __webpack_require__(/*! ./ImageSelection */ "./packages/roosterjs-editor-plugins/lib/plugins/ImageSelection/ImageSelection.ts");
|
|
23459
|
+
Object.defineProperty(exports, "ImageSelection", { enumerable: true, get: function () { return ImageSelection_1.default; } });
|
|
23460
|
+
|
|
23461
|
+
|
|
23000
23462
|
/***/ }),
|
|
23001
23463
|
|
|
23002
23464
|
/***/ "./packages/roosterjs-editor-plugins/lib/plugins/Paste/Paste.ts":
|
|
@@ -26426,12 +26888,18 @@ var INSERTER_HOVER_OFFSET = 5;
|
|
|
26426
26888
|
* When set a different current table or change current TD, we need to update these areas
|
|
26427
26889
|
*/
|
|
26428
26890
|
var TableEditor = /** @class */ (function () {
|
|
26429
|
-
function TableEditor(editor, table, onChanged, onShowHelperElement,
|
|
26891
|
+
function TableEditor(editor, table, onChanged, onShowHelperElement, contentDiv) {
|
|
26430
26892
|
var _this = this;
|
|
26431
26893
|
this.editor = editor;
|
|
26432
26894
|
this.table = table;
|
|
26433
26895
|
this.onChanged = onChanged;
|
|
26434
26896
|
this.onShowHelperElement = onShowHelperElement;
|
|
26897
|
+
// 1, 2 - Insert a column or a row
|
|
26898
|
+
this.horizontalInserter = null;
|
|
26899
|
+
this.verticalInserter = null;
|
|
26900
|
+
// 3, 4 - Resize a column or a row from a cell
|
|
26901
|
+
this.horizontalResizer = null;
|
|
26902
|
+
this.verticalResizer = null;
|
|
26435
26903
|
this.onFinishEditing = function () {
|
|
26436
26904
|
_this.editor.focus();
|
|
26437
26905
|
_this.editor.select(_this.start, _this.end);
|
|
@@ -26485,8 +26953,9 @@ var TableEditor = /** @class */ (function () {
|
|
|
26485
26953
|
}
|
|
26486
26954
|
};
|
|
26487
26955
|
this.isRTL = (0, roosterjs_editor_dom_1.getComputedStyle)(table, 'direction') == 'rtl';
|
|
26488
|
-
|
|
26489
|
-
this.
|
|
26956
|
+
var zoomScale = editor.getZoomScale();
|
|
26957
|
+
this.tableResizer = (0, TableResizer_1.default)(table, zoomScale, this.isRTL, this.onStartTableResize, this.onFinishEditing, this.onShowHelperElement);
|
|
26958
|
+
this.tableSelector = (0, TableSelector_1.default)(table, zoomScale, editor, this.onSelect, this.onShowHelperElement, contentDiv);
|
|
26490
26959
|
this.isCurrentlyEditing = false;
|
|
26491
26960
|
}
|
|
26492
26961
|
TableEditor.prototype.dispose = function () {
|
|
@@ -26571,7 +27040,7 @@ var TableEditor = /** @class */ (function () {
|
|
|
26571
27040
|
this.disposeTableInserter();
|
|
26572
27041
|
}
|
|
26573
27042
|
if (!this.horizontalInserter && !this.verticalInserter && td) {
|
|
26574
|
-
var newInserter = (0, TableInserter_1.default)(this.editor, td, this.isRTL, isHorizontal, this.onInserted, this.onShowHelperElement);
|
|
27043
|
+
var newInserter = (0, TableInserter_1.default)(this.editor, td, this.isRTL, !!isHorizontal, this.onInserted, this.onShowHelperElement);
|
|
26575
27044
|
if (isHorizontal) {
|
|
26576
27045
|
this.horizontalInserter = newInserter;
|
|
26577
27046
|
}
|
|
@@ -26621,21 +27090,6 @@ var TableEditor = /** @class */ (function () {
|
|
|
26621
27090
|
}
|
|
26622
27091
|
this.editor.addUndoSnapshot();
|
|
26623
27092
|
};
|
|
26624
|
-
TableEditor.prototype.getShouldShowTableSelectorHandler = function (scrollContainer, eventTarget) {
|
|
26625
|
-
if (eventTarget && (0, roosterjs_editor_dom_1.safeInstanceOf)(eventTarget, 'HTMLElement') && scrollContainer) {
|
|
26626
|
-
var scrollContainerRect_1 = (0, roosterjs_editor_dom_1.normalizeRect)(scrollContainer.getBoundingClientRect());
|
|
26627
|
-
var containerRect_1 = (0, roosterjs_editor_dom_1.normalizeRect)(eventTarget.getBoundingClientRect());
|
|
26628
|
-
if (scrollContainerRect_1 && containerRect_1) {
|
|
26629
|
-
var scrollContainerVisibleTop_1 = scrollContainer.scrollTop - scrollContainerRect_1.top;
|
|
26630
|
-
return function (rect) {
|
|
26631
|
-
return containerRect_1.top <= rect.top &&
|
|
26632
|
-
scrollContainerVisibleTop_1 <= rect.top &&
|
|
26633
|
-
scrollContainerRect_1.top <= rect.top;
|
|
26634
|
-
};
|
|
26635
|
-
}
|
|
26636
|
-
}
|
|
26637
|
-
return function () { return true; };
|
|
26638
|
-
};
|
|
26639
27093
|
return TableEditor;
|
|
26640
27094
|
}());
|
|
26641
27095
|
exports.default = TableEditor;
|
|
@@ -26659,10 +27113,12 @@ exports.disposeTableEditFeature = void 0;
|
|
|
26659
27113
|
*/
|
|
26660
27114
|
function disposeTableEditFeature(resizer) {
|
|
26661
27115
|
var _a, _b, _c;
|
|
26662
|
-
|
|
26663
|
-
|
|
26664
|
-
|
|
26665
|
-
|
|
27116
|
+
if (resizer) {
|
|
27117
|
+
(_b = (_a = resizer.div) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(resizer.div);
|
|
27118
|
+
resizer.div = null;
|
|
27119
|
+
(_c = resizer.featureHandler) === null || _c === void 0 ? void 0 : _c.dispose();
|
|
27120
|
+
resizer.featureHandler = null;
|
|
27121
|
+
}
|
|
26666
27122
|
}
|
|
26667
27123
|
exports.disposeTableEditFeature = disposeTableEditFeature;
|
|
26668
27124
|
|
|
@@ -26713,6 +27169,7 @@ function createTableInserter(editor, td, isRTL, isHorizontal, onInsert, onShowHe
|
|
|
26713
27169
|
var handler = new TableInsertHandler(div, td, isHorizontal, editor, onInsert);
|
|
26714
27170
|
return { div: div, featureHandler: handler, node: td };
|
|
26715
27171
|
}
|
|
27172
|
+
return null;
|
|
26716
27173
|
}
|
|
26717
27174
|
exports.default = createTableInserter;
|
|
26718
27175
|
var TableInsertHandler = /** @class */ (function () {
|
|
@@ -26895,10 +27352,10 @@ var TABLE_SELECTOR_ID = '_Table_Selector';
|
|
|
26895
27352
|
/**
|
|
26896
27353
|
* @internal
|
|
26897
27354
|
*/
|
|
26898
|
-
function createTableSelector(table, zoomScale, onFinishDragging, onShowHelperElement,
|
|
27355
|
+
function createTableSelector(table, zoomScale, editor, onFinishDragging, onShowHelperElement, contentDiv) {
|
|
26899
27356
|
var rect = (0, roosterjs_editor_dom_1.normalizeRect)(table.getBoundingClientRect());
|
|
26900
|
-
if (
|
|
26901
|
-
return
|
|
27357
|
+
if (!isTableTopVisible(editor, rect, contentDiv)) {
|
|
27358
|
+
return null;
|
|
26902
27359
|
}
|
|
26903
27360
|
var document = table.ownerDocument;
|
|
26904
27361
|
var createElementData = {
|
|
@@ -26936,6 +27393,14 @@ function setSelectorDivPosition(context, trigger) {
|
|
|
26936
27393
|
trigger.style.left = rect.left - TABLE_SELECTOR_LENGTH - 2 + "px";
|
|
26937
27394
|
}
|
|
26938
27395
|
}
|
|
27396
|
+
function isTableTopVisible(editor, rect, contentDiv) {
|
|
27397
|
+
var visibleViewport = editor.getVisibleViewport();
|
|
27398
|
+
if (contentDiv && (0, roosterjs_editor_dom_1.safeInstanceOf)(contentDiv, 'HTMLElement') && visibleViewport && rect) {
|
|
27399
|
+
var containerRect = (0, roosterjs_editor_dom_1.normalizeRect)(contentDiv.getBoundingClientRect());
|
|
27400
|
+
return containerRect.top <= rect.top && visibleViewport.top <= rect.top;
|
|
27401
|
+
}
|
|
27402
|
+
return true;
|
|
27403
|
+
}
|
|
26939
27404
|
|
|
26940
27405
|
|
|
26941
27406
|
/***/ }),
|
|
@@ -27212,10 +27677,14 @@ var CompatibleBulletListType;
|
|
|
27212
27677
|
* Bullet triggered by -->
|
|
27213
27678
|
*/
|
|
27214
27679
|
CompatibleBulletListType[CompatibleBulletListType["DoubleLongArrow"] = 8] = "DoubleLongArrow";
|
|
27680
|
+
/**
|
|
27681
|
+
* Bullet type circle
|
|
27682
|
+
*/
|
|
27683
|
+
CompatibleBulletListType[CompatibleBulletListType["Circle"] = 9] = "Circle";
|
|
27215
27684
|
/**
|
|
27216
27685
|
* Maximum value of the enum
|
|
27217
27686
|
*/
|
|
27218
|
-
CompatibleBulletListType[CompatibleBulletListType["Max"] =
|
|
27687
|
+
CompatibleBulletListType[CompatibleBulletListType["Max"] = 9] = "Max";
|
|
27219
27688
|
})(CompatibleBulletListType = exports.CompatibleBulletListType || (exports.CompatibleBulletListType = {}));
|
|
27220
27689
|
|
|
27221
27690
|
|
|
@@ -28082,6 +28551,17 @@ var CompatibleExperimentalFeatures;
|
|
|
28082
28551
|
* e.g. We will move list items with "display: block" into previous list item and change tag to be DIV
|
|
28083
28552
|
*/
|
|
28084
28553
|
CompatibleExperimentalFeatures["NormalizeList"] = "NormalizeList";
|
|
28554
|
+
/**
|
|
28555
|
+
* When a html image is selected, the selected image data will be stored by editor core.
|
|
28556
|
+
*/
|
|
28557
|
+
CompatibleExperimentalFeatures["ImageSelection"] = "ImageSelection";
|
|
28558
|
+
/**
|
|
28559
|
+
* With this feature enabled, when writing back a list item we will re-use all
|
|
28560
|
+
* ancestor list elements, even if they don't match the types currently in the
|
|
28561
|
+
* listTypes array for that item. The only list that we will ensure is correct
|
|
28562
|
+
* is the one closest to the item.
|
|
28563
|
+
*/
|
|
28564
|
+
CompatibleExperimentalFeatures["ReuseAllAncestorListElements"] = "ReuseAllAncestorListElements";
|
|
28085
28565
|
})(CompatibleExperimentalFeatures = exports.CompatibleExperimentalFeatures || (exports.CompatibleExperimentalFeatures = {}));
|
|
28086
28566
|
|
|
28087
28567
|
|
|
@@ -28815,6 +29295,10 @@ var CompatibleSelectionRangeTypes;
|
|
|
28815
29295
|
* Selection made inside of a single table.
|
|
28816
29296
|
*/
|
|
28817
29297
|
CompatibleSelectionRangeTypes[CompatibleSelectionRangeTypes["TableSelection"] = 1] = "TableSelection";
|
|
29298
|
+
/**
|
|
29299
|
+
* Selection made in a image.
|
|
29300
|
+
*/
|
|
29301
|
+
CompatibleSelectionRangeTypes[CompatibleSelectionRangeTypes["ImageSelection"] = 2] = "ImageSelection";
|
|
28818
29302
|
})(CompatibleSelectionRangeTypes = exports.CompatibleSelectionRangeTypes || (exports.CompatibleSelectionRangeTypes = {}));
|
|
28819
29303
|
|
|
28820
29304
|
|