roosterjs 9.11.2 → 9.13.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-adapter-amd-min.js +1 -1
- package/dist/rooster-adapter-amd-min.js.map +1 -1
- package/dist/rooster-adapter-amd.js +3 -6
- package/dist/rooster-adapter-amd.js.map +1 -1
- package/dist/rooster-adapter-min.js +1 -1
- package/dist/rooster-adapter-min.js.map +1 -1
- package/dist/rooster-adapter.js +3 -6
- package/dist/rooster-adapter.js.map +1 -1
- package/dist/rooster-amd-min.js +1 -1
- package/dist/rooster-amd-min.js.map +1 -1
- package/dist/rooster-amd.d.ts +54 -26
- package/dist/rooster-amd.js +334 -172
- 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-react-amd.js +55 -55
- package/dist/rooster-react-amd.js.map +1 -1
- package/dist/rooster.d.ts +54 -26
- package/dist/rooster.js +334 -172
- package/dist/rooster.js.map +1 -1
- package/package.json +6 -6
package/dist/rooster-amd.js
CHANGED
|
@@ -2094,7 +2094,7 @@ exports["default"] = getDarkColor;
|
|
|
2094
2094
|
|
|
2095
2095
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
2096
2096
|
exports.formatSegmentWithContentModel = exports.formatParagraphWithContentModel = exports.formatImageWithContentModel = exports.formatTableWithContentModel = exports.clearSelectedCells = exports.insertTableColumn = exports.insertTableRow = exports.insertEntity = exports.toggleCode = exports.setParagraphMargin = exports.adjustImageSelection = exports.setImageAltText = exports.adjustLinkSelection = exports.removeLink = exports.insertLink = exports.clearFormat = exports.getFormatState = exports.changeImage = exports.setImageBoxShadow = exports.setImageBorder = exports.setSpacing = exports.toggleBlockQuote = exports.setHeadingLevel = exports.setDirection = exports.setAlignment = exports.setIndentation = exports.setListStartNumber = exports.setListStyle = exports.insertImage = exports.splitTextSegment = exports.changeCapitalization = exports.applySegmentFormat = exports.changeFontSize = exports.setTextColor = exports.setFontSize = exports.setFontName = exports.setBackgroundColor = exports.toggleSuperscript = exports.toggleSubscript = exports.toggleStrikethrough = exports.toggleUnderline = exports.toggleItalic = exports.toggleBold = exports.toggleNumbering = exports.toggleBullet = exports.applyTableBorderFormat = exports.editTable = exports.setTableCellShade = exports.formatTable = exports.insertTable = void 0;
|
|
2097
|
-
exports.getListAnnounceData = exports.matchLink = exports.setModelIndentation = exports.findListItemsInSameThread = exports.setModelListStartNumber = exports.setModelListStyle = exports.setListType = exports.formatInsertPointWithContentModel = exports.formatTextSegmentBeforeSelectionMarker = void 0;
|
|
2097
|
+
exports.getListAnnounceData = exports.promoteLink = exports.matchLink = exports.setModelIndentation = exports.findListItemsInSameThread = exports.setModelListStartNumber = exports.setModelListStyle = exports.setListType = exports.formatInsertPointWithContentModel = exports.formatTextSegmentBeforeSelectionMarker = void 0;
|
|
2098
2098
|
var insertTable_1 = __webpack_require__(/*! ./publicApi/table/insertTable */ "./packages/roosterjs-content-model-api/lib/publicApi/table/insertTable.ts");
|
|
2099
2099
|
Object.defineProperty(exports, "insertTable", ({ enumerable: true, get: function () { return insertTable_1.insertTable; } }));
|
|
2100
2100
|
var formatTable_1 = __webpack_require__(/*! ./publicApi/table/formatTable */ "./packages/roosterjs-content-model-api/lib/publicApi/table/formatTable.ts");
|
|
@@ -2211,6 +2211,8 @@ var setModelIndentation_1 = __webpack_require__(/*! ./modelApi/block/setModelInd
|
|
|
2211
2211
|
Object.defineProperty(exports, "setModelIndentation", ({ enumerable: true, get: function () { return setModelIndentation_1.setModelIndentation; } }));
|
|
2212
2212
|
var matchLink_1 = __webpack_require__(/*! ./modelApi/link/matchLink */ "./packages/roosterjs-content-model-api/lib/modelApi/link/matchLink.ts");
|
|
2213
2213
|
Object.defineProperty(exports, "matchLink", ({ enumerable: true, get: function () { return matchLink_1.matchLink; } }));
|
|
2214
|
+
var promoteLink_1 = __webpack_require__(/*! ./modelApi/link/promoteLink */ "./packages/roosterjs-content-model-api/lib/modelApi/link/promoteLink.ts");
|
|
2215
|
+
Object.defineProperty(exports, "promoteLink", ({ enumerable: true, get: function () { return promoteLink_1.promoteLink; } }));
|
|
2214
2216
|
var getListAnnounceData_1 = __webpack_require__(/*! ./modelApi/list/getListAnnounceData */ "./packages/roosterjs-content-model-api/lib/modelApi/list/getListAnnounceData.ts");
|
|
2215
2217
|
Object.defineProperty(exports, "getListAnnounceData", ({ enumerable: true, get: function () { return getListAnnounceData_1.getListAnnounceData; } }));
|
|
2216
2218
|
|
|
@@ -3066,6 +3068,42 @@ function applyImageBorderFormat(image, border, borderRadius) {
|
|
|
3066
3068
|
exports.applyImageBorderFormat = applyImageBorderFormat;
|
|
3067
3069
|
|
|
3068
3070
|
|
|
3071
|
+
/***/ }),
|
|
3072
|
+
|
|
3073
|
+
/***/ "./packages/roosterjs-content-model-api/lib/modelApi/link/getLinkUrl.ts":
|
|
3074
|
+
/*!******************************************************************************!*\
|
|
3075
|
+
!*** ./packages/roosterjs-content-model-api/lib/modelApi/link/getLinkUrl.ts ***!
|
|
3076
|
+
\******************************************************************************/
|
|
3077
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
3078
|
+
|
|
3079
|
+
"use strict";
|
|
3080
|
+
|
|
3081
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
3082
|
+
exports.getLinkUrl = void 0;
|
|
3083
|
+
var matchLink_1 = __webpack_require__(/*! ./matchLink */ "./packages/roosterjs-content-model-api/lib/modelApi/link/matchLink.ts");
|
|
3084
|
+
var COMMON_REGEX = "[s]*[a-zA-Z0-9+][s]*";
|
|
3085
|
+
var TELEPHONE_REGEX = "(T|t)el:" + COMMON_REGEX;
|
|
3086
|
+
var MAILTO_REGEX = "(M|m)ailto:" + COMMON_REGEX;
|
|
3087
|
+
/**
|
|
3088
|
+
* @internal
|
|
3089
|
+
*/
|
|
3090
|
+
function getLinkUrl(text, autoLinkOptions) {
|
|
3091
|
+
var _a;
|
|
3092
|
+
var _b = autoLinkOptions !== null && autoLinkOptions !== void 0 ? autoLinkOptions : {}, autoLink = _b.autoLink, autoMailto = _b.autoMailto, autoTel = _b.autoTel;
|
|
3093
|
+
var linkMatch = autoLink ? (_a = (0, matchLink_1.matchLink)(text)) === null || _a === void 0 ? void 0 : _a.normalizedUrl : undefined;
|
|
3094
|
+
var telMatch = autoTel ? matchTel(text) : undefined;
|
|
3095
|
+
var mailtoMatch = autoMailto ? matchMailTo(text) : undefined;
|
|
3096
|
+
return linkMatch || telMatch || mailtoMatch;
|
|
3097
|
+
}
|
|
3098
|
+
exports.getLinkUrl = getLinkUrl;
|
|
3099
|
+
function matchTel(text) {
|
|
3100
|
+
return text.match(TELEPHONE_REGEX) ? text.toLocaleLowerCase() : undefined;
|
|
3101
|
+
}
|
|
3102
|
+
function matchMailTo(text) {
|
|
3103
|
+
return text.match(MAILTO_REGEX) ? text.toLocaleLowerCase() : undefined;
|
|
3104
|
+
}
|
|
3105
|
+
|
|
3106
|
+
|
|
3069
3107
|
/***/ }),
|
|
3070
3108
|
|
|
3071
3109
|
/***/ "./packages/roosterjs-content-model-api/lib/modelApi/link/matchLink.ts":
|
|
@@ -3170,6 +3208,51 @@ function matchLink(url) {
|
|
|
3170
3208
|
exports.matchLink = matchLink;
|
|
3171
3209
|
|
|
3172
3210
|
|
|
3211
|
+
/***/ }),
|
|
3212
|
+
|
|
3213
|
+
/***/ "./packages/roosterjs-content-model-api/lib/modelApi/link/promoteLink.ts":
|
|
3214
|
+
/*!*******************************************************************************!*\
|
|
3215
|
+
!*** ./packages/roosterjs-content-model-api/lib/modelApi/link/promoteLink.ts ***!
|
|
3216
|
+
\*******************************************************************************/
|
|
3217
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
3218
|
+
|
|
3219
|
+
"use strict";
|
|
3220
|
+
|
|
3221
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
3222
|
+
exports.promoteLink = void 0;
|
|
3223
|
+
var getLinkUrl_1 = __webpack_require__(/*! ./getLinkUrl */ "./packages/roosterjs-content-model-api/lib/modelApi/link/getLinkUrl.ts");
|
|
3224
|
+
var splitTextSegment_1 = __webpack_require__(/*! ../../publicApi/segment/splitTextSegment */ "./packages/roosterjs-content-model-api/lib/publicApi/segment/splitTextSegment.ts");
|
|
3225
|
+
/**
|
|
3226
|
+
* Promote the given text segment to a hyper link when the segment text is ending with a valid link format.
|
|
3227
|
+
* When the whole text segment if of a link, promote the whole segment.
|
|
3228
|
+
* When the text segment ends with a link format, split the segment and promote the second part
|
|
3229
|
+
* When link is in middle of the text segment, no action.
|
|
3230
|
+
* This is mainly used for doing auto link when there is a link before cursor
|
|
3231
|
+
* @param segment The text segment to search link text from
|
|
3232
|
+
* @param paragraph Parent paragraph of the segment
|
|
3233
|
+
* @param options Options of auto link
|
|
3234
|
+
* @returns If a link is promoted, return this segment. Otherwise return null
|
|
3235
|
+
*/
|
|
3236
|
+
function promoteLink(segment, paragraph, autoLinkOptions) {
|
|
3237
|
+
var link = segment.text.split(' ').pop();
|
|
3238
|
+
var url = link === null || link === void 0 ? void 0 : link.trim();
|
|
3239
|
+
var linkUrl = undefined;
|
|
3240
|
+
if (url && link && (linkUrl = (0, getLinkUrl_1.getLinkUrl)(url, autoLinkOptions))) {
|
|
3241
|
+
var linkSegment = (0, splitTextSegment_1.splitTextSegment)(segment, paragraph, segment.text.length - link.trimLeft().length, segment.text.trimRight().length);
|
|
3242
|
+
linkSegment.link = {
|
|
3243
|
+
format: {
|
|
3244
|
+
href: linkUrl,
|
|
3245
|
+
underline: true,
|
|
3246
|
+
},
|
|
3247
|
+
dataset: {},
|
|
3248
|
+
};
|
|
3249
|
+
return linkSegment;
|
|
3250
|
+
}
|
|
3251
|
+
return null;
|
|
3252
|
+
}
|
|
3253
|
+
exports.promoteLink = promoteLink;
|
|
3254
|
+
|
|
3255
|
+
|
|
3173
3256
|
/***/ }),
|
|
3174
3257
|
|
|
3175
3258
|
/***/ "./packages/roosterjs-content-model-api/lib/modelApi/list/findListItemsInSameThread.ts":
|
|
@@ -10181,6 +10264,10 @@ function getIndexedTableItem(element) {
|
|
|
10181
10264
|
return null;
|
|
10182
10265
|
}
|
|
10183
10266
|
}
|
|
10267
|
+
// Make a node not indexed. Do not export this function since we should not let code outside here know this detail
|
|
10268
|
+
function unindex(node) {
|
|
10269
|
+
delete node.__roosterjsContentModel;
|
|
10270
|
+
}
|
|
10184
10271
|
/**
|
|
10185
10272
|
* @internal
|
|
10186
10273
|
* Implementation of DomIndexer
|
|
@@ -10228,6 +10315,19 @@ var DomIndexerImpl = /** @class */ (function () {
|
|
|
10228
10315
|
this.onBlockEntityDelimiter(entity.wrapper.previousSibling, entity, group);
|
|
10229
10316
|
this.onBlockEntityDelimiter(entity.wrapper.nextSibling, entity, group);
|
|
10230
10317
|
};
|
|
10318
|
+
DomIndexerImpl.prototype.onMergeText = function (targetText, sourceText) {
|
|
10319
|
+
var _a;
|
|
10320
|
+
if (isIndexedSegment(targetText) && isIndexedSegment(sourceText)) {
|
|
10321
|
+
if (targetText.nextSibling == sourceText) {
|
|
10322
|
+
(_a = targetText.__roosterjsContentModel.segments).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sourceText.__roosterjsContentModel.segments), false));
|
|
10323
|
+
unindex(sourceText);
|
|
10324
|
+
}
|
|
10325
|
+
}
|
|
10326
|
+
else {
|
|
10327
|
+
unindex(sourceText);
|
|
10328
|
+
unindex(targetText);
|
|
10329
|
+
}
|
|
10330
|
+
};
|
|
10231
10331
|
DomIndexerImpl.prototype.reconcileSelection = function (model, newSelection, oldSelection) {
|
|
10232
10332
|
var _a, _b;
|
|
10233
10333
|
if (oldSelection) {
|
|
@@ -13880,9 +13980,6 @@ var Editor = /** @class */ (function () {
|
|
|
13880
13980
|
case 'connected': // Get a connected model is deprecated. Now we will always return disconnected model
|
|
13881
13981
|
case 'disconnected':
|
|
13882
13982
|
return (0, roosterjs_content_model_dom_1.cloneModel)(core.api.createContentModel(core, {
|
|
13883
|
-
processorOverride: {
|
|
13884
|
-
table: roosterjs_content_model_dom_1.tableProcessor,
|
|
13885
|
-
},
|
|
13886
13983
|
tryGetFromCache: false,
|
|
13887
13984
|
}), {
|
|
13888
13985
|
includeCachedElement: this.cloneOptionCallback,
|
|
@@ -14408,7 +14505,6 @@ exports.getDarkColorFallback = getDarkColorFallback;
|
|
|
14408
14505
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
14409
14506
|
exports.createModelToDomSettings = exports.createDomToModelSettings = void 0;
|
|
14410
14507
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
14411
|
-
var tablePreProcessor_1 = __webpack_require__(/*! ../../override/tablePreProcessor */ "./packages/roosterjs-content-model-core/lib/override/tablePreProcessor.ts");
|
|
14412
14508
|
var listMetadataApplier_1 = __webpack_require__(/*! ../../override/listMetadataApplier */ "./packages/roosterjs-content-model-core/lib/override/listMetadataApplier.ts");
|
|
14413
14509
|
/**
|
|
14414
14510
|
* @internal
|
|
@@ -14417,11 +14513,7 @@ var listMetadataApplier_1 = __webpack_require__(/*! ../../override/listMetadataA
|
|
|
14417
14513
|
*/
|
|
14418
14514
|
function createDomToModelSettings(options) {
|
|
14419
14515
|
var _a;
|
|
14420
|
-
var builtIn = {
|
|
14421
|
-
processorOverride: {
|
|
14422
|
-
table: tablePreProcessor_1.tablePreProcessor,
|
|
14423
|
-
},
|
|
14424
|
-
};
|
|
14516
|
+
var builtIn = {};
|
|
14425
14517
|
var customized = (_a = options.defaultDomToModelOptions) !== null && _a !== void 0 ? _a : {};
|
|
14426
14518
|
return {
|
|
14427
14519
|
builtIn: builtIn,
|
|
@@ -14769,40 +14861,6 @@ var pasteTextProcessor = function (group, text, context) {
|
|
|
14769
14861
|
exports.pasteTextProcessor = pasteTextProcessor;
|
|
14770
14862
|
|
|
14771
14863
|
|
|
14772
|
-
/***/ }),
|
|
14773
|
-
|
|
14774
|
-
/***/ "./packages/roosterjs-content-model-core/lib/override/tablePreProcessor.ts":
|
|
14775
|
-
/*!*********************************************************************************!*\
|
|
14776
|
-
!*** ./packages/roosterjs-content-model-core/lib/override/tablePreProcessor.ts ***!
|
|
14777
|
-
\*********************************************************************************/
|
|
14778
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
14779
|
-
|
|
14780
|
-
"use strict";
|
|
14781
|
-
|
|
14782
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
14783
|
-
exports.tablePreProcessor = void 0;
|
|
14784
|
-
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
14785
|
-
/**
|
|
14786
|
-
* @internal
|
|
14787
|
-
*/
|
|
14788
|
-
var tablePreProcessor = function (group, element, context) {
|
|
14789
|
-
var processor = shouldUseTableProcessor(element, context) ? roosterjs_content_model_dom_1.tableProcessor : roosterjs_content_model_dom_1.entityProcessor;
|
|
14790
|
-
processor(group, element, context);
|
|
14791
|
-
};
|
|
14792
|
-
exports.tablePreProcessor = tablePreProcessor;
|
|
14793
|
-
function shouldUseTableProcessor(element, context) {
|
|
14794
|
-
var selectionRoot = (0, roosterjs_content_model_dom_1.getSelectionRootNode)(context.selection);
|
|
14795
|
-
// Treat table as a real table when:
|
|
14796
|
-
// 1. It is a roosterjs table (has metadata)
|
|
14797
|
-
// 2. Table is in selection
|
|
14798
|
-
// 3. There is selection inside table (or whole table is selected)
|
|
14799
|
-
// Otherwise, we treat the table as entity so we will not change it when write back
|
|
14800
|
-
return ((0, roosterjs_content_model_dom_1.hasMetadata)(element) ||
|
|
14801
|
-
context.isInSelection ||
|
|
14802
|
-
(selectionRoot && element.contains(selectionRoot)));
|
|
14803
|
-
}
|
|
14804
|
-
|
|
14805
|
-
|
|
14806
14864
|
/***/ }),
|
|
14807
14865
|
|
|
14808
14866
|
/***/ "./packages/roosterjs-content-model-core/lib/utils/createAriaLiveElement.ts":
|
|
@@ -18434,12 +18492,15 @@ var directionFormatHandler_1 = __webpack_require__(/*! ./directionFormatHandler
|
|
|
18434
18492
|
*/
|
|
18435
18493
|
exports.htmlAlignFormatHandler = {
|
|
18436
18494
|
parse: function (format, element, context, defaultStyle) {
|
|
18437
|
-
|
|
18438
|
-
|
|
18439
|
-
|
|
18440
|
-
|
|
18441
|
-
|
|
18442
|
-
|
|
18495
|
+
// When there is text-align in CSS style on the same element, we should ignore HTML align
|
|
18496
|
+
if (!element.style.textAlign) {
|
|
18497
|
+
directionFormatHandler_1.directionFormatHandler.parse(format, element, context, defaultStyle);
|
|
18498
|
+
var htmlAlign = element.getAttribute('align');
|
|
18499
|
+
if (htmlAlign) {
|
|
18500
|
+
format.htmlAlign = (0, dir_1.calcAlign)(htmlAlign, format.direction);
|
|
18501
|
+
delete format.textAlign;
|
|
18502
|
+
delete context.blockFormat.textAlign;
|
|
18503
|
+
}
|
|
18443
18504
|
}
|
|
18444
18505
|
},
|
|
18445
18506
|
apply: function (format, element) {
|
|
@@ -21172,6 +21233,7 @@ exports.normalizeContentModel = normalizeContentModel;
|
|
|
21172
21233
|
|
|
21173
21234
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
21174
21235
|
exports.normalizeParagraph = void 0;
|
|
21236
|
+
var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
|
|
21175
21237
|
var areSameFormats_1 = __webpack_require__(/*! ../../domToModel/utils/areSameFormats */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/areSameFormats.ts");
|
|
21176
21238
|
var createBr_1 = __webpack_require__(/*! ../creators/createBr */ "./packages/roosterjs-content-model-dom/lib/modelApi/creators/createBr.ts");
|
|
21177
21239
|
var isEmpty_1 = __webpack_require__(/*! ./isEmpty */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/isEmpty.ts");
|
|
@@ -21207,6 +21269,7 @@ function normalizeParagraph(paragraph) {
|
|
|
21207
21269
|
}
|
|
21208
21270
|
removeEmptyLinks(paragraph);
|
|
21209
21271
|
removeEmptySegments(paragraph);
|
|
21272
|
+
mergeTextSegments(paragraph);
|
|
21210
21273
|
moveUpSegmentFormat(paragraph);
|
|
21211
21274
|
}
|
|
21212
21275
|
exports.normalizeParagraph = normalizeParagraph;
|
|
@@ -21224,6 +21287,40 @@ function removeEmptySegments(block) {
|
|
|
21224
21287
|
}
|
|
21225
21288
|
}
|
|
21226
21289
|
}
|
|
21290
|
+
function mergeTextSegments(block) {
|
|
21291
|
+
var lastText = null;
|
|
21292
|
+
for (var i = 0; i < block.segments.length; i++) {
|
|
21293
|
+
var segment = block.segments[i];
|
|
21294
|
+
if (segment.segmentType != 'Text') {
|
|
21295
|
+
lastText = null;
|
|
21296
|
+
}
|
|
21297
|
+
else if (!lastText || !segmentsWithSameFormat(lastText, segment)) {
|
|
21298
|
+
lastText = segment;
|
|
21299
|
+
}
|
|
21300
|
+
else {
|
|
21301
|
+
var _a = (0, tslib_1.__read)((0, mutate_1.mutateSegments)(block, [lastText, segment]), 2), mutableBlock = _a[0], _b = (0, tslib_1.__read)(_a[1], 1), mutableLastText = _b[0];
|
|
21302
|
+
mutableLastText.text += segment.text;
|
|
21303
|
+
mutableBlock.segments.splice(i, 1);
|
|
21304
|
+
i--;
|
|
21305
|
+
}
|
|
21306
|
+
}
|
|
21307
|
+
}
|
|
21308
|
+
function segmentsWithSameFormat(seg1, seg2) {
|
|
21309
|
+
return (!!seg1.isSelected == !!seg2.isSelected &&
|
|
21310
|
+
(0, areSameFormats_1.areSameFormats)(seg1.format, seg2.format) &&
|
|
21311
|
+
areSameLinks(seg1.link, seg2.link) &&
|
|
21312
|
+
areSameCodes(seg1.code, seg2.code));
|
|
21313
|
+
}
|
|
21314
|
+
function areSameLinks(link1, link2) {
|
|
21315
|
+
return ((!link1 && !link2) ||
|
|
21316
|
+
(link1 &&
|
|
21317
|
+
link2 &&
|
|
21318
|
+
(0, areSameFormats_1.areSameFormats)(link1.format, link2.format) &&
|
|
21319
|
+
(0, areSameFormats_1.areSameFormats)(link1.dataset, link2.dataset)));
|
|
21320
|
+
}
|
|
21321
|
+
function areSameCodes(code1, code2) {
|
|
21322
|
+
return (!code1 && !code2) || (code1 && code2 && (0, areSameFormats_1.areSameFormats)(code1.format, code2.format));
|
|
21323
|
+
}
|
|
21227
21324
|
function removeEmptyLinks(paragraph) {
|
|
21228
21325
|
var marker = paragraph.segments.find(function (x) { return x.segmentType == 'SelectionMarker'; });
|
|
21229
21326
|
if (marker) {
|
|
@@ -22624,7 +22721,7 @@ function deleteExpandedSelection(model, formatContext) {
|
|
|
22624
22721
|
// so we can put cursor here after delete
|
|
22625
22722
|
paragraph = block_1;
|
|
22626
22723
|
insertMarkerIndex = indexes[0];
|
|
22627
|
-
markerFormat = (0, getSegmentTextFormat_1.getSegmentTextFormat)(segments[0]);
|
|
22724
|
+
markerFormat = (0, getSegmentTextFormat_1.getSegmentTextFormat)(segments[0], true /*includingBIU*/);
|
|
22628
22725
|
context.lastParagraph = paragraph;
|
|
22629
22726
|
context.lastTableContext = tableContext;
|
|
22630
22727
|
segments.forEach(function (segment, i) {
|
|
@@ -22968,18 +23065,22 @@ exports.getSegmentTextFormat = void 0;
|
|
|
22968
23065
|
/**
|
|
22969
23066
|
* Get the text format of a segment, this function will return only format that is applicable to text
|
|
22970
23067
|
* @param segment The segment to get format from
|
|
23068
|
+
* @param includingBIU When pass true, also get Bold/Italic/Underline format
|
|
22971
23069
|
* @returns
|
|
22972
23070
|
*/
|
|
22973
|
-
function getSegmentTextFormat(segment) {
|
|
23071
|
+
function getSegmentTextFormat(segment, includingBIU) {
|
|
22974
23072
|
var _a;
|
|
22975
|
-
var
|
|
23073
|
+
var format = (_a = segment.format) !== null && _a !== void 0 ? _a : {};
|
|
22976
23074
|
var textFormat = {
|
|
22977
|
-
fontFamily: fontFamily,
|
|
22978
|
-
fontSize: fontSize,
|
|
22979
|
-
textColor: textColor,
|
|
22980
|
-
backgroundColor: backgroundColor,
|
|
22981
|
-
letterSpacing: letterSpacing,
|
|
22982
|
-
lineHeight: lineHeight,
|
|
23075
|
+
fontFamily: format.fontFamily,
|
|
23076
|
+
fontSize: format.fontSize,
|
|
23077
|
+
textColor: format.textColor,
|
|
23078
|
+
backgroundColor: format.backgroundColor,
|
|
23079
|
+
letterSpacing: format.letterSpacing,
|
|
23080
|
+
lineHeight: format.lineHeight,
|
|
23081
|
+
fontWeight: includingBIU ? format.fontWeight : undefined,
|
|
23082
|
+
italic: includingBIU ? format.italic : undefined,
|
|
23083
|
+
underline: includingBIU ? format.underline : undefined,
|
|
22983
23084
|
};
|
|
22984
23085
|
return removeUndefinedValues(textFormat);
|
|
22985
23086
|
}
|
|
@@ -23293,12 +23394,26 @@ function getSegmentFormatInLinkFormat(targetFormat) {
|
|
|
23293
23394
|
return result;
|
|
23294
23395
|
}
|
|
23295
23396
|
function mergeLinkFormat(applyDefaultFormatOption, targetFormat, sourceFormat) {
|
|
23296
|
-
|
|
23297
|
-
|
|
23397
|
+
switch (applyDefaultFormatOption) {
|
|
23398
|
+
case 'mergeAll':
|
|
23399
|
+
case 'preferSource':
|
|
23400
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, getSegmentFormatInLinkFormat(targetFormat)), sourceFormat);
|
|
23401
|
+
case 'keepSourceEmphasisFormat':
|
|
23402
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, getFormatWithoutSegmentFormat(sourceFormat)), getSegmentFormatInLinkFormat(targetFormat)), getSemanticFormat(sourceFormat)), getHyperlinkTextColor(sourceFormat));
|
|
23403
|
+
case 'preferTarget':
|
|
23404
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, sourceFormat), getSegmentFormatInLinkFormat(targetFormat));
|
|
23405
|
+
}
|
|
23298
23406
|
}
|
|
23299
23407
|
function mergeSegmentFormat(applyDefaultFormatOption, targetFormat, sourceFormat) {
|
|
23300
|
-
|
|
23301
|
-
|
|
23408
|
+
switch (applyDefaultFormatOption) {
|
|
23409
|
+
case 'mergeAll':
|
|
23410
|
+
case 'preferSource':
|
|
23411
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, targetFormat), sourceFormat);
|
|
23412
|
+
case 'preferTarget':
|
|
23413
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, sourceFormat), targetFormat);
|
|
23414
|
+
case 'keepSourceEmphasisFormat':
|
|
23415
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, getFormatWithoutSegmentFormat(sourceFormat)), targetFormat), getSemanticFormat(sourceFormat));
|
|
23416
|
+
}
|
|
23302
23417
|
}
|
|
23303
23418
|
function getSemanticFormat(segmentFormat) {
|
|
23304
23419
|
var result = {};
|
|
@@ -25178,14 +25293,17 @@ function extractSelectionRange(doc, context) {
|
|
|
25178
25293
|
}
|
|
25179
25294
|
}
|
|
25180
25295
|
function calcPosition(pos) {
|
|
25181
|
-
var _a, _b, _c;
|
|
25296
|
+
var _a, _b, _c, _d, _e;
|
|
25182
25297
|
var result;
|
|
25183
25298
|
if (pos.block) {
|
|
25184
25299
|
if (!pos.segment) {
|
|
25185
25300
|
result = { container: pos.block, offset: 0 };
|
|
25186
25301
|
}
|
|
25187
25302
|
else if ((0, isNodeOfType_1.isNodeOfType)(pos.segment, 'TEXT_NODE')) {
|
|
25188
|
-
result = {
|
|
25303
|
+
result = {
|
|
25304
|
+
container: pos.segment,
|
|
25305
|
+
offset: (_c = (_a = pos.offset) !== null && _a !== void 0 ? _a : (_b = pos.segment.nodeValue) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0,
|
|
25306
|
+
};
|
|
25189
25307
|
}
|
|
25190
25308
|
else if (pos.segment.parentNode) {
|
|
25191
25309
|
result = {
|
|
@@ -25204,7 +25322,7 @@ function calcPosition(pos) {
|
|
|
25204
25322
|
result = {
|
|
25205
25323
|
container: container,
|
|
25206
25324
|
offset: (0, isNodeOfType_1.isNodeOfType)(container, 'TEXT_NODE')
|
|
25207
|
-
? (
|
|
25325
|
+
? (_e = (_d = container.nodeValue) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0
|
|
25208
25326
|
: container.childNodes.length,
|
|
25209
25327
|
};
|
|
25210
25328
|
}
|
|
@@ -25971,7 +26089,7 @@ var handleParagraph = function (doc, parent, paragraph, context, refNode) {
|
|
|
25971
26089
|
else {
|
|
25972
26090
|
handleSegments();
|
|
25973
26091
|
}
|
|
25974
|
-
(0, optimize_1.optimize)(container);
|
|
26092
|
+
(0, optimize_1.optimize)(container, context);
|
|
25975
26093
|
// It is possible the next sibling node is changed during processing child segments
|
|
25976
26094
|
// e.g. When this paragraph is an implicit paragraph and it contains an inline entity segment
|
|
25977
26095
|
// The segment will be appended to container as child then the container will be removed
|
|
@@ -26311,12 +26429,13 @@ function hasSameAttributes(element1, element2) {
|
|
|
26311
26429
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
26312
26430
|
exports.optimize = void 0;
|
|
26313
26431
|
var entityUtils_1 = __webpack_require__(/*! ../../domUtils/entityUtils */ "./packages/roosterjs-content-model-dom/lib/domUtils/entityUtils.ts");
|
|
26432
|
+
var isNodeOfType_1 = __webpack_require__(/*! ../../domUtils/isNodeOfType */ "./packages/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts");
|
|
26314
26433
|
var mergeNode_1 = __webpack_require__(/*! ./mergeNode */ "./packages/roosterjs-content-model-dom/lib/modelToDom/optimizers/mergeNode.ts");
|
|
26315
26434
|
var removeUnnecessarySpan_1 = __webpack_require__(/*! ./removeUnnecessarySpan */ "./packages/roosterjs-content-model-dom/lib/modelToDom/optimizers/removeUnnecessarySpan.ts");
|
|
26316
26435
|
/**
|
|
26317
26436
|
* @internal
|
|
26318
26437
|
*/
|
|
26319
|
-
function optimize(root) {
|
|
26438
|
+
function optimize(root, context) {
|
|
26320
26439
|
/**
|
|
26321
26440
|
* Do no do any optimization to entity
|
|
26322
26441
|
*/
|
|
@@ -26326,10 +26445,48 @@ function optimize(root) {
|
|
|
26326
26445
|
(0, removeUnnecessarySpan_1.removeUnnecessarySpan)(root);
|
|
26327
26446
|
(0, mergeNode_1.mergeNode)(root);
|
|
26328
26447
|
for (var child = root.firstChild; child; child = child.nextSibling) {
|
|
26329
|
-
optimize(child);
|
|
26448
|
+
optimize(child, context);
|
|
26330
26449
|
}
|
|
26450
|
+
normalizeTextNode(root, context);
|
|
26331
26451
|
}
|
|
26332
26452
|
exports.optimize = optimize;
|
|
26453
|
+
// Merge continuous text nodes into one single node (same with normalize()),
|
|
26454
|
+
// and update selection and dom indexes
|
|
26455
|
+
function normalizeTextNode(root, context) {
|
|
26456
|
+
var _a, _b, _c, _d;
|
|
26457
|
+
var lastText = null;
|
|
26458
|
+
var child;
|
|
26459
|
+
var next;
|
|
26460
|
+
var selection = context.regularSelection;
|
|
26461
|
+
for (child = root.firstChild, next = child ? child.nextSibling : null; child; child = next, next = child ? child.nextSibling : null) {
|
|
26462
|
+
if (!(0, isNodeOfType_1.isNodeOfType)(child, 'TEXT_NODE')) {
|
|
26463
|
+
lastText = null;
|
|
26464
|
+
}
|
|
26465
|
+
else if (!lastText) {
|
|
26466
|
+
lastText = child;
|
|
26467
|
+
}
|
|
26468
|
+
else {
|
|
26469
|
+
var originalLength = (_b = (_a = lastText.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
26470
|
+
(_c = context.domIndexer) === null || _c === void 0 ? void 0 : _c.onMergeText(lastText, child);
|
|
26471
|
+
lastText.nodeValue += (_d = child.nodeValue) !== null && _d !== void 0 ? _d : '';
|
|
26472
|
+
if (selection) {
|
|
26473
|
+
updateSelection(selection.start, lastText, child, originalLength);
|
|
26474
|
+
updateSelection(selection.end, lastText, child, originalLength);
|
|
26475
|
+
}
|
|
26476
|
+
root.removeChild(child);
|
|
26477
|
+
}
|
|
26478
|
+
}
|
|
26479
|
+
}
|
|
26480
|
+
function updateSelection(mark, lastText, nextText, lastTextOriginalLength) {
|
|
26481
|
+
if (mark && mark.offset == undefined) {
|
|
26482
|
+
if (mark.segment == lastText) {
|
|
26483
|
+
mark.offset = lastTextOriginalLength;
|
|
26484
|
+
}
|
|
26485
|
+
else if (mark.segment == nextText) {
|
|
26486
|
+
mark.segment = lastText;
|
|
26487
|
+
}
|
|
26488
|
+
}
|
|
26489
|
+
}
|
|
26333
26490
|
|
|
26334
26491
|
|
|
26335
26492
|
/***/ }),
|
|
@@ -26602,7 +26759,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
26602
26759
|
exports.AutoFormatPlugin = void 0;
|
|
26603
26760
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
26604
26761
|
var createLink_1 = __webpack_require__(/*! ./link/createLink */ "./packages/roosterjs-content-model-plugins/lib/autoFormat/link/createLink.ts");
|
|
26605
|
-
var createLinkAfterSpace_1 = __webpack_require__(/*! ./link/createLinkAfterSpace */ "./packages/roosterjs-content-model-plugins/lib/autoFormat/link/createLinkAfterSpace.ts");
|
|
26606
26762
|
var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
|
|
26607
26763
|
var keyboardListTrigger_1 = __webpack_require__(/*! ./list/keyboardListTrigger */ "./packages/roosterjs-content-model-plugins/lib/autoFormat/list/keyboardListTrigger.ts");
|
|
26608
26764
|
var transformFraction_1 = __webpack_require__(/*! ./numbers/transformFraction */ "./packages/roosterjs-content-model-plugins/lib/autoFormat/numbers/transformFraction.ts");
|
|
@@ -26712,11 +26868,14 @@ var AutoFormatPlugin = /** @class */ (function () {
|
|
|
26712
26868
|
shouldList = (0, keyboardListTrigger_1.keyboardListTrigger)(model, paragraph, context, autoBullet, autoNumbering);
|
|
26713
26869
|
}
|
|
26714
26870
|
if (autoLink || autoTel || autoMailto) {
|
|
26715
|
-
shouldLink = (0,
|
|
26871
|
+
shouldLink = !!(0, roosterjs_content_model_api_1.promoteLink)(previousSegment, paragraph, {
|
|
26716
26872
|
autoLink: autoLink,
|
|
26717
26873
|
autoTel: autoTel,
|
|
26718
26874
|
autoMailto: autoMailto,
|
|
26719
26875
|
});
|
|
26876
|
+
if (shouldLink) {
|
|
26877
|
+
context.canUndoByBackspace = true;
|
|
26878
|
+
}
|
|
26720
26879
|
}
|
|
26721
26880
|
if (autoHyphen) {
|
|
26722
26881
|
shouldHyphen = (0, transformHyphen_1.transformHyphen)(previousSegment, paragraph, context);
|
|
@@ -26740,6 +26899,7 @@ var AutoFormatPlugin = /** @class */ (function () {
|
|
|
26740
26899
|
}
|
|
26741
26900
|
};
|
|
26742
26901
|
AutoFormatPlugin.prototype.handleKeyDownEvent = function (editor, event) {
|
|
26902
|
+
var _this = this;
|
|
26743
26903
|
var rawEvent = event.rawEvent;
|
|
26744
26904
|
if (!rawEvent.defaultPrevented && !event.handledByEditFeature) {
|
|
26745
26905
|
switch (rawEvent.key) {
|
|
@@ -26748,6 +26908,20 @@ var AutoFormatPlugin = /** @class */ (function () {
|
|
|
26748
26908
|
(0, unlink_1.unlink)(editor, rawEvent);
|
|
26749
26909
|
}
|
|
26750
26910
|
break;
|
|
26911
|
+
case 'Tab':
|
|
26912
|
+
(0, roosterjs_content_model_api_1.formatTextSegmentBeforeSelectionMarker)(editor, function (model, _previousSegment, paragraph, _markerFormat, context) {
|
|
26913
|
+
var _a = _this.options, autoBullet = _a.autoBullet, autoNumbering = _a.autoNumbering;
|
|
26914
|
+
var shouldList = false;
|
|
26915
|
+
if (autoBullet || autoNumbering) {
|
|
26916
|
+
shouldList = (0, keyboardListTrigger_1.keyboardListTrigger)(model, paragraph, context, autoBullet, autoNumbering);
|
|
26917
|
+
context.canUndoByBackspace = shouldList;
|
|
26918
|
+
event.rawEvent.preventDefault();
|
|
26919
|
+
}
|
|
26920
|
+
return shouldList;
|
|
26921
|
+
}, {
|
|
26922
|
+
changeSource: roosterjs_content_model_dom_1.ChangeSource.AutoFormat,
|
|
26923
|
+
apiName: 'autoToggleList',
|
|
26924
|
+
});
|
|
26751
26925
|
}
|
|
26752
26926
|
}
|
|
26753
26927
|
};
|
|
@@ -26835,33 +27009,26 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
26835
27009
|
exports.createLink = void 0;
|
|
26836
27010
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
26837
27011
|
var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
|
|
26838
|
-
var getLinkUrl_1 = __webpack_require__(/*! ./getLinkUrl */ "./packages/roosterjs-content-model-plugins/lib/autoFormat/link/getLinkUrl.ts");
|
|
26839
27012
|
/**
|
|
26840
27013
|
* @internal
|
|
26841
27014
|
*/
|
|
26842
27015
|
function createLink(editor, autoLinkOptions) {
|
|
26843
27016
|
var anchorNode = null;
|
|
26844
27017
|
var links = [];
|
|
26845
|
-
(0, roosterjs_content_model_api_1.formatTextSegmentBeforeSelectionMarker)(editor, function (_model,
|
|
26846
|
-
|
|
26847
|
-
|
|
27018
|
+
(0, roosterjs_content_model_api_1.formatTextSegmentBeforeSelectionMarker)(editor, function (_model, segment, paragraph) {
|
|
27019
|
+
var promotedSegment = null;
|
|
27020
|
+
if (segment.link) {
|
|
27021
|
+
links.push(segment.link);
|
|
26848
27022
|
return true;
|
|
26849
27023
|
}
|
|
26850
|
-
|
|
26851
|
-
|
|
26852
|
-
(
|
|
26853
|
-
format: {
|
|
26854
|
-
href: linkUrl,
|
|
26855
|
-
underline: true,
|
|
26856
|
-
},
|
|
26857
|
-
dataset: {},
|
|
26858
|
-
});
|
|
26859
|
-
if (linkSegment.link) {
|
|
26860
|
-
links.push(linkSegment.link);
|
|
26861
|
-
}
|
|
27024
|
+
else if ((promotedSegment = (0, roosterjs_content_model_api_1.promoteLink)(segment, paragraph, autoLinkOptions)) &&
|
|
27025
|
+
promotedSegment.link) {
|
|
27026
|
+
links.push(promotedSegment.link);
|
|
26862
27027
|
return true;
|
|
26863
27028
|
}
|
|
26864
|
-
|
|
27029
|
+
else {
|
|
27030
|
+
return false;
|
|
27031
|
+
}
|
|
26865
27032
|
}, {
|
|
26866
27033
|
changeSource: roosterjs_content_model_dom_1.ChangeSource.AutoLink,
|
|
26867
27034
|
onNodeCreated: function (modelElement, node) {
|
|
@@ -26875,80 +27042,6 @@ function createLink(editor, autoLinkOptions) {
|
|
|
26875
27042
|
exports.createLink = createLink;
|
|
26876
27043
|
|
|
26877
27044
|
|
|
26878
|
-
/***/ }),
|
|
26879
|
-
|
|
26880
|
-
/***/ "./packages/roosterjs-content-model-plugins/lib/autoFormat/link/createLinkAfterSpace.ts":
|
|
26881
|
-
/*!**********************************************************************************************!*\
|
|
26882
|
-
!*** ./packages/roosterjs-content-model-plugins/lib/autoFormat/link/createLinkAfterSpace.ts ***!
|
|
26883
|
-
\**********************************************************************************************/
|
|
26884
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
26885
|
-
|
|
26886
|
-
"use strict";
|
|
26887
|
-
|
|
26888
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
26889
|
-
exports.createLinkAfterSpace = void 0;
|
|
26890
|
-
var getLinkUrl_1 = __webpack_require__(/*! ./getLinkUrl */ "./packages/roosterjs-content-model-plugins/lib/autoFormat/link/getLinkUrl.ts");
|
|
26891
|
-
var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
|
|
26892
|
-
/**
|
|
26893
|
-
* @internal
|
|
26894
|
-
*/
|
|
26895
|
-
function createLinkAfterSpace(previousSegment, paragraph, context, autoLinkOptions) {
|
|
26896
|
-
var link = previousSegment.text.split(' ').pop();
|
|
26897
|
-
var url = link === null || link === void 0 ? void 0 : link.trim();
|
|
26898
|
-
var linkUrl = undefined;
|
|
26899
|
-
if (url && link && (linkUrl = (0, getLinkUrl_1.getLinkUrl)(url, autoLinkOptions))) {
|
|
26900
|
-
var linkSegment = (0, roosterjs_content_model_api_1.splitTextSegment)(previousSegment, paragraph, previousSegment.text.length - link.trimLeft().length, previousSegment.text.trimRight().length);
|
|
26901
|
-
linkSegment.link = {
|
|
26902
|
-
format: {
|
|
26903
|
-
href: linkUrl,
|
|
26904
|
-
underline: true,
|
|
26905
|
-
},
|
|
26906
|
-
dataset: {},
|
|
26907
|
-
};
|
|
26908
|
-
context.canUndoByBackspace = true;
|
|
26909
|
-
return true;
|
|
26910
|
-
}
|
|
26911
|
-
return false;
|
|
26912
|
-
}
|
|
26913
|
-
exports.createLinkAfterSpace = createLinkAfterSpace;
|
|
26914
|
-
|
|
26915
|
-
|
|
26916
|
-
/***/ }),
|
|
26917
|
-
|
|
26918
|
-
/***/ "./packages/roosterjs-content-model-plugins/lib/autoFormat/link/getLinkUrl.ts":
|
|
26919
|
-
/*!************************************************************************************!*\
|
|
26920
|
-
!*** ./packages/roosterjs-content-model-plugins/lib/autoFormat/link/getLinkUrl.ts ***!
|
|
26921
|
-
\************************************************************************************/
|
|
26922
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
26923
|
-
|
|
26924
|
-
"use strict";
|
|
26925
|
-
|
|
26926
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
26927
|
-
exports.getLinkUrl = void 0;
|
|
26928
|
-
var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
|
|
26929
|
-
var COMMON_REGEX = "[s]*[a-zA-Z0-9+][s]*";
|
|
26930
|
-
var TELEPHONE_REGEX = "(T|t)el:" + COMMON_REGEX;
|
|
26931
|
-
var MAILTO_REGEX = "(M|m)ailto:" + COMMON_REGEX;
|
|
26932
|
-
/**
|
|
26933
|
-
* @internal
|
|
26934
|
-
*/
|
|
26935
|
-
function getLinkUrl(text, autoLinkOptions) {
|
|
26936
|
-
var _a;
|
|
26937
|
-
var autoLink = autoLinkOptions.autoLink, autoMailto = autoLinkOptions.autoMailto, autoTel = autoLinkOptions.autoTel;
|
|
26938
|
-
var linkMatch = autoLink ? (_a = (0, roosterjs_content_model_api_1.matchLink)(text)) === null || _a === void 0 ? void 0 : _a.normalizedUrl : undefined;
|
|
26939
|
-
var telMatch = autoTel ? matchTel(text) : undefined;
|
|
26940
|
-
var mailtoMatch = autoMailto ? matchMailTo(text) : undefined;
|
|
26941
|
-
return linkMatch || telMatch || mailtoMatch;
|
|
26942
|
-
}
|
|
26943
|
-
exports.getLinkUrl = getLinkUrl;
|
|
26944
|
-
function matchTel(text) {
|
|
26945
|
-
return text.match(TELEPHONE_REGEX) ? text.toLocaleLowerCase() : undefined;
|
|
26946
|
-
}
|
|
26947
|
-
function matchMailTo(text) {
|
|
26948
|
-
return text.match(MAILTO_REGEX) ? text.toLocaleLowerCase() : undefined;
|
|
26949
|
-
}
|
|
26950
|
-
|
|
26951
|
-
|
|
26952
27045
|
/***/ }),
|
|
26953
27046
|
|
|
26954
27047
|
/***/ "./packages/roosterjs-content-model-plugins/lib/autoFormat/link/unlink.ts":
|
|
@@ -27419,6 +27512,7 @@ var getOrdinal = function (value) {
|
|
|
27419
27512
|
};
|
|
27420
27513
|
return ORDINALS[value] || 'th';
|
|
27421
27514
|
};
|
|
27515
|
+
var ORDINALS = ['st', 'nd', 'rd', 'th'];
|
|
27422
27516
|
/**
|
|
27423
27517
|
* The two last characters of ordinal number (st, nd, rd, th)
|
|
27424
27518
|
*/
|
|
@@ -27428,21 +27522,39 @@ var ORDINAL_LENGTH = 2;
|
|
|
27428
27522
|
*/ function transformOrdinals(previousSegment, paragraph, context) {
|
|
27429
27523
|
var _a;
|
|
27430
27524
|
var value = (_a = previousSegment.text.split(' ').pop()) === null || _a === void 0 ? void 0 : _a.trim();
|
|
27525
|
+
var shouldAddSuperScript = false;
|
|
27431
27526
|
if (value) {
|
|
27432
|
-
var
|
|
27433
|
-
|
|
27434
|
-
|
|
27527
|
+
var isOrdinal = ORDINALS.indexOf(value) > -1;
|
|
27528
|
+
if (isOrdinal) {
|
|
27529
|
+
var index = paragraph.segments.indexOf(previousSegment);
|
|
27530
|
+
var numberSegment = paragraph.segments[index - 1];
|
|
27531
|
+
var numericValue = null;
|
|
27532
|
+
if (numberSegment &&
|
|
27533
|
+
numberSegment.segmentType == 'Text' &&
|
|
27534
|
+
(numericValue = getNumericValue(numberSegment.text, true /* checkFullText */)) &&
|
|
27535
|
+
getOrdinal(numericValue) === value) {
|
|
27536
|
+
shouldAddSuperScript = true;
|
|
27537
|
+
}
|
|
27538
|
+
}
|
|
27539
|
+
else {
|
|
27540
|
+
var ordinal = value.substring(value.length - ORDINAL_LENGTH); // This value is equal st, nd, rd, th
|
|
27541
|
+
var numericValue = getNumericValue(value); //This is the numeric part. Ex: 10th, numeric value =
|
|
27542
|
+
if (numericValue && getOrdinal(numericValue) === ordinal) {
|
|
27543
|
+
shouldAddSuperScript = true;
|
|
27544
|
+
}
|
|
27545
|
+
}
|
|
27546
|
+
if (shouldAddSuperScript) {
|
|
27435
27547
|
var ordinalSegment = (0, roosterjs_content_model_api_1.splitTextSegment)(previousSegment, paragraph, previousSegment.text.length - 3, previousSegment.text.length - 1);
|
|
27436
27548
|
ordinalSegment.format.superOrSubScriptSequence = 'super';
|
|
27437
27549
|
context.canUndoByBackspace = true;
|
|
27438
|
-
return true;
|
|
27439
27550
|
}
|
|
27440
27551
|
}
|
|
27441
|
-
return
|
|
27552
|
+
return shouldAddSuperScript;
|
|
27442
27553
|
}
|
|
27443
27554
|
exports.transformOrdinals = transformOrdinals;
|
|
27444
|
-
function getNumericValue(text) {
|
|
27445
|
-
|
|
27555
|
+
function getNumericValue(text, checkFullText) {
|
|
27556
|
+
if (checkFullText === void 0) { checkFullText = false; }
|
|
27557
|
+
var number = checkFullText ? text : text.substring(0, text.length - ORDINAL_LENGTH);
|
|
27446
27558
|
var isNumber = /^-?\d+$/.test(number);
|
|
27447
27559
|
if (isNumber) {
|
|
27448
27560
|
return parseInt(text);
|
|
@@ -27777,6 +27889,7 @@ var EditPlugin = /** @class */ (function () {
|
|
|
27777
27889
|
};
|
|
27778
27890
|
EditPlugin.prototype.handleKeyDownEvent = function (editor, event) {
|
|
27779
27891
|
var rawEvent = event.rawEvent;
|
|
27892
|
+
var hasCtrlOrMetaKey = rawEvent.ctrlKey || rawEvent.metaKey;
|
|
27780
27893
|
if (!rawEvent.defaultPrevented && !event.handledByEditFeature) {
|
|
27781
27894
|
switch (rawEvent.key) {
|
|
27782
27895
|
case 'Backspace':
|
|
@@ -27793,7 +27906,7 @@ var EditPlugin = /** @class */ (function () {
|
|
|
27793
27906
|
}
|
|
27794
27907
|
break;
|
|
27795
27908
|
case 'Tab':
|
|
27796
|
-
if (this.options.handleTabKey) {
|
|
27909
|
+
if (this.options.handleTabKey && !hasCtrlOrMetaKey) {
|
|
27797
27910
|
(0, keyboardTab_1.keyboardTab)(editor, rawEvent);
|
|
27798
27911
|
}
|
|
27799
27912
|
break;
|
|
@@ -27803,7 +27916,9 @@ var EditPlugin = /** @class */ (function () {
|
|
|
27803
27916
|
}
|
|
27804
27917
|
break;
|
|
27805
27918
|
case 'Enter':
|
|
27806
|
-
(
|
|
27919
|
+
if (!hasCtrlOrMetaKey) {
|
|
27920
|
+
(0, keyboardEnter_1.keyboardEnter)(editor, rawEvent, this.handleNormalEnter);
|
|
27921
|
+
}
|
|
27807
27922
|
break;
|
|
27808
27923
|
default:
|
|
27809
27924
|
(0, keyboardInput_1.keyboardInput)(editor, rawEvent);
|
|
@@ -28366,6 +28481,41 @@ function shouldDeleteAllSegmentsBefore(rawEvent) {
|
|
|
28366
28481
|
exports.shouldDeleteAllSegmentsBefore = shouldDeleteAllSegmentsBefore;
|
|
28367
28482
|
|
|
28368
28483
|
|
|
28484
|
+
/***/ }),
|
|
28485
|
+
|
|
28486
|
+
/***/ "./packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleAutoLink.ts":
|
|
28487
|
+
/*!****************************************************************************************!*\
|
|
28488
|
+
!*** ./packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleAutoLink.ts ***!
|
|
28489
|
+
\****************************************************************************************/
|
|
28490
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
28491
|
+
|
|
28492
|
+
"use strict";
|
|
28493
|
+
|
|
28494
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
28495
|
+
exports.handleAutoLink = void 0;
|
|
28496
|
+
var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
|
|
28497
|
+
/**
|
|
28498
|
+
* @internal
|
|
28499
|
+
*/
|
|
28500
|
+
var handleAutoLink = function (context) {
|
|
28501
|
+
var deleteResult = context.deleteResult, insertPoint = context.insertPoint;
|
|
28502
|
+
if (deleteResult == 'notDeleted' || deleteResult == 'nothingToDelete') {
|
|
28503
|
+
var marker = insertPoint.marker, paragraph = insertPoint.paragraph;
|
|
28504
|
+
var index = paragraph.segments.indexOf(marker);
|
|
28505
|
+
var segBefore = index > 0 ? paragraph.segments[index - 1] : null;
|
|
28506
|
+
if ((segBefore === null || segBefore === void 0 ? void 0 : segBefore.segmentType) == 'Text' &&
|
|
28507
|
+
(0, roosterjs_content_model_api_1.promoteLink)(segBefore, paragraph, {
|
|
28508
|
+
autoLink: true,
|
|
28509
|
+
}) &&
|
|
28510
|
+
context.formatContext) {
|
|
28511
|
+
context.formatContext.canUndoByBackspace = true;
|
|
28512
|
+
}
|
|
28513
|
+
// Do not set deleteResult here since we haven't really start a new paragraph, we need other delete step to keep working on it
|
|
28514
|
+
}
|
|
28515
|
+
};
|
|
28516
|
+
exports.handleAutoLink = handleAutoLink;
|
|
28517
|
+
|
|
28518
|
+
|
|
28369
28519
|
/***/ }),
|
|
28370
28520
|
|
|
28371
28521
|
/***/ "./packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts":
|
|
@@ -28595,6 +28745,7 @@ function canDeleteAfter(rawEvent, range) {
|
|
|
28595
28745
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
28596
28746
|
exports.keyboardEnter = void 0;
|
|
28597
28747
|
var deleteEmptyQuote_1 = __webpack_require__(/*! ./deleteSteps/deleteEmptyQuote */ "./packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteEmptyQuote.ts");
|
|
28748
|
+
var handleAutoLink_1 = __webpack_require__(/*! ./inputSteps/handleAutoLink */ "./packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleAutoLink.ts");
|
|
28598
28749
|
var handleEnterOnList_1 = __webpack_require__(/*! ./inputSteps/handleEnterOnList */ "./packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts");
|
|
28599
28750
|
var handleEnterOnParagraph_1 = __webpack_require__(/*! ./inputSteps/handleEnterOnParagraph */ "./packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnParagraph.ts");
|
|
28600
28751
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
@@ -28612,7 +28763,9 @@ function keyboardEnter(editor, rawEvent, handleNormalEnter) {
|
|
|
28612
28763
|
// For ENTER key, although we may have deleted something, since we still need to split the line, we always treat it as not delete
|
|
28613
28764
|
// so further delete steps can keep working
|
|
28614
28765
|
result.deleteResult = 'notDeleted';
|
|
28615
|
-
var steps = rawEvent.shiftKey
|
|
28766
|
+
var steps = rawEvent.shiftKey
|
|
28767
|
+
? []
|
|
28768
|
+
: [handleAutoLink_1.handleAutoLink, handleEnterOnList_1.handleEnterOnList, deleteEmptyQuote_1.deleteEmptyQuote];
|
|
28616
28769
|
if (handleNormalEnter) {
|
|
28617
28770
|
steps.push(handleEnterOnParagraph_1.handleEnterOnParagraph);
|
|
28618
28771
|
}
|
|
@@ -28632,6 +28785,8 @@ function keyboardEnter(editor, rawEvent, handleNormalEnter) {
|
|
|
28632
28785
|
rawEvent: rawEvent,
|
|
28633
28786
|
scrollCaretIntoView: true,
|
|
28634
28787
|
changeSource: roosterjs_content_model_dom_1.ChangeSource.Keyboard,
|
|
28788
|
+
getChangeData: function () { return rawEvent.which; },
|
|
28789
|
+
apiName: 'handleEnterKey',
|
|
28635
28790
|
});
|
|
28636
28791
|
}
|
|
28637
28792
|
exports.keyboardEnter = keyboardEnter;
|
|
@@ -28676,6 +28831,8 @@ function keyboardInput(editor, rawEvent) {
|
|
|
28676
28831
|
scrollCaretIntoView: true,
|
|
28677
28832
|
rawEvent: rawEvent,
|
|
28678
28833
|
changeSource: roosterjs_content_model_dom_1.ChangeSource.Keyboard,
|
|
28834
|
+
getChangeData: function () { return rawEvent.which; },
|
|
28835
|
+
apiName: 'handleInputKey',
|
|
28679
28836
|
});
|
|
28680
28837
|
return true;
|
|
28681
28838
|
}
|
|
@@ -28723,6 +28880,9 @@ function keyboardTab(editor, rawEvent) {
|
|
|
28723
28880
|
return handleTab(model, rawEvent, context);
|
|
28724
28881
|
}, {
|
|
28725
28882
|
apiName: 'handleTabKey',
|
|
28883
|
+
rawEvent: rawEvent,
|
|
28884
|
+
changeSource: roosterjs_content_model_dom_1.ChangeSource.Keyboard,
|
|
28885
|
+
getChangeData: function () { return rawEvent.which; },
|
|
28726
28886
|
});
|
|
28727
28887
|
return true;
|
|
28728
28888
|
case 'table':
|
|
@@ -28730,7 +28890,9 @@ function keyboardTab(editor, rawEvent) {
|
|
|
28730
28890
|
return (0, handleTabOnTable_1.handleTabOnTable)(model, rawEvent);
|
|
28731
28891
|
}, {
|
|
28732
28892
|
apiName: 'handleTabKey',
|
|
28893
|
+
rawEvent: rawEvent,
|
|
28733
28894
|
changeSource: roosterjs_content_model_dom_1.ChangeSource.Keyboard,
|
|
28895
|
+
getChangeData: function () { return rawEvent.which; },
|
|
28734
28896
|
});
|
|
28735
28897
|
return true;
|
|
28736
28898
|
}
|