roosterjs 9.54.0 → 9.56.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 +8 -8
- 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 +8 -8
- 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 +74 -6
- package/dist/rooster-amd.js +285 -47
- 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-min.js +1 -1
- package/dist/rooster-react-amd-min.js.map +1 -1
- package/dist/rooster-react-amd.d.ts +1 -1
- package/dist/rooster-react-amd.js +60 -58
- package/dist/rooster-react-amd.js.map +1 -1
- package/dist/rooster-react-min.js +1 -1
- package/dist/rooster-react-min.js.map +1 -1
- package/dist/rooster-react.d.ts +1 -1
- package/dist/rooster-react.js +97 -95
- package/dist/rooster-react.js.map +1 -1
- package/dist/rooster.d.ts +74 -6
- package/dist/rooster.js +285 -47
- package/dist/rooster.js.map +1 -1
- package/package.json +7 -7
package/dist/rooster-amd.js
CHANGED
|
@@ -6751,7 +6751,7 @@ var formatSegmentWithContentModel_1 = __webpack_require__(/*! ../utils/formatSeg
|
|
|
6751
6751
|
*/
|
|
6752
6752
|
function changeCapitalization(editor, capitalization, language) {
|
|
6753
6753
|
editor.focus();
|
|
6754
|
-
(0, formatSegmentWithContentModel_1.formatSegmentWithContentModel)(editor, 'changeCapitalization', function (_, __, segment) {
|
|
6754
|
+
(0, formatSegmentWithContentModel_1.formatSegmentWithContentModel)(editor, 'changeCapitalization', function (_, __, segment, paragraph) {
|
|
6755
6755
|
if ((segment === null || segment === void 0 ? void 0 : segment.segmentType) == 'Text') {
|
|
6756
6756
|
switch (capitalization) {
|
|
6757
6757
|
case 'lowerCase':
|
|
@@ -6762,7 +6762,13 @@ function changeCapitalization(editor, capitalization, language) {
|
|
|
6762
6762
|
break;
|
|
6763
6763
|
case 'capitalize':
|
|
6764
6764
|
var wordArray = segment.text.toLocaleLowerCase(language).split(' ');
|
|
6765
|
-
|
|
6765
|
+
// When a collapsed selection is in the middle of a word, the word is split
|
|
6766
|
+
// into multiple text segments around the selection marker. In that case the
|
|
6767
|
+
// first segment of the word continues from a previous segment, so its first
|
|
6768
|
+
// word must not be capitalized to avoid results like "HeLlo" for "he|llo".
|
|
6769
|
+
var precedingChar = getPrecedingCharacter(paragraph, segment);
|
|
6770
|
+
var startIndex = precedingChar && precedingChar != ' ' ? 1 : 0;
|
|
6771
|
+
for (var i = startIndex; i < wordArray.length; i++) {
|
|
6766
6772
|
wordArray[i] =
|
|
6767
6773
|
wordArray[i].charAt(0).toLocaleUpperCase(language) +
|
|
6768
6774
|
wordArray[i].slice(1);
|
|
@@ -6786,6 +6792,30 @@ function changeCapitalization(editor, capitalization, language) {
|
|
|
6786
6792
|
});
|
|
6787
6793
|
}
|
|
6788
6794
|
exports.changeCapitalization = changeCapitalization;
|
|
6795
|
+
/**
|
|
6796
|
+
* Get the character immediately preceding the given segment within its paragraph, skipping
|
|
6797
|
+
* selection markers (which carry no text). Returns an empty string if there is no preceding
|
|
6798
|
+
* text character (e.g. the segment starts the paragraph or follows a non-text segment).
|
|
6799
|
+
*/
|
|
6800
|
+
function getPrecedingCharacter(paragraph, segment) {
|
|
6801
|
+
if (!paragraph) {
|
|
6802
|
+
return '';
|
|
6803
|
+
}
|
|
6804
|
+
var index = paragraph.segments.indexOf(segment);
|
|
6805
|
+
for (var i = index - 1; i >= 0; i--) {
|
|
6806
|
+
var previous = paragraph.segments[i];
|
|
6807
|
+
if (previous.segmentType == 'SelectionMarker') {
|
|
6808
|
+
continue;
|
|
6809
|
+
}
|
|
6810
|
+
else if (previous.segmentType == 'Text' && previous.text.length > 0) {
|
|
6811
|
+
return previous.text[previous.text.length - 1];
|
|
6812
|
+
}
|
|
6813
|
+
else {
|
|
6814
|
+
break;
|
|
6815
|
+
}
|
|
6816
|
+
}
|
|
6817
|
+
return '';
|
|
6818
|
+
}
|
|
6789
6819
|
|
|
6790
6820
|
|
|
6791
6821
|
/***/ },
|
|
@@ -9348,21 +9378,11 @@ exports.generatePasteOptionFromPlugins = generatePasteOptionFromPlugins;
|
|
|
9348
9378
|
"use strict";
|
|
9349
9379
|
|
|
9350
9380
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
9351
|
-
exports.mergePasteContent =
|
|
9381
|
+
exports.mergePasteContent = void 0;
|
|
9352
9382
|
var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
|
|
9353
9383
|
var createDomToModelContextForSanitizing_1 = __webpack_require__(/*! ../createModelFromHtml/createDomToModelContextForSanitizing */ "./packages/roosterjs-content-model-core/lib/command/createModelFromHtml/createDomToModelContextForSanitizing.ts");
|
|
9354
9384
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
9355
9385
|
var BlackColor = 'rgb(0,0,0)';
|
|
9356
|
-
var CloneOption = {
|
|
9357
|
-
includeCachedElement: function (node, type) { return (type == 'cache' ? undefined : node); },
|
|
9358
|
-
};
|
|
9359
|
-
/**
|
|
9360
|
-
* @internal
|
|
9361
|
-
*/
|
|
9362
|
-
function cloneModelForPaste(model) {
|
|
9363
|
-
return (0, roosterjs_content_model_dom_1.cloneModel)(model, CloneOption);
|
|
9364
|
-
}
|
|
9365
|
-
exports.cloneModelForPaste = cloneModelForPaste;
|
|
9366
9386
|
/**
|
|
9367
9387
|
* @internal
|
|
9368
9388
|
*/
|
|
@@ -9370,7 +9390,7 @@ function mergePasteContent(editor, eventResult, isFirstPaste) {
|
|
|
9370
9390
|
var fragment = eventResult.fragment, domToModelOption = eventResult.domToModelOption, customizedMerge = eventResult.customizedMerge, pasteType = eventResult.pasteType, clipboardData = eventResult.clipboardData, containsBlockElements = eventResult.containsBlockElements;
|
|
9371
9391
|
editor.formatContentModel(function (model, context) {
|
|
9372
9392
|
if (!isFirstPaste && clipboardData.modelBeforePaste) {
|
|
9373
|
-
var clonedModel = cloneModelForPaste(clipboardData.modelBeforePaste);
|
|
9393
|
+
var clonedModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
|
|
9374
9394
|
model.blocks = clonedModel.blocks;
|
|
9375
9395
|
}
|
|
9376
9396
|
var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper());
|
|
@@ -9449,10 +9469,11 @@ function getLastSegmentFormat(pasteModel) {
|
|
|
9449
9469
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
9450
9470
|
exports.paste = void 0;
|
|
9451
9471
|
var cleanHtmlComments_1 = __webpack_require__(/*! ./cleanHtmlComments */ "./packages/roosterjs-content-model-core/lib/command/paste/cleanHtmlComments.ts");
|
|
9452
|
-
var
|
|
9472
|
+
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
9453
9473
|
var convertInlineCss_1 = __webpack_require__(/*! ../createModelFromHtml/convertInlineCss */ "./packages/roosterjs-content-model-core/lib/command/createModelFromHtml/convertInlineCss.ts");
|
|
9454
9474
|
var createPasteFragment_1 = __webpack_require__(/*! ./createPasteFragment */ "./packages/roosterjs-content-model-core/lib/command/paste/createPasteFragment.ts");
|
|
9455
9475
|
var generatePasteOptionFromPlugins_1 = __webpack_require__(/*! ./generatePasteOptionFromPlugins */ "./packages/roosterjs-content-model-core/lib/command/paste/generatePasteOptionFromPlugins.ts");
|
|
9476
|
+
var mergePasteContent_1 = __webpack_require__(/*! ./mergePasteContent */ "./packages/roosterjs-content-model-core/lib/command/paste/mergePasteContent.ts");
|
|
9456
9477
|
var retrieveHtmlInfo_1 = __webpack_require__(/*! ./retrieveHtmlInfo */ "./packages/roosterjs-content-model-core/lib/command/paste/retrieveHtmlInfo.ts");
|
|
9457
9478
|
/**
|
|
9458
9479
|
* Paste into editor using a clipboardData object
|
|
@@ -9468,7 +9489,7 @@ function paste(editor, clipboardData, pasteTypeOrGetter) {
|
|
|
9468
9489
|
if (!clipboardData.modelBeforePaste) {
|
|
9469
9490
|
isFirstPaste = true;
|
|
9470
9491
|
editor.formatContentModel(function (model) {
|
|
9471
|
-
clipboardData.modelBeforePaste = (0,
|
|
9492
|
+
clipboardData.modelBeforePaste = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(model);
|
|
9472
9493
|
return false;
|
|
9473
9494
|
});
|
|
9474
9495
|
}
|
|
@@ -12753,7 +12774,7 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
12753
12774
|
var dataTransfer = event.clipboardData;
|
|
12754
12775
|
if (shouldPreventDefaultPaste(dataTransfer, editor_1)) {
|
|
12755
12776
|
event.preventDefault();
|
|
12756
|
-
(0, roosterjs_content_model_dom_1.extractClipboardItems)((0, roosterjs_content_model_dom_1.toArray)(dataTransfer.items), _this.state.allowedCustomPasteType).then(function (clipboardData) {
|
|
12777
|
+
(0, roosterjs_content_model_dom_1.extractClipboardItems)((0, roosterjs_content_model_dom_1.toArray)(dataTransfer.items), _this.state.allowedCustomPasteType, true /* isPasteNative */).then(function (clipboardData) {
|
|
12757
12778
|
if (!editor_1.isDisposed()) {
|
|
12758
12779
|
(0, paste_1.paste)(editor_1, clipboardData, _this.state.defaultPasteType);
|
|
12759
12780
|
}
|
|
@@ -16790,6 +16811,8 @@ function createAriaLiveElement(document) {
|
|
|
16790
16811
|
div.style.height = '1px';
|
|
16791
16812
|
div.style.overflow = 'hidden';
|
|
16792
16813
|
div.style.position = 'absolute';
|
|
16814
|
+
div.style.top = '0';
|
|
16815
|
+
div.style.left = '0';
|
|
16793
16816
|
div.style.whiteSpace = 'nowrap';
|
|
16794
16817
|
div.style.width = '1px';
|
|
16795
16818
|
div.ariaLive = 'assertive';
|
|
@@ -17591,6 +17614,9 @@ function createDomToModelDecoratorContext() {
|
|
|
17591
17614
|
code: {
|
|
17592
17615
|
format: {},
|
|
17593
17616
|
},
|
|
17617
|
+
data: {
|
|
17618
|
+
format: {},
|
|
17619
|
+
},
|
|
17594
17620
|
blockDecorator: {
|
|
17595
17621
|
format: {},
|
|
17596
17622
|
tagName: '',
|
|
@@ -17662,6 +17688,7 @@ exports.defaultProcessorMap = void 0;
|
|
|
17662
17688
|
var brProcessor_1 = __webpack_require__(/*! ../processors/brProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/brProcessor.ts");
|
|
17663
17689
|
var childProcessor_1 = __webpack_require__(/*! ../processors/childProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/childProcessor.ts");
|
|
17664
17690
|
var codeProcessor_1 = __webpack_require__(/*! ../processors/codeProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/codeProcessor.ts");
|
|
17691
|
+
var dataProcessor_1 = __webpack_require__(/*! ../processors/dataProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/dataProcessor.ts");
|
|
17665
17692
|
var delimiterProcessor_1 = __webpack_require__(/*! ../processors/delimiterProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts");
|
|
17666
17693
|
var elementProcessor_1 = __webpack_require__(/*! ../processors/elementProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/elementProcessor.ts");
|
|
17667
17694
|
var entityProcessor_1 = __webpack_require__(/*! ../processors/entityProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/entityProcessor.ts");
|
|
@@ -17688,6 +17715,7 @@ exports.defaultProcessorMap = {
|
|
|
17688
17715
|
blockquote: knownElementProcessor_1.knownElementProcessor,
|
|
17689
17716
|
br: brProcessor_1.brProcessor,
|
|
17690
17717
|
code: codeProcessor_1.codeProcessor,
|
|
17718
|
+
data: dataProcessor_1.dataProcessor,
|
|
17691
17719
|
dd: formatContainerProcessor_1.formatContainerProcessor,
|
|
17692
17720
|
del: knownElementProcessor_1.knownElementProcessor,
|
|
17693
17721
|
div: knownElementProcessor_1.knownElementProcessor,
|
|
@@ -17943,6 +17971,33 @@ var codeProcessor = function (group, element, context) {
|
|
|
17943
17971
|
exports.codeProcessor = codeProcessor;
|
|
17944
17972
|
|
|
17945
17973
|
|
|
17974
|
+
/***/ },
|
|
17975
|
+
|
|
17976
|
+
/***/ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/dataProcessor.ts"
|
|
17977
|
+
/*!*****************************************************************************************!*\
|
|
17978
|
+
!*** ./packages/roosterjs-content-model-dom/lib/domToModel/processors/dataProcessor.ts ***!
|
|
17979
|
+
\*****************************************************************************************/
|
|
17980
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
17981
|
+
|
|
17982
|
+
"use strict";
|
|
17983
|
+
|
|
17984
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
17985
|
+
exports.dataProcessor = void 0;
|
|
17986
|
+
var knownElementProcessor_1 = __webpack_require__(/*! ./knownElementProcessor */ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/knownElementProcessor.ts");
|
|
17987
|
+
var parseFormat_1 = __webpack_require__(/*! ../utils/parseFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/parseFormat.ts");
|
|
17988
|
+
var stackFormat_1 = __webpack_require__(/*! ../utils/stackFormat */ "./packages/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts");
|
|
17989
|
+
/**
|
|
17990
|
+
* @internal
|
|
17991
|
+
*/
|
|
17992
|
+
var dataProcessor = function (group, element, context) {
|
|
17993
|
+
(0, stackFormat_1.stackFormat)(context, { data: 'empty' }, function () {
|
|
17994
|
+
(0, parseFormat_1.parseFormat)(element, context.formatParsers.data, context.data.format, context);
|
|
17995
|
+
(0, knownElementProcessor_1.knownElementProcessor)(group, element, context);
|
|
17996
|
+
});
|
|
17997
|
+
};
|
|
17998
|
+
exports.dataProcessor = dataProcessor;
|
|
17999
|
+
|
|
18000
|
+
|
|
17946
18001
|
/***/ },
|
|
17947
18002
|
|
|
17948
18003
|
/***/ "./packages/roosterjs-content-model-dom/lib/domToModel/processors/delimiterProcessor.ts"
|
|
@@ -19381,13 +19436,14 @@ var SkippedStylesForTable = [
|
|
|
19381
19436
|
* @internal
|
|
19382
19437
|
*/
|
|
19383
19438
|
function stackFormat(context, options, callback) {
|
|
19384
|
-
var segmentFormat = context.segmentFormat, blockFormat = context.blockFormat, linkFormat = context.link, codeFormat = context.code, decoratorFormat = context.blockDecorator;
|
|
19385
|
-
var segment = options.segment, paragraph = options.paragraph, link = options.link, code = options.code, blockDecorator = options.blockDecorator;
|
|
19439
|
+
var segmentFormat = context.segmentFormat, blockFormat = context.blockFormat, linkFormat = context.link, codeFormat = context.code, dataFormat = context.data, decoratorFormat = context.blockDecorator;
|
|
19440
|
+
var segment = options.segment, paragraph = options.paragraph, link = options.link, code = options.code, data = options.data, blockDecorator = options.blockDecorator;
|
|
19386
19441
|
try {
|
|
19387
19442
|
context.segmentFormat = stackFormatInternal(segmentFormat, segment);
|
|
19388
19443
|
context.blockFormat = stackFormatInternal(blockFormat, paragraph);
|
|
19389
19444
|
context.link = stackLinkInternal(linkFormat, link);
|
|
19390
19445
|
context.code = stackCodeInternal(codeFormat, code);
|
|
19446
|
+
context.data = stackDataInternal(dataFormat, data);
|
|
19391
19447
|
context.blockDecorator = stackDecoratorInternal(decoratorFormat, blockDecorator);
|
|
19392
19448
|
callback();
|
|
19393
19449
|
}
|
|
@@ -19396,6 +19452,7 @@ function stackFormat(context, options, callback) {
|
|
|
19396
19452
|
context.blockFormat = blockFormat;
|
|
19397
19453
|
context.link = linkFormat;
|
|
19398
19454
|
context.code = codeFormat;
|
|
19455
|
+
context.data = dataFormat;
|
|
19399
19456
|
context.blockDecorator = decoratorFormat;
|
|
19400
19457
|
}
|
|
19401
19458
|
}
|
|
@@ -19438,6 +19495,16 @@ function stackCodeInternal(codeFormat, code) {
|
|
|
19438
19495
|
return codeFormat;
|
|
19439
19496
|
}
|
|
19440
19497
|
}
|
|
19498
|
+
function stackDataInternal(dataFormat, data) {
|
|
19499
|
+
switch (data) {
|
|
19500
|
+
case 'empty':
|
|
19501
|
+
return {
|
|
19502
|
+
format: {},
|
|
19503
|
+
};
|
|
19504
|
+
default:
|
|
19505
|
+
return dataFormat;
|
|
19506
|
+
}
|
|
19507
|
+
}
|
|
19441
19508
|
function stackDecoratorInternal(format, decorator) {
|
|
19442
19509
|
switch (decorator) {
|
|
19443
19510
|
case 'empty':
|
|
@@ -19773,7 +19840,7 @@ var ContentHandlers = (_a = {},
|
|
|
19773
19840
|
* @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images
|
|
19774
19841
|
Only text types are supported, and do not add "text/" prefix to the type values
|
|
19775
19842
|
*/
|
|
19776
|
-
function extractClipboardItems(items, allowedCustomPasteType) {
|
|
19843
|
+
function extractClipboardItems(items, allowedCustomPasteType, isPasteNative) {
|
|
19777
19844
|
var data = {
|
|
19778
19845
|
types: [],
|
|
19779
19846
|
text: '',
|
|
@@ -19781,7 +19848,7 @@ function extractClipboardItems(items, allowedCustomPasteType) {
|
|
|
19781
19848
|
files: [],
|
|
19782
19849
|
rawHtml: null,
|
|
19783
19850
|
customValues: {},
|
|
19784
|
-
pasteNativeEvent:
|
|
19851
|
+
pasteNativeEvent: !!isPasteNative,
|
|
19785
19852
|
};
|
|
19786
19853
|
return Promise.all((items || []).map(function (item) {
|
|
19787
19854
|
var type = item.type;
|
|
@@ -20722,6 +20789,7 @@ function pruneUnselectedModel(model) {
|
|
|
20722
20789
|
exports.pruneUnselectedModel = pruneUnselectedModel;
|
|
20723
20790
|
function pruneUnselectedModelInternal(model, isSelectionAfterElement) {
|
|
20724
20791
|
var e_1, _a, _b;
|
|
20792
|
+
var _c;
|
|
20725
20793
|
for (var index = model.blocks.length - 1; index >= 0; index--) {
|
|
20726
20794
|
var block = model.blocks[index];
|
|
20727
20795
|
switch (block.blockType) {
|
|
@@ -20745,15 +20813,17 @@ function pruneUnselectedModelInternal(model, isSelectionAfterElement) {
|
|
|
20745
20813
|
case 'Paragraph':
|
|
20746
20814
|
var newSegments = [];
|
|
20747
20815
|
try {
|
|
20748
|
-
for (var
|
|
20749
|
-
var segment =
|
|
20816
|
+
for (var _d = (e_1 = void 0, (0, tslib_1.__values)(block.segments)), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
20817
|
+
var segment = _e.value;
|
|
20818
|
+
var isSelectedOrUndeletable = segment.isSelected || ((_c = segment.link) === null || _c === void 0 ? void 0 : _c.format.undeletable);
|
|
20750
20819
|
if (segment.segmentType == 'General') {
|
|
20751
20820
|
pruneUnselectedModel(segment);
|
|
20752
|
-
if (segment.blocks.length > 0 ||
|
|
20821
|
+
if (segment.blocks.length > 0 || isSelectedOrUndeletable) {
|
|
20753
20822
|
newSegments.push(segment);
|
|
20754
20823
|
}
|
|
20755
20824
|
}
|
|
20756
|
-
else if (
|
|
20825
|
+
else if (isSelectedOrUndeletable &&
|
|
20826
|
+
segment.segmentType != 'SelectionMarker') {
|
|
20757
20827
|
newSegments.push(segment);
|
|
20758
20828
|
}
|
|
20759
20829
|
}
|
|
@@ -20761,7 +20831,7 @@ function pruneUnselectedModelInternal(model, isSelectionAfterElement) {
|
|
|
20761
20831
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
20762
20832
|
finally {
|
|
20763
20833
|
try {
|
|
20764
|
-
if (
|
|
20834
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
20765
20835
|
}
|
|
20766
20836
|
finally { if (e_1) throw e_1.error; }
|
|
20767
20837
|
}
|
|
@@ -22217,6 +22287,7 @@ var borderColorFormatHandler_1 = __webpack_require__(/*! ./common/borderColorFor
|
|
|
22217
22287
|
var borderFormatHandler_1 = __webpack_require__(/*! ./common/borderFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts");
|
|
22218
22288
|
var boxShadowFormatHandler_1 = __webpack_require__(/*! ./common/boxShadowFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/common/boxShadowFormatHandler.ts");
|
|
22219
22289
|
var datasetFormatHandler_1 = __webpack_require__(/*! ./common/datasetFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/common/datasetFormatHandler.ts");
|
|
22290
|
+
var dataValueFormatHandler_1 = __webpack_require__(/*! ./segment/dataValueFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/dataValueFormatHandler.ts");
|
|
22220
22291
|
var directionFormatHandler_1 = __webpack_require__(/*! ./block/directionFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/block/directionFormatHandler.ts");
|
|
22221
22292
|
var displayFormatHandler_1 = __webpack_require__(/*! ./block/displayFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/block/displayFormatHandler.ts");
|
|
22222
22293
|
var entityFormatHandler_1 = __webpack_require__(/*! ./entity/entityFormatHandler */ "./packages/roosterjs-content-model-dom/lib/formatHandlers/entity/entityFormatHandler.ts");
|
|
@@ -22262,6 +22333,7 @@ var defaultFormatHandlerMap = {
|
|
|
22262
22333
|
borderColor: borderColorFormatHandler_1.borderColorFormatHandler,
|
|
22263
22334
|
boxShadow: boxShadowFormatHandler_1.boxShadowFormatHandler,
|
|
22264
22335
|
dataset: datasetFormatHandler_1.datasetFormatHandler,
|
|
22336
|
+
dataValue: dataValueFormatHandler_1.dataValueFormatHandler,
|
|
22265
22337
|
direction: directionFormatHandler_1.directionFormatHandler,
|
|
22266
22338
|
display: displayFormatHandler_1.displayFormatHandler,
|
|
22267
22339
|
float: floatFormatHandler_1.floatFormatHandler,
|
|
@@ -22403,6 +22475,7 @@ exports.defaultFormatKeysPerCategory = {
|
|
|
22403
22475
|
],
|
|
22404
22476
|
segmentUnderLink: ['textColor'],
|
|
22405
22477
|
code: ['fontFamily', 'display'],
|
|
22478
|
+
data: ['dataValue'],
|
|
22406
22479
|
dataset: ['dataset'],
|
|
22407
22480
|
divider: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedBlockFormats), false), (0, tslib_1.__read)(sharedContainerFormats), false), ['display', 'size', 'htmlAlign'], false),
|
|
22408
22481
|
container: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedContainerFormats), false), ['htmlAlign', 'size', 'display', 'id'], false),
|
|
@@ -22693,6 +22766,37 @@ exports.boldFormatHandler = {
|
|
|
22693
22766
|
};
|
|
22694
22767
|
|
|
22695
22768
|
|
|
22769
|
+
/***/ },
|
|
22770
|
+
|
|
22771
|
+
/***/ "./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/dataValueFormatHandler.ts"
|
|
22772
|
+
/*!***************************************************************************************************!*\
|
|
22773
|
+
!*** ./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/dataValueFormatHandler.ts ***!
|
|
22774
|
+
\***************************************************************************************************/
|
|
22775
|
+
(__unused_webpack_module, exports) {
|
|
22776
|
+
|
|
22777
|
+
"use strict";
|
|
22778
|
+
|
|
22779
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
22780
|
+
exports.dataValueFormatHandler = void 0;
|
|
22781
|
+
/**
|
|
22782
|
+
* @internal
|
|
22783
|
+
* Format handler for the "value" attribute of a HTML <data> element
|
|
22784
|
+
*/
|
|
22785
|
+
exports.dataValueFormatHandler = {
|
|
22786
|
+
parse: function (format, element) {
|
|
22787
|
+
var _a;
|
|
22788
|
+
if (element.hasAttribute('value')) {
|
|
22789
|
+
format.dataValue = (_a = element.getAttribute('value')) !== null && _a !== void 0 ? _a : '';
|
|
22790
|
+
}
|
|
22791
|
+
},
|
|
22792
|
+
apply: function (format, element) {
|
|
22793
|
+
if (format.dataValue != undefined) {
|
|
22794
|
+
element.setAttribute('value', format.dataValue);
|
|
22795
|
+
}
|
|
22796
|
+
},
|
|
22797
|
+
};
|
|
22798
|
+
|
|
22799
|
+
|
|
22696
22800
|
/***/ },
|
|
22697
22801
|
|
|
22698
22802
|
/***/ "./packages/roosterjs-content-model-dom/lib/formatHandlers/segment/fontFamilyFormatHandler.ts"
|
|
@@ -23733,9 +23837,9 @@ exports.shouldSetValue = shouldSetValue;
|
|
|
23733
23837
|
|
|
23734
23838
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
23735
23839
|
exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.formatContainerProcessor = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
|
|
23736
|
-
exports.
|
|
23737
|
-
exports.
|
|
23738
|
-
exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = void 0;
|
|
23840
|
+
exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addData = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
|
|
23841
|
+
exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModelForPaste = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.trimModelForSelection = void 0;
|
|
23842
|
+
exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = void 0;
|
|
23739
23843
|
var domToContentModel_1 = __webpack_require__(/*! ./domToModel/domToContentModel */ "./packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts");
|
|
23740
23844
|
Object.defineProperty(exports, "domToContentModel", ({ enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } }));
|
|
23741
23845
|
var contentModelToDom_1 = __webpack_require__(/*! ./modelToDom/contentModelToDom */ "./packages/roosterjs-content-model-dom/lib/modelToDom/contentModelToDom.ts");
|
|
@@ -23849,7 +23953,9 @@ Object.defineProperty(exports, "addBlock", ({ enumerable: true, get: function ()
|
|
|
23849
23953
|
var addDecorators_1 = __webpack_require__(/*! ./modelApi/common/addDecorators */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts");
|
|
23850
23954
|
Object.defineProperty(exports, "addCode", ({ enumerable: true, get: function () { return addDecorators_1.addCode; } }));
|
|
23851
23955
|
var addDecorators_2 = __webpack_require__(/*! ./modelApi/common/addDecorators */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts");
|
|
23852
|
-
Object.defineProperty(exports, "
|
|
23956
|
+
Object.defineProperty(exports, "addData", ({ enumerable: true, get: function () { return addDecorators_2.addData; } }));
|
|
23957
|
+
var addDecorators_3 = __webpack_require__(/*! ./modelApi/common/addDecorators */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addDecorators.ts");
|
|
23958
|
+
Object.defineProperty(exports, "addLink", ({ enumerable: true, get: function () { return addDecorators_3.addLink; } }));
|
|
23853
23959
|
var addTextSegment_1 = __webpack_require__(/*! ./modelApi/common/addTextSegment */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/addTextSegment.ts");
|
|
23854
23960
|
Object.defineProperty(exports, "addTextSegment", ({ enumerable: true, get: function () { return addTextSegment_1.addTextSegment; } }));
|
|
23855
23961
|
var normalizeParagraph_1 = __webpack_require__(/*! ./modelApi/common/normalizeParagraph */ "./packages/roosterjs-content-model-dom/lib/modelApi/common/normalizeParagraph.ts");
|
|
@@ -23966,6 +24072,7 @@ var setSelection_1 = __webpack_require__(/*! ./modelApi/selection/setSelection *
|
|
|
23966
24072
|
Object.defineProperty(exports, "setSelection", ({ enumerable: true, get: function () { return setSelection_1.setSelection; } }));
|
|
23967
24073
|
var cloneModel_1 = __webpack_require__(/*! ./modelApi/editing/cloneModel */ "./packages/roosterjs-content-model-dom/lib/modelApi/editing/cloneModel.ts");
|
|
23968
24074
|
Object.defineProperty(exports, "cloneModel", ({ enumerable: true, get: function () { return cloneModel_1.cloneModel; } }));
|
|
24075
|
+
Object.defineProperty(exports, "cloneModelForPaste", ({ enumerable: true, get: function () { return cloneModel_1.cloneModelForPaste; } }));
|
|
23969
24076
|
var mergeModel_1 = __webpack_require__(/*! ./modelApi/editing/mergeModel */ "./packages/roosterjs-content-model-dom/lib/modelApi/editing/mergeModel.ts");
|
|
23970
24077
|
Object.defineProperty(exports, "mergeModel", ({ enumerable: true, get: function () { return mergeModel_1.mergeModel; } }));
|
|
23971
24078
|
var deleteSelection_1 = __webpack_require__(/*! ./modelApi/editing/deleteSelection */ "./packages/roosterjs-content-model-dom/lib/modelApi/editing/deleteSelection.ts");
|
|
@@ -24169,7 +24276,7 @@ exports.addBlock = addBlock;
|
|
|
24169
24276
|
"use strict";
|
|
24170
24277
|
|
|
24171
24278
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
24172
|
-
exports.addDecorators = exports.addCode = exports.addLink = void 0;
|
|
24279
|
+
exports.addDecorators = exports.addData = exports.addCode = exports.addLink = void 0;
|
|
24173
24280
|
var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
|
|
24174
24281
|
/**
|
|
24175
24282
|
* @internal
|
|
@@ -24196,12 +24303,27 @@ function addCode(segment, code) {
|
|
|
24196
24303
|
}
|
|
24197
24304
|
}
|
|
24198
24305
|
exports.addCode = addCode;
|
|
24306
|
+
/**
|
|
24307
|
+
* @internal
|
|
24308
|
+
* Add a data decorator into segment if any
|
|
24309
|
+
* @param segment The segment to add decorator to
|
|
24310
|
+
* @param data The data decorator to add
|
|
24311
|
+
*/
|
|
24312
|
+
function addData(segment, data) {
|
|
24313
|
+
if (data.format.dataValue != undefined) {
|
|
24314
|
+
segment.data = {
|
|
24315
|
+
format: (0, tslib_1.__assign)({}, data.format),
|
|
24316
|
+
};
|
|
24317
|
+
}
|
|
24318
|
+
}
|
|
24319
|
+
exports.addData = addData;
|
|
24199
24320
|
/**
|
|
24200
24321
|
* @internal
|
|
24201
24322
|
*/
|
|
24202
24323
|
function addDecorators(segment, context) {
|
|
24203
24324
|
addLink(segment, context.link);
|
|
24204
24325
|
addCode(segment, context.code);
|
|
24326
|
+
addData(segment, context.data);
|
|
24205
24327
|
}
|
|
24206
24328
|
exports.addDecorators = addDecorators;
|
|
24207
24329
|
|
|
@@ -24486,7 +24608,8 @@ function segmentsWithSameFormat(seg1, seg2) {
|
|
|
24486
24608
|
return (!!seg1.isSelected == !!seg2.isSelected &&
|
|
24487
24609
|
(0, areSameFormats_1.areSameFormats)(seg1.format, seg2.format) &&
|
|
24488
24610
|
areSameLinks(seg1.link, seg2.link) &&
|
|
24489
|
-
areSameCodes(seg1.code, seg2.code)
|
|
24611
|
+
areSameCodes(seg1.code, seg2.code) &&
|
|
24612
|
+
areSameData(seg1.data, seg2.data));
|
|
24490
24613
|
}
|
|
24491
24614
|
function areSameLinks(link1, link2) {
|
|
24492
24615
|
return ((!link1 && !link2) ||
|
|
@@ -24498,6 +24621,9 @@ function areSameLinks(link1, link2) {
|
|
|
24498
24621
|
function areSameCodes(code1, code2) {
|
|
24499
24622
|
return (!code1 && !code2) || (code1 && code2 && (0, areSameFormats_1.areSameFormats)(code1.format, code2.format));
|
|
24500
24623
|
}
|
|
24624
|
+
function areSameData(data1, data2) {
|
|
24625
|
+
return (!data1 && !data2) || (data1 && data2 && (0, areSameFormats_1.areSameFormats)(data1.format, data2.format));
|
|
24626
|
+
}
|
|
24501
24627
|
|
|
24502
24628
|
|
|
24503
24629
|
/***/ },
|
|
@@ -24795,7 +24921,34 @@ exports.normalizeAllSegments = normalizeAllSegments;
|
|
|
24795
24921
|
function normalizeSingleSegment(paragraph, segment, ignoreTrailingSpaces) {
|
|
24796
24922
|
if (ignoreTrailingSpaces === void 0) { ignoreTrailingSpaces = false; }
|
|
24797
24923
|
var context = resetNormalizeSegmentContext();
|
|
24924
|
+
var index = paragraph.segments.indexOf(segment);
|
|
24798
24925
|
context.ignoreTrailingSpaces = ignoreTrailingSpaces;
|
|
24926
|
+
// Search backward for the nearest non-empty text segment (skipping SelectionMarkers and empty text),
|
|
24927
|
+
// to determine whether leading spaces of the current segment should be preserved.
|
|
24928
|
+
// If the previous text doesn't end with a space, keep the leading space to maintain word separation.
|
|
24929
|
+
for (var i = index - 1; i >= 0; i--) {
|
|
24930
|
+
var s = paragraph.segments[i];
|
|
24931
|
+
if (s.segmentType == 'Text') {
|
|
24932
|
+
if (s.text.length > 0) {
|
|
24933
|
+
if (s.text.substr(-1) != SPACE) {
|
|
24934
|
+
context.ignoreLeadingSpaces = false;
|
|
24935
|
+
}
|
|
24936
|
+
break;
|
|
24937
|
+
}
|
|
24938
|
+
}
|
|
24939
|
+
else if (s.segmentType == 'Image') {
|
|
24940
|
+
// If the previous segment is an image, we should keep the leading space of the current segment to maintain word separation.
|
|
24941
|
+
context.ignoreLeadingSpaces = false;
|
|
24942
|
+
break;
|
|
24943
|
+
}
|
|
24944
|
+
else if (s.segmentType == 'Br') {
|
|
24945
|
+
// If the previous segment is a line break, we should ignore the leading space of the current segment.
|
|
24946
|
+
context.ignoreLeadingSpaces = true;
|
|
24947
|
+
}
|
|
24948
|
+
else if (s.segmentType != 'SelectionMarker') {
|
|
24949
|
+
break;
|
|
24950
|
+
}
|
|
24951
|
+
}
|
|
24799
24952
|
normalizeSegment(paragraph, segment, context);
|
|
24800
24953
|
}
|
|
24801
24954
|
exports.normalizeSingleSegment = normalizeSingleSegment;
|
|
@@ -24836,6 +24989,10 @@ function normalizeSegment(paragraph, segment, context) {
|
|
|
24836
24989
|
context.ignoreLeadingSpaces = false;
|
|
24837
24990
|
break;
|
|
24838
24991
|
case 'Text':
|
|
24992
|
+
// Skip empty text segments to avoid affecting normalization context
|
|
24993
|
+
if (segment.text.length == 0) {
|
|
24994
|
+
break;
|
|
24995
|
+
}
|
|
24839
24996
|
context.textSegments.push(segment);
|
|
24840
24997
|
context.lastInlineSegment = segment;
|
|
24841
24998
|
context.lastTextSegment = segment;
|
|
@@ -24843,9 +25000,9 @@ function normalizeSegment(paragraph, segment, context) {
|
|
|
24843
25000
|
var last = segment.text.substr(-1);
|
|
24844
25001
|
if (!(0, hasSpacesOnly_1.hasSpacesOnly)(segment.text)) {
|
|
24845
25002
|
if (first == SPACE) {
|
|
24846
|
-
// 1. Multiple leading space => single
|
|
25003
|
+
// 1. Multiple leading space => single space or empty (depends on if previous segment ends with space)
|
|
24847
25004
|
(0, mutate_1.mutateSegment)(paragraph, segment, function (textSegment) {
|
|
24848
|
-
textSegment.text = textSegment.text.replace(LEADING_SPACE_REGEX, context.ignoreLeadingSpaces ? '' :
|
|
25005
|
+
textSegment.text = textSegment.text.replace(LEADING_SPACE_REGEX, context.ignoreLeadingSpaces ? '' : SPACE);
|
|
24849
25006
|
});
|
|
24850
25007
|
}
|
|
24851
25008
|
if (last == SPACE) {
|
|
@@ -25552,9 +25709,10 @@ var addDecorators_1 = __webpack_require__(/*! ../common/addDecorators */ "./pack
|
|
|
25552
25709
|
* @param text Text of this model
|
|
25553
25710
|
* @param format @optional The format of this model
|
|
25554
25711
|
* @param link @optional The link decorator
|
|
25555
|
-
* @param code @
|
|
25712
|
+
* @param code @optional The code decorator
|
|
25713
|
+
* @param data @optional The data decorator
|
|
25556
25714
|
*/
|
|
25557
|
-
function createText(text, format, link, code) {
|
|
25715
|
+
function createText(text, format, link, code, data) {
|
|
25558
25716
|
var result = {
|
|
25559
25717
|
segmentType: 'Text',
|
|
25560
25718
|
text: text,
|
|
@@ -25566,6 +25724,9 @@ function createText(text, format, link, code) {
|
|
|
25566
25724
|
if (code) {
|
|
25567
25725
|
(0, addDecorators_1.addCode)(result, code);
|
|
25568
25726
|
}
|
|
25727
|
+
if (data) {
|
|
25728
|
+
(0, addDecorators_1.addData)(result, data);
|
|
25729
|
+
}
|
|
25569
25730
|
return result;
|
|
25570
25731
|
}
|
|
25571
25732
|
exports.createText = createText;
|
|
@@ -25944,8 +26105,20 @@ function getBorderStyleFromColor(color) {
|
|
|
25944
26105
|
"use strict";
|
|
25945
26106
|
|
|
25946
26107
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
25947
|
-
exports.cloneModel = void 0;
|
|
26108
|
+
exports.cloneModel = exports.cloneModelForPaste = void 0;
|
|
25948
26109
|
var tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs");
|
|
26110
|
+
var CloneOption = {
|
|
26111
|
+
includeCachedElement: function (node, type) { return (type == 'cache' ? undefined : node); },
|
|
26112
|
+
};
|
|
26113
|
+
/**
|
|
26114
|
+
* Clone a content model for paste operations, ensuring that cached elements are handled appropriately.
|
|
26115
|
+
* @param model The content model to clone
|
|
26116
|
+
* @returns A cloned content model suitable for paste operations
|
|
26117
|
+
*/
|
|
26118
|
+
function cloneModelForPaste(model) {
|
|
26119
|
+
return cloneModel(model, CloneOption);
|
|
26120
|
+
}
|
|
26121
|
+
exports.cloneModelForPaste = cloneModelForPaste;
|
|
25949
26122
|
/**
|
|
25950
26123
|
* Clone a content model
|
|
25951
26124
|
* @param model The content model to clone
|
|
@@ -26021,7 +26194,7 @@ function cloneBlockGroupBase(group, options) {
|
|
|
26021
26194
|
};
|
|
26022
26195
|
}
|
|
26023
26196
|
function cloneSegmentBase(segment) {
|
|
26024
|
-
var segmentType = segment.segmentType, isSelected = segment.isSelected, code = segment.code, link = segment.link;
|
|
26197
|
+
var segmentType = segment.segmentType, isSelected = segment.isSelected, code = segment.code, link = segment.link, data = segment.data;
|
|
26025
26198
|
var newSegment = Object.assign({
|
|
26026
26199
|
segmentType: segmentType,
|
|
26027
26200
|
isSelected: isSelected,
|
|
@@ -26032,6 +26205,9 @@ function cloneSegmentBase(segment) {
|
|
|
26032
26205
|
if (link) {
|
|
26033
26206
|
newSegment.link = Object.assign(cloneModelWithFormat(link), cloneModelWithDataset(link));
|
|
26034
26207
|
}
|
|
26208
|
+
if (data) {
|
|
26209
|
+
newSegment.data = cloneModelWithFormat(data);
|
|
26210
|
+
}
|
|
26035
26211
|
return newSegment;
|
|
26036
26212
|
}
|
|
26037
26213
|
function cloneEntity(entity, options) {
|
|
@@ -30067,7 +30243,7 @@ var moveChildNodes_1 = __webpack_require__(/*! ../../domUtils/moveChildNodes */
|
|
|
30067
30243
|
* @internal
|
|
30068
30244
|
*/
|
|
30069
30245
|
var handleSegmentDecorator = function (_, parent, segment, context) {
|
|
30070
|
-
var code = segment.code, link = segment.link;
|
|
30246
|
+
var code = segment.code, link = segment.link, data = segment.data;
|
|
30071
30247
|
if ((0, isNodeOfType_1.isNodeOfType)(parent, 'ELEMENT_NODE')) {
|
|
30072
30248
|
if (link) {
|
|
30073
30249
|
(0, stackFormat_1.stackFormat)(context, 'a', function () {
|
|
@@ -30086,6 +30262,14 @@ var handleSegmentDecorator = function (_, parent, segment, context) {
|
|
|
30086
30262
|
(_a = context.onNodeCreated) === null || _a === void 0 ? void 0 : _a.call(context, code, codeNode);
|
|
30087
30263
|
});
|
|
30088
30264
|
}
|
|
30265
|
+
if (data) {
|
|
30266
|
+
(0, stackFormat_1.stackFormat)(context, 'data', function () {
|
|
30267
|
+
var _a;
|
|
30268
|
+
var dataNode = (0, moveChildNodes_1.wrapAllChildNodes)(parent, 'data');
|
|
30269
|
+
(0, applyFormat_1.applyFormat)(dataNode, context.formatAppliers.data, data.format, context);
|
|
30270
|
+
(_a = context.onNodeCreated) === null || _a === void 0 ? void 0 : _a.call(context, data, dataNode);
|
|
30271
|
+
});
|
|
30272
|
+
}
|
|
30089
30273
|
}
|
|
30090
30274
|
};
|
|
30091
30275
|
exports.handleSegmentDecorator = handleSegmentDecorator;
|
|
@@ -30270,7 +30454,20 @@ exports.handleText = handleText;
|
|
|
30270
30454
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
30271
30455
|
exports.mergeNode = void 0;
|
|
30272
30456
|
var isNodeOfType_1 = __webpack_require__(/*! ../../domUtils/isNodeOfType */ "./packages/roosterjs-content-model-dom/lib/domUtils/isNodeOfType.ts");
|
|
30273
|
-
var OptimizeTags = [
|
|
30457
|
+
var OptimizeTags = [
|
|
30458
|
+
'SPAN',
|
|
30459
|
+
'B',
|
|
30460
|
+
'EM',
|
|
30461
|
+
'I',
|
|
30462
|
+
'U',
|
|
30463
|
+
'SUB',
|
|
30464
|
+
'SUP',
|
|
30465
|
+
'STRIKE',
|
|
30466
|
+
'S',
|
|
30467
|
+
'A',
|
|
30468
|
+
'CODE',
|
|
30469
|
+
'DATA',
|
|
30470
|
+
];
|
|
30274
30471
|
/**
|
|
30275
30472
|
* @internal
|
|
30276
30473
|
*/
|
|
@@ -32019,11 +32216,12 @@ exports.modelProcessor = modelProcessor;
|
|
|
32019
32216
|
|
|
32020
32217
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
32021
32218
|
exports.MarkdownPastePlugin = void 0;
|
|
32022
|
-
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
32023
32219
|
var convertMarkdownToContentModel_1 = __webpack_require__(/*! ../markdownToModel/convertMarkdownToContentModel */ "./packages/roosterjs-content-model-markdown/lib/markdownToModel/convertMarkdownToContentModel.ts");
|
|
32024
32220
|
var isPastedContentMarkdown_1 = __webpack_require__(/*! ../publicApi/isPastedContentMarkdown */ "./packages/roosterjs-content-model-markdown/lib/publicApi/isPastedContentMarkdown.ts");
|
|
32221
|
+
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
32025
32222
|
var DefaultOptions = {
|
|
32026
32223
|
autoConversion: false,
|
|
32224
|
+
undoConversion: false,
|
|
32027
32225
|
};
|
|
32028
32226
|
/**
|
|
32029
32227
|
* Markdown paste plugin. Handles the BeforePaste event and, when the pasted content
|
|
@@ -32069,12 +32267,37 @@ var MarkdownPastePlugin = /** @class */ (function () {
|
|
|
32069
32267
|
* @param event The event to handle:
|
|
32070
32268
|
*/
|
|
32071
32269
|
MarkdownPastePlugin.prototype.onPluginEvent = function (event) {
|
|
32072
|
-
if (!this.editor
|
|
32270
|
+
if (!this.editor) {
|
|
32073
32271
|
return;
|
|
32074
32272
|
}
|
|
32075
|
-
|
|
32076
|
-
|
|
32077
|
-
|
|
32273
|
+
if (event.eventType === 'contentChanged' &&
|
|
32274
|
+
event.source === roosterjs_content_model_dom_1.ChangeSource.Paste &&
|
|
32275
|
+
this.options.autoConversion &&
|
|
32276
|
+
event.data) {
|
|
32277
|
+
var clipboardData = event.data;
|
|
32278
|
+
var shouldConvert = clipboardData && clipboardData.pasteNativeEvent && this.options.autoConversion;
|
|
32279
|
+
if (shouldConvert &&
|
|
32280
|
+
(0, isPastedContentMarkdown_1.isPastedContentMarkdown)(this.editor, clipboardData) &&
|
|
32281
|
+
clipboardData.modelBeforePaste) {
|
|
32282
|
+
var modelBeforePaste_1 = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
|
|
32283
|
+
(0, roosterjs_content_model_dom_1.mergeModel)(modelBeforePaste_1, (0, convertMarkdownToContentModel_1.convertMarkdownToContentModel)(clipboardData.text, { emptyLine: 'merge' }));
|
|
32284
|
+
if (this.options.undoConversion) {
|
|
32285
|
+
this.editor.takeSnapshot();
|
|
32286
|
+
}
|
|
32287
|
+
this.editor.formatContentModel(function (model) {
|
|
32288
|
+
model.blocks = modelBeforePaste_1.blocks;
|
|
32289
|
+
return true;
|
|
32290
|
+
}, {
|
|
32291
|
+
apiName: 'MarkdownConversion',
|
|
32292
|
+
scrollCaretIntoView: true,
|
|
32293
|
+
});
|
|
32294
|
+
}
|
|
32295
|
+
}
|
|
32296
|
+
else if (event.eventType === 'beforePaste' && !event.clipboardData.pasteNativeEvent) {
|
|
32297
|
+
var shouldConvert = event.pasteType === 'asMarkdown';
|
|
32298
|
+
if (shouldConvert && (0, isPastedContentMarkdown_1.isPastedContentMarkdown)(this.editor, event.clipboardData)) {
|
|
32299
|
+
convertPastedTextToMarkdown(this.editor, event.fragment, event.clipboardData.text);
|
|
32300
|
+
}
|
|
32078
32301
|
}
|
|
32079
32302
|
};
|
|
32080
32303
|
return MarkdownPastePlugin;
|
|
@@ -38017,16 +38240,31 @@ function createImageWrapper(editor, image, options, editInfo, htmlOptions, opera
|
|
|
38017
38240
|
croppers = (0, createImageCropper_1.createImageCropper)(doc);
|
|
38018
38241
|
}
|
|
38019
38242
|
var wrapper = createWrapper(editor, imageClone, options, editInfo, resizers, rotators, croppers);
|
|
38243
|
+
// Capture the image footprint before attaching the shadow root, since the light-DOM image
|
|
38244
|
+
// stops being rendered once the shadow root takes over.
|
|
38245
|
+
var imageWidth = image.offsetWidth;
|
|
38246
|
+
var imageHeight = image.offsetHeight;
|
|
38020
38247
|
var imageSpan = (0, roosterjs_content_model_dom_1.wrap)(doc, image, 'span');
|
|
38021
|
-
var shadowSpan = createShadowSpan(wrapper, imageSpan);
|
|
38248
|
+
var shadowSpan = createShadowSpan(wrapper, imageSpan, imageWidth, imageHeight);
|
|
38022
38249
|
return { wrapper: wrapper, shadowSpan: shadowSpan, imageClone: imageClone, resizers: resizers, rotators: rotators, croppers: croppers };
|
|
38023
38250
|
}
|
|
38024
38251
|
exports.createImageWrapper = createImageWrapper;
|
|
38025
|
-
var createShadowSpan = function (wrapper, imageSpan) {
|
|
38252
|
+
var createShadowSpan = function (wrapper, imageSpan, imageWidth, imageHeight) {
|
|
38026
38253
|
var shadowRoot = imageSpan.attachShadow({
|
|
38027
38254
|
mode: 'open',
|
|
38028
38255
|
});
|
|
38029
38256
|
imageSpan.id = IMAGE_EDIT_SHADOW_ROOT;
|
|
38257
|
+
// Pin the shadow host to the original image's box so that wrapping the image does not grow the
|
|
38258
|
+
// surrounding line box. Without this, the taller edit wrapper enlarges the line and the browser
|
|
38259
|
+
// scrolls the selection back into view, making the editor jump. The wrapper and handles still
|
|
38260
|
+
// overflow the host visually because overflow is left visible.
|
|
38261
|
+
if (imageWidth > 0 && imageHeight > 0) {
|
|
38262
|
+
imageSpan.style.display = 'inline-block';
|
|
38263
|
+
imageSpan.style.width = imageWidth + "px";
|
|
38264
|
+
imageSpan.style.height = imageHeight + "px";
|
|
38265
|
+
imageSpan.style.verticalAlign = 'bottom';
|
|
38266
|
+
imageSpan.style.overflow = 'visible';
|
|
38267
|
+
}
|
|
38030
38268
|
shadowRoot.appendChild(wrapper);
|
|
38031
38269
|
return imageSpan;
|
|
38032
38270
|
};
|