roosterjs 9.56.0 → 9.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rooster-amd-min.js +1 -1
- package/dist/rooster-amd-min.js.map +1 -1
- package/dist/rooster-amd.d.ts +37 -5
- package/dist/rooster-amd.js +159 -65
- 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-react.js +53 -53
- package/dist/rooster-react.js.map +1 -1
- package/dist/rooster.d.ts +37 -5
- package/dist/rooster.js +159 -65
- package/dist/rooster.js.map +1 -1
- package/package.json +7 -7
package/dist/rooster-amd.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Type definitions for roosterjs (Version 9.
|
|
1
|
+
// Type definitions for roosterjs (Version 9.57.0)
|
|
2
2
|
// Generated by dts tool from roosterjs
|
|
3
3
|
// Project: https://github.com/Microsoft/roosterjs
|
|
4
4
|
|
|
@@ -3890,6 +3890,11 @@ export interface IEditor {
|
|
|
3890
3890
|
* @param featureName The name of feature to check
|
|
3891
3891
|
*/
|
|
3892
3892
|
isExperimentalFeatureEnabled(featureName: ExperimentalFeature | string): boolean;
|
|
3893
|
+
/**
|
|
3894
|
+
* Get all experimental features enabled in this editor
|
|
3895
|
+
* @returns An array of experimental feature names
|
|
3896
|
+
*/
|
|
3897
|
+
getExperimentalFeatures(): ExperimentalFeature[];
|
|
3893
3898
|
}
|
|
3894
3899
|
|
|
3895
3900
|
/**
|
|
@@ -3920,7 +3925,11 @@ export type ExperimentalFeature = GraduatedExperimentalFeature
|
|
|
3920
3925
|
* These characters can be used to hide text in HTML and may cause unexpected behavior.
|
|
3921
3926
|
* @see https://embracethered.com/blog/posts/2024/hiding-and-finding-text-with-unicode-tags/
|
|
3922
3927
|
*/
|
|
3923
|
-
| 'FilterInvisibleUnicode'
|
|
3928
|
+
| 'FilterInvisibleUnicode'
|
|
3929
|
+
/**
|
|
3930
|
+
* Handle the drop event for content that is dropped from the same editor instance.
|
|
3931
|
+
*/
|
|
3932
|
+
| 'HandleDropInternalContent';
|
|
3924
3933
|
|
|
3925
3934
|
/**
|
|
3926
3935
|
* Predefined experiment features (Graduated, only keep them for backward compatibility)
|
|
@@ -5101,6 +5110,10 @@ export interface FormatContentModelOptions {
|
|
|
5101
5110
|
* When pass to true, scroll the editing caret into view after write DOM tree if need
|
|
5102
5111
|
*/
|
|
5103
5112
|
scrollCaretIntoView?: boolean;
|
|
5113
|
+
/**
|
|
5114
|
+
* When pass to true, skip setting DOM selection after write DOM tree. @default false
|
|
5115
|
+
*/
|
|
5116
|
+
skipDOMSelection?: boolean;
|
|
5104
5117
|
}
|
|
5105
5118
|
|
|
5106
5119
|
/**
|
|
@@ -5259,9 +5272,19 @@ export interface ContentModelFormatState {
|
|
|
5259
5272
|
|
|
5260
5273
|
/**
|
|
5261
5274
|
* Represents the PasteType parameter used to set the paste type to use.
|
|
5262
|
-
* It can be either the Paste Type value or a callback that
|
|
5275
|
+
* It can be either the Paste Type value or a callback that returns the Paste Type to use.
|
|
5263
5276
|
*/
|
|
5264
|
-
export type PasteTypeOrGetter = PasteType |
|
|
5277
|
+
export type PasteTypeOrGetter = PasteType | PasteTypeGetter;
|
|
5278
|
+
|
|
5279
|
+
/**
|
|
5280
|
+
* A function that returns the Paste Type to use based on the pasted content and clipboard data.
|
|
5281
|
+
* @param document The document parsed from the clipboard raw HTML, or null when there is no HTML
|
|
5282
|
+
* @param clipboardData Clipboard data retrieved from clipboard
|
|
5283
|
+
* @param environment The editor environment information
|
|
5284
|
+
* @param htmlAttributes The metadata (HTML attributes) retrieved from the pasted content
|
|
5285
|
+
* @returns The Paste Type to use
|
|
5286
|
+
*/
|
|
5287
|
+
export type PasteTypeGetter = (document: Document | null, clipboardData: ClipboardData, environment: EditorEnvironment, htmlAttributes: Record<string, string>) => PasteType;
|
|
5265
5288
|
|
|
5266
5289
|
/**
|
|
5267
5290
|
* Image Format
|
|
@@ -8386,6 +8409,10 @@ export const ChangeSource: {
|
|
|
8386
8409
|
* Content changed by paste
|
|
8387
8410
|
*/
|
|
8388
8411
|
Paste: string;
|
|
8412
|
+
/**
|
|
8413
|
+
* Content changed by auto markdown conversion
|
|
8414
|
+
*/
|
|
8415
|
+
AutoMarkdownConversion: string;
|
|
8389
8416
|
/**
|
|
8390
8417
|
* Content changed by setContent API
|
|
8391
8418
|
*/
|
|
@@ -8862,6 +8889,11 @@ export class Editor implements IEditor {
|
|
|
8862
8889
|
* @param featureName The name of feature to check
|
|
8863
8890
|
*/
|
|
8864
8891
|
isExperimentalFeatureEnabled(featureName: ExperimentalFeature | string): boolean;
|
|
8892
|
+
/**
|
|
8893
|
+
* Get all experimental features enabled in this editor
|
|
8894
|
+
* @returns An array of experimental feature names
|
|
8895
|
+
* */
|
|
8896
|
+
getExperimentalFeatures(): ExperimentalFeature[];
|
|
8865
8897
|
/**
|
|
8866
8898
|
* @returns the current EditorCore object
|
|
8867
8899
|
* @throws a standard Error if there's no core object
|
|
@@ -10933,7 +10965,7 @@ export class AnnouncePlugin implements EditorPlugin {
|
|
|
10933
10965
|
export class DragAndDropPlugin implements EditorPlugin {
|
|
10934
10966
|
private editor;
|
|
10935
10967
|
private forbiddenElements;
|
|
10936
|
-
private
|
|
10968
|
+
private internalDrag;
|
|
10937
10969
|
private disposer;
|
|
10938
10970
|
/**
|
|
10939
10971
|
* Construct a new instance of DragAndDropPlugin
|
package/dist/rooster-amd.js
CHANGED
|
@@ -8544,9 +8544,9 @@ var DefaultSanitizingOption = {
|
|
|
8544
8544
|
/**
|
|
8545
8545
|
* @internal
|
|
8546
8546
|
*/
|
|
8547
|
-
function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption, domHelper) {
|
|
8547
|
+
function createDomToModelContextForSanitizing(document, defaultFormat, defaultOption, additionalSanitizingOption, domHelper, experimentalFeatures) {
|
|
8548
8548
|
var sanitizingOption = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, DefaultSanitizingOption), additionalSanitizingOption);
|
|
8549
|
-
return (0, roosterjs_content_model_dom_1.createDomToModelContext)((0, tslib_1.__assign)((0, tslib_1.__assign)({ defaultFormat: defaultFormat }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(document)), { experimentalFeatures: [], editorViewWidth: domHelper === null || domHelper === void 0 ? void 0 : domHelper.getClientWidth() }), defaultOption, {
|
|
8549
|
+
return (0, roosterjs_content_model_dom_1.createDomToModelContext)((0, tslib_1.__assign)((0, tslib_1.__assign)({ defaultFormat: defaultFormat }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(document)), { experimentalFeatures: experimentalFeatures !== null && experimentalFeatures !== void 0 ? experimentalFeatures : [], editorViewWidth: domHelper === null || domHelper === void 0 ? void 0 : domHelper.getClientWidth() }), defaultOption, {
|
|
8550
8550
|
processorOverride: {
|
|
8551
8551
|
'#text': pasteTextProcessor_1.pasteTextProcessor,
|
|
8552
8552
|
entity: (0, pasteEntityProcessor_1.createPasteEntityProcessor)(sanitizingOption),
|
|
@@ -9388,12 +9388,13 @@ var BlackColor = 'rgb(0,0,0)';
|
|
|
9388
9388
|
*/
|
|
9389
9389
|
function mergePasteContent(editor, eventResult, isFirstPaste) {
|
|
9390
9390
|
var fragment = eventResult.fragment, domToModelOption = eventResult.domToModelOption, customizedMerge = eventResult.customizedMerge, pasteType = eventResult.pasteType, clipboardData = eventResult.clipboardData, containsBlockElements = eventResult.containsBlockElements;
|
|
9391
|
+
var shouldScrollCaretIntoView = !isImageOnlyFragment(fragment);
|
|
9391
9392
|
editor.formatContentModel(function (model, context) {
|
|
9392
9393
|
if (!isFirstPaste && clipboardData.modelBeforePaste) {
|
|
9393
9394
|
var clonedModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(clipboardData.modelBeforePaste);
|
|
9394
9395
|
model.blocks = clonedModel.blocks;
|
|
9395
9396
|
}
|
|
9396
|
-
var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper());
|
|
9397
|
+
var domToModelContext = (0, createDomToModelContextForSanitizing_1.createDomToModelContextForSanitizing)(editor.getDocument(), undefined /*defaultFormat*/, editor.getEnvironment().domToModelSettings.customized, domToModelOption, editor.getDOMHelper(), editor.getExperimentalFeatures());
|
|
9397
9398
|
domToModelContext.segmentFormat = getSegmentFormatForPaste(model, pasteType);
|
|
9398
9399
|
var pasteModel = (0, roosterjs_content_model_dom_1.domToContentModel)(fragment, domToModelContext);
|
|
9399
9400
|
var mergeOption = {
|
|
@@ -9413,7 +9414,7 @@ function mergePasteContent(editor, eventResult, isFirstPaste) {
|
|
|
9413
9414
|
}, {
|
|
9414
9415
|
changeSource: roosterjs_content_model_dom_1.ChangeSource.Paste,
|
|
9415
9416
|
getChangeData: function () { return clipboardData; },
|
|
9416
|
-
scrollCaretIntoView:
|
|
9417
|
+
scrollCaretIntoView: shouldScrollCaretIntoView,
|
|
9417
9418
|
apiName: 'paste',
|
|
9418
9419
|
});
|
|
9419
9420
|
}
|
|
@@ -9454,6 +9455,13 @@ function getLastSegmentFormat(pasteModel) {
|
|
|
9454
9455
|
}
|
|
9455
9456
|
return {};
|
|
9456
9457
|
}
|
|
9458
|
+
function isImageOnlyFragment(pasteFragment) {
|
|
9459
|
+
var _a;
|
|
9460
|
+
var images = pasteFragment.querySelectorAll('img');
|
|
9461
|
+
return (images.length === 1 &&
|
|
9462
|
+
pasteFragment.childNodes.length === 1 &&
|
|
9463
|
+
((_a = pasteFragment.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === '');
|
|
9464
|
+
}
|
|
9457
9465
|
|
|
9458
9466
|
|
|
9459
9467
|
/***/ },
|
|
@@ -9499,11 +9507,11 @@ function paste(editor, clipboardData, pasteTypeOrGetter) {
|
|
|
9499
9507
|
clipboardData.rawHtml = (0, cleanHtmlComments_1.cleanHtmlComments)(clipboardData.rawHtml);
|
|
9500
9508
|
}
|
|
9501
9509
|
var doc = createDOMFromHtml(clipboardData.rawHtml, domCreator);
|
|
9502
|
-
var pasteType = typeof pasteTypeOrGetter == 'function'
|
|
9503
|
-
? pasteTypeOrGetter(doc, clipboardData)
|
|
9504
|
-
: pasteTypeOrGetter;
|
|
9505
9510
|
// 2. Handle HTML from clipboard
|
|
9506
9511
|
var htmlFromClipboard = (0, retrieveHtmlInfo_1.retrieveHtmlInfo)(doc, clipboardData);
|
|
9512
|
+
var pasteType = typeof pasteTypeOrGetter == 'function'
|
|
9513
|
+
? pasteTypeOrGetter(doc, clipboardData, editor.getEnvironment(), htmlFromClipboard.metadata)
|
|
9514
|
+
: pasteTypeOrGetter;
|
|
9507
9515
|
// 3. Create target fragment
|
|
9508
9516
|
var sourceFragment = (0, createPasteFragment_1.createPasteFragment)(editor.getDocument(), clipboardData, pasteType, (_a = (clipboardData.rawHtml == clipboardData.html
|
|
9509
9517
|
? doc
|
|
@@ -10288,7 +10296,7 @@ var formatContentModel = function (core, formatter, options, domToModelOptions)
|
|
|
10288
10296
|
try {
|
|
10289
10297
|
handleImages(core, context);
|
|
10290
10298
|
selection =
|
|
10291
|
-
(_a = core.api.setContentModel(core, model, hasFocus ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format
|
|
10299
|
+
(_a = core.api.setContentModel(core, model, hasFocus && !(options === null || options === void 0 ? void 0 : options.skipDOMSelection) ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format
|
|
10292
10300
|
onNodeCreated)) !== null && _a !== void 0 ? _a : undefined;
|
|
10293
10301
|
handlePendingFormat(core, context, selection);
|
|
10294
10302
|
if (scroll && ((selection === null || selection === void 0 ? void 0 : selection.type) == 'range' || (selection === null || selection === void 0 ? void 0 : selection.type) == 'image')) {
|
|
@@ -14490,6 +14498,7 @@ var Down = 'ArrowDown';
|
|
|
14490
14498
|
var Left = 'ArrowLeft';
|
|
14491
14499
|
var Right = 'ArrowRight';
|
|
14492
14500
|
var Tab = 'Tab';
|
|
14501
|
+
var F10 = 'F10';
|
|
14493
14502
|
/**
|
|
14494
14503
|
* @internal
|
|
14495
14504
|
*/
|
|
@@ -14506,7 +14515,6 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14506
14515
|
this.disposer = null;
|
|
14507
14516
|
this.logicalRootDisposer = null;
|
|
14508
14517
|
this.isSafari = false;
|
|
14509
|
-
this.isMac = false;
|
|
14510
14518
|
this.scrollTopCache = 0;
|
|
14511
14519
|
this.onMouseMove = function (event) {
|
|
14512
14520
|
var _a, _b, _c;
|
|
@@ -14558,7 +14566,7 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14558
14566
|
// MacOS will not create a mouseUp event if contextMenu event is not prevent defaulted.
|
|
14559
14567
|
// Make sure we capture image target even if image is wrapped
|
|
14560
14568
|
this.getContainedTargetImage = function (event, previousSelection) {
|
|
14561
|
-
if (!
|
|
14569
|
+
if (!previousSelection || previousSelection.type !== 'image') {
|
|
14562
14570
|
return null;
|
|
14563
14571
|
}
|
|
14564
14572
|
var target = event.target;
|
|
@@ -14598,11 +14606,11 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14598
14606
|
if (((_a = _this.editor) === null || _a === void 0 ? void 0 : _a.hasFocus()) && !_this.editor.isInShadowEdit()) {
|
|
14599
14607
|
var newSelection = _this.editor.getDOMSelection();
|
|
14600
14608
|
var domHelper = _this.editor.getDOMHelper();
|
|
14601
|
-
//If
|
|
14609
|
+
// If an image selection changed to a wider range due to a keyboard event, we should update the selection
|
|
14602
14610
|
var range = domHelper.getSelectionRange();
|
|
14603
14611
|
if (range) {
|
|
14604
14612
|
var image = (0, isSingleImageInSelection_1.isSingleImageInSelection)(range);
|
|
14605
|
-
if ((newSelection === null || newSelection === void 0 ? void 0 : newSelection.type) == 'image' && !image) {
|
|
14613
|
+
if ((newSelection === null || newSelection === void 0 ? void 0 : newSelection.type) == 'image' && !image && !range.collapsed) {
|
|
14606
14614
|
var sel = (_b = _this.editor.getDocument().defaultView) === null || _b === void 0 ? void 0 : _b.getSelection();
|
|
14607
14615
|
var isReverted = sel
|
|
14608
14616
|
? sel.focusNode != range.endContainer || sel.focusOffset != range.endOffset
|
|
@@ -14661,7 +14669,6 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14661
14669
|
var env = this.editor.getEnvironment();
|
|
14662
14670
|
var document = this.editor.getDocument();
|
|
14663
14671
|
this.isSafari = !!env.isSafari;
|
|
14664
|
-
this.isMac = !!env.isMac;
|
|
14665
14672
|
document.addEventListener('selectionchange', this.onSelectionChange);
|
|
14666
14673
|
if (this.isSafari) {
|
|
14667
14674
|
this.disposer = this.editor.attachDomEvent({
|
|
@@ -14814,6 +14821,7 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14814
14821
|
}
|
|
14815
14822
|
break;
|
|
14816
14823
|
case 'range':
|
|
14824
|
+
var image = void 0;
|
|
14817
14825
|
if (key == Up || key == Down || key == Left || key == Right || key == Tab) {
|
|
14818
14826
|
var start = selection.range.startContainer;
|
|
14819
14827
|
this.state.tableSelection = this.parseTableSelection(start, start, editor.getDOMHelper());
|
|
@@ -14829,6 +14837,14 @@ var SelectionPlugin = /** @class */ (function () {
|
|
|
14829
14837
|
}
|
|
14830
14838
|
}
|
|
14831
14839
|
}
|
|
14840
|
+
else if (key == F10 &&
|
|
14841
|
+
rawEvent.shiftKey &&
|
|
14842
|
+
(image = (0, isSingleImageInSelection_1.isSingleImageInSelection)(selection.range))) {
|
|
14843
|
+
this.setDOMSelection({
|
|
14844
|
+
type: 'image',
|
|
14845
|
+
image: image,
|
|
14846
|
+
}, null /* tableSelection */);
|
|
14847
|
+
}
|
|
14832
14848
|
break;
|
|
14833
14849
|
case 'table':
|
|
14834
14850
|
// After a content change event is handled tableSelection state is reset to null
|
|
@@ -15972,6 +15988,13 @@ var Editor = /** @class */ (function () {
|
|
|
15972
15988
|
Editor.prototype.isExperimentalFeatureEnabled = function (featureName) {
|
|
15973
15989
|
return this.getCore().experimentalFeatures.indexOf(featureName) >= 0;
|
|
15974
15990
|
};
|
|
15991
|
+
/**
|
|
15992
|
+
* Get all experimental features enabled in this editor
|
|
15993
|
+
* @returns An array of experimental feature names
|
|
15994
|
+
* */
|
|
15995
|
+
Editor.prototype.getExperimentalFeatures = function () {
|
|
15996
|
+
return this.getCore().experimentalFeatures;
|
|
15997
|
+
};
|
|
15975
15998
|
/**
|
|
15976
15999
|
* @returns the current EditorCore object
|
|
15977
16000
|
* @throws a standard Error if there's no core object
|
|
@@ -17203,6 +17226,10 @@ exports.ChangeSource = {
|
|
|
17203
17226
|
* Content changed by paste
|
|
17204
17227
|
*/
|
|
17205
17228
|
Paste: 'Paste',
|
|
17229
|
+
/**
|
|
17230
|
+
* Content changed by auto markdown conversion
|
|
17231
|
+
*/
|
|
17232
|
+
AutoMarkdownConversion: 'AutoMarkdownConversion',
|
|
17206
17233
|
/**
|
|
17207
17234
|
* Content changed by setContent API
|
|
17208
17235
|
*/
|
|
@@ -27012,6 +27039,11 @@ function mergeTables(markerPosition, newTable, source) {
|
|
|
27012
27039
|
var newTableRowCount = newTable.rows.length;
|
|
27013
27040
|
var lastTargetColIndex = getTargetColIndex(table, rowIndex, colIndex, newTableColCount);
|
|
27014
27041
|
var extraColsNeeded = lastTargetColIndex - table.rows[0].cells.length;
|
|
27042
|
+
newTable.rows.forEach(function (row) {
|
|
27043
|
+
row.cells.forEach(function (cell) {
|
|
27044
|
+
cell.spanAbove = false;
|
|
27045
|
+
});
|
|
27046
|
+
});
|
|
27015
27047
|
if (extraColsNeeded > 0) {
|
|
27016
27048
|
var currentColCount = table.rows[0].cells.length;
|
|
27017
27049
|
for (var col = 0; col < extraColsNeeded; col++) {
|
|
@@ -31043,9 +31075,9 @@ var MarkdownBlockGroupType = {
|
|
|
31043
31075
|
/**
|
|
31044
31076
|
* @internal
|
|
31045
31077
|
*/
|
|
31046
|
-
function createBlockGroupFromMarkdown(text, patternName, options, group) {
|
|
31078
|
+
function createBlockGroupFromMarkdown(text, patternName, options, group, list) {
|
|
31047
31079
|
if (MarkdownBlockGroupType[patternName] === 'ListItem') {
|
|
31048
|
-
return (0, createListFromMarkdown_1.createListFromMarkdown)(text, patternName === 'ordered_list' ? 'OL' : 'UL', options);
|
|
31080
|
+
return (0, createListFromMarkdown_1.createListFromMarkdown)(text, patternName === 'ordered_list' ? 'OL' : 'UL', options, list);
|
|
31049
31081
|
}
|
|
31050
31082
|
else {
|
|
31051
31083
|
return (0, createBlockQuoteFromMarkdown_1.createBlockQuoteFromMarkdown)(text, options, group);
|
|
@@ -31133,12 +31165,13 @@ var createParagraphFromMarkdown_1 = __webpack_require__(/*! ./createParagraphFro
|
|
|
31133
31165
|
/**
|
|
31134
31166
|
* @internal
|
|
31135
31167
|
*/
|
|
31136
|
-
function createListFromMarkdown(text, listType, options) {
|
|
31168
|
+
function createListFromMarkdown(text, listType, options, list) {
|
|
31137
31169
|
var marker = text.trim().split(' ')[0];
|
|
31138
31170
|
var isDummy = isDummyListItem(marker);
|
|
31171
|
+
var startNumber = listType === 'OL' && !list ? parseInt(marker, 10) : undefined;
|
|
31139
31172
|
var itemText = isDummy ? text : text.trim().substring(marker.length);
|
|
31140
31173
|
var paragraph = (0, createParagraphFromMarkdown_1.createParagraphFromMarkdown)(itemText.trim(), options);
|
|
31141
|
-
var levels = createLevels(text, listType, isDummy, options);
|
|
31174
|
+
var levels = createLevels(text, listType, isDummy, options, startNumber);
|
|
31142
31175
|
var listModel = (0, roosterjs_content_model_dom_1.createListItem)(levels);
|
|
31143
31176
|
if (options.direction) {
|
|
31144
31177
|
listModel.format.direction = options.direction;
|
|
@@ -31147,8 +31180,11 @@ function createListFromMarkdown(text, listType, options) {
|
|
|
31147
31180
|
return listModel;
|
|
31148
31181
|
}
|
|
31149
31182
|
exports.createListFromMarkdown = createListFromMarkdown;
|
|
31150
|
-
function createLevels(text, listType, isDummy, options) {
|
|
31183
|
+
function createLevels(text, listType, isDummy, options, startNumberOverride) {
|
|
31151
31184
|
var level = (0, roosterjs_content_model_dom_1.createListLevel)(listType, options.direction ? { direction: options.direction } : undefined);
|
|
31185
|
+
if (startNumberOverride) {
|
|
31186
|
+
level.format.startNumberOverride = startNumberOverride;
|
|
31187
|
+
}
|
|
31152
31188
|
if (isDummy) {
|
|
31153
31189
|
level.format.displayForDummyItem = 'block';
|
|
31154
31190
|
}
|
|
@@ -31437,7 +31473,7 @@ function addMarkdownBlockToModel(model, blockType, markdown, patternName, markdo
|
|
|
31437
31473
|
model.blocks.push(divider);
|
|
31438
31474
|
break;
|
|
31439
31475
|
case 'BlockGroup':
|
|
31440
|
-
var blockGroup = (0, createBlockGroupFromMarkdown_1.createBlockGroupFromMarkdown)(markdown, patternName, options, markdownContext.lastQuote);
|
|
31476
|
+
var blockGroup = (0, createBlockGroupFromMarkdown_1.createBlockGroupFromMarkdown)(markdown, patternName, options, markdownContext.lastQuote, markdownContext.lastList);
|
|
31441
31477
|
if (!markdownContext.lastQuote) {
|
|
31442
31478
|
model.blocks.push(blockGroup);
|
|
31443
31479
|
}
|
|
@@ -32289,6 +32325,7 @@ var MarkdownPastePlugin = /** @class */ (function () {
|
|
|
32289
32325
|
return true;
|
|
32290
32326
|
}, {
|
|
32291
32327
|
apiName: 'MarkdownConversion',
|
|
32328
|
+
changeSource: roosterjs_content_model_dom_1.ChangeSource.AutoMarkdownConversion,
|
|
32292
32329
|
scrollCaretIntoView: true,
|
|
32293
32330
|
});
|
|
32294
32331
|
}
|
|
@@ -33870,7 +33907,8 @@ exports.CustomReplacePlugin = CustomReplacePlugin;
|
|
|
33870
33907
|
|
|
33871
33908
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
33872
33909
|
exports.DragAndDropPlugin = void 0;
|
|
33873
|
-
var
|
|
33910
|
+
var handleDroppedExternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedExternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts");
|
|
33911
|
+
var handleDroppedInternalContent_1 = __webpack_require__(/*! ./utils/handleDroppedInternalContent */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts");
|
|
33874
33912
|
var DefaultOptions = {
|
|
33875
33913
|
forbiddenElements: ['iframe'],
|
|
33876
33914
|
};
|
|
@@ -33887,7 +33925,7 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33887
33925
|
var _a;
|
|
33888
33926
|
this.editor = null;
|
|
33889
33927
|
this.forbiddenElements = [];
|
|
33890
|
-
this.
|
|
33928
|
+
this.internalDrag = false;
|
|
33891
33929
|
this.disposer = null;
|
|
33892
33930
|
this.forbiddenElements = (_a = options.forbiddenElements) !== null && _a !== void 0 ? _a : [];
|
|
33893
33931
|
}
|
|
@@ -33909,7 +33947,7 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33909
33947
|
this.disposer = editor.attachDomEvent({
|
|
33910
33948
|
dragstart: {
|
|
33911
33949
|
beforeDispatch: function (_ev) {
|
|
33912
|
-
_this.
|
|
33950
|
+
_this.internalDrag = true;
|
|
33913
33951
|
},
|
|
33914
33952
|
},
|
|
33915
33953
|
});
|
|
@@ -33925,7 +33963,6 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33925
33963
|
this.disposer();
|
|
33926
33964
|
this.disposer = null;
|
|
33927
33965
|
}
|
|
33928
|
-
this.isInternalDragging = false;
|
|
33929
33966
|
this.forbiddenElements = [];
|
|
33930
33967
|
};
|
|
33931
33968
|
/**
|
|
@@ -33937,17 +33974,18 @@ var DragAndDropPlugin = /** @class */ (function () {
|
|
|
33937
33974
|
DragAndDropPlugin.prototype.onPluginEvent = function (event) {
|
|
33938
33975
|
var _a;
|
|
33939
33976
|
if (this.editor && event.eventType == 'beforeDrop') {
|
|
33940
|
-
|
|
33941
|
-
|
|
33977
|
+
var dropEvent = event.rawEvent;
|
|
33978
|
+
if (this.internalDrag &&
|
|
33979
|
+
this.editor.isExperimentalFeatureEnabled('HandleDropInternalContent')) {
|
|
33980
|
+
(0, handleDroppedInternalContent_1.handleDroppedInternalContent)(this.editor, dropEvent);
|
|
33942
33981
|
}
|
|
33943
|
-
else {
|
|
33944
|
-
var dropEvent = event.rawEvent;
|
|
33982
|
+
else if (!this.internalDrag) {
|
|
33945
33983
|
var html = (_a = dropEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/html');
|
|
33946
33984
|
if (html) {
|
|
33947
|
-
(0,
|
|
33985
|
+
(0, handleDroppedExternalContent_1.handleDroppedExternalContent)(this.editor, dropEvent, html, this.forbiddenElements);
|
|
33948
33986
|
}
|
|
33949
33987
|
}
|
|
33950
|
-
|
|
33988
|
+
this.internalDrag = false;
|
|
33951
33989
|
}
|
|
33952
33990
|
};
|
|
33953
33991
|
return DragAndDropPlugin;
|
|
@@ -34001,23 +34039,23 @@ exports.cleanForbiddenElements = cleanForbiddenElements;
|
|
|
34001
34039
|
|
|
34002
34040
|
/***/ },
|
|
34003
34041
|
|
|
34004
|
-
/***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/
|
|
34005
|
-
|
|
34006
|
-
!*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/
|
|
34007
|
-
|
|
34042
|
+
/***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts"
|
|
34043
|
+
/*!********************************************************************************************************!*\
|
|
34044
|
+
!*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedExternalContent.ts ***!
|
|
34045
|
+
\********************************************************************************************************/
|
|
34008
34046
|
(__unused_webpack_module, exports, __webpack_require__) {
|
|
34009
34047
|
|
|
34010
34048
|
"use strict";
|
|
34011
34049
|
|
|
34012
34050
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
34013
|
-
exports.
|
|
34051
|
+
exports.handleDroppedExternalContent = void 0;
|
|
34014
34052
|
var cleanForbiddenElements_1 = __webpack_require__(/*! ./cleanForbiddenElements */ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/cleanForbiddenElements.ts");
|
|
34015
34053
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
34016
34054
|
/**
|
|
34017
34055
|
* @internal
|
|
34018
34056
|
* Handle dropped HTML content by inserting it at the drop position
|
|
34019
34057
|
*/
|
|
34020
|
-
function
|
|
34058
|
+
function handleDroppedExternalContent(editor, event, html, forbiddenElements) {
|
|
34021
34059
|
var doc = editor.getDocument();
|
|
34022
34060
|
var domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
|
|
34023
34061
|
if (domPosition) {
|
|
@@ -34041,7 +34079,56 @@ function handleDroppedContent(editor, event, html, forbiddenElements) {
|
|
|
34041
34079
|
});
|
|
34042
34080
|
}
|
|
34043
34081
|
}
|
|
34044
|
-
exports.
|
|
34082
|
+
exports.handleDroppedExternalContent = handleDroppedExternalContent;
|
|
34083
|
+
|
|
34084
|
+
|
|
34085
|
+
/***/ },
|
|
34086
|
+
|
|
34087
|
+
/***/ "./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts"
|
|
34088
|
+
/*!********************************************************************************************************!*\
|
|
34089
|
+
!*** ./packages/roosterjs-content-model-plugins/lib/dragAndDrop/utils/handleDroppedInternalContent.ts ***!
|
|
34090
|
+
\********************************************************************************************************/
|
|
34091
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
34092
|
+
|
|
34093
|
+
"use strict";
|
|
34094
|
+
|
|
34095
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
34096
|
+
exports.handleDroppedInternalContent = void 0;
|
|
34097
|
+
var roosterjs_content_model_api_1 = __webpack_require__(/*! roosterjs-content-model-api */ "./packages/roosterjs-content-model-api/lib/index.ts");
|
|
34098
|
+
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
34099
|
+
/**
|
|
34100
|
+
* @internal
|
|
34101
|
+
* Handle dropped internal HTML content by inserting it at the drop position
|
|
34102
|
+
*/
|
|
34103
|
+
function handleDroppedInternalContent(editor, event) {
|
|
34104
|
+
var doc = editor.getDocument();
|
|
34105
|
+
var domPosition = (0, roosterjs_content_model_dom_1.getNodePositionFromEvent)(doc, editor.getDOMHelper(), event.x, event.y);
|
|
34106
|
+
var selection = editor.getDOMSelection();
|
|
34107
|
+
if (domPosition && selection) {
|
|
34108
|
+
event.preventDefault();
|
|
34109
|
+
event.stopPropagation();
|
|
34110
|
+
(0, roosterjs_content_model_api_1.formatInsertPointWithContentModel)(editor, domPosition, function (model, context, insertPoint) {
|
|
34111
|
+
if (insertPoint) {
|
|
34112
|
+
var cloneModel = (0, roosterjs_content_model_dom_1.cloneModelForPaste)(model);
|
|
34113
|
+
(0, roosterjs_content_model_dom_1.trimModelForSelection)(cloneModel, selection);
|
|
34114
|
+
if ((0, roosterjs_content_model_dom_1.deleteSelection)(model, [], context).deleteResult == 'range') {
|
|
34115
|
+
(0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
|
|
34116
|
+
}
|
|
34117
|
+
var startMarker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(insertPoint.marker.format);
|
|
34118
|
+
var startParagraph = (0, roosterjs_content_model_dom_1.mutateBlock)(insertPoint.paragraph);
|
|
34119
|
+
var startIndex = startParagraph.segments.indexOf(insertPoint.marker);
|
|
34120
|
+
startParagraph.segments.splice(startIndex, 0, startMarker);
|
|
34121
|
+
var newInsertPoint = (0, roosterjs_content_model_dom_1.mergeModel)(model, cloneModel, context, {
|
|
34122
|
+
insertPosition: insertPoint,
|
|
34123
|
+
});
|
|
34124
|
+
if (newInsertPoint) {
|
|
34125
|
+
(0, roosterjs_content_model_dom_1.setSelection)(model, startMarker, newInsertPoint.marker);
|
|
34126
|
+
}
|
|
34127
|
+
}
|
|
34128
|
+
});
|
|
34129
|
+
}
|
|
34130
|
+
}
|
|
34131
|
+
exports.handleDroppedInternalContent = handleDroppedInternalContent;
|
|
34045
34132
|
|
|
34046
34133
|
|
|
34047
34134
|
/***/ },
|
|
@@ -37115,7 +37202,7 @@ var ImageEditPlugin = /** @class */ (function () {
|
|
|
37115
37202
|
if (event.rawEvent.key == 'Enter' && this.isCropMode) {
|
|
37116
37203
|
event.rawEvent.preventDefault();
|
|
37117
37204
|
}
|
|
37118
|
-
this.applyFormatWithContentModel(editor, this.isCropMode,
|
|
37205
|
+
this.applyFormatWithContentModel(editor, this.isCropMode, false /** should selectImage */, false /* isApiOperation */);
|
|
37119
37206
|
}
|
|
37120
37207
|
}
|
|
37121
37208
|
};
|
|
@@ -37155,6 +37242,28 @@ var ImageEditPlugin = /** @class */ (function () {
|
|
|
37155
37242
|
var editingImageModel;
|
|
37156
37243
|
var selection = editor.getDOMSelection();
|
|
37157
37244
|
var isRTL = false;
|
|
37245
|
+
var formatContentModelOptions = {
|
|
37246
|
+
onNodeCreated: function (model, node) {
|
|
37247
|
+
var _a;
|
|
37248
|
+
if (!isApiOperation &&
|
|
37249
|
+
editingImageModel &&
|
|
37250
|
+
editingImageModel == model &&
|
|
37251
|
+
editingImageModel.format.imageState == findEditingImage_1.EDITING_MARKER &&
|
|
37252
|
+
(0, roosterjs_content_model_dom_1.isNodeOfType)(node, 'ELEMENT_NODE') &&
|
|
37253
|
+
(0, roosterjs_content_model_dom_1.isElementOfType)(node, 'img')) {
|
|
37254
|
+
if (_this.isCropMode) {
|
|
37255
|
+
_this.startCropMode(editor, node, isRTL);
|
|
37256
|
+
}
|
|
37257
|
+
else {
|
|
37258
|
+
(_a = editor.getDocument().defaultView) === null || _a === void 0 ? void 0 : _a.requestAnimationFrame(function () {
|
|
37259
|
+
_this.startRotateAndResize(editor, node, isRTL);
|
|
37260
|
+
});
|
|
37261
|
+
}
|
|
37262
|
+
}
|
|
37263
|
+
},
|
|
37264
|
+
apiName: IMAGE_EDIT_FORMAT_EVENT,
|
|
37265
|
+
skipDOMSelection: false,
|
|
37266
|
+
};
|
|
37158
37267
|
editor.formatContentModel(function (model, context) {
|
|
37159
37268
|
var editingImage = (0, getSelectedImage_1.getSelectedImage)(model);
|
|
37160
37269
|
var previousSelectedImage = isApiOperation
|
|
@@ -37213,28 +37322,12 @@ var ImageEditPlugin = /** @class */ (function () {
|
|
|
37213
37322
|
_this.imageEditInfo = (0, updateImageEditInfo_1.updateImageEditInfo)(image, selection.image);
|
|
37214
37323
|
image.format.imageState = 'isEditing';
|
|
37215
37324
|
});
|
|
37325
|
+
formatContentModelOptions.skipDOMSelection = !isCropMode;
|
|
37216
37326
|
result = true;
|
|
37217
37327
|
}
|
|
37218
37328
|
}
|
|
37219
37329
|
return result;
|
|
37220
|
-
}, {
|
|
37221
|
-
onNodeCreated: function (model, node) {
|
|
37222
|
-
if (!isApiOperation &&
|
|
37223
|
-
editingImageModel &&
|
|
37224
|
-
editingImageModel == model &&
|
|
37225
|
-
editingImageModel.format.imageState == findEditingImage_1.EDITING_MARKER &&
|
|
37226
|
-
(0, roosterjs_content_model_dom_1.isNodeOfType)(node, 'ELEMENT_NODE') &&
|
|
37227
|
-
(0, roosterjs_content_model_dom_1.isElementOfType)(node, 'img')) {
|
|
37228
|
-
if (isCropMode) {
|
|
37229
|
-
_this.startCropMode(editor, node, isRTL);
|
|
37230
|
-
}
|
|
37231
|
-
else {
|
|
37232
|
-
_this.startRotateAndResize(editor, node, isRTL);
|
|
37233
|
-
}
|
|
37234
|
-
}
|
|
37235
|
-
},
|
|
37236
|
-
apiName: IMAGE_EDIT_FORMAT_EVENT,
|
|
37237
|
-
}, {
|
|
37330
|
+
}, formatContentModelOptions, {
|
|
37238
37331
|
tryGetFromCache: true,
|
|
37239
37332
|
});
|
|
37240
37333
|
};
|
|
@@ -38220,7 +38313,6 @@ var createImageCropper_1 = __webpack_require__(/*! ../Cropper/createImageCropper
|
|
|
38220
38313
|
var createImageResizer_1 = __webpack_require__(/*! ../Resizer/createImageResizer */ "./packages/roosterjs-content-model-plugins/lib/imageEdit/Resizer/createImageResizer.ts");
|
|
38221
38314
|
var createImageRotator_1 = __webpack_require__(/*! ../Rotator/createImageRotator */ "./packages/roosterjs-content-model-plugins/lib/imageEdit/Rotator/createImageRotator.ts");
|
|
38222
38315
|
var roosterjs_content_model_dom_1 = __webpack_require__(/*! roosterjs-content-model-dom */ "./packages/roosterjs-content-model-dom/lib/index.ts");
|
|
38223
|
-
var IMAGE_EDIT_SHADOW_ROOT = 'ImageEditShadowRoot';
|
|
38224
38316
|
/**
|
|
38225
38317
|
* @internal
|
|
38226
38318
|
*/
|
|
@@ -38253,15 +38345,8 @@ var createShadowSpan = function (wrapper, imageSpan, imageWidth, imageHeight) {
|
|
|
38253
38345
|
var shadowRoot = imageSpan.attachShadow({
|
|
38254
38346
|
mode: 'open',
|
|
38255
38347
|
});
|
|
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
38348
|
if (imageWidth > 0 && imageHeight > 0) {
|
|
38262
38349
|
imageSpan.style.display = 'inline-block';
|
|
38263
|
-
imageSpan.style.width = imageWidth + "px";
|
|
38264
|
-
imageSpan.style.height = imageHeight + "px";
|
|
38265
38350
|
imageSpan.style.verticalAlign = 'bottom';
|
|
38266
38351
|
imageSpan.style.overflow = 'visible';
|
|
38267
38352
|
}
|
|
@@ -38935,7 +39020,7 @@ function getSelectedImageMetadata(editor, image) {
|
|
|
38935
39020
|
(0, roosterjs_content_model_dom_1.mutateSegment)(selectedImage.paragraph, selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.image, function (modelImage) {
|
|
38936
39021
|
imageMetadata = updateImageEditInfo(modelImage, image);
|
|
38937
39022
|
});
|
|
38938
|
-
return
|
|
39023
|
+
return false;
|
|
38939
39024
|
}
|
|
38940
39025
|
return false;
|
|
38941
39026
|
});
|
|
@@ -39745,6 +39830,7 @@ var BulletSelector = '* > span > span[style*=mso-special-format]';
|
|
|
39745
39830
|
var MsOfficeSpecialFormat = 'mso-special-format';
|
|
39746
39831
|
var CssStyleKey = 'style';
|
|
39747
39832
|
var MsoSpecialFormatRegex = /mso-special-format:\s*([^;]*)/;
|
|
39833
|
+
var TableElementTags = new Set(['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR', 'TD', 'TH']);
|
|
39748
39834
|
var clearListItemStyles = function (format) {
|
|
39749
39835
|
delete format.textAlign;
|
|
39750
39836
|
delete format.marginLeft;
|
|
@@ -39771,7 +39857,9 @@ function processPastedContentFromPowerPoint(event, domCreator) {
|
|
|
39771
39857
|
if (style.includes(MsOfficeSpecialFormat) && context.listFormat.levels.length > 0) {
|
|
39772
39858
|
return;
|
|
39773
39859
|
}
|
|
39774
|
-
var bulletElement = element.
|
|
39860
|
+
var bulletElement = !TableElementTags.has(element.tagName)
|
|
39861
|
+
? element.querySelector(BulletSelector)
|
|
39862
|
+
: null;
|
|
39775
39863
|
if (bulletElement) {
|
|
39776
39864
|
var _c = extractPowerPointListInfo(element, bulletElement), depth = _c.depth, unorderedBulletType = _c.unorderedBulletType, orderedBulletType = _c.orderedBulletType, startNumberOverrideOrBullet_1 = _c.startNumberOverrideOrBullet, isOrderedList = _c.isOrderedList, isNewList_1 = _c.isNewList;
|
|
39777
39865
|
// Setup the listformat with the metadata extracted from the bullet element
|
|
@@ -39792,6 +39880,12 @@ function processPastedContentFromPowerPoint(event, domCreator) {
|
|
|
39792
39880
|
}
|
|
39793
39881
|
clearListItemStyles(listItem.levels[listItem.levels.length - 1].format);
|
|
39794
39882
|
clearListItemStyles(listItem.format);
|
|
39883
|
+
// When the list is inside a table cell, remove the font size from the
|
|
39884
|
+
// list marker so it does not inherit the list's font size. Otherwise a
|
|
39885
|
+
// large marker may be rendered outside of the table cell.
|
|
39886
|
+
if (element.closest('td,th')) {
|
|
39887
|
+
delete listItem.formatHolder.format.fontSize;
|
|
39888
|
+
}
|
|
39795
39889
|
});
|
|
39796
39890
|
}
|
|
39797
39891
|
else {
|