roosterjs-content-model-plugins 0.28.1 → 9.0.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/README.md +47 -37
- package/lib/autoFormat/AutoFormatPlugin.d.ts +5 -2
- package/lib/autoFormat/AutoFormatPlugin.js +23 -11
- package/lib/autoFormat/AutoFormatPlugin.js.map +1 -1
- package/lib/autoFormat/link/createLinkAfterSpace.js +28 -22
- package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib/autoFormat/link/getLinkSegment.js +2 -2
- package/lib/autoFormat/link/getLinkSegment.js.map +1 -1
- package/lib/autoFormat/list/getListTypeStyle.js +14 -14
- package/lib/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib/autoFormat/list/getNumberingListStyle.js +29 -29
- package/lib/autoFormat/list/getNumberingListStyle.js.map +1 -1
- package/lib/autoFormat/list/keyboardListTrigger.d.ts +1 -1
- package/lib/autoFormat/list/keyboardListTrigger.js +10 -11
- package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js +2 -2
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js +4 -5
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib/edit/deleteSteps/deleteEmptyQuote.js +2 -3
- package/lib/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib/edit/deleteSteps/deleteList.js +3 -5
- package/lib/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib/edit/deleteSteps/deleteWordSelection.js +3 -4
- package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnList.js +2 -3
- package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib/edit/keyboardDelete.js +4 -5
- package/lib/edit/keyboardDelete.js.map +1 -1
- package/lib/edit/keyboardInput.js +3 -4
- package/lib/edit/keyboardInput.js.map +1 -1
- package/lib/edit/keyboardTab.js +3 -3
- package/lib/edit/keyboardTab.js.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/markdown/MarkdownPlugin.d.ts +55 -0
- package/lib/markdown/MarkdownPlugin.js +177 -0
- package/lib/markdown/MarkdownPlugin.js.map +1 -0
- package/lib/markdown/utils/setFormat.d.ts +5 -0
- package/lib/markdown/utils/setFormat.js +46 -0
- package/lib/markdown/utils/setFormat.js.map +1 -0
- package/lib/paste/Excel/processPastedContentFromExcel.d.ts +6 -1
- package/lib/paste/Excel/processPastedContentFromExcel.js +20 -12
- package/lib/paste/Excel/processPastedContentFromExcel.js.map +1 -1
- package/lib/paste/WordDesktop/processWordLists.js +2 -3
- package/lib/paste/WordDesktop/processWordLists.js.map +1 -1
- package/lib/pluginUtils/splitTextSegment.d.ts +5 -0
- package/lib/pluginUtils/splitTextSegment.js +26 -0
- package/lib/pluginUtils/splitTextSegment.js.map +1 -0
- package/lib/shortcut/ShortcutPlugin.js +2 -2
- package/lib/shortcut/ShortcutPlugin.js.map +1 -1
- package/lib/shortcut/utils/setShortcutIndentationCommand.js +2 -2
- package/lib/shortcut/utils/setShortcutIndentationCommand.js.map +1 -1
- package/lib/tableEdit/editors/features/CellResizer.js +5 -6
- package/lib/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib/tableEdit/editors/features/TableResizer.js +2 -3
- package/lib/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib/watermark/WatermarkFormat.d.ts +5 -0
- package/lib/watermark/WatermarkFormat.js +3 -0
- package/lib/watermark/WatermarkFormat.js.map +1 -0
- package/lib/watermark/WatermarkPlugin.d.ts +37 -0
- package/lib/watermark/WatermarkPlugin.js +99 -0
- package/lib/watermark/WatermarkPlugin.js.map +1 -0
- package/lib/watermark/isModelEmptyFast.d.ts +6 -0
- package/lib/watermark/isModelEmptyFast.js +35 -0
- package/lib/watermark/isModelEmptyFast.js.map +1 -0
- package/lib-amd/autoFormat/AutoFormatPlugin.d.ts +5 -2
- package/lib-amd/autoFormat/AutoFormatPlugin.js +23 -11
- package/lib-amd/autoFormat/AutoFormatPlugin.js.map +1 -1
- package/lib-amd/autoFormat/link/createLinkAfterSpace.js +28 -22
- package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-amd/autoFormat/link/getLinkSegment.js +2 -2
- package/lib-amd/autoFormat/link/getLinkSegment.js.map +1 -1
- package/lib-amd/autoFormat/list/getListTypeStyle.js +14 -14
- package/lib-amd/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib-amd/autoFormat/list/getNumberingListStyle.js +29 -29
- package/lib-amd/autoFormat/list/getNumberingListStyle.js.map +1 -1
- package/lib-amd/autoFormat/list/keyboardListTrigger.d.ts +1 -1
- package/lib-amd/autoFormat/list/keyboardListTrigger.js +11 -11
- package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js +2 -2
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js +5 -5
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js +3 -3
- package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteList.js +3 -5
- package/lib-amd/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js +4 -4
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnList.js +3 -3
- package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-amd/edit/keyboardDelete.js +4 -4
- package/lib-amd/edit/keyboardDelete.js.map +1 -1
- package/lib-amd/edit/keyboardInput.js +3 -3
- package/lib-amd/edit/keyboardInput.js.map +1 -1
- package/lib-amd/edit/keyboardTab.js +3 -3
- package/lib-amd/edit/keyboardTab.js.map +1 -1
- package/lib-amd/index.d.ts +3 -0
- package/lib-amd/index.js +4 -2
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/markdown/MarkdownPlugin.d.ts +55 -0
- package/lib-amd/markdown/MarkdownPlugin.js +178 -0
- package/lib-amd/markdown/MarkdownPlugin.js.map +1 -0
- package/lib-amd/markdown/utils/setFormat.d.ts +5 -0
- package/lib-amd/markdown/utils/setFormat.js +45 -0
- package/lib-amd/markdown/utils/setFormat.js.map +1 -0
- package/lib-amd/paste/Excel/processPastedContentFromExcel.d.ts +6 -1
- package/lib-amd/paste/Excel/processPastedContentFromExcel.js +20 -12
- package/lib-amd/paste/Excel/processPastedContentFromExcel.js.map +1 -1
- package/lib-amd/paste/WordDesktop/processWordLists.js +3 -3
- package/lib-amd/paste/WordDesktop/processWordLists.js.map +1 -1
- package/lib-amd/pluginUtils/splitTextSegment.d.ts +5 -0
- package/lib-amd/pluginUtils/splitTextSegment.js +26 -0
- package/lib-amd/pluginUtils/splitTextSegment.js.map +1 -0
- package/lib-amd/shortcut/ShortcutPlugin.js +2 -2
- package/lib-amd/shortcut/ShortcutPlugin.js.map +1 -1
- package/lib-amd/shortcut/utils/setShortcutIndentationCommand.js +2 -2
- package/lib-amd/shortcut/utils/setShortcutIndentationCommand.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/CellResizer.js +6 -6
- package/lib-amd/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/TableResizer.js +3 -3
- package/lib-amd/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib-amd/watermark/WatermarkFormat.d.ts +5 -0
- package/lib-amd/watermark/WatermarkFormat.js +5 -0
- package/lib-amd/watermark/WatermarkFormat.js.map +1 -0
- package/lib-amd/watermark/WatermarkPlugin.d.ts +37 -0
- package/lib-amd/watermark/WatermarkPlugin.js +99 -0
- package/lib-amd/watermark/WatermarkPlugin.js.map +1 -0
- package/lib-amd/watermark/isModelEmptyFast.d.ts +6 -0
- package/lib-amd/watermark/isModelEmptyFast.js +37 -0
- package/lib-amd/watermark/isModelEmptyFast.js.map +1 -0
- package/lib-mjs/autoFormat/AutoFormatPlugin.d.ts +5 -2
- package/lib-mjs/autoFormat/AutoFormatPlugin.js +23 -11
- package/lib-mjs/autoFormat/AutoFormatPlugin.js.map +1 -1
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.js +28 -22
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-mjs/autoFormat/link/getLinkSegment.js +1 -1
- package/lib-mjs/autoFormat/link/getLinkSegment.js.map +1 -1
- package/lib-mjs/autoFormat/list/getListTypeStyle.js +2 -2
- package/lib-mjs/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib-mjs/autoFormat/list/getNumberingListStyle.js +1 -1
- package/lib-mjs/autoFormat/list/getNumberingListStyle.js.map +1 -1
- package/lib-mjs/autoFormat/list/keyboardListTrigger.d.ts +1 -1
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js +11 -12
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js +1 -1
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js +1 -2
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js +1 -2
- package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteList.js +2 -4
- package/lib-mjs/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js +1 -2
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js +1 -2
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-mjs/edit/keyboardDelete.js +1 -2
- package/lib-mjs/edit/keyboardDelete.js.map +1 -1
- package/lib-mjs/edit/keyboardInput.js +1 -2
- package/lib-mjs/edit/keyboardInput.js.map +1 -1
- package/lib-mjs/edit/keyboardTab.js +1 -1
- package/lib-mjs/edit/keyboardTab.js.map +1 -1
- package/lib-mjs/index.d.ts +3 -0
- package/lib-mjs/index.js +2 -0
- package/lib-mjs/index.js.map +1 -1
- package/lib-mjs/markdown/MarkdownPlugin.d.ts +55 -0
- package/lib-mjs/markdown/MarkdownPlugin.js +174 -0
- package/lib-mjs/markdown/MarkdownPlugin.js.map +1 -0
- package/lib-mjs/markdown/utils/setFormat.d.ts +5 -0
- package/lib-mjs/markdown/utils/setFormat.js +42 -0
- package/lib-mjs/markdown/utils/setFormat.js.map +1 -0
- package/lib-mjs/paste/Excel/processPastedContentFromExcel.d.ts +6 -1
- package/lib-mjs/paste/Excel/processPastedContentFromExcel.js +18 -11
- package/lib-mjs/paste/Excel/processPastedContentFromExcel.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/processWordLists.js +1 -2
- package/lib-mjs/paste/WordDesktop/processWordLists.js.map +1 -1
- package/lib-mjs/pluginUtils/splitTextSegment.d.ts +5 -0
- package/lib-mjs/pluginUtils/splitTextSegment.js +22 -0
- package/lib-mjs/pluginUtils/splitTextSegment.js.map +1 -0
- package/lib-mjs/shortcut/ShortcutPlugin.js +1 -1
- package/lib-mjs/shortcut/ShortcutPlugin.js.map +1 -1
- package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.js +1 -1
- package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/CellResizer.js +1 -2
- package/lib-mjs/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/TableResizer.js +1 -2
- package/lib-mjs/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib-mjs/watermark/WatermarkFormat.d.ts +5 -0
- package/lib-mjs/watermark/WatermarkFormat.js +2 -0
- package/lib-mjs/watermark/WatermarkFormat.js.map +1 -0
- package/lib-mjs/watermark/WatermarkPlugin.d.ts +37 -0
- package/lib-mjs/watermark/WatermarkPlugin.js +96 -0
- package/lib-mjs/watermark/WatermarkPlugin.js.map +1 -0
- package/lib-mjs/watermark/isModelEmptyFast.d.ts +6 -0
- package/lib-mjs/watermark/isModelEmptyFast.js +31 -0
- package/lib-mjs/watermark/isModelEmptyFast.js.map +1 -0
- package/package.json +6 -6
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
define(["require", "exports", "./getListTypeStyle", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "./getListTypeStyle", "roosterjs-content-model-dom", "roosterjs-content-model-api"], function (require, exports, getListTypeStyle_1, roosterjs_content_model_dom_1, roosterjs_content_model_api_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.keyboardListTrigger = void 0;
|
|
5
5
|
/**
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
|
-
function keyboardListTrigger(editor,
|
|
8
|
+
function keyboardListTrigger(editor, shouldSearchForBullet, shouldSearchForNumbering) {
|
|
9
9
|
if (shouldSearchForBullet === void 0) { shouldSearchForBullet = true; }
|
|
10
10
|
if (shouldSearchForNumbering === void 0) { shouldSearchForNumbering = true; }
|
|
11
11
|
if (shouldSearchForBullet || shouldSearchForNumbering) {
|
|
12
|
-
editor.formatContentModel(function (model,
|
|
12
|
+
editor.formatContentModel(function (model, context) {
|
|
13
13
|
var listStyleType = (0, getListTypeStyle_1.getListTypeStyle)(model, shouldSearchForBullet, shouldSearchForNumbering);
|
|
14
14
|
if (listStyleType) {
|
|
15
|
-
var segmentsAndParagraphs = (0,
|
|
15
|
+
var segmentsAndParagraphs = (0, roosterjs_content_model_dom_1.getSelectedSegmentsAndParagraphs)(model, false);
|
|
16
16
|
if (segmentsAndParagraphs[0] && segmentsAndParagraphs[0][1]) {
|
|
17
17
|
segmentsAndParagraphs[0][1].segments.splice(0, 1);
|
|
18
18
|
}
|
|
19
19
|
var listType = listStyleType.listType, styleType = listStyleType.styleType, index = listStyleType.index;
|
|
20
|
-
triggerList(
|
|
21
|
-
|
|
22
|
-
(0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
|
|
20
|
+
triggerList(model, listType, styleType, index);
|
|
21
|
+
context.canUndoByBackspace = true;
|
|
23
22
|
return true;
|
|
24
23
|
}
|
|
25
24
|
return false;
|
|
25
|
+
}, {
|
|
26
|
+
apiName: 'autoToggleList',
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
exports.keyboardListTrigger = keyboardListTrigger;
|
|
30
|
-
var triggerList = function (
|
|
31
|
+
var triggerList = function (model, listType, styleType, index) {
|
|
31
32
|
(0, roosterjs_content_model_api_1.setListType)(model, listType);
|
|
32
33
|
var isOrderedList = listType == 'OL';
|
|
33
|
-
// If the index < 1, it is a new list, so it will be starting by 1, then no need to set startNumber
|
|
34
34
|
if (index && index > 1 && isOrderedList) {
|
|
35
|
-
(0, roosterjs_content_model_api_1.
|
|
35
|
+
(0, roosterjs_content_model_api_1.setModelListStartNumber)(model, index);
|
|
36
36
|
}
|
|
37
|
-
(0, roosterjs_content_model_api_1.
|
|
37
|
+
(0, roosterjs_content_model_api_1.setModelListStyle)(model, isOrderedList
|
|
38
38
|
? {
|
|
39
39
|
orderedStyleType: styleType,
|
|
40
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardListTrigger.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/keyboardListTrigger.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"keyboardListTrigger.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/keyboardListTrigger.ts"],"names":[],"mappings":";;;;IASA;;OAEG;IACH,SAAgB,mBAAmB,CAC/B,MAAe,EACf,qBAAqC,EACrC,wBAAwC;QADxC,sCAAA,EAAA,4BAAqC;QACrC,yCAAA,EAAA,+BAAwC;QAExC,IAAI,qBAAqB,IAAI,wBAAwB,EAAE;YACnD,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;gBACX,IAAM,aAAa,GAAG,IAAA,mCAAgB,EAClC,KAAK,EACL,qBAAqB,EACrB,wBAAwB,CAC3B,CAAC;gBACF,IAAI,aAAa,EAAE;oBACf,IAAM,qBAAqB,GAAG,IAAA,8DAAgC,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC7E,IAAI,qBAAqB,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzD,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACrD;oBACO,IAAA,QAAQ,GAAuB,aAAa,SAApC,EAAE,SAAS,GAAY,aAAa,UAAzB,EAAE,KAAK,GAAK,aAAa,MAAlB,CAAmB;oBACrD,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;oBAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAElC,OAAO,IAAI,CAAC;iBACf;gBAED,OAAO,KAAK,CAAC;YACjB,CAAC,EACD;gBACI,OAAO,EAAE,gBAAgB;aAC5B,CACJ,CAAC;SACL;IACL,CAAC;IAhCD,kDAgCC;IAED,IAAM,WAAW,GAAG,UAChB,KAA2B,EAC3B,QAAqB,EACrB,SAAiB,EACjB,KAAc;QAEd,IAAA,yCAAW,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7B,IAAM,aAAa,GAAG,QAAQ,IAAI,IAAI,CAAC;QACvC,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE;YACrC,IAAA,qDAAuB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACzC;QACD,IAAA,+CAAiB,EACb,KAAK,EACL,aAAa;YACT,CAAC,CAAC;gBACI,gBAAgB,EAAE,SAAS;aAC9B;YACH,CAAC,CAAC;gBACI,kBAAkB,EAAE,SAAS;aAChC,CACV,CAAC;IACN,CAAC,CAAC","sourcesContent":["import { getListTypeStyle } from './getListTypeStyle';\nimport { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-dom';\nimport {\n setListType,\n setModelListStartNumber,\n setModelListStyle,\n} from 'roosterjs-content-model-api';\nimport type { ContentModelDocument, IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardListTrigger(\n editor: IEditor,\n shouldSearchForBullet: boolean = true,\n shouldSearchForNumbering: boolean = true\n) {\n if (shouldSearchForBullet || shouldSearchForNumbering) {\n editor.formatContentModel(\n (model, context) => {\n const listStyleType = getListTypeStyle(\n model,\n shouldSearchForBullet,\n shouldSearchForNumbering\n );\n if (listStyleType) {\n const segmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, false);\n if (segmentsAndParagraphs[0] && segmentsAndParagraphs[0][1]) {\n segmentsAndParagraphs[0][1].segments.splice(0, 1);\n }\n const { listType, styleType, index } = listStyleType;\n triggerList(model, listType, styleType, index);\n context.canUndoByBackspace = true;\n\n return true;\n }\n\n return false;\n },\n {\n apiName: 'autoToggleList',\n }\n );\n }\n}\n\nconst triggerList = (\n model: ContentModelDocument,\n listType: 'OL' | 'UL',\n styleType: number,\n index?: number\n) => {\n setListType(model, listType);\n const isOrderedList = listType == 'OL';\n if (index && index > 1 && isOrderedList) {\n setModelListStartNumber(model, index);\n }\n setModelListStyle(\n model,\n isOrderedList\n ? {\n orderedStyleType: styleType,\n }\n : {\n unorderedStyleType: styleType,\n }\n );\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-dom"], function (require, exports, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.deleteAllSegmentBefore = void 0;
|
|
@@ -14,7 +14,7 @@ define(["require", "exports", "roosterjs-content-model-core"], function (require
|
|
|
14
14
|
for (var i = index - 1; i >= 0; i--) {
|
|
15
15
|
var segment = paragraph.segments[i];
|
|
16
16
|
segment.isSelected = true;
|
|
17
|
-
if ((0,
|
|
17
|
+
if ((0, roosterjs_content_model_dom_1.deleteSegment)(paragraph, segment, context.formatContext)) {
|
|
18
18
|
context.deleteResult = 'range';
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteAllSegmentBefore.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteAllSegmentBefore.ts"],"names":[],"mappings":";;;;IAGA;;OAEG;IACI,IAAM,sBAAsB,GAAwB,UAAA,OAAO;QAC9D,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;YACtC,OAAO;SACV;QAEK,IAAA,KAAwB,OAAO,CAAC,WAAW,EAAzC,SAAS,eAAA,EAAE,MAAM,YAAwB,CAAC;QAClD,IAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEtC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAE1B,IAAI,IAAA,
|
|
1
|
+
{"version":3,"file":"deleteAllSegmentBefore.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteAllSegmentBefore.ts"],"names":[],"mappings":";;;;IAGA;;OAEG;IACI,IAAM,sBAAsB,GAAwB,UAAA,OAAO;QAC9D,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;YACtC,OAAO;SACV;QAEK,IAAA,KAAwB,OAAO,CAAC,WAAW,EAAzC,SAAS,eAAA,EAAE,MAAM,YAAwB,CAAC;QAClD,IAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEtC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAE1B,IAAI,IAAA,2CAAa,EAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE;gBAC1D,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;aAClC;SACJ;IACL,CAAC,CAAC;IAjBW,QAAA,sBAAsB,0BAiBjC","sourcesContent":["import { deleteSegment } from 'roosterjs-content-model-dom';\nimport type { DeleteSelectionStep } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteAllSegmentBefore: DeleteSelectionStep = context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const { paragraph, marker } = context.insertPoint;\n const index = paragraph.segments.indexOf(marker);\n\n for (let i = index - 1; i >= 0; i--) {\n const segment = paragraph.segments[i];\n\n segment.isSelected = true;\n\n if (deleteSegment(paragraph, segment, context.formatContext)) {\n context.deleteResult = 'range';\n }\n }\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "../utils/getLeafSiblingBlock", "roosterjs-content-model-api", "roosterjs-content-model-dom"
|
|
1
|
+
define(["require", "exports", "../utils/getLeafSiblingBlock", "roosterjs-content-model-api", "roosterjs-content-model-dom"], function (require, exports, getLeafSiblingBlock_1, roosterjs_content_model_api_1, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.backwardDeleteCollapsedSelection = exports.forwardDeleteCollapsedSelection = void 0;
|
|
@@ -17,7 +17,7 @@ define(["require", "exports", "../utils/getLeafSiblingBlock", "roosterjs-content
|
|
|
17
17
|
var blockToDelete;
|
|
18
18
|
var root;
|
|
19
19
|
if (segmentToDelete) {
|
|
20
|
-
if ((0,
|
|
20
|
+
if ((0, roosterjs_content_model_dom_1.deleteSegment)(paragraph, segmentToDelete, context.formatContext, direction)) {
|
|
21
21
|
context.deleteResult = 'singleChar';
|
|
22
22
|
// It is possible that we have deleted everything from this paragraph, so we need to mark it as not implicit
|
|
23
23
|
// to avoid losing its format. See https://github.com/microsoft/roosterjs/issues/1953
|
|
@@ -34,7 +34,7 @@ define(["require", "exports", "../utils/getLeafSiblingBlock", "roosterjs-content
|
|
|
34
34
|
if (block.blockType == 'Paragraph') {
|
|
35
35
|
if (siblingSegment) {
|
|
36
36
|
// When selection is under general segment, need to check if it has a sibling sibling, and delete from it
|
|
37
|
-
if ((0,
|
|
37
|
+
if ((0, roosterjs_content_model_dom_1.deleteSegment)(block, siblingSegment, context.formatContext, direction)) {
|
|
38
38
|
context.deleteResult = 'range';
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -61,7 +61,7 @@ define(["require", "exports", "../utils/getLeafSiblingBlock", "roosterjs-content
|
|
|
61
61
|
context.lastTableContext = tableContext;
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
|
-
if ((0,
|
|
64
|
+
if ((0, roosterjs_content_model_dom_1.deleteBlock)(path_1[0].blocks, block, undefined /*replacement*/, context.formatContext, direction)) {
|
|
65
65
|
context.deleteResult = 'range';
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -84,7 +84,7 @@ define(["require", "exports", "../utils/getLeafSiblingBlock", "roosterjs-content
|
|
|
84
84
|
segments[0].segmentType == 'SelectionMarker' &&
|
|
85
85
|
paragraph.format.marginLeft &&
|
|
86
86
|
parseInt(paragraph.format.marginLeft) &&
|
|
87
|
-
(0,
|
|
87
|
+
(0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['Document', 'TableCell'], ['ListItem']) > -1);
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* If the last segment is BR, remove it for now. We may add it back later when normalize model.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteCollapsedSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteCollapsedSelection.ts"],"names":[],"mappings":";;;;IAiBA,SAAS,2BAA2B,CAAC,SAAiC;QAClE,OAAO,UAAA,OAAO;;YACV,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;gBACtC,OAAO;aACV;YAED,IAAM,SAAS,GAAG,SAAS,IAAI,SAAS,CAAC;YACnC,IAAA,KAA4C,OAAO,CAAC,WAAW,EAA7D,SAAS,eAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAA,EAAE,YAAY,kBAAwB,CAAC;YACtE,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YAEpC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAElB,IAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,aAAkC,CAAC;YACvC,IAAI,IAAiC,CAAC;YAEtC,IAAI,eAAe,EAAE;gBACjB,IAAI,IAAA,
|
|
1
|
+
{"version":3,"file":"deleteCollapsedSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteCollapsedSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLeafSiblingBlock } from '../utils/getLeafSiblingBlock';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport {\n deleteBlock,\n deleteSegment,\n getClosestAncestorBlockGroupIndex,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\nimport type { BlockAndPath } from '../utils/getLeafSiblingBlock';\nimport type {\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelParagraph,\n ContentModelSegment,\n DeleteSelectionStep,\n} from 'roosterjs-content-model-types';\n\nfunction getDeleteCollapsedSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const isForward = direction == 'forward';\n const { paragraph, marker, path, tableContext } = context.insertPoint;\n const segments = paragraph.segments;\n\n fixupBr(segments);\n\n const index = segments.indexOf(marker) + (isForward ? 1 : -1);\n const segmentToDelete = segments[index];\n let blockToDelete: BlockAndPath | null;\n let root: ContentModelDocument | null;\n\n if (segmentToDelete) {\n if (deleteSegment(paragraph, segmentToDelete, context.formatContext, direction)) {\n context.deleteResult = 'singleChar';\n\n // It is possible that we have deleted everything from this paragraph, so we need to mark it as not implicit\n // to avoid losing its format. See https://github.com/microsoft/roosterjs/issues/1953\n setParagraphNotImplicit(paragraph);\n }\n } else if (\n shouldOutdentParagraph(isForward, segments, paragraph, path) &&\n (root = getRoot(path))\n ) {\n setModelIndentation(root, 'outdent');\n context.deleteResult = 'range';\n } else if ((blockToDelete = getLeafSiblingBlock(path, paragraph, isForward))) {\n const { block, path, siblingSegment } = blockToDelete;\n\n if (block.blockType == 'Paragraph') {\n if (siblingSegment) {\n // When selection is under general segment, need to check if it has a sibling sibling, and delete from it\n if (deleteSegment(block, siblingSegment, context.formatContext, direction)) {\n context.deleteResult = 'range';\n }\n } else {\n if (isForward) {\n context.lastParagraph = block;\n } else {\n if (block.segments[block.segments.length - 1]?.segmentType == 'Br') {\n block.segments.pop();\n }\n\n context.insertPoint = {\n marker,\n paragraph: block,\n path,\n tableContext,\n };\n context.lastParagraph = paragraph;\n delete block.cachedElement;\n }\n\n context.deleteResult = 'range';\n }\n\n // When go across table, getLeafSiblingBlock will return null, when we are here, we must be in the same table context\n context.lastTableContext = tableContext;\n } else {\n if (\n deleteBlock(\n path[0].blocks,\n block,\n undefined /*replacement*/,\n context.formatContext,\n direction\n )\n ) {\n context.deleteResult = 'range';\n }\n }\n } else {\n // We have nothing to delete, in this case we don't want browser handle it as well.\n // Because when Backspace on an empty document, it will also delete the only DIV and SPAN element, causes\n // editor is really empty. We don't want that happen. So the handling should stop here.\n context.deleteResult = 'nothingToDelete';\n }\n };\n}\n\nfunction getRoot(path: ContentModelBlockGroup[]): ContentModelDocument | null {\n const lastInPath = path[path.length - 1];\n return lastInPath.blockGroupType == 'Document' ? lastInPath : null;\n}\n\nfunction shouldOutdentParagraph(\n isForward: boolean,\n segments: ContentModelSegment[],\n paragraph: ContentModelParagraph,\n path: ContentModelBlockGroup[]\n) {\n return (\n !isForward &&\n segments.length == 1 &&\n segments[0].segmentType == 'SelectionMarker' &&\n paragraph.format.marginLeft &&\n parseInt(paragraph.format.marginLeft) &&\n getClosestAncestorBlockGroupIndex(path, ['Document', 'TableCell'], ['ListItem']) > -1\n );\n}\n\n/**\n * If the last segment is BR, remove it for now. We may add it back later when normalize model.\n * So that if this is an empty paragraph, it will start to delete next block\n */\nfunction fixupBr(segments: ContentModelSegment[]) {\n if (segments[segments.length - 1]?.segmentType == 'Br') {\n const segmentsWithoutBr = segments.filter(x => x.segmentType != 'SelectionMarker');\n\n if (segmentsWithoutBr[segmentsWithoutBr.length - 2]?.segmentType != 'Br') {\n segments.pop();\n }\n }\n}\n\n/**\n * @internal if we didn't delete anything, and we want to delete forward, now perform it\n */\nexport const forwardDeleteCollapsedSelection = getDeleteCollapsedSelection('forward');\n\n/**\n * @internal if we didn't delete anything, and we want to delete backward, now perform it\n */\nexport const backwardDeleteCollapsedSelection = getDeleteCollapsedSelection('backward');\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "roosterjs-content-model-dom"
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-dom"], function (require, exports, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.deleteEmptyQuote = void 0;
|
|
@@ -13,13 +13,13 @@ define(["require", "exports", "roosterjs-content-model-dom", "roosterjs-content-
|
|
|
13
13
|
var insertPoint = context.insertPoint, formatContext = context.formatContext;
|
|
14
14
|
var path = insertPoint.path;
|
|
15
15
|
var rawEvent = formatContext === null || formatContext === void 0 ? void 0 : formatContext.rawEvent;
|
|
16
|
-
var index = (0,
|
|
16
|
+
var index = (0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['FormatContainer', 'ListItem'], ['TableCell']);
|
|
17
17
|
var quote = path[index];
|
|
18
18
|
if (quote && quote.blockGroupType === 'FormatContainer' && quote.tagName == 'blockquote') {
|
|
19
19
|
var parent_1 = path[index + 1];
|
|
20
20
|
var quoteBlockIndex = parent_1.blocks.indexOf(quote);
|
|
21
21
|
var blockQuote = parent_1.blocks[quoteBlockIndex];
|
|
22
|
-
if ((0,
|
|
22
|
+
if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(blockQuote, 'FormatContainer') &&
|
|
23
23
|
blockQuote.tagName === 'blockquote') {
|
|
24
24
|
if (isEmptyQuote(blockQuote)) {
|
|
25
25
|
(0, roosterjs_content_model_dom_1.unwrapBlock)(parent_1, blockQuote);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteEmptyQuote.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteEmptyQuote.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"deleteEmptyQuote.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteEmptyQuote.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createParagraph,\n createSelectionMarker,\n unwrapBlock,\n getClosestAncestorBlockGroupIndex,\n isBlockGroupOfType,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelBlockGroup,\n ContentModelFormatContainer,\n DeleteSelectionStep,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteEmptyQuote: DeleteSelectionStep = context => {\n const { deleteResult } = context;\n if (\n deleteResult == 'nothingToDelete' ||\n deleteResult == 'notDeleted' ||\n deleteResult == 'range'\n ) {\n const { insertPoint, formatContext } = context;\n const { path } = insertPoint;\n const rawEvent = formatContext?.rawEvent as KeyboardEvent;\n const index = getClosestAncestorBlockGroupIndex(\n path,\n ['FormatContainer', 'ListItem'],\n ['TableCell']\n );\n const quote = path[index];\n\n if (quote && quote.blockGroupType === 'FormatContainer' && quote.tagName == 'blockquote') {\n const parent = path[index + 1];\n const quoteBlockIndex = parent.blocks.indexOf(quote);\n const blockQuote = parent.blocks[quoteBlockIndex];\n if (\n isBlockGroupOfType<ContentModelFormatContainer>(blockQuote, 'FormatContainer') &&\n blockQuote.tagName === 'blockquote'\n ) {\n if (isEmptyQuote(blockQuote)) {\n unwrapBlock(parent, blockQuote);\n rawEvent?.preventDefault();\n context.deleteResult = 'range';\n } else if (isSelectionOnEmptyLine(blockQuote) && rawEvent?.key === 'Enter') {\n insertNewLine(blockQuote, parent, quoteBlockIndex);\n rawEvent?.preventDefault();\n context.deleteResult = 'range';\n }\n }\n }\n }\n};\n\nconst isEmptyQuote = (quote: ContentModelFormatContainer) => {\n return (\n quote.blocks.length === 1 &&\n quote.blocks[0].blockType === 'Paragraph' &&\n quote.blocks[0].segments.every(\n s => s.segmentType === 'SelectionMarker' || s.segmentType === 'Br'\n )\n );\n};\n\nconst isSelectionOnEmptyLine = (quote: ContentModelFormatContainer) => {\n const quoteLength = quote.blocks.length;\n const lastParagraph = quote.blocks[quoteLength - 1];\n if (lastParagraph && lastParagraph.blockType === 'Paragraph') {\n return lastParagraph.segments.every(\n s => s.segmentType === 'SelectionMarker' || s.segmentType === 'Br'\n );\n }\n};\n\nconst insertNewLine = (\n quote: ContentModelFormatContainer,\n parent: ContentModelBlockGroup,\n index: number\n) => {\n const quoteLength = quote.blocks.length;\n quote.blocks.splice(quoteLength - 1, 1);\n const marker = createSelectionMarker();\n const newParagraph = createParagraph(false /* isImplicit */);\n newParagraph.segments.push(marker);\n parent.blocks.splice(index + 1, 0, newParagraph);\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-dom"], function (require, exports, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.deleteList = void 0;
|
|
@@ -8,14 +8,12 @@ define(["require", "exports", "roosterjs-content-model-core"], function (require
|
|
|
8
8
|
var deleteList = function (context) {
|
|
9
9
|
var _a = context.insertPoint, paragraph = _a.paragraph, marker = _a.marker, path = _a.path;
|
|
10
10
|
if (context.deleteResult == 'nothingToDelete' || context.deleteResult == 'notDeleted') {
|
|
11
|
-
var index = (0,
|
|
11
|
+
var index = (0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['ListItem', 'TableCell']);
|
|
12
12
|
var item = path[index];
|
|
13
13
|
if (item &&
|
|
14
14
|
index >= 0 &&
|
|
15
15
|
paragraph.segments[0] == marker &&
|
|
16
|
-
item.blockGroupType == 'ListItem'
|
|
17
|
-
(paragraph.segments.length == 1 ||
|
|
18
|
-
(paragraph.segments.length == 2 && paragraph.segments[1].segmentType == 'Br'))) {
|
|
16
|
+
item.blockGroupType == 'ListItem') {
|
|
19
17
|
item.levels = [];
|
|
20
18
|
context.deleteResult = 'range';
|
|
21
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteList.ts"],"names":[],"mappings":";;;;IAGA;;OAEG;IACI,IAAM,UAAU,GAAwB,UAAA,OAAO;QAC5C,IAAA,KAA8B,OAAO,CAAC,WAAW,EAA/C,SAAS,eAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAwB,CAAC;QAExD,IAAI,OAAO,CAAC,YAAY,IAAI,iBAAiB,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;YACnF,IAAM,KAAK,GAAG,IAAA,
|
|
1
|
+
{"version":3,"file":"deleteList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteList.ts"],"names":[],"mappings":";;;;IAGA;;OAEG;IACI,IAAM,UAAU,GAAwB,UAAA,OAAO;QAC5C,IAAA,KAA8B,OAAO,CAAC,WAAW,EAA/C,SAAS,eAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAwB,CAAC;QAExD,IAAI,OAAO,CAAC,YAAY,IAAI,iBAAiB,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;YACnF,IAAM,KAAK,GAAG,IAAA,+DAAiC,EAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;YACjF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IACI,IAAI;gBACJ,KAAK,IAAI,CAAC;gBACV,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM;gBAC/B,IAAI,CAAC,cAAc,IAAI,UAAU,EACnC;gBACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBACjB,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;aAClC;SACJ;IACL,CAAC,CAAC;IAhBW,QAAA,UAAU,cAgBrB","sourcesContent":["import { getClosestAncestorBlockGroupIndex } from 'roosterjs-content-model-dom';\nimport type { DeleteSelectionStep } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteList: DeleteSelectionStep = context => {\n const { paragraph, marker, path } = context.insertPoint;\n\n if (context.deleteResult == 'nothingToDelete' || context.deleteResult == 'notDeleted') {\n const index = getClosestAncestorBlockGroupIndex(path, ['ListItem', 'TableCell']);\n const item = path[index];\n if (\n item &&\n index >= 0 &&\n paragraph.segments[0] == marker &&\n item.blockGroupType == 'ListItem'\n ) {\n item.levels = [];\n context.deleteResult = 'range';\n }\n }\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "tslib", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "tslib", "roosterjs-content-model-dom"], function (require, exports, tslib_1, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.backwardDeleteWordSelection = exports.forwardDeleteWordSelection = void 0;
|
|
@@ -110,8 +110,8 @@ define(["require", "exports", "tslib", "roosterjs-content-model-core", "roosterj
|
|
|
110
110
|
case 3:
|
|
111
111
|
if (!(j >= 0 && j < segment.text.length)) return [3 /*break*/, 6];
|
|
112
112
|
c = segment.text[j];
|
|
113
|
-
punctuation = (0,
|
|
114
|
-
space = (0,
|
|
113
|
+
punctuation = (0, roosterjs_content_model_dom_1.isPunctuation)(c);
|
|
114
|
+
space = (0, roosterjs_content_model_dom_1.isSpace)(c);
|
|
115
115
|
text = !punctuation && !space;
|
|
116
116
|
return [4 /*yield*/, { punctuation: punctuation, space: space, text: text }];
|
|
117
117
|
case 4:
|
|
@@ -119,7 +119,7 @@ define(["require", "exports", "tslib", "roosterjs-content-model-core", "roosterj
|
|
|
119
119
|
newText = segment.text;
|
|
120
120
|
newText = newText.substring(0, j) + newText.substring(j + 1);
|
|
121
121
|
if (!preserveWhiteSpace) {
|
|
122
|
-
newText = (0,
|
|
122
|
+
newText = (0, roosterjs_content_model_dom_1.normalizeText)(newText, forward);
|
|
123
123
|
}
|
|
124
124
|
context.deleteResult = 'range';
|
|
125
125
|
if (newText) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteWordSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteWordSelection.ts"],"names":[],"mappings":";;;;IAQA,IAAW,eAOV;IAPD,WAAW,eAAe;QACtB,uDAAK,CAAA;QACL,mEAAW,CAAA;QACX,qDAAI,CAAA;QACJ,2DAAO,CAAA;QACP,uDAAK,CAAA;QACL,mDAAG,CAAA;IACP,CAAC,EAPU,eAAe,KAAf,eAAe,QAOzB;IAQD,SAAS,sBAAsB,CAAC,SAAiC;QAC7D,OAAO,UAAA,OAAO;YACV,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;gBACtC,OAAO;aACV;YAEK,IAAA,KAAwB,OAAO,CAAC,WAAW,EAAzC,MAAM,YAAA,EAAE,SAAS,eAAwB,CAAC;YAClD,IAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,IAAM,UAAU,GAAG,SAAS,IAAI,SAAS,CAAC;YAE1C,IAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7E,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE3B,KAAK,IAAI,KAAK,gBAAwB,EAAE,KAAK,eAAuB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAI;gBAC5E,IAAA,KAA+B,IAAI,CAAC,KAAK,EAAvC,WAAW,iBAAA,EAAE,KAAK,WAAA,EAAE,IAAI,UAAe,CAAC;gBAEhD,8FAA8F;gBAC9F,sCAAsC;gBACtC,gHAAgH;gBAChH,kHAAkH;gBAClH,QAAQ,KAAK,EAAE;oBACX;wBACI,KAAK,GAAG,KAAK;4BACT,CAAC;4BACD,CAAC,CAAC,WAAW;gCACb,CAAC;gCACD,CAAC,aAAqB,CAAC;wBAC3B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACtC,MAAM;oBAEV;wBACI,IAAI,UAAU,IAAI,KAAK,EAAE;4BACrB,KAAK,kBAA0B,CAAC;4BAChC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzC;6BAAM,IAAI,WAAW,EAAE;4BACpB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzC;6BAAM;4BACH,KAAK,cAAsB,CAAC;yBAC/B;wBACD,MAAM;oBAEV;wBACI,IAAI,UAAU,IAAI,KAAK,EAAE;4BACrB,KAAK,kBAA0B,CAAC;4BAChC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzC;6BAAM,IAAI,IAAI,EAAE;4BACb,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzC;6BAAM;4BACH,KAAK,cAAsB,CAAC;yBAC/B;wBACD,MAAM;oBAEV;wBACI,IAAI,WAAW,IAAI,CAAC,KAAK,EAAE;4BACvB,KAAK,cAAsB,CAAC;yBAC/B;6BAAM;4BACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzC;wBACD,MAAM;oBAEV;wBACI,IAAI,KAAK,EAAE;4BACP,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzC;6BAAM,IAAI,WAAW,EAAE;4BACpB,KAAK,GAAG,UAAU,CAAC,CAAC,iBAAyB,CAAC,oBAA4B,CAAC;4BAC3E,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzC;6BAAM;4BACH,KAAK,GAAG,UAAU,CAAC,CAAC,aAAqB,CAAC,aAAqB,CAAC;yBACnE;wBACD,MAAM;iBACb;aACJ;QACL,CAAC,CAAC;IACN,CAAC;IAED,SAAU,eAAe,CACrB,SAAgC,EAChC,WAAmB,EACnB,OAAgB,EAChB,OAA+B;;;;;oBAEzB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxB,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;oBAC9B,kBAAkB,GAAG,IAAA,mDAAqB,EAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAErE,CAAC,GAAG,WAAW,GAAG,IAAI;;;yBAAE,CAAA,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAA;oBACpD,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAEpB,KAAA,OAAO,CAAC,WAAW,CAAA;;6BAClB,MAAM,CAAC,CAAP,wBAAM;6BAyCN,OAAO,CAAC,CAAR,wBAAO;6BAcP,iBAAiB,CAAC,CAAlB,wBAAiB;;;;oBArDV,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;;;yBAC7C,CAAA,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAA;oBAG3B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,WAAW,GAAG,IAAA,4CAAa,EAAC,CAAC,CAAC,CAAC;oBAC/B,KAAK,GAAG,IAAA,sCAAO,EAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC;oBAEhC,qBAAM,EAAE,WAAW,aAAA,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,EAAA;;oBAAtC,IAAI,SAAkC,EAAE;wBAChC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;wBAE3B,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAE7D,IAAI,CAAC,kBAAkB,EAAE;4BACrB,OAAO,GAAG,IAAA,4CAAa,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;yBAC7C;wBAED,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;wBAE/B,IAAI,OAAO,EAAE;4BACT,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;4BAEvB,IAAI,IAAI,GAAG,CAAC,EAAE;gCACV,CAAC,IAAI,IAAI,CAAC;6BACb;yBACJ;6BAAM;4BACH,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAEtB,IAAI,IAAI,GAAG,CAAC,EAAE;gCACV,CAAC,IAAI,IAAI,CAAC;6BACb;4BAED,wBAAM;yBACT;qBACJ;;;oBAjCD,CAAC,IAAI,IAAI,CAAA;;wBAmCb,yBAAM;wBAIF,qBAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAA,CAAC,gEAAgE;;oBAD3H,IACI,SAAsD,CAAC,gEAAgE;sBACzH;wBACE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAEtB,IAAI,IAAI,GAAG,CAAC,EAAE;4BACV,CAAC,IAAI,IAAI,CAAC;yBACb;wBAED,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;qBAClC;oBACD,yBAAM;wBAGN,yBAAM;yBAGN,sBAAO,IAAI,EAAC;;oBA/DwC,CAAC,IAAI,IAAI,CAAA;;yBAmEzE,sBAAO,IAAI,EAAC;;;KACf;IAED;;OAEG;IACU,QAAA,0BAA0B,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAE5E;;OAEG;IACU,QAAA,2BAA2B,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC","sourcesContent":["import { isPunctuation, isSpace, normalizeText } from 'roosterjs-content-model-core';\nimport { isWhiteSpacePreserved } from 'roosterjs-content-model-dom';\nimport type {\n ContentModelParagraph,\n DeleteSelectionContext,\n DeleteSelectionStep,\n} from 'roosterjs-content-model-types';\n\nconst enum DeleteWordState {\n Start,\n Punctuation,\n Text,\n NonText,\n Space,\n End,\n}\n\ninterface CharInfo {\n text: boolean;\n space: boolean;\n punctuation: boolean;\n}\n\nfunction getDeleteWordSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const { marker, paragraph } = context.insertPoint;\n const startIndex = paragraph.segments.indexOf(marker);\n const deleteNext = direction == 'forward';\n\n const iterator = iterateSegments(paragraph, startIndex, deleteNext, context);\n let curr = iterator.next();\n\n for (let state = DeleteWordState.Start; state != DeleteWordState.End && !curr.done; ) {\n const { punctuation, space, text } = curr.value;\n\n // This is a state machine of how to delete a whole word together with space and punctuations.\n // For a full state machine chart, see\n // Forward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/ForwardDeleteWord.png\n // Backward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/BackwardDeleteWord.png\n switch (state) {\n case DeleteWordState.Start:\n state = space\n ? DeleteWordState.Space\n : punctuation\n ? DeleteWordState.Punctuation\n : DeleteWordState.Text;\n curr = iterator.next(true /*delete*/);\n break;\n\n case DeleteWordState.Punctuation:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.Text:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (text) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.NonText:\n if (punctuation || !space) {\n state = DeleteWordState.End;\n } else {\n curr = iterator.next(true /*delete*/);\n }\n break;\n\n case DeleteWordState.Space:\n if (space) {\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n state = deleteNext ? DeleteWordState.NonText : DeleteWordState.Punctuation;\n curr = iterator.next(true /*delete*/);\n } else {\n state = deleteNext ? DeleteWordState.End : DeleteWordState.Text;\n }\n break;\n }\n }\n };\n}\n\nfunction* iterateSegments(\n paragraph: ContentModelParagraph,\n markerIndex: number,\n forward: boolean,\n context: DeleteSelectionContext\n): Generator<CharInfo, null, boolean> {\n const step = forward ? 1 : -1;\n const segments = paragraph.segments;\n const preserveWhiteSpace = isWhiteSpacePreserved(paragraph.format.whiteSpace);\n\n for (let i = markerIndex + step; i >= 0 && i < segments.length; i += step) {\n const segment = segments[i];\n\n switch (segment.segmentType) {\n case 'Text':\n for (\n let j = forward ? 0 : segment.text.length - 1;\n j >= 0 && j < segment.text.length;\n j += step\n ) {\n const c = segment.text[j];\n const punctuation = isPunctuation(c);\n const space = isSpace(c);\n const text = !punctuation && !space;\n\n if (yield { punctuation, space, text }) {\n let newText = segment.text;\n\n newText = newText.substring(0, j) + newText.substring(j + 1);\n\n if (!preserveWhiteSpace) {\n newText = normalizeText(newText, forward);\n }\n\n context.deleteResult = 'range';\n\n if (newText) {\n segment.text = newText;\n\n if (step > 0) {\n j -= step;\n }\n } else {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n break;\n }\n }\n }\n break;\n\n case 'Image':\n if (\n yield { punctuation: true, space: false, text: false } // Treat image as punctuation since they have the same behavior.\n ) {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n context.deleteResult = 'range';\n }\n break;\n\n case 'SelectionMarker':\n break;\n\n default:\n return null;\n }\n }\n\n return null;\n}\n\n/**\n * @internal\n */\nexport const forwardDeleteWordSelection = getDeleteWordSelection('forward');\n\n/**\n * @internal\n */\nexport const backwardDeleteWordSelection = getDeleteWordSelection('backward');\n"]}
|
|
1
|
+
{"version":3,"file":"deleteWordSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteWordSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isPunctuation,\n isSpace,\n isWhiteSpacePreserved,\n normalizeText,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelParagraph,\n DeleteSelectionContext,\n DeleteSelectionStep,\n} from 'roosterjs-content-model-types';\n\nconst enum DeleteWordState {\n Start,\n Punctuation,\n Text,\n NonText,\n Space,\n End,\n}\n\ninterface CharInfo {\n text: boolean;\n space: boolean;\n punctuation: boolean;\n}\n\nfunction getDeleteWordSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const { marker, paragraph } = context.insertPoint;\n const startIndex = paragraph.segments.indexOf(marker);\n const deleteNext = direction == 'forward';\n\n const iterator = iterateSegments(paragraph, startIndex, deleteNext, context);\n let curr = iterator.next();\n\n for (let state = DeleteWordState.Start; state != DeleteWordState.End && !curr.done; ) {\n const { punctuation, space, text } = curr.value;\n\n // This is a state machine of how to delete a whole word together with space and punctuations.\n // For a full state machine chart, see\n // Forward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/ForwardDeleteWord.png\n // Backward delete: https://github.com/microsoft/roosterjs/blob/master/assets/design-charts/BackwardDeleteWord.png\n switch (state) {\n case DeleteWordState.Start:\n state = space\n ? DeleteWordState.Space\n : punctuation\n ? DeleteWordState.Punctuation\n : DeleteWordState.Text;\n curr = iterator.next(true /*delete*/);\n break;\n\n case DeleteWordState.Punctuation:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.Text:\n if (deleteNext && space) {\n state = DeleteWordState.NonText;\n curr = iterator.next(true /*delete*/);\n } else if (text) {\n curr = iterator.next(true /*delete*/);\n } else {\n state = DeleteWordState.End;\n }\n break;\n\n case DeleteWordState.NonText:\n if (punctuation || !space) {\n state = DeleteWordState.End;\n } else {\n curr = iterator.next(true /*delete*/);\n }\n break;\n\n case DeleteWordState.Space:\n if (space) {\n curr = iterator.next(true /*delete*/);\n } else if (punctuation) {\n state = deleteNext ? DeleteWordState.NonText : DeleteWordState.Punctuation;\n curr = iterator.next(true /*delete*/);\n } else {\n state = deleteNext ? DeleteWordState.End : DeleteWordState.Text;\n }\n break;\n }\n }\n };\n}\n\nfunction* iterateSegments(\n paragraph: ContentModelParagraph,\n markerIndex: number,\n forward: boolean,\n context: DeleteSelectionContext\n): Generator<CharInfo, null, boolean> {\n const step = forward ? 1 : -1;\n const segments = paragraph.segments;\n const preserveWhiteSpace = isWhiteSpacePreserved(paragraph.format.whiteSpace);\n\n for (let i = markerIndex + step; i >= 0 && i < segments.length; i += step) {\n const segment = segments[i];\n\n switch (segment.segmentType) {\n case 'Text':\n for (\n let j = forward ? 0 : segment.text.length - 1;\n j >= 0 && j < segment.text.length;\n j += step\n ) {\n const c = segment.text[j];\n const punctuation = isPunctuation(c);\n const space = isSpace(c);\n const text = !punctuation && !space;\n\n if (yield { punctuation, space, text }) {\n let newText = segment.text;\n\n newText = newText.substring(0, j) + newText.substring(j + 1);\n\n if (!preserveWhiteSpace) {\n newText = normalizeText(newText, forward);\n }\n\n context.deleteResult = 'range';\n\n if (newText) {\n segment.text = newText;\n\n if (step > 0) {\n j -= step;\n }\n } else {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n break;\n }\n }\n }\n break;\n\n case 'Image':\n if (\n yield { punctuation: true, space: false, text: false } // Treat image as punctuation since they have the same behavior.\n ) {\n segments.splice(i, 1);\n\n if (step > 0) {\n i -= step;\n }\n\n context.deleteResult = 'range';\n }\n break;\n\n case 'SelectionMarker':\n break;\n\n default:\n return null;\n }\n }\n\n return null;\n}\n\n/**\n * @internal\n */\nexport const forwardDeleteWordSelection = getDeleteWordSelection('forward');\n\n/**\n * @internal\n */\nexport const backwardDeleteWordSelection = getDeleteWordSelection('backward');\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "tslib", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "tslib", "roosterjs-content-model-dom"], function (require, exports, tslib_1, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.handleEnterOnList = void 0;
|
|
@@ -13,7 +13,7 @@ define(["require", "exports", "tslib", "roosterjs-content-model-core", "roosterj
|
|
|
13
13
|
var insertPoint = context.insertPoint, formatContext = context.formatContext;
|
|
14
14
|
var path = insertPoint.path;
|
|
15
15
|
var rawEvent = formatContext === null || formatContext === void 0 ? void 0 : formatContext.rawEvent;
|
|
16
|
-
var index = (0,
|
|
16
|
+
var index = (0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['ListItem'], ['TableCell']);
|
|
17
17
|
var listItem_1 = path[index];
|
|
18
18
|
var listParent = path[index + 1];
|
|
19
19
|
if (listItem_1 && listItem_1.blockGroupType === 'ListItem' && listParent) {
|
|
@@ -22,7 +22,7 @@ define(["require", "exports", "tslib", "roosterjs-content-model-core", "roosterj
|
|
|
22
22
|
if (deleteResult == 'range' && nextBlock) {
|
|
23
23
|
(0, roosterjs_content_model_dom_1.normalizeContentModel)(listParent);
|
|
24
24
|
var nextListItem = listParent.blocks[listIndex + 1];
|
|
25
|
-
if ((0,
|
|
25
|
+
if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(nextListItem, 'ListItem') &&
|
|
26
26
|
nextListItem.levels[0]) {
|
|
27
27
|
nextListItem.levels.forEach(function (level, index) {
|
|
28
28
|
level.format.startNumberOverride = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleEnterOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"handleEnterOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createBr,\n createListItem,\n createListLevel,\n createParagraph,\n createSelectionMarker,\n normalizeContentModel,\n normalizeParagraph,\n setParagraphNotImplicit,\n getClosestAncestorBlockGroupIndex,\n isBlockGroupOfType,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelBlockGroup,\n ContentModelListItem,\n DeleteSelectionStep,\n InsertPoint,\n ValidDeleteSelectionContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleEnterOnList: DeleteSelectionStep = context => {\n const { deleteResult } = context;\n if (\n deleteResult == 'nothingToDelete' ||\n deleteResult == 'notDeleted' ||\n deleteResult == 'range'\n ) {\n const { insertPoint, formatContext } = context;\n const { path } = insertPoint;\n const rawEvent = formatContext?.rawEvent;\n const index = getClosestAncestorBlockGroupIndex(path, ['ListItem'], ['TableCell']);\n\n const listItem = path[index];\n const listParent = path[index + 1];\n\n if (listItem && listItem.blockGroupType === 'ListItem' && listParent) {\n const listIndex = listParent.blocks.indexOf(listItem);\n const nextBlock = listParent.blocks[listIndex + 1];\n if (deleteResult == 'range' && nextBlock) {\n normalizeContentModel(listParent);\n const nextListItem = listParent.blocks[listIndex + 1];\n if (\n isBlockGroupOfType<ContentModelListItem>(nextListItem, 'ListItem') &&\n nextListItem.levels[0]\n ) {\n nextListItem.levels.forEach((level, index) => {\n level.format.startNumberOverride = undefined;\n level.dataset = listItem.levels[index]\n ? listItem.levels[index].dataset\n : {};\n });\n const lastParagraph = listItem.blocks[listItem.blocks.length - 1];\n const nextParagraph = nextListItem.blocks[0];\n if (\n nextParagraph.blockType === 'Paragraph' &&\n lastParagraph.blockType === 'Paragraph' &&\n lastParagraph.segments[lastParagraph.segments.length - 1].segmentType ===\n 'SelectionMarker'\n ) {\n lastParagraph.segments.pop();\n\n nextParagraph.segments.unshift(\n createSelectionMarker(insertPoint.marker.format)\n );\n }\n context.lastParagraph = undefined;\n }\n } else if (deleteResult !== 'range') {\n if (isEmptyListItem(listItem)) {\n listItem.levels.pop();\n } else {\n createNewListItem(context, listItem, listParent);\n }\n }\n rawEvent?.preventDefault();\n context.deleteResult = 'range';\n }\n }\n};\n\nconst isEmptyListItem = (listItem: ContentModelListItem) => {\n return (\n listItem.blocks.length === 1 &&\n listItem.blocks[0].blockType === 'Paragraph' &&\n listItem.blocks[0].segments.length === 2 &&\n listItem.blocks[0].segments[0].segmentType === 'SelectionMarker' &&\n listItem.blocks[0].segments[1].segmentType === 'Br'\n );\n};\n\nconst createNewListItem = (\n context: ValidDeleteSelectionContext,\n listItem: ContentModelListItem,\n listParent: ContentModelBlockGroup\n) => {\n const { insertPoint } = context;\n const listIndex = listParent.blocks.indexOf(listItem);\n const newParagraph = createNewParagraph(insertPoint);\n\n const levels = createNewListLevel(listItem);\n const newListItem = createListItem(levels, insertPoint.marker.format);\n newListItem.blocks.push(newParagraph);\n insertPoint.paragraph = newParagraph;\n context.lastParagraph = newParagraph;\n listParent.blocks.splice(listIndex + 1, 0, newListItem);\n};\n\nconst createNewListLevel = (listItem: ContentModelListItem) => {\n return listItem.levels.map(level => {\n return createListLevel(\n level.listType,\n {\n ...level.format,\n startNumberOverride: undefined,\n },\n level.dataset\n );\n });\n};\n\nconst createNewParagraph = (insertPoint: InsertPoint) => {\n const { paragraph, marker } = insertPoint;\n const newParagraph = createParagraph(\n false /*isImplicit*/,\n paragraph.format,\n paragraph.segmentFormat\n );\n\n const markerIndex = paragraph.segments.indexOf(marker);\n const segments = paragraph.segments.splice(\n markerIndex,\n paragraph.segments.length - markerIndex\n );\n\n newParagraph.segments.push(...segments);\n\n setParagraphNotImplicit(paragraph);\n\n if (paragraph.segments.every(x => x.segmentType == 'SelectionMarker')) {\n paragraph.segments.push(createBr(marker.format));\n }\n\n normalizeParagraph(newParagraph);\n\n return newParagraph;\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-dom", "./deleteSteps/deleteAllSegmentBefore", "./deleteSteps/deleteEmptyQuote", "./deleteSteps/deleteList", "./handleKeyboardEventCommon", "./deleteSteps/deleteWordSelection", "./deleteSteps/deleteCollapsedSelection"], function (require, exports, roosterjs_content_model_dom_1, deleteAllSegmentBefore_1, deleteEmptyQuote_1, deleteList_1, handleKeyboardEventCommon_1, deleteWordSelection_1, deleteCollapsedSelection_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.keyboardDelete = void 0;
|
|
@@ -14,12 +14,12 @@ define(["require", "exports", "roosterjs-content-model-core", "./deleteSteps/del
|
|
|
14
14
|
var selection = editor.getDOMSelection();
|
|
15
15
|
if (shouldDeleteWithContentModel(selection, rawEvent)) {
|
|
16
16
|
editor.formatContentModel(function (model, context) {
|
|
17
|
-
var result = (0,
|
|
17
|
+
var result = (0, roosterjs_content_model_dom_1.deleteSelection)(model, getDeleteSteps(rawEvent, !!editor.getEnvironment().isMac), context).deleteResult;
|
|
18
18
|
handled = (0, handleKeyboardEventCommon_1.handleKeyboardEventResult)(editor, model, rawEvent, result, context);
|
|
19
19
|
return handled;
|
|
20
20
|
}, {
|
|
21
21
|
rawEvent: rawEvent,
|
|
22
|
-
changeSource:
|
|
22
|
+
changeSource: roosterjs_content_model_dom_1.ChangeSource.Keyboard,
|
|
23
23
|
getChangeData: function () { return rawEvent.which; },
|
|
24
24
|
apiName: rawEvent.key == 'Delete' ? 'handleDeleteKey' : 'handleBackspaceKey',
|
|
25
25
|
});
|
|
@@ -58,7 +58,7 @@ define(["require", "exports", "roosterjs-content-model-core", "./deleteSteps/del
|
|
|
58
58
|
var range = selection.range;
|
|
59
59
|
// When selection is collapsed and is in middle of text node, no need to use Content Model to delete
|
|
60
60
|
return !((0, roosterjs_content_model_dom_1.isNodeOfType)(range.startContainer, 'TEXT_NODE') &&
|
|
61
|
-
!(0,
|
|
61
|
+
!(0, roosterjs_content_model_dom_1.isModifierKey)(rawEvent) &&
|
|
62
62
|
(canDeleteBefore(rawEvent, range) || canDeleteAfter(rawEvent, range)));
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardDelete.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardDelete.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"keyboardDelete.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardDelete.ts"],"names":[],"mappings":";;;;IAwBA;;;;;;OAMG;IACH,SAAgB,cAAc,CAAC,MAAe,EAAE,QAAuB;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE3C,IAAI,4BAA4B,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;YACnD,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;gBACX,IAAM,MAAM,GAAG,IAAA,6CAAe,EAC1B,KAAK,EACL,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,EACzD,OAAO,CACV,CAAC,YAAY,CAAC;gBAEf,OAAO,GAAG,IAAA,qDAAyB,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC9E,OAAO,OAAO,CAAC;YACnB,CAAC,EACD;gBACI,QAAQ,UAAA;gBACR,YAAY,EAAE,0CAAY,CAAC,QAAQ;gBACnC,aAAa,EAAE,cAAM,OAAA,QAAQ,CAAC,KAAK,EAAd,CAAc;gBACnC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,oBAAoB;aAC/E,CACJ,CAAC;SACL;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IA1BD,wCA0BC;IAED,SAAS,cAAc,CAAC,QAAuB,EAAE,KAAc;QAC3D,IAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC;QAC3C,IAAM,0BAA0B,GAC5B,IAAA,yDAA6B,EAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,+CAAsB,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,IAAM,mBAAmB,GAAG,IAAA,4CAAgB,EAAC,QAAQ,EAAE,KAAK,CAAC;YACzD,CAAC,CAAC,SAAS;gBACP,CAAC,CAAC,gDAA0B;gBAC5B,CAAC,CAAC,iDAA2B;YACjC,CAAC,CAAC,IAAI,CAAC;QACX,IAAM,wBAAwB,GAAG,SAAS;YACtC,CAAC,CAAC,0DAA+B;YACjC,CAAC,CAAC,2DAAgC,CAAC;QACvC,IAAM,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,OAAO;YACH,0BAA0B;YAC1B,mBAAmB;YACnB,wBAAwB;YACxB,uBAAU;YACV,WAAW;SACd,CAAC;IACN,CAAC;IAED,SAAS,4BAA4B,CAAC,SAA8B,EAAE,QAAuB;QACzF,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,KAAK,CAAC,CAAC,oBAAoB;SACrC;aAAM,IAAI,SAAS,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE;YAChE,OAAO,IAAI,CAAC,CAAC,4DAA4D;SAC5E;aAAM;YACH,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAE9B,oGAAoG;YACpG,OAAO,CAAC,CACJ,IAAA,0CAAY,EAAC,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC;gBAC/C,CAAC,IAAA,2CAAa,EAAC,QAAQ,CAAC;gBACxB,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CACxE,CAAC;SACL;IACL,CAAC;IAED,SAAS,eAAe,CAAC,QAAuB,EAAE,KAAY;QAC1D,OAAO,QAAQ,CAAC,GAAG,IAAI,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,cAAc,CAAC,QAAuB,EAAE,KAAY;;QACzD,OAAO,CACH,QAAQ,CAAC,GAAG,IAAI,QAAQ;YACxB,KAAK,CAAC,WAAW,GAAG,CAAC,MAAA,MAAA,KAAK,CAAC,cAAc,CAAC,SAAS,0CAAE,MAAM,mCAAI,CAAC,CAAC,GAAG,CAAC,CACxE,CAAC;IACN,CAAC","sourcesContent":["import {\n ChangeSource,\n deleteSelection,\n isModifierKey,\n isNodeOfType,\n} from 'roosterjs-content-model-dom';\nimport { deleteAllSegmentBefore } from './deleteSteps/deleteAllSegmentBefore';\nimport { deleteEmptyQuote } from './deleteSteps/deleteEmptyQuote';\nimport { deleteList } from './deleteSteps/deleteList';\nimport {\n handleKeyboardEventResult,\n shouldDeleteAllSegmentsBefore,\n shouldDeleteWord,\n} from './handleKeyboardEventCommon';\nimport {\n backwardDeleteWordSelection,\n forwardDeleteWordSelection,\n} from './deleteSteps/deleteWordSelection';\nimport {\n backwardDeleteCollapsedSelection,\n forwardDeleteCollapsedSelection,\n} from './deleteSteps/deleteCollapsedSelection';\nimport type { DOMSelection, DeleteSelectionStep, IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Do keyboard event handling for DELETE/BACKSPACE key\n * @param editor The editor object\n * @param rawEvent DOM keyboard event\n * @returns True if the event is handled by content model, otherwise false\n */\nexport function keyboardDelete(editor: IEditor, rawEvent: KeyboardEvent) {\n let handled = false;\n const selection = editor.getDOMSelection();\n\n if (shouldDeleteWithContentModel(selection, rawEvent)) {\n editor.formatContentModel(\n (model, context) => {\n const result = deleteSelection(\n model,\n getDeleteSteps(rawEvent, !!editor.getEnvironment().isMac),\n context\n ).deleteResult;\n\n handled = handleKeyboardEventResult(editor, model, rawEvent, result, context);\n return handled;\n },\n {\n rawEvent,\n changeSource: ChangeSource.Keyboard,\n getChangeData: () => rawEvent.which,\n apiName: rawEvent.key == 'Delete' ? 'handleDeleteKey' : 'handleBackspaceKey',\n }\n );\n }\n\n return handled;\n}\n\nfunction getDeleteSteps(rawEvent: KeyboardEvent, isMac: boolean): (DeleteSelectionStep | null)[] {\n const isForward = rawEvent.key == 'Delete';\n const deleteAllSegmentBeforeStep =\n shouldDeleteAllSegmentsBefore(rawEvent) && !isForward ? deleteAllSegmentBefore : null;\n const deleteWordSelection = shouldDeleteWord(rawEvent, isMac)\n ? isForward\n ? forwardDeleteWordSelection\n : backwardDeleteWordSelection\n : null;\n const deleteCollapsedSelection = isForward\n ? forwardDeleteCollapsedSelection\n : backwardDeleteCollapsedSelection;\n const deleteQuote = !isForward ? deleteEmptyQuote : null;\n return [\n deleteAllSegmentBeforeStep,\n deleteWordSelection,\n deleteCollapsedSelection,\n deleteList,\n deleteQuote,\n ];\n}\n\nfunction shouldDeleteWithContentModel(selection: DOMSelection | null, rawEvent: KeyboardEvent) {\n if (!selection) {\n return false; // Nothing to delete\n } else if (selection.type != 'range' || !selection.range.collapsed) {\n return true; // Selection is not collapsed, need to delete all selections\n } else {\n const range = selection.range;\n\n // When selection is collapsed and is in middle of text node, no need to use Content Model to delete\n return !(\n isNodeOfType(range.startContainer, 'TEXT_NODE') &&\n !isModifierKey(rawEvent) &&\n (canDeleteBefore(rawEvent, range) || canDeleteAfter(rawEvent, range))\n );\n }\n}\n\nfunction canDeleteBefore(rawEvent: KeyboardEvent, range: Range) {\n return rawEvent.key == 'Backspace' && range.startOffset > 1;\n}\n\nfunction canDeleteAfter(rawEvent: KeyboardEvent, range: Range) {\n return (\n rawEvent.key == 'Delete' &&\n range.startOffset < (range.startContainer.nodeValue?.length ?? 0) - 1\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "./deleteSteps/deleteEmptyQuote", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "./deleteSteps/deleteEmptyQuote", "roosterjs-content-model-dom", "./inputSteps/handleEnterOnList"], function (require, exports, deleteEmptyQuote_1, roosterjs_content_model_dom_1, handleEnterOnList_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.keyboardInput = void 0;
|
|
@@ -11,7 +11,7 @@ define(["require", "exports", "./deleteSteps/deleteEmptyQuote", "roosterjs-conte
|
|
|
11
11
|
editor.takeSnapshot();
|
|
12
12
|
editor.formatContentModel(function (model, context) {
|
|
13
13
|
var _a;
|
|
14
|
-
var result = (0,
|
|
14
|
+
var result = (0, roosterjs_content_model_dom_1.deleteSelection)(model, getInputSteps(selection, rawEvent), context);
|
|
15
15
|
// We have deleted selection then we will let browser to handle the input.
|
|
16
16
|
// With this combined operation, we don't wan to mass up the cached model so clear it
|
|
17
17
|
context.clearModelCache = true;
|
|
@@ -41,7 +41,7 @@ define(["require", "exports", "./deleteSteps/deleteEmptyQuote", "roosterjs-conte
|
|
|
41
41
|
if (!selection) {
|
|
42
42
|
return false; // Nothing to delete
|
|
43
43
|
}
|
|
44
|
-
else if (!(0,
|
|
44
|
+
else if (!(0, roosterjs_content_model_dom_1.isModifierKey)(rawEvent) &&
|
|
45
45
|
(rawEvent.key == 'Enter' || rawEvent.key == 'Space' || rawEvent.key.length == 1)) {
|
|
46
46
|
return (selection.type != 'range' ||
|
|
47
47
|
!selection.range.collapsed ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardInput.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardInput.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"keyboardInput.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardInput.ts"],"names":[],"mappings":";;;;IAKA;;OAEG;IACH,SAAgB,aAAa,CAAC,MAAe,EAAE,QAAuB;QAClE,IAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE3C,IAAI,2BAA2B,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;YAClD,MAAM,CAAC,YAAY,EAAE,CAAC;YAEtB,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;;gBACX,IAAM,MAAM,GAAG,IAAA,6CAAe,EAAC,KAAK,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBAEnF,0EAA0E;gBAC1E,qFAAqF;gBACrF,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;gBAE/B,oJAAoJ;gBACpJ,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAEhC,IAAI,MAAM,CAAC,YAAY,IAAI,OAAO,EAAE;oBAChC,2HAA2H;oBAC3H,OAAO,CAAC,gBAAgB,GAAG,MAAA,MAAM,CAAC,WAAW,0CAAE,MAAM,CAAC,MAAM,CAAC;oBAE7D,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC;oBAE7B,sFAAsF;oBACtF,OAAO,IAAI,CAAC;iBACf;qBAAM;oBACH,OAAO,KAAK,CAAC;iBAChB;YACL,CAAC,EACD;gBACI,QAAQ,UAAA;aACX,CACJ,CAAC;YAEF,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IApCD,sCAoCC;IAED,SAAS,aAAa,CAAC,SAA8B,EAAE,QAAuB;QAC1E,OAAO,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,qCAAiB,EAAE,mCAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,CAAC;IAED,SAAS,2BAA2B,CAAC,SAA8B,EAAE,QAAuB;QACxF,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,KAAK,CAAC,CAAC,oBAAoB;SACrC;aAAM,IACH,CAAC,IAAA,2CAAa,EAAC,QAAQ,CAAC;YACxB,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,IAAI,QAAQ,CAAC,GAAG,IAAI,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAClF;YACE,OAAO,CACH,SAAS,CAAC,IAAI,IAAI,OAAO;gBACzB,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS;gBAC1B,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAC5C,CAAC;SACL;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,IAAM,oBAAoB,GAAG,UAAC,SAA8B,EAAE,QAAuB;QACjF,OAAO,SAAS,IAAI,SAAS,CAAC,IAAI,IAAI,OAAO,IAAI,QAAQ,CAAC,GAAG,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACnG,CAAC,CAAC","sourcesContent":["import { deleteEmptyQuote } from './deleteSteps/deleteEmptyQuote';\nimport { deleteSelection, isModifierKey, normalizeContentModel } from 'roosterjs-content-model-dom';\nimport { handleEnterOnList } from './inputSteps/handleEnterOnList';\nimport type { DOMSelection, IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardInput(editor: IEditor, rawEvent: KeyboardEvent) {\n const selection = editor.getDOMSelection();\n\n if (shouldInputWithContentModel(selection, rawEvent)) {\n editor.takeSnapshot();\n\n editor.formatContentModel(\n (model, context) => {\n const result = deleteSelection(model, getInputSteps(selection, rawEvent), context);\n\n // We have deleted selection then we will let browser to handle the input.\n // With this combined operation, we don't wan to mass up the cached model so clear it\n context.clearModelCache = true;\n\n // Skip undo snapshot here and add undo snapshot before the operation so that we don't add another undo snapshot in middle of this replace operation\n context.skipUndoSnapshot = true;\n\n if (result.deleteResult == 'range') {\n // We have deleted something, next input should inherit the segment format from deleted content, so set pending format here\n context.newPendingFormat = result.insertPoint?.marker.format;\n\n normalizeContentModel(model);\n\n // Do not preventDefault since we still want browser to handle the final input for now\n return true;\n } else {\n return false;\n }\n },\n {\n rawEvent,\n }\n );\n\n return true;\n }\n}\n\nfunction getInputSteps(selection: DOMSelection | null, rawEvent: KeyboardEvent) {\n return shouldHandleEnterKey(selection, rawEvent) ? [handleEnterOnList, deleteEmptyQuote] : [];\n}\n\nfunction shouldInputWithContentModel(selection: DOMSelection | null, rawEvent: KeyboardEvent) {\n if (!selection) {\n return false; // Nothing to delete\n } else if (\n !isModifierKey(rawEvent) &&\n (rawEvent.key == 'Enter' || rawEvent.key == 'Space' || rawEvent.key.length == 1)\n ) {\n return (\n selection.type != 'range' ||\n !selection.range.collapsed ||\n shouldHandleEnterKey(selection, rawEvent)\n );\n } else {\n return false;\n }\n}\n\nconst shouldHandleEnterKey = (selection: DOMSelection | null, rawEvent: KeyboardEvent) => {\n return selection && selection.type == 'range' && rawEvent.key == 'Enter' && !rawEvent.shiftKey;\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-dom", "./tabUtils/handleTabOnList", "./tabUtils/handleTabOnParagraph", "roosterjs-content-model-api"], function (require, exports, roosterjs_content_model_dom_1, handleTabOnList_1, handleTabOnParagraph_1, roosterjs_content_model_api_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.keyboardTab = void 0;
|
|
@@ -22,7 +22,7 @@ define(["require", "exports", "roosterjs-content-model-core", "./tabUtils/handle
|
|
|
22
22
|
* If only one block is selected, call handleTabOnParagraph or handleTabOnList to handle the tab key.
|
|
23
23
|
*/
|
|
24
24
|
function handleTab(model, rawEvent) {
|
|
25
|
-
var blocks = (0,
|
|
25
|
+
var blocks = (0, roosterjs_content_model_dom_1.getOperationalBlocks)(model, ['ListItem'], ['TableCell']);
|
|
26
26
|
var block = blocks.length > 0 ? blocks[0].block : undefined;
|
|
27
27
|
if (blocks.length > 1) {
|
|
28
28
|
(0, roosterjs_content_model_api_1.setModelIndentation)(model, rawEvent.shiftKey ? 'outdent' : 'indent');
|
|
@@ -32,7 +32,7 @@ define(["require", "exports", "roosterjs-content-model-core", "./tabUtils/handle
|
|
|
32
32
|
else if ((block === null || block === void 0 ? void 0 : block.blockType) === 'Paragraph') {
|
|
33
33
|
return (0, handleTabOnParagraph_1.handleTabOnParagraph)(model, block, rawEvent);
|
|
34
34
|
}
|
|
35
|
-
else if ((0,
|
|
35
|
+
else if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(block, 'ListItem')) {
|
|
36
36
|
return (0, handleTabOnList_1.handleTabOnList)(model, block, rawEvent);
|
|
37
37
|
}
|
|
38
38
|
return false;
|