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