roosterjs-content-model-dom 9.9.0 → 9.10.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/lib/domToModel/context/defaultProcessors.js +1 -0
- package/lib/domToModel/context/defaultProcessors.js.map +1 -1
- package/lib/formatHandlers/list/listLevelThreadFormatHandler.js +3 -2
- package/lib/formatHandlers/list/listLevelThreadFormatHandler.js.map +1 -1
- package/lib/modelApi/editing/mergeModel.js +6 -0
- package/lib/modelApi/editing/mergeModel.js.map +1 -1
- package/lib/modelApi/selection/setSelection.js +21 -5
- package/lib/modelApi/selection/setSelection.js.map +1 -1
- package/lib/modelToDom/handlers/handleBlockGroupChildren.js +4 -0
- package/lib/modelToDom/handlers/handleBlockGroupChildren.js.map +1 -1
- package/lib/modelToDom/handlers/handleEntity.js +9 -1
- package/lib/modelToDom/handlers/handleEntity.js.map +1 -1
- package/lib-amd/domToModel/context/defaultProcessors.js +1 -0
- package/lib-amd/domToModel/context/defaultProcessors.js.map +1 -1
- package/lib-amd/formatHandlers/list/listLevelThreadFormatHandler.js +3 -2
- package/lib-amd/formatHandlers/list/listLevelThreadFormatHandler.js.map +1 -1
- package/lib-amd/modelApi/editing/mergeModel.js +6 -1
- package/lib-amd/modelApi/editing/mergeModel.js.map +1 -1
- package/lib-amd/modelApi/selection/setSelection.js +21 -5
- package/lib-amd/modelApi/selection/setSelection.js.map +1 -1
- package/lib-amd/modelToDom/handlers/handleBlockGroupChildren.js +4 -0
- package/lib-amd/modelToDom/handlers/handleBlockGroupChildren.js.map +1 -1
- package/lib-amd/modelToDom/handlers/handleEntity.js +9 -1
- package/lib-amd/modelToDom/handlers/handleEntity.js.map +1 -1
- package/lib-mjs/domToModel/context/defaultProcessors.js +1 -0
- package/lib-mjs/domToModel/context/defaultProcessors.js.map +1 -1
- package/lib-mjs/formatHandlers/list/listLevelThreadFormatHandler.js +3 -2
- package/lib-mjs/formatHandlers/list/listLevelThreadFormatHandler.js.map +1 -1
- package/lib-mjs/modelApi/editing/mergeModel.js +6 -0
- package/lib-mjs/modelApi/editing/mergeModel.js.map +1 -1
- package/lib-mjs/modelApi/selection/setSelection.js +21 -5
- package/lib-mjs/modelApi/selection/setSelection.js.map +1 -1
- package/lib-mjs/modelToDom/handlers/handleBlockGroupChildren.js +4 -0
- package/lib-mjs/modelToDom/handlers/handleBlockGroupChildren.js.map +1 -1
- package/lib-mjs/modelToDom/handlers/handleEntity.js +9 -1
- package/lib-mjs/modelToDom/handlers/handleEntity.js.map +1 -1
- package/package.json +2 -2
|
@@ -30,6 +30,7 @@ exports.defaultProcessorMap = {
|
|
|
30
30
|
blockquote: knownElementProcessor_1.knownElementProcessor,
|
|
31
31
|
br: brProcessor_1.brProcessor,
|
|
32
32
|
code: codeProcessor_1.codeProcessor,
|
|
33
|
+
del: knownElementProcessor_1.knownElementProcessor,
|
|
33
34
|
div: knownElementProcessor_1.knownElementProcessor,
|
|
34
35
|
em: knownElementProcessor_1.knownElementProcessor,
|
|
35
36
|
font: fontProcessor_1.fontProcessor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultProcessors.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AACxD,+DAA8D;AAC9D,6DAA4D;AAC5D,uEAAsE;AACtE,mEAAkE;AAClE,iEAAgE;AAChE,6DAA4D;AAC5D,mFAAkF;AAClF,mEAAkE;AAClE,mEAAkE;AAClE,yDAAwD;AACxD,+DAA8D;AAC9D,6EAA4E;AAC5E,6DAA4D;AAC5D,qEAAoE;AACpE,6DAA4D;AAC5D,uDAAsD;AACtD,+DAA8D;AAC9D,6DAA4D;AAC5D,uFAAsF;AAGtF;;GAEG;AACU,QAAA,mBAAmB,GAAwB;IACpD,CAAC,EAAE,6BAAa;IAChB,CAAC,EAAE,6CAAqB;IACxB,UAAU,EAAE,6CAAqB;IACjC,EAAE,EAAE,yBAAW;IACf,IAAI,EAAE,6BAAa;IACnB,GAAG,EAAE,6CAAqB;IAC1B,EAAE,EAAE,6CAAqB;IACzB,IAAI,EAAE,6BAAa;IACnB,CAAC,EAAE,6CAAqB;IACxB,GAAG,EAAE,+BAAc;IACnB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,yBAAW;IACf,EAAE,EAAE,qCAAiB;IACrB,EAAE,EAAE,6BAAa;IACjB,CAAC,EAAE,uBAAU;IACb,GAAG,EAAE,mDAAwB;IAC7B,CAAC,EAAE,6CAAqB;IACxB,OAAO,EAAE,6CAAqB;IAC9B,IAAI,EAAE,6CAAqB;IAC3B,MAAM,EAAE,6CAAqB;IAC7B,MAAM,EAAE,6CAAqB;IAC7B,GAAG,EAAE,6CAAqB;IAC1B,GAAG,EAAE,6CAAqB;IAC1B,KAAK,EAAE,+BAAc;IACrB,CAAC,EAAE,6CAAqB;IACxB,EAAE,EAAE,6BAAa;IAEjB,GAAG,EAAE,mCAAgB;IACrB,OAAO,EAAE,6BAAa;IACtB,iBAAiB,EAAE,uDAA0B;IAC7C,OAAO,EAAE,mCAAgB;IACzB,MAAM,EAAE,iCAAe;IACvB,KAAK,EAAE,+BAAc;IACrB,SAAS,EAAE,uCAAkB;CAChC,CAAC","sourcesContent":["import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\nimport { textWithSelectionProcessor } from '../processors/textWithSelectionProcessor';\nimport type { ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n div: knownElementProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n section: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n textWithSelection: textWithSelectionProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"defaultProcessors.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AACxD,+DAA8D;AAC9D,6DAA4D;AAC5D,uEAAsE;AACtE,mEAAkE;AAClE,iEAAgE;AAChE,6DAA4D;AAC5D,mFAAkF;AAClF,mEAAkE;AAClE,mEAAkE;AAClE,yDAAwD;AACxD,+DAA8D;AAC9D,6EAA4E;AAC5E,6DAA4D;AAC5D,qEAAoE;AACpE,6DAA4D;AAC5D,uDAAsD;AACtD,+DAA8D;AAC9D,6DAA4D;AAC5D,uFAAsF;AAGtF;;GAEG;AACU,QAAA,mBAAmB,GAAwB;IACpD,CAAC,EAAE,6BAAa;IAChB,CAAC,EAAE,6CAAqB;IACxB,UAAU,EAAE,6CAAqB;IACjC,EAAE,EAAE,yBAAW;IACf,IAAI,EAAE,6BAAa;IACnB,GAAG,EAAE,6CAAqB;IAC1B,GAAG,EAAE,6CAAqB;IAC1B,EAAE,EAAE,6CAAqB;IACzB,IAAI,EAAE,6BAAa;IACnB,CAAC,EAAE,6CAAqB;IACxB,GAAG,EAAE,+BAAc;IACnB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,yBAAW;IACf,EAAE,EAAE,qCAAiB;IACrB,EAAE,EAAE,6BAAa;IACjB,CAAC,EAAE,uBAAU;IACb,GAAG,EAAE,mDAAwB;IAC7B,CAAC,EAAE,6CAAqB;IACxB,OAAO,EAAE,6CAAqB;IAC9B,IAAI,EAAE,6CAAqB;IAC3B,MAAM,EAAE,6CAAqB;IAC7B,MAAM,EAAE,6CAAqB;IAC7B,GAAG,EAAE,6CAAqB;IAC1B,GAAG,EAAE,6CAAqB;IAC1B,KAAK,EAAE,+BAAc;IACrB,CAAC,EAAE,6CAAqB;IACxB,EAAE,EAAE,6BAAa;IAEjB,GAAG,EAAE,mCAAgB;IACrB,OAAO,EAAE,6BAAa;IACtB,iBAAiB,EAAE,uDAA0B;IAC7C,OAAO,EAAE,mCAAgB;IACzB,MAAM,EAAE,iCAAe;IACvB,KAAK,EAAE,+BAAc;IACrB,SAAS,EAAE,uCAAkB;CAChC,CAAC","sourcesContent":["import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\nimport { textWithSelectionProcessor } from '../processors/textWithSelectionProcessor';\nimport type { ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n del: knownElementProcessor,\n div: knownElementProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n section: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n textWithSelection: textWithSelectionProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n"]}
|
|
@@ -11,8 +11,9 @@ exports.listLevelThreadFormatHandler = {
|
|
|
11
11
|
var listFormat = context.listFormat;
|
|
12
12
|
var threadItemCounts = listFormat.threadItemCounts, levels = listFormat.levels;
|
|
13
13
|
var depth = levels.length;
|
|
14
|
-
if (
|
|
15
|
-
|
|
14
|
+
if (element.start == 1 ||
|
|
15
|
+
(typeof threadItemCounts[depth] === 'number' &&
|
|
16
|
+
element.start != threadItemCounts[depth] + 1)) {
|
|
16
17
|
format.startNumberOverride = element.start;
|
|
17
18
|
}
|
|
18
19
|
threadItemCounts[depth] = element.start - 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listLevelThreadFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts"],"names":[],"mappings":";;;AAAA,kEAAiE;AAIjE;;GAEG;AACU,QAAA,4BAA4B,GAAoC;IACzE,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;QAC5B,IAAI,IAAA,iCAAe,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACxB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;YACvB,IAAA,gBAAgB,GAAa,UAAU,iBAAvB,EAAE,MAAM,GAAK,UAAU,OAAf,CAAgB;YAChD,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAE5B,IACI,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,QAAQ;
|
|
1
|
+
{"version":3,"file":"listLevelThreadFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts"],"names":[],"mappings":";;;AAAA,kEAAiE;AAIjE;;GAEG;AACU,QAAA,4BAA4B,GAAoC;IACzE,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;QAC5B,IAAI,IAAA,iCAAe,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACxB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;YACvB,IAAA,gBAAgB,GAAa,UAAU,iBAAvB,EAAE,MAAM,GAAK,UAAU,OAAf,CAAgB;YAChD,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAE5B,IACI,OAAO,CAAC,KAAK,IAAI,CAAC;gBAClB,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,QAAQ;oBACxC,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACnD;gBACE,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC,KAAK,CAAC;aAC9C;YAED,gBAAgB,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;SAC/C;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;QAExB,IAAA,KACA,OAAO,WADoC,EAA7B,gBAAgB,sBAAA,EAAE,SAAS,eAAE,CACnC;QAEZ,+FAA+F;QAC/F,0FAA0F;QAC1F,IAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAEnC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAA,iCAAe,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YAC9C,IAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;YAE/C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACjC,gBAAgB,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;aAC7C;iBAAM,IAAI,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE;gBACnD,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aAC/B;YAED,gBAAgB,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC/C;IACL,CAAC;CACJ,CAAC","sourcesContent":["import { isElementOfType } from '../../domUtils/isElementOfType';\nimport type { FormatHandler } from '../FormatHandler';\nimport type { ListThreadFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listLevelThreadFormatHandler: FormatHandler<ListThreadFormat> = {\n parse: (format, element, context) => {\n if (isElementOfType(element, 'ol')) {\n const { listFormat } = context;\n const { threadItemCounts, levels } = listFormat;\n const depth = levels.length;\n\n if (\n element.start == 1 ||\n (typeof threadItemCounts[depth] === 'number' &&\n element.start != threadItemCounts[depth] + 1)\n ) {\n format.startNumberOverride = element.start;\n }\n\n threadItemCounts[depth] = element.start - 1;\n }\n },\n apply: (format, element, context) => {\n const {\n listFormat: { threadItemCounts, nodeStack },\n } = context;\n\n // The first one is always the parent of list, and minus another one to convert length to index\n // This format applier needs to be executed after new list level is pushed into node stack\n const depth = nodeStack.length - 2;\n\n if (depth >= 0 && isElementOfType(element, 'ol')) {\n const startNumber = format.startNumberOverride;\n\n if (typeof startNumber === 'number') {\n threadItemCounts[depth] = startNumber - 1;\n } else if (typeof threadItemCounts[depth] != 'number') {\n threadItemCounts[depth] = 0;\n }\n\n threadItemCounts.splice(depth + 1);\n element.start = threadItemCounts[depth] + 1;\n }\n },\n};\n"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.mergeModel = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
+
var addBlock_1 = require("../common/addBlock");
|
|
5
6
|
var addSegment_1 = require("../common/addSegment");
|
|
6
7
|
var applyTableFormat_1 = require("./applyTableFormat");
|
|
7
8
|
var createListItem_1 = require("../creators/createListItem");
|
|
@@ -28,6 +29,11 @@ var KeysOfSegmentFormat = (0, getObjectKeys_1.getObjectKeys)(EmptySegmentFormat_
|
|
|
28
29
|
function mergeModel(target, source, context, options) {
|
|
29
30
|
var _a;
|
|
30
31
|
var insertPosition = (_a = options === null || options === void 0 ? void 0 : options.insertPosition) !== null && _a !== void 0 ? _a : (0, deleteSelection_1.deleteSelection)(target, [], context).insertPoint;
|
|
32
|
+
if (options === null || options === void 0 ? void 0 : options.addParagraphAfterMergedContent) {
|
|
33
|
+
var _b = insertPosition || {}, paragraph = _b.paragraph, marker = _b.marker;
|
|
34
|
+
var newPara = (0, createParagraph_1.createParagraph)(false /* isImplicit */, paragraph === null || paragraph === void 0 ? void 0 : paragraph.format, marker === null || marker === void 0 ? void 0 : marker.format);
|
|
35
|
+
(0, addBlock_1.addBlock)(source, newPara);
|
|
36
|
+
}
|
|
31
37
|
if (insertPosition) {
|
|
32
38
|
if ((options === null || options === void 0 ? void 0 : options.mergeFormat) && options.mergeFormat != 'none') {
|
|
33
39
|
var newFormat = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (target.format || {})), insertPosition.marker.format);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeModel.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/mergeModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { addSegment } from '../common/addSegment';\nimport { applyTableFormat } from './applyTableFormat';\nimport { createListItem } from '../creators/createListItem';\nimport { createParagraph } from '../creators/createParagraph';\nimport { createSelectionMarker } from '../creators/createSelectionMarker';\nimport { createTableCell } from '../creators/createTableCell';\nimport { deleteSelection } from './deleteSelection';\nimport { EmptySegmentFormat } from '../../constants/EmptySegmentFormat';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { getObjectKeys } from '../..//domUtils/getObjectKeys';\nimport { mutateBlock } from '../common/mutate';\nimport { normalizeContentModel } from '../common/normalizeContentModel';\nimport { normalizeTable } from './normalizeTable';\nimport type {\n ContentModelBlock,\n ContentModelBlockFormat,\n ContentModelDocument,\n ContentModelHyperLinkFormat,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegmentFormat,\n ContentModelTable,\n FormatContentModelContext,\n InsertPoint,\n MergeModelOption,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelDocument,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\nconst HeadingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\nconst KeysOfSegmentFormat = getObjectKeys(EmptySegmentFormat);\n\n/**\n * Merge source model into target mode\n * @param target Target Content Model that will merge content into\n * @param source Source Content Model will be merged to target model\n * @param context Format context. When call this function inside formatContentModel, provide this context so that formatContentModel will do extra handling to the result\n * @param options More options, see MergeModelOption\n * @returns Insert point after merge, or null if there is no insert point\n */\nexport function mergeModel(\n target: ReadonlyContentModelDocument,\n source: ContentModelDocument,\n context?: FormatContentModelContext,\n options?: MergeModelOption\n): InsertPoint | null {\n const insertPosition =\n options?.insertPosition ?? deleteSelection(target, [], context).insertPoint;\n\n if (insertPosition) {\n if (options?.mergeFormat && options.mergeFormat != 'none') {\n const newFormat: ContentModelSegmentFormat = {\n ...(target.format || {}),\n ...insertPosition.marker.format,\n };\n\n applyDefaultFormat(source, newFormat, options?.mergeFormat);\n }\n\n for (let i = 0; i < source.blocks.length; i++) {\n const block = source.blocks[i];\n\n switch (block.blockType) {\n case 'Paragraph':\n mergeParagraph(insertPosition, block, i == 0, context, options);\n break;\n\n case 'Divider':\n insertBlock(insertPosition, block);\n break;\n\n case 'Entity':\n insertBlock(insertPosition, block);\n context?.newEntities.push(block);\n break;\n\n case 'Table':\n if (source.blocks.length == 1 && options?.mergeTable) {\n mergeTable(insertPosition, block, source);\n } else {\n insertBlock(insertPosition, block);\n }\n break;\n\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'General':\n case 'FormatContainer':\n insertBlock(insertPosition, block);\n break;\n case 'ListItem':\n mergeList(insertPosition, block);\n break;\n }\n break;\n }\n }\n }\n\n normalizeContentModel(target);\n\n return insertPosition;\n}\n\nfunction mergeParagraph(\n markerPosition: InsertPoint,\n newPara: ContentModelParagraph,\n mergeToCurrentParagraph: boolean,\n context?: FormatContentModelContext,\n option?: MergeModelOption\n) {\n const { paragraph, marker } = markerPosition;\n const newParagraph = mergeToCurrentParagraph\n ? paragraph\n : splitParagraph(markerPosition, newPara.format);\n const segmentIndex = newParagraph.segments.indexOf(marker);\n\n if (option?.mergeFormat == 'none' && mergeToCurrentParagraph) {\n newParagraph.segments.forEach(segment => {\n segment.format = { ...(newParagraph.segmentFormat || {}), ...segment.format };\n });\n delete newParagraph.segmentFormat;\n }\n if (segmentIndex >= 0) {\n for (let i = 0; i < newPara.segments.length; i++) {\n const segment = newPara.segments[i];\n\n newParagraph.segments.splice(segmentIndex + i, 0, segment);\n\n if (context) {\n if (segment.segmentType == 'Entity') {\n context.newEntities.push(segment);\n }\n\n if (segment.segmentType == 'Image') {\n context.newImages.push(segment);\n }\n }\n }\n }\n\n if (newPara.decorator) {\n newParagraph.decorator = { ...newPara.decorator };\n if (HeadingTags.indexOf(newParagraph.decorator.tagName) > -1) {\n const sourceKeys: (keyof ContentModelSegmentFormat)[] = getObjectKeys(\n newParagraph.decorator.format\n );\n const segmentDecoratorKeys: (keyof ContentModelSegmentFormat)[] = getObjectKeys(\n newParagraph.segmentFormat || {}\n );\n\n sourceKeys.forEach(key => {\n if (segmentDecoratorKeys.indexOf(key) > -1) {\n delete newParagraph.segmentFormat?.[key];\n }\n });\n }\n }\n\n if (!mergeToCurrentParagraph) {\n newParagraph.format = newPara.format;\n } else {\n newParagraph.format = {\n ...newParagraph.format,\n ...newPara.format,\n };\n }\n}\n\nfunction mergeTable(\n markerPosition: InsertPoint,\n newTable: ContentModelTable,\n source: ContentModelDocument\n) {\n const { tableContext, marker } = markerPosition;\n\n if (tableContext && source.blocks.length == 1 && source.blocks[0] == newTable) {\n const { table: readonlyTable, colIndex, rowIndex } = tableContext;\n const table = mutateBlock(readonlyTable);\n\n for (let i = 0; i < newTable.rows.length; i++) {\n for (let j = 0; j < newTable.rows[i].cells.length; j++) {\n const newCell = newTable.rows[i].cells[j];\n\n if (i == 0 && colIndex + j >= table.rows[0].cells.length) {\n for (let k = 0; k < table.rows.length; k++) {\n const leftCell = table.rows[k]?.cells[colIndex + j - 1];\n table.rows[k].cells[colIndex + j] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n leftCell?.isHeader,\n leftCell?.format\n );\n }\n }\n\n if (j == 0 && rowIndex + i >= table.rows.length) {\n if (!table.rows[rowIndex + i]) {\n table.rows[rowIndex + i] = {\n cells: [],\n format: {},\n height: 0,\n };\n }\n\n for (let k = 0; k < table.rows[rowIndex].cells.length; k++) {\n const aboveCell = table.rows[rowIndex + i - 1]?.cells[k];\n table.rows[rowIndex + i].cells[k] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n false /*isHeader*/,\n aboveCell?.format\n );\n }\n }\n\n const oldCell = table.rows[rowIndex + i].cells[colIndex + j];\n table.rows[rowIndex + i].cells[colIndex + j] = newCell;\n\n if (i == 0 && j == 0) {\n const newMarker = createSelectionMarker(marker.format);\n const newPara = addSegment(newCell, newMarker);\n\n if (markerPosition.path[0] == oldCell) {\n // Update insert point to match the change result\n markerPosition.path[0] = newCell;\n markerPosition.marker = newMarker;\n markerPosition.paragraph = newPara;\n }\n }\n }\n }\n\n normalizeTable(table, markerPosition.marker.format);\n applyTableFormat(table, undefined /*newFormat*/, true /*keepCellShade*/);\n } else {\n insertBlock(markerPosition, newTable);\n }\n}\n\nfunction mergeList(markerPosition: InsertPoint, newList: ContentModelListItem) {\n splitParagraph(markerPosition, newList.format);\n\n const { path, paragraph } = markerPosition;\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(path, ['ListItem']);\n const listItem = path[listItemIndex] as ContentModelListItem;\n const listParent = path[listItemIndex + 1]; // It is ok here when index is -1, that means there is no list and we just insert a new paragraph and use path[0] as its parent\n const blockIndex = listParent.blocks.indexOf(listItem || paragraph);\n\n if (blockIndex >= 0) {\n mutateBlock(listParent).blocks.splice(blockIndex, 0, newList);\n }\n\n if (listItem) {\n listItem?.levels.forEach((level, i) => {\n newList.levels[i] = { ...level };\n });\n }\n}\n\nfunction splitParagraph(markerPosition: InsertPoint, newParaFormat: ContentModelBlockFormat) {\n const { paragraph, marker, path } = markerPosition;\n const segmentIndex = paragraph.segments.indexOf(marker);\n const paraIndex = path[0].blocks.indexOf(paragraph);\n const newParagraph: ShallowMutableContentModelParagraph = createParagraph(\n false /*isImplicit*/,\n { ...paragraph.format, ...newParaFormat },\n paragraph.segmentFormat\n );\n\n if (segmentIndex >= 0) {\n newParagraph.segments = paragraph.segments.splice(segmentIndex);\n }\n\n if (paraIndex >= 0) {\n mutateBlock(path[0]).blocks.splice(paraIndex + 1, 0, newParagraph);\n }\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(\n path,\n ['ListItem'],\n ['FormatContainer', 'TableCell']\n );\n const listItem = path[listItemIndex] as ContentModelListItem;\n\n if (listItem) {\n const listParent = listItemIndex >= 0 ? path[listItemIndex + 1] : null;\n const blockIndex = listParent ? listParent.blocks.indexOf(listItem) : -1;\n\n if (blockIndex >= 0 && listParent) {\n const newListItem = createListItem(listItem.levels, listItem.formatHolder.format);\n\n if (paraIndex >= 0) {\n newListItem.blocks = listItem.blocks.splice(paraIndex + 1);\n }\n\n if (blockIndex >= 0) {\n mutateBlock(listParent).blocks.splice(blockIndex + 1, 0, newListItem);\n }\n\n path[listItemIndex] = newListItem;\n }\n }\n\n markerPosition.paragraph = newParagraph;\n\n return newParagraph;\n}\n\nfunction insertBlock(markerPosition: InsertPoint, block: ContentModelBlock) {\n const { path } = markerPosition;\n const newParaFormat = block.blockType !== 'Paragraph' ? {} : block.format;\n const newPara = splitParagraph(markerPosition, newParaFormat);\n const blockIndex = path[0].blocks.indexOf(newPara);\n\n if (blockIndex >= 0) {\n mutateBlock(path[0]).blocks.splice(blockIndex, 0, block);\n }\n}\n\nfunction applyDefaultFormat(\n group: ReadonlyContentModelBlockGroup,\n format: ContentModelSegmentFormat,\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat'\n) {\n group.blocks.forEach(block => {\n mergeBlockFormat(applyDefaultFormatOption, block);\n\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem') {\n mutateBlock(block).formatHolder.format = mergeSegmentFormat(\n applyDefaultFormatOption,\n format,\n block.formatHolder.format\n );\n }\n applyDefaultFormat(block, format, applyDefaultFormatOption);\n break;\n\n case 'Table':\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n applyDefaultFormat(cell, format, applyDefaultFormatOption);\n })\n );\n break;\n\n case 'Paragraph':\n const paragraphFormat = block.decorator?.format || {};\n const paragraph = mutateBlock(block);\n\n paragraph.segments.forEach(segment => {\n if (segment.segmentType == 'General') {\n applyDefaultFormat(segment, format, applyDefaultFormatOption);\n }\n\n segment.format = mergeSegmentFormat(applyDefaultFormatOption, format, {\n ...paragraphFormat,\n ...segment.format,\n });\n\n if (segment.link) {\n segment.link.format = mergeLinkFormat(\n applyDefaultFormatOption,\n format,\n segment.link.format\n );\n }\n });\n\n if (applyDefaultFormatOption === 'keepSourceEmphasisFormat') {\n delete paragraph.decorator;\n }\n break;\n }\n });\n}\n\nfunction mergeBlockFormat(applyDefaultFormatOption: string, block: ReadonlyContentModelBlock) {\n if (applyDefaultFormatOption == 'keepSourceEmphasisFormat' && block.format.backgroundColor) {\n delete mutateBlock(block).format.backgroundColor;\n }\n}\n\n/**\n * Hyperlink format type definition only contains backgroundColor and underline.\n * So create a minimum object with the styles supported in Hyperlink to be used in merge.\n */\nfunction getSegmentFormatInLinkFormat(\n targetFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n const result: ContentModelHyperLinkFormat = {};\n if (targetFormat.backgroundColor) {\n result.backgroundColor = targetFormat.backgroundColor;\n }\n if (targetFormat.underline) {\n result.underline = targetFormat.underline;\n }\n\n return result;\n}\n\nfunction mergeLinkFormat(\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat',\n targetFormat: ContentModelSegmentFormat,\n sourceFormat: ContentModelHyperLinkFormat\n) {\n return applyDefaultFormatOption == 'mergeAll'\n ? { ...getSegmentFormatInLinkFormat(targetFormat), ...sourceFormat }\n : {\n // Hyperlink segment format contains other attributes such as LinkFormat\n // so we have to retain them\n ...getFormatWithoutSegmentFormat(sourceFormat),\n // Link format only have Text color, background color, Underline, but only\n // text color + background color should be merged from the target\n ...getSegmentFormatInLinkFormat(targetFormat),\n // Get the semantic format of the source\n ...getSemanticFormat(sourceFormat),\n // The text color of the hyperlink should not be merged and\n // we should always retain the source text color\n ...getHyperlinkTextColor(sourceFormat),\n };\n}\n\nfunction mergeSegmentFormat(\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat',\n targetFormat: ContentModelSegmentFormat,\n sourceFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n return applyDefaultFormatOption == 'mergeAll'\n ? { ...targetFormat, ...sourceFormat }\n : {\n ...getFormatWithoutSegmentFormat(sourceFormat),\n ...targetFormat,\n ...getSemanticFormat(sourceFormat),\n };\n}\n\nfunction getSemanticFormat(segmentFormat: ContentModelSegmentFormat): ContentModelSegmentFormat {\n const result: ContentModelSegmentFormat = {};\n\n const { fontWeight, italic, underline } = segmentFormat;\n\n if (fontWeight && fontWeight != 'normal') {\n result.fontWeight = fontWeight;\n }\n if (italic) {\n result.italic = italic;\n }\n if (underline) {\n result.underline = underline;\n }\n\n return result;\n}\n\n/**\n * Segment format can also contain other type of metadata, for example in Images/Hyperlink,\n * we want to preserve these properties when merging format\n */\nfunction getFormatWithoutSegmentFormat(\n sourceFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n const resultFormat = {\n ...sourceFormat,\n };\n KeysOfSegmentFormat.forEach(key => delete resultFormat[key]);\n return resultFormat;\n}\nfunction getHyperlinkTextColor(sourceFormat: ContentModelHyperLinkFormat) {\n const result: ContentModelHyperLinkFormat = {};\n if (sourceFormat.textColor) {\n result.textColor = sourceFormat.textColor;\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mergeModel.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/mergeModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { addBlock } from '../common/addBlock';\nimport { addSegment } from '../common/addSegment';\nimport { applyTableFormat } from './applyTableFormat';\nimport { createListItem } from '../creators/createListItem';\nimport { createParagraph } from '../creators/createParagraph';\nimport { createSelectionMarker } from '../creators/createSelectionMarker';\nimport { createTableCell } from '../creators/createTableCell';\nimport { deleteSelection } from './deleteSelection';\nimport { EmptySegmentFormat } from '../../constants/EmptySegmentFormat';\nimport { getClosestAncestorBlockGroupIndex } from './getClosestAncestorBlockGroupIndex';\nimport { getObjectKeys } from '../..//domUtils/getObjectKeys';\nimport { mutateBlock } from '../common/mutate';\nimport { normalizeContentModel } from '../common/normalizeContentModel';\nimport { normalizeTable } from './normalizeTable';\nimport type {\n ContentModelBlock,\n ContentModelBlockFormat,\n ContentModelDocument,\n ContentModelHyperLinkFormat,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegmentFormat,\n ContentModelTable,\n FormatContentModelContext,\n InsertPoint,\n MergeModelOption,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelDocument,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\nconst HeadingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\nconst KeysOfSegmentFormat = getObjectKeys(EmptySegmentFormat);\n\n/**\n * Merge source model into target mode\n * @param target Target Content Model that will merge content into\n * @param source Source Content Model will be merged to target model\n * @param context Format context. When call this function inside formatContentModel, provide this context so that formatContentModel will do extra handling to the result\n * @param options More options, see MergeModelOption\n * @returns Insert point after merge, or null if there is no insert point\n */\nexport function mergeModel(\n target: ReadonlyContentModelDocument,\n source: ContentModelDocument,\n context?: FormatContentModelContext,\n options?: MergeModelOption\n): InsertPoint | null {\n const insertPosition =\n options?.insertPosition ?? deleteSelection(target, [], context).insertPoint;\n\n if (options?.addParagraphAfterMergedContent) {\n const { paragraph, marker } = insertPosition || {};\n const newPara = createParagraph(false /* isImplicit */, paragraph?.format, marker?.format);\n addBlock(source, newPara);\n }\n\n if (insertPosition) {\n if (options?.mergeFormat && options.mergeFormat != 'none') {\n const newFormat: ContentModelSegmentFormat = {\n ...(target.format || {}),\n ...insertPosition.marker.format,\n };\n\n applyDefaultFormat(source, newFormat, options?.mergeFormat);\n }\n\n for (let i = 0; i < source.blocks.length; i++) {\n const block = source.blocks[i];\n\n switch (block.blockType) {\n case 'Paragraph':\n mergeParagraph(insertPosition, block, i == 0, context, options);\n break;\n\n case 'Divider':\n insertBlock(insertPosition, block);\n break;\n\n case 'Entity':\n insertBlock(insertPosition, block);\n context?.newEntities.push(block);\n break;\n\n case 'Table':\n if (source.blocks.length == 1 && options?.mergeTable) {\n mergeTable(insertPosition, block, source);\n } else {\n insertBlock(insertPosition, block);\n }\n break;\n\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'General':\n case 'FormatContainer':\n insertBlock(insertPosition, block);\n break;\n case 'ListItem':\n mergeList(insertPosition, block);\n break;\n }\n break;\n }\n }\n }\n\n normalizeContentModel(target);\n\n return insertPosition;\n}\n\nfunction mergeParagraph(\n markerPosition: InsertPoint,\n newPara: ContentModelParagraph,\n mergeToCurrentParagraph: boolean,\n context?: FormatContentModelContext,\n option?: MergeModelOption\n) {\n const { paragraph, marker } = markerPosition;\n const newParagraph = mergeToCurrentParagraph\n ? paragraph\n : splitParagraph(markerPosition, newPara.format);\n const segmentIndex = newParagraph.segments.indexOf(marker);\n\n if (option?.mergeFormat == 'none' && mergeToCurrentParagraph) {\n newParagraph.segments.forEach(segment => {\n segment.format = { ...(newParagraph.segmentFormat || {}), ...segment.format };\n });\n delete newParagraph.segmentFormat;\n }\n if (segmentIndex >= 0) {\n for (let i = 0; i < newPara.segments.length; i++) {\n const segment = newPara.segments[i];\n\n newParagraph.segments.splice(segmentIndex + i, 0, segment);\n\n if (context) {\n if (segment.segmentType == 'Entity') {\n context.newEntities.push(segment);\n }\n\n if (segment.segmentType == 'Image') {\n context.newImages.push(segment);\n }\n }\n }\n }\n\n if (newPara.decorator) {\n newParagraph.decorator = { ...newPara.decorator };\n if (HeadingTags.indexOf(newParagraph.decorator.tagName) > -1) {\n const sourceKeys: (keyof ContentModelSegmentFormat)[] = getObjectKeys(\n newParagraph.decorator.format\n );\n const segmentDecoratorKeys: (keyof ContentModelSegmentFormat)[] = getObjectKeys(\n newParagraph.segmentFormat || {}\n );\n\n sourceKeys.forEach(key => {\n if (segmentDecoratorKeys.indexOf(key) > -1) {\n delete newParagraph.segmentFormat?.[key];\n }\n });\n }\n }\n\n if (!mergeToCurrentParagraph) {\n newParagraph.format = newPara.format;\n } else {\n newParagraph.format = {\n ...newParagraph.format,\n ...newPara.format,\n };\n }\n}\n\nfunction mergeTable(\n markerPosition: InsertPoint,\n newTable: ContentModelTable,\n source: ContentModelDocument\n) {\n const { tableContext, marker } = markerPosition;\n\n if (tableContext && source.blocks.length == 1 && source.blocks[0] == newTable) {\n const { table: readonlyTable, colIndex, rowIndex } = tableContext;\n const table = mutateBlock(readonlyTable);\n\n for (let i = 0; i < newTable.rows.length; i++) {\n for (let j = 0; j < newTable.rows[i].cells.length; j++) {\n const newCell = newTable.rows[i].cells[j];\n\n if (i == 0 && colIndex + j >= table.rows[0].cells.length) {\n for (let k = 0; k < table.rows.length; k++) {\n const leftCell = table.rows[k]?.cells[colIndex + j - 1];\n table.rows[k].cells[colIndex + j] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n leftCell?.isHeader,\n leftCell?.format\n );\n }\n }\n\n if (j == 0 && rowIndex + i >= table.rows.length) {\n if (!table.rows[rowIndex + i]) {\n table.rows[rowIndex + i] = {\n cells: [],\n format: {},\n height: 0,\n };\n }\n\n for (let k = 0; k < table.rows[rowIndex].cells.length; k++) {\n const aboveCell = table.rows[rowIndex + i - 1]?.cells[k];\n table.rows[rowIndex + i].cells[k] = createTableCell(\n false /*spanLeft*/,\n false /*spanAbove*/,\n false /*isHeader*/,\n aboveCell?.format\n );\n }\n }\n\n const oldCell = table.rows[rowIndex + i].cells[colIndex + j];\n table.rows[rowIndex + i].cells[colIndex + j] = newCell;\n\n if (i == 0 && j == 0) {\n const newMarker = createSelectionMarker(marker.format);\n const newPara = addSegment(newCell, newMarker);\n\n if (markerPosition.path[0] == oldCell) {\n // Update insert point to match the change result\n markerPosition.path[0] = newCell;\n markerPosition.marker = newMarker;\n markerPosition.paragraph = newPara;\n }\n }\n }\n }\n\n normalizeTable(table, markerPosition.marker.format);\n applyTableFormat(table, undefined /*newFormat*/, true /*keepCellShade*/);\n } else {\n insertBlock(markerPosition, newTable);\n }\n}\n\nfunction mergeList(markerPosition: InsertPoint, newList: ContentModelListItem) {\n splitParagraph(markerPosition, newList.format);\n\n const { path, paragraph } = markerPosition;\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(path, ['ListItem']);\n const listItem = path[listItemIndex] as ContentModelListItem;\n const listParent = path[listItemIndex + 1]; // It is ok here when index is -1, that means there is no list and we just insert a new paragraph and use path[0] as its parent\n const blockIndex = listParent.blocks.indexOf(listItem || paragraph);\n\n if (blockIndex >= 0) {\n mutateBlock(listParent).blocks.splice(blockIndex, 0, newList);\n }\n\n if (listItem) {\n listItem?.levels.forEach((level, i) => {\n newList.levels[i] = { ...level };\n });\n }\n}\n\nfunction splitParagraph(markerPosition: InsertPoint, newParaFormat: ContentModelBlockFormat) {\n const { paragraph, marker, path } = markerPosition;\n const segmentIndex = paragraph.segments.indexOf(marker);\n const paraIndex = path[0].blocks.indexOf(paragraph);\n const newParagraph: ShallowMutableContentModelParagraph = createParagraph(\n false /*isImplicit*/,\n { ...paragraph.format, ...newParaFormat },\n paragraph.segmentFormat\n );\n\n if (segmentIndex >= 0) {\n newParagraph.segments = paragraph.segments.splice(segmentIndex);\n }\n\n if (paraIndex >= 0) {\n mutateBlock(path[0]).blocks.splice(paraIndex + 1, 0, newParagraph);\n }\n\n const listItemIndex = getClosestAncestorBlockGroupIndex(\n path,\n ['ListItem'],\n ['FormatContainer', 'TableCell']\n );\n const listItem = path[listItemIndex] as ContentModelListItem;\n\n if (listItem) {\n const listParent = listItemIndex >= 0 ? path[listItemIndex + 1] : null;\n const blockIndex = listParent ? listParent.blocks.indexOf(listItem) : -1;\n\n if (blockIndex >= 0 && listParent) {\n const newListItem = createListItem(listItem.levels, listItem.formatHolder.format);\n\n if (paraIndex >= 0) {\n newListItem.blocks = listItem.blocks.splice(paraIndex + 1);\n }\n\n if (blockIndex >= 0) {\n mutateBlock(listParent).blocks.splice(blockIndex + 1, 0, newListItem);\n }\n\n path[listItemIndex] = newListItem;\n }\n }\n\n markerPosition.paragraph = newParagraph;\n\n return newParagraph;\n}\n\nfunction insertBlock(markerPosition: InsertPoint, block: ContentModelBlock) {\n const { path } = markerPosition;\n const newParaFormat = block.blockType !== 'Paragraph' ? {} : block.format;\n const newPara = splitParagraph(markerPosition, newParaFormat);\n const blockIndex = path[0].blocks.indexOf(newPara);\n\n if (blockIndex >= 0) {\n mutateBlock(path[0]).blocks.splice(blockIndex, 0, block);\n }\n}\n\nfunction applyDefaultFormat(\n group: ReadonlyContentModelBlockGroup,\n format: ContentModelSegmentFormat,\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat'\n) {\n group.blocks.forEach(block => {\n mergeBlockFormat(applyDefaultFormatOption, block);\n\n switch (block.blockType) {\n case 'BlockGroup':\n if (block.blockGroupType == 'ListItem') {\n mutateBlock(block).formatHolder.format = mergeSegmentFormat(\n applyDefaultFormatOption,\n format,\n block.formatHolder.format\n );\n }\n applyDefaultFormat(block, format, applyDefaultFormatOption);\n break;\n\n case 'Table':\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n applyDefaultFormat(cell, format, applyDefaultFormatOption);\n })\n );\n break;\n\n case 'Paragraph':\n const paragraphFormat = block.decorator?.format || {};\n const paragraph = mutateBlock(block);\n\n paragraph.segments.forEach(segment => {\n if (segment.segmentType == 'General') {\n applyDefaultFormat(segment, format, applyDefaultFormatOption);\n }\n\n segment.format = mergeSegmentFormat(applyDefaultFormatOption, format, {\n ...paragraphFormat,\n ...segment.format,\n });\n\n if (segment.link) {\n segment.link.format = mergeLinkFormat(\n applyDefaultFormatOption,\n format,\n segment.link.format\n );\n }\n });\n\n if (applyDefaultFormatOption === 'keepSourceEmphasisFormat') {\n delete paragraph.decorator;\n }\n break;\n }\n });\n}\n\nfunction mergeBlockFormat(applyDefaultFormatOption: string, block: ReadonlyContentModelBlock) {\n if (applyDefaultFormatOption == 'keepSourceEmphasisFormat' && block.format.backgroundColor) {\n delete mutateBlock(block).format.backgroundColor;\n }\n}\n\n/**\n * Hyperlink format type definition only contains backgroundColor and underline.\n * So create a minimum object with the styles supported in Hyperlink to be used in merge.\n */\nfunction getSegmentFormatInLinkFormat(\n targetFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n const result: ContentModelHyperLinkFormat = {};\n if (targetFormat.backgroundColor) {\n result.backgroundColor = targetFormat.backgroundColor;\n }\n if (targetFormat.underline) {\n result.underline = targetFormat.underline;\n }\n\n return result;\n}\n\nfunction mergeLinkFormat(\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat',\n targetFormat: ContentModelSegmentFormat,\n sourceFormat: ContentModelHyperLinkFormat\n) {\n return applyDefaultFormatOption == 'mergeAll'\n ? { ...getSegmentFormatInLinkFormat(targetFormat), ...sourceFormat }\n : {\n // Hyperlink segment format contains other attributes such as LinkFormat\n // so we have to retain them\n ...getFormatWithoutSegmentFormat(sourceFormat),\n // Link format only have Text color, background color, Underline, but only\n // text color + background color should be merged from the target\n ...getSegmentFormatInLinkFormat(targetFormat),\n // Get the semantic format of the source\n ...getSemanticFormat(sourceFormat),\n // The text color of the hyperlink should not be merged and\n // we should always retain the source text color\n ...getHyperlinkTextColor(sourceFormat),\n };\n}\n\nfunction mergeSegmentFormat(\n applyDefaultFormatOption: 'mergeAll' | 'keepSourceEmphasisFormat',\n targetFormat: ContentModelSegmentFormat,\n sourceFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n return applyDefaultFormatOption == 'mergeAll'\n ? { ...targetFormat, ...sourceFormat }\n : {\n ...getFormatWithoutSegmentFormat(sourceFormat),\n ...targetFormat,\n ...getSemanticFormat(sourceFormat),\n };\n}\n\nfunction getSemanticFormat(segmentFormat: ContentModelSegmentFormat): ContentModelSegmentFormat {\n const result: ContentModelSegmentFormat = {};\n\n const { fontWeight, italic, underline } = segmentFormat;\n\n if (fontWeight && fontWeight != 'normal') {\n result.fontWeight = fontWeight;\n }\n if (italic) {\n result.italic = italic;\n }\n if (underline) {\n result.underline = underline;\n }\n\n return result;\n}\n\n/**\n * Segment format can also contain other type of metadata, for example in Images/Hyperlink,\n * we want to preserve these properties when merging format\n */\nfunction getFormatWithoutSegmentFormat(\n sourceFormat: ContentModelSegmentFormat\n): ContentModelSegmentFormat {\n const resultFormat = {\n ...sourceFormat,\n };\n KeysOfSegmentFormat.forEach(key => delete resultFormat[key]);\n return resultFormat;\n}\nfunction getHyperlinkTextColor(sourceFormat: ContentModelHyperLinkFormat) {\n const result: ContentModelHyperLinkFormat = {};\n if (sourceFormat.textColor) {\n result.textColor = sourceFormat.textColor;\n }\n\n return result;\n}\n"]}
|
|
@@ -18,9 +18,22 @@ function setSelectionToBlockGroup(group, isInSelection, start, end) {
|
|
|
18
18
|
if ((0, isGeneralSegment_1.isGeneralSegment)(group) && needToSetSelection(group, isInSelection)) {
|
|
19
19
|
setIsSelected((0, mutate_1.mutateBlock)(group), isInSelection);
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
var blocksToDelete = [];
|
|
22
|
+
group.blocks.forEach(function (block, i) {
|
|
22
23
|
isInSelection = setSelectionToBlock(block, isInSelection, start, end);
|
|
24
|
+
if (block.blockType == 'Paragraph' && block.segments.length == 0 && block.isImplicit) {
|
|
25
|
+
blocksToDelete.push(i);
|
|
26
|
+
}
|
|
23
27
|
});
|
|
28
|
+
var index;
|
|
29
|
+
if (blocksToDelete.length > 0) {
|
|
30
|
+
var mutableGroup = (0, mutate_1.mutateBlock)(group);
|
|
31
|
+
while ((index = blocksToDelete.pop()) !== undefined) {
|
|
32
|
+
if (index >= 0) {
|
|
33
|
+
mutableGroup.blocks.splice(index, 1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
24
37
|
return isInSelection;
|
|
25
38
|
});
|
|
26
39
|
}
|
|
@@ -51,10 +64,13 @@ function setSelectionToBlock(block, isInSelection, start, end) {
|
|
|
51
64
|
return setSelectionToSegment(block, segment, isInSelection, segmentsToDelete_1, start, end, i);
|
|
52
65
|
});
|
|
53
66
|
});
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
if (segmentsToDelete_1.length > 0) {
|
|
68
|
+
var mutablePara = (0, mutate_1.mutateBlock)(block);
|
|
69
|
+
var index = void 0;
|
|
70
|
+
while ((index = segmentsToDelete_1.pop()) !== undefined) {
|
|
71
|
+
if (index >= 0) {
|
|
72
|
+
mutablePara.segments.splice(index, 1);
|
|
73
|
+
}
|
|
58
74
|
}
|
|
59
75
|
}
|
|
60
76
|
return isInSelection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/selection/setSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { isGeneralSegment } from '../typeCheck/isGeneralSegment';\nimport { mutateBlock, mutateSegment } from '../common/mutate';\nimport type {\n MutableType,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelParagraph,\n ReadonlyContentModelSegment,\n ReadonlyContentModelTable,\n ReadonlySelectable,\n ShallowMutableSelectable,\n TableCellCoordinate,\n} from 'roosterjs-content-model-types';\n\n/**\n * Set selection into Content Model. If the Content Model already has selection, existing selection will be overwritten by the new one.\n * @param group The root level group of Content Model\n * @param start The start selected element. If not passed, existing selection of content model will be cleared\n * @param end The end selected element. If not passed, only the start element will be selected. If passed, all elements between start and end elements will be selected\n */\nexport function setSelection(\n group: ReadonlyContentModelBlockGroup,\n start?: ReadonlySelectable,\n end?: ReadonlySelectable\n) {\n setSelectionToBlockGroup(group, false /*isInSelection*/, start || null, end || null);\n}\n\nfunction setSelectionToBlockGroup(\n group: ReadonlyContentModelBlockGroup,\n isInSelection: boolean,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null\n): boolean {\n return handleSelection(isInSelection, group, start, end, isInSelection => {\n if (isGeneralSegment(group) && needToSetSelection(group, isInSelection)) {\n setIsSelected(mutateBlock(group), isInSelection);\n }\n\n group.blocks.forEach(block => {\n isInSelection = setSelectionToBlock(block, isInSelection, start, end);\n });\n\n return isInSelection;\n });\n}\n\nfunction setSelectionToBlock(\n block: ReadonlyContentModelBlock,\n isInSelection: boolean,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null\n) {\n switch (block.blockType) {\n case 'BlockGroup':\n return setSelectionToBlockGroup(block, isInSelection, start, end);\n\n case 'Table':\n return setSelectionToTable(block, isInSelection, start, end);\n\n case 'Divider':\n case 'Entity':\n return handleSelection(isInSelection, block, start, end, isInSelection => {\n if (needToSetSelection(block, isInSelection)) {\n const mutableBlock = mutateBlock(block);\n\n if (isInSelection) {\n mutableBlock.isSelected = true;\n } else {\n delete mutableBlock.isSelected;\n }\n }\n\n return isInSelection;\n });\n\n case 'Paragraph':\n const segmentsToDelete: number[] = [];\n\n block.segments.forEach((segment, i) => {\n isInSelection = handleSelection(\n isInSelection,\n segment,\n start,\n end,\n isInSelection => {\n return setSelectionToSegment(\n block,\n segment,\n isInSelection,\n segmentsToDelete,\n start,\n end,\n i\n );\n }\n );\n });\n\n let index: number | undefined;\n\n while ((index = segmentsToDelete.pop()) !== undefined) {\n if (index >= 0) {\n mutateBlock(block).segments.splice(index, 1);\n }\n }\n\n return isInSelection;\n\n default:\n return isInSelection;\n }\n}\n\nfunction setSelectionToTable(\n table: ReadonlyContentModelTable,\n isInSelection: boolean,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null\n): boolean {\n const first = findCell(table, start);\n const last = end ? findCell(table, end) : first;\n\n if (!isInSelection) {\n for (let row = 0; row < table.rows.length; row++) {\n const currentRow = table.rows[row];\n for (let col = 0; col < currentRow.cells.length; col++) {\n const currentCell = table.rows[row].cells[col];\n const isSelected =\n row >= first.row && row <= last.row && col >= first.col && col <= last.col;\n\n if (needToSetSelection(currentCell, isSelected)) {\n setIsSelected(mutateBlock(currentCell), isSelected);\n }\n\n if (!isSelected) {\n setSelectionToBlockGroup(currentCell, false /*isInSelection*/, start, end);\n }\n }\n }\n } else {\n table.rows.forEach(row =>\n row.cells.forEach(cell => {\n const wasInSelection = isInSelection;\n\n isInSelection = setSelectionToBlockGroup(cell, isInSelection, start, end);\n\n if (wasInSelection && isInSelection) {\n mutateBlock(cell).isSelected = true;\n }\n })\n );\n }\n\n return isInSelection;\n}\n\nfunction findCell(\n table: ReadonlyContentModelTable,\n cell: ReadonlySelectable | null\n): TableCellCoordinate {\n let col = -1;\n const row = cell\n ? table.rows.findIndex(\n row => (col = (row.cells as ReadonlyArray<ReadonlySelectable>).indexOf(cell)) >= 0\n )\n : -1;\n\n return { row, col };\n}\n\nfunction setSelectionToSegment(\n paragraph: ReadonlyContentModelParagraph,\n segment: ReadonlyContentModelSegment,\n isInSelection: boolean,\n segmentsToDelete: number[],\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null,\n i: number\n) {\n switch (segment.segmentType) {\n case 'SelectionMarker':\n if (!isInSelection || (segment != start && segment != end)) {\n // Delete the selection marker when\n // 1. It is not in selection any more. Or\n // 2. It is in middle of selection, so no need to have it\n segmentsToDelete.push(i);\n }\n return isInSelection;\n\n case 'General':\n internalSetSelectionToSegment(paragraph, segment, isInSelection);\n\n return segment != start && segment != end\n ? setSelectionToBlockGroup(segment, isInSelection, start, end)\n : isInSelection;\n\n case 'Image':\n const isSelectedAsImageSelection = start == segment && (!end || end == segment);\n\n internalSetSelectionToSegment(\n paragraph,\n segment,\n isInSelection,\n !segment.isSelectedAsImageSelection != !isSelectedAsImageSelection\n ? image => (image.isSelectedAsImageSelection = isSelectedAsImageSelection)\n : undefined\n );\n\n return isInSelection;\n default:\n internalSetSelectionToSegment(paragraph, segment, isInSelection);\n return isInSelection;\n }\n}\n\nfunction internalSetSelectionToSegment<T extends ReadonlyContentModelSegment>(\n paragraph: ReadonlyContentModelParagraph,\n segment: T,\n isInSelection: boolean,\n additionAction?: (segment: MutableType<T>) => void\n) {\n if (additionAction || needToSetSelection(segment, isInSelection)) {\n mutateSegment(paragraph, segment, mutableSegment => {\n setIsSelected(mutableSegment, isInSelection);\n additionAction?.(mutableSegment);\n });\n }\n}\n\nfunction needToSetSelection(selectable: ReadonlySelectable, isSelected: boolean) {\n return !selectable.isSelected != !isSelected;\n}\n\nfunction setIsSelected(selectable: ShallowMutableSelectable, value: boolean) {\n if (value) {\n selectable.isSelected = true;\n } else {\n delete selectable.isSelected;\n }\n\n return value;\n}\n\nfunction handleSelection(\n isInSelection: boolean,\n model: ReadonlyContentModelBlockGroup | ReadonlyContentModelBlock | ReadonlyContentModelSegment,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null,\n callback: (isInSelection: boolean) => boolean\n) {\n isInSelection = isInSelection || model == start;\n isInSelection = callback(isInSelection);\n return isInSelection && !!end && model != end;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"setSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/selection/setSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { isGeneralSegment } from '../typeCheck/isGeneralSegment';\nimport { mutateBlock, mutateSegment } from '../common/mutate';\nimport type {\n MutableType,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelParagraph,\n ReadonlyContentModelSegment,\n ReadonlyContentModelTable,\n ReadonlySelectable,\n ShallowMutableSelectable,\n TableCellCoordinate,\n} from 'roosterjs-content-model-types';\n\n/**\n * Set selection into Content Model. If the Content Model already has selection, existing selection will be overwritten by the new one.\n * @param group The root level group of Content Model\n * @param start The start selected element. If not passed, existing selection of content model will be cleared\n * @param end The end selected element. If not passed, only the start element will be selected. If passed, all elements between start and end elements will be selected\n */\nexport function setSelection(\n group: ReadonlyContentModelBlockGroup,\n start?: ReadonlySelectable,\n end?: ReadonlySelectable\n) {\n setSelectionToBlockGroup(group, false /*isInSelection*/, start || null, end || null);\n}\n\nfunction setSelectionToBlockGroup(\n group: ReadonlyContentModelBlockGroup,\n isInSelection: boolean,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null\n): boolean {\n return handleSelection(isInSelection, group, start, end, isInSelection => {\n if (isGeneralSegment(group) && needToSetSelection(group, isInSelection)) {\n setIsSelected(mutateBlock(group), isInSelection);\n }\n\n const blocksToDelete: number[] = [];\n\n group.blocks.forEach((block, i) => {\n isInSelection = setSelectionToBlock(block, isInSelection, start, end);\n\n if (block.blockType == 'Paragraph' && block.segments.length == 0 && block.isImplicit) {\n blocksToDelete.push(i);\n }\n });\n\n let index: number | undefined;\n\n if (blocksToDelete.length > 0) {\n const mutableGroup = mutateBlock(group);\n\n while ((index = blocksToDelete.pop()) !== undefined) {\n if (index >= 0) {\n mutableGroup.blocks.splice(index, 1);\n }\n }\n }\n\n return isInSelection;\n });\n}\n\nfunction setSelectionToBlock(\n block: ReadonlyContentModelBlock,\n isInSelection: boolean,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null\n) {\n switch (block.blockType) {\n case 'BlockGroup':\n return setSelectionToBlockGroup(block, isInSelection, start, end);\n\n case 'Table':\n return setSelectionToTable(block, isInSelection, start, end);\n\n case 'Divider':\n case 'Entity':\n return handleSelection(isInSelection, block, start, end, isInSelection => {\n if (needToSetSelection(block, isInSelection)) {\n const mutableBlock = mutateBlock(block);\n\n if (isInSelection) {\n mutableBlock.isSelected = true;\n } else {\n delete mutableBlock.isSelected;\n }\n }\n\n return isInSelection;\n });\n\n case 'Paragraph':\n const segmentsToDelete: number[] = [];\n\n block.segments.forEach((segment, i) => {\n isInSelection = handleSelection(\n isInSelection,\n segment,\n start,\n end,\n isInSelection => {\n return setSelectionToSegment(\n block,\n segment,\n isInSelection,\n segmentsToDelete,\n start,\n end,\n i\n );\n }\n );\n });\n\n if (segmentsToDelete.length > 0) {\n const mutablePara = mutateBlock(block);\n\n let index: number | undefined;\n\n while ((index = segmentsToDelete.pop()) !== undefined) {\n if (index >= 0) {\n mutablePara.segments.splice(index, 1);\n }\n }\n }\n\n return isInSelection;\n\n default:\n return isInSelection;\n }\n}\n\nfunction setSelectionToTable(\n table: ReadonlyContentModelTable,\n isInSelection: boolean,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null\n): boolean {\n const first = findCell(table, start);\n const last = end ? findCell(table, end) : first;\n\n if (!isInSelection) {\n for (let row = 0; row < table.rows.length; row++) {\n const currentRow = table.rows[row];\n for (let col = 0; col < currentRow.cells.length; col++) {\n const currentCell = table.rows[row].cells[col];\n const isSelected =\n row >= first.row && row <= last.row && col >= first.col && col <= last.col;\n\n if (needToSetSelection(currentCell, isSelected)) {\n setIsSelected(mutateBlock(currentCell), isSelected);\n }\n\n if (!isSelected) {\n setSelectionToBlockGroup(currentCell, false /*isInSelection*/, start, end);\n }\n }\n }\n } else {\n table.rows.forEach(row =>\n row.cells.forEach(cell => {\n const wasInSelection = isInSelection;\n\n isInSelection = setSelectionToBlockGroup(cell, isInSelection, start, end);\n\n if (wasInSelection && isInSelection) {\n mutateBlock(cell).isSelected = true;\n }\n })\n );\n }\n\n return isInSelection;\n}\n\nfunction findCell(\n table: ReadonlyContentModelTable,\n cell: ReadonlySelectable | null\n): TableCellCoordinate {\n let col = -1;\n const row = cell\n ? table.rows.findIndex(\n row => (col = (row.cells as ReadonlyArray<ReadonlySelectable>).indexOf(cell)) >= 0\n )\n : -1;\n\n return { row, col };\n}\n\nfunction setSelectionToSegment(\n paragraph: ReadonlyContentModelParagraph,\n segment: ReadonlyContentModelSegment,\n isInSelection: boolean,\n segmentsToDelete: number[],\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null,\n i: number\n) {\n switch (segment.segmentType) {\n case 'SelectionMarker':\n if (!isInSelection || (segment != start && segment != end)) {\n // Delete the selection marker when\n // 1. It is not in selection any more. Or\n // 2. It is in middle of selection, so no need to have it\n segmentsToDelete.push(i);\n }\n return isInSelection;\n\n case 'General':\n internalSetSelectionToSegment(paragraph, segment, isInSelection);\n\n return segment != start && segment != end\n ? setSelectionToBlockGroup(segment, isInSelection, start, end)\n : isInSelection;\n\n case 'Image':\n const isSelectedAsImageSelection = start == segment && (!end || end == segment);\n\n internalSetSelectionToSegment(\n paragraph,\n segment,\n isInSelection,\n !segment.isSelectedAsImageSelection != !isSelectedAsImageSelection\n ? image => (image.isSelectedAsImageSelection = isSelectedAsImageSelection)\n : undefined\n );\n\n return isInSelection;\n default:\n internalSetSelectionToSegment(paragraph, segment, isInSelection);\n return isInSelection;\n }\n}\n\nfunction internalSetSelectionToSegment<T extends ReadonlyContentModelSegment>(\n paragraph: ReadonlyContentModelParagraph,\n segment: T,\n isInSelection: boolean,\n additionAction?: (segment: MutableType<T>) => void\n) {\n if (additionAction || needToSetSelection(segment, isInSelection)) {\n mutateSegment(paragraph, segment, mutableSegment => {\n setIsSelected(mutableSegment, isInSelection);\n additionAction?.(mutableSegment);\n });\n }\n}\n\nfunction needToSetSelection(selectable: ReadonlySelectable, isSelected: boolean) {\n return !selectable.isSelected != !isSelected;\n}\n\nfunction setIsSelected(selectable: ShallowMutableSelectable, value: boolean) {\n if (value) {\n selectable.isSelected = true;\n } else {\n delete selectable.isSelected;\n }\n\n return value;\n}\n\nfunction handleSelection(\n isInSelection: boolean,\n model: ReadonlyContentModelBlockGroup | ReadonlyContentModelBlock | ReadonlyContentModelSegment,\n start: ReadonlySelectable | null,\n end: ReadonlySelectable | null,\n callback: (isInSelection: boolean) => boolean\n) {\n isInSelection = isInSelection || model == start;\n isInSelection = callback(isInSelection);\n return isInSelection && !!end && model != end;\n}\n"]}
|
|
@@ -11,6 +11,7 @@ var handleBlockGroupChildren = function (doc, parent, group, context) {
|
|
|
11
11
|
var refNode = parent.firstChild;
|
|
12
12
|
try {
|
|
13
13
|
group.blocks.forEach(function (childBlock, index) {
|
|
14
|
+
var _a;
|
|
14
15
|
// When process list, we need a node stack.
|
|
15
16
|
// When there are two continuous lists, they should share the same stack
|
|
16
17
|
// so that list items with same type/threadId can be merged into the same list element
|
|
@@ -21,6 +22,9 @@ var handleBlockGroupChildren = function (doc, parent, group, context) {
|
|
|
21
22
|
listFormat.nodeStack = [];
|
|
22
23
|
}
|
|
23
24
|
refNode = context.modelHandlers.block(doc, parent, childBlock, context, refNode);
|
|
25
|
+
if (childBlock.blockType == 'Entity') {
|
|
26
|
+
(_a = context.domIndexer) === null || _a === void 0 ? void 0 : _a.onBlockEntity(childBlock, group);
|
|
27
|
+
}
|
|
24
28
|
});
|
|
25
29
|
// Remove all rest node if any since they don't appear in content model
|
|
26
30
|
while (refNode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleBlockGroupChildren.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACI,IAAM,wBAAwB,GAAgD,UACjF,GAAa,EACb,MAAY,EACZ,KAA6B,EAC7B,OAA0B;;IAElB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;IAC/B,IAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,IAAI,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC;IAE7C,IAAI;QACA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,UAAU,EAAE,KAAK
|
|
1
|
+
{"version":3,"file":"handleBlockGroupChildren.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACI,IAAM,wBAAwB,GAAgD,UACjF,GAAa,EACb,MAAY,EACZ,KAA6B,EAC7B,OAA0B;;IAElB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;IAC/B,IAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,IAAI,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC;IAE7C,IAAI;QACA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,UAAU,EAAE,KAAK;;YACnC,2CAA2C;YAC3C,wEAAwE;YACxE,sFAAsF;YACtF,+FAA+F;YAC/F,IACI,KAAK,IAAI,CAAC;gBACV,UAAU,CAAC,SAAS,IAAI,YAAY;gBACpC,UAAU,CAAC,cAAc,IAAI,UAAU,EACzC;gBACE,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;aAC7B;YAED,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAEjF,IAAI,UAAU,CAAC,SAAS,IAAI,QAAQ,EAAE;gBAClC,MAAA,OAAO,CAAC,UAAU,0CAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aACxD;QACL,CAAC,CAAC,CAAC;QAEH,uEAAuE;QACvE,OAAO,OAAO,EAAE;YACZ,IAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;YAEjC,MAAA,OAAO,CAAC,UAAU,0CAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC;SAClB;KACJ;YAAS;QACN,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;KACpC;AACL,CAAC,CAAC;AAzCW,QAAA,wBAAwB,4BAyCnC","sourcesContent":["import type {\n ContentModelBlockGroup,\n ContentModelHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBlockGroupChildren: ContentModelHandler<ContentModelBlockGroup> = (\n doc: Document,\n parent: Node,\n group: ContentModelBlockGroup,\n context: ModelToDomContext\n) => {\n const { listFormat } = context;\n const nodeStack = listFormat.nodeStack;\n let refNode: Node | null = parent.firstChild;\n\n try {\n group.blocks.forEach((childBlock, index) => {\n // When process list, we need a node stack.\n // When there are two continuous lists, they should share the same stack\n // so that list items with same type/threadId can be merged into the same list element\n // In other cases, clear the stack so that two separate lists won't share the same list element\n if (\n index == 0 ||\n childBlock.blockType != 'BlockGroup' ||\n childBlock.blockGroupType != 'ListItem'\n ) {\n listFormat.nodeStack = [];\n }\n\n refNode = context.modelHandlers.block(doc, parent, childBlock, context, refNode);\n\n if (childBlock.blockType == 'Entity') {\n context.domIndexer?.onBlockEntity(childBlock, group);\n }\n });\n\n // Remove all rest node if any since they don't appear in content model\n while (refNode) {\n const next = refNode.nextSibling;\n\n refNode.parentNode?.removeChild(refNode);\n refNode = next;\n }\n } finally {\n listFormat.nodeStack = nodeStack;\n }\n};\n"]}
|
|
@@ -47,7 +47,15 @@ var handleEntitySegment = function (doc, parent, entityModel, context, newSegmen
|
|
|
47
47
|
(0, applyFormat_1.applyFormat)(wrapper, context.formatAppliers.entity, entityFormat, context);
|
|
48
48
|
if (context.addDelimiterForEntity && entityFormat.isReadonly) {
|
|
49
49
|
var _b = (0, tslib_1.__read)((0, entityUtils_1.addDelimiters)(doc, wrapper, getSegmentFormat(context), context), 2), after = _b[0], before = _b[1];
|
|
50
|
-
|
|
50
|
+
if (newSegments) {
|
|
51
|
+
newSegments.push(after, before);
|
|
52
|
+
if (after.firstChild) {
|
|
53
|
+
newSegments.push(after.firstChild);
|
|
54
|
+
}
|
|
55
|
+
if (before.firstChild) {
|
|
56
|
+
newSegments.push(before.firstChild);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
51
59
|
context.regularSelection.current.segment = after;
|
|
52
60
|
}
|
|
53
61
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleEntity.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts"],"names":[],"mappings":";;;;AAAA,0DAA2D;AAC3D,oDAAmD;AACnD,8DAA6D;AAC7D,wEAAuE;AACvE,4CAA2C;AAS3C,IAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAExD;;GAEG;AACI,IAAM,iBAAiB,GAAiD,UAC3E,GAAG,EACH,MAAM,EACN,WAAW,EACX,OAAO,EACP,OAAO;;IAEC,IAAA,YAAY,GAAc,WAAW,aAAzB,EAAE,OAAO,GAAK,WAAW,QAAhB,CAAiB;IAE9C,IAAA,yBAAW,EAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAE3E,IAAM,oBAAoB,GACtB,OAAO,CAAC,qBAAqB;QAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,cAAc;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC;IAClC,IAAM,WAAW,GAAG,MAAA,OAAO,CAAC,aAAa,0CAAE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACpF,IAAM,cAAc,GAAG,WAAW,IAAI,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,aAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9F,OAAO,GAAG,IAAA,uCAAkB,EAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAE9D,IAAI,oBAAoB,EAAE;QACtB,IAAI,CAAC,WAAW,EAAE;YACd,IAAM,OAAO,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;SAC/C;QACD,IAAA,2BAAa,EAAC,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KACnE;IAED,MAAA,OAAO,CAAC,aAAa,+CAArB,OAAO,EAAiB,WAAW,EAAE,OAAO,CAAC,CAAC;IAE9C,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AA/BW,QAAA,iBAAiB,qBA+B5B;AAEF;;GAEG;AACI,IAAM,mBAAmB,GAAmD,UAC/E,GAAG,EACH,MAAM,EACN,WAAW,EACX,OAAO,EACP,WAAW;;IAEH,IAAA,YAAY,GAAsB,WAAW,aAAjC,EAAE,OAAO,GAAa,WAAW,QAAxB,EAAE,MAAM,GAAK,WAAW,OAAhB,CAAiB;IAEtD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAE3B,IAAI,IAAA,6BAAa,EAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAClC,IAAM,IAAI,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAExC,IAAA,yBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;KACtE;IAED,IAAA,yBAAW,EAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAE3E,IAAI,OAAO,CAAC,qBAAqB,IAAI,YAAY,CAAC,UAAU,EAAE;QACpD,IAAA,KAAA,oBAAkB,IAAA,2BAAa,EAAC,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAA,EAAhF,KAAK,QAAA,EAAE,MAAM,QAAmE,CAAC;QAExF,WAAW,
|
|
1
|
+
{"version":3,"file":"handleEntity.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { addDelimiters } from '../../domUtils/entityUtils';\nimport { applyFormat } from '../utils/applyFormat';\nimport { getObjectKeys } from '../../domUtils/getObjectKeys';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport { wrap } from '../../domUtils/wrap';\nimport type {\n ContentModelBlockHandler,\n ContentModelEntity,\n ContentModelSegmentFormat,\n ContentModelSegmentHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\nconst BlockEntityContainer = '_E_EBlockEntityContainer';\n\n/**\n * @internal\n */\nexport const handleEntityBlock: ContentModelBlockHandler<ContentModelEntity> = (\n doc,\n parent,\n entityModel,\n context,\n refNode\n) => {\n const { entityFormat, wrapper } = entityModel;\n\n applyFormat(wrapper, context.formatAppliers.entity, entityFormat, context);\n\n const isCursorAroundEntity =\n context.addDelimiterForEntity &&\n wrapper.style.display == 'inline-block' &&\n wrapper.style.width == '100%';\n const isContained = wrapper.parentElement?.classList.contains(BlockEntityContainer);\n const elementToReuse = isContained && isCursorAroundEntity ? wrapper.parentElement! : wrapper;\n\n refNode = reuseCachedElement(parent, elementToReuse, refNode);\n\n if (isCursorAroundEntity) {\n if (!isContained) {\n const element = wrap(doc, wrapper, 'div');\n element.classList.add(BlockEntityContainer);\n }\n addDelimiters(doc, wrapper, getSegmentFormat(context), context);\n }\n\n context.onNodeCreated?.(entityModel, wrapper);\n\n return refNode;\n};\n\n/**\n * @internal\n */\nexport const handleEntitySegment: ContentModelSegmentHandler<ContentModelEntity> = (\n doc,\n parent,\n entityModel,\n context,\n newSegments\n) => {\n const { entityFormat, wrapper, format } = entityModel;\n\n parent.appendChild(wrapper);\n newSegments?.push(wrapper);\n\n if (getObjectKeys(format).length > 0) {\n const span = wrap(doc, wrapper, 'span');\n\n applyFormat(span, context.formatAppliers.segment, format, context);\n }\n\n applyFormat(wrapper, context.formatAppliers.entity, entityFormat, context);\n\n if (context.addDelimiterForEntity && entityFormat.isReadonly) {\n const [after, before] = addDelimiters(doc, wrapper, getSegmentFormat(context), context);\n\n if (newSegments) {\n newSegments.push(after, before);\n\n if (after.firstChild) {\n newSegments.push(after.firstChild);\n }\n\n if (before.firstChild) {\n newSegments.push(before.firstChild);\n }\n }\n\n context.regularSelection.current.segment = after;\n } else {\n context.regularSelection.current.segment = wrapper;\n }\n\n context.onNodeCreated?.(entityModel, wrapper);\n};\nfunction getSegmentFormat(\n context: ModelToDomContext\n): ContentModelSegmentFormat | null | undefined {\n return {\n ...context.pendingFormat?.format,\n ...context.defaultFormat,\n };\n}\n"]}
|
|
@@ -11,6 +11,7 @@ define(["require", "exports", "../processors/brProcessor", "../processors/childP
|
|
|
11
11
|
blockquote: knownElementProcessor_1.knownElementProcessor,
|
|
12
12
|
br: brProcessor_1.brProcessor,
|
|
13
13
|
code: codeProcessor_1.codeProcessor,
|
|
14
|
+
del: knownElementProcessor_1.knownElementProcessor,
|
|
14
15
|
div: knownElementProcessor_1.knownElementProcessor,
|
|
15
16
|
em: knownElementProcessor_1.knownElementProcessor,
|
|
16
17
|
font: fontProcessor_1.fontProcessor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultProcessors.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts"],"names":[],"mappings":";;;;IAsBA;;OAEG;IACU,QAAA,mBAAmB,GAAwB;QACpD,CAAC,EAAE,6BAAa;QAChB,CAAC,EAAE,6CAAqB;QACxB,UAAU,EAAE,6CAAqB;QACjC,EAAE,EAAE,yBAAW;QACf,IAAI,EAAE,6BAAa;QACnB,GAAG,EAAE,6CAAqB;QAC1B,EAAE,EAAE,6CAAqB;QACzB,IAAI,EAAE,6BAAa;QACnB,CAAC,EAAE,6CAAqB;QACxB,GAAG,EAAE,+BAAc;QACnB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,yBAAW;QACf,EAAE,EAAE,qCAAiB;QACrB,EAAE,EAAE,6BAAa;QACjB,CAAC,EAAE,uBAAU;QACb,GAAG,EAAE,mDAAwB;QAC7B,CAAC,EAAE,6CAAqB;QACxB,OAAO,EAAE,6CAAqB;QAC9B,IAAI,EAAE,6CAAqB;QAC3B,MAAM,EAAE,6CAAqB;QAC7B,MAAM,EAAE,6CAAqB;QAC7B,GAAG,EAAE,6CAAqB;QAC1B,GAAG,EAAE,6CAAqB;QAC1B,KAAK,EAAE,+BAAc;QACrB,CAAC,EAAE,6CAAqB;QACxB,EAAE,EAAE,6BAAa;QAEjB,GAAG,EAAE,mCAAgB;QACrB,OAAO,EAAE,6BAAa;QACtB,iBAAiB,EAAE,uDAA0B;QAC7C,OAAO,EAAE,mCAAgB;QACzB,MAAM,EAAE,iCAAe;QACvB,KAAK,EAAE,+BAAc;QACrB,SAAS,EAAE,uCAAkB;KAChC,CAAC","sourcesContent":["import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\nimport { textWithSelectionProcessor } from '../processors/textWithSelectionProcessor';\nimport type { ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n div: knownElementProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n section: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n textWithSelection: textWithSelectionProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"defaultProcessors.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts"],"names":[],"mappings":";;;;IAsBA;;OAEG;IACU,QAAA,mBAAmB,GAAwB;QACpD,CAAC,EAAE,6BAAa;QAChB,CAAC,EAAE,6CAAqB;QACxB,UAAU,EAAE,6CAAqB;QACjC,EAAE,EAAE,yBAAW;QACf,IAAI,EAAE,6BAAa;QACnB,GAAG,EAAE,6CAAqB;QAC1B,GAAG,EAAE,6CAAqB;QAC1B,EAAE,EAAE,6CAAqB;QACzB,IAAI,EAAE,6BAAa;QACnB,CAAC,EAAE,6CAAqB;QACxB,GAAG,EAAE,+BAAc;QACnB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,mCAAgB;QACpB,EAAE,EAAE,yBAAW;QACf,EAAE,EAAE,qCAAiB;QACrB,EAAE,EAAE,6BAAa;QACjB,CAAC,EAAE,uBAAU;QACb,GAAG,EAAE,mDAAwB;QAC7B,CAAC,EAAE,6CAAqB;QACxB,OAAO,EAAE,6CAAqB;QAC9B,IAAI,EAAE,6CAAqB;QAC3B,MAAM,EAAE,6CAAqB;QAC7B,MAAM,EAAE,6CAAqB;QAC7B,GAAG,EAAE,6CAAqB;QAC1B,GAAG,EAAE,6CAAqB;QAC1B,KAAK,EAAE,+BAAc;QACrB,CAAC,EAAE,6CAAqB;QACxB,EAAE,EAAE,6BAAa;QAEjB,GAAG,EAAE,mCAAgB;QACrB,OAAO,EAAE,6BAAa;QACtB,iBAAiB,EAAE,uDAA0B;QAC7C,OAAO,EAAE,mCAAgB;QACzB,MAAM,EAAE,iCAAe;QACvB,KAAK,EAAE,+BAAc;QACrB,SAAS,EAAE,uCAAkB;KAChC,CAAC","sourcesContent":["import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\nimport { textWithSelectionProcessor } from '../processors/textWithSelectionProcessor';\nimport type { ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n del: knownElementProcessor,\n div: knownElementProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n section: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n textWithSelection: textWithSelectionProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n"]}
|
|
@@ -11,8 +11,9 @@ define(["require", "exports", "../../domUtils/isElementOfType"], function (requi
|
|
|
11
11
|
var listFormat = context.listFormat;
|
|
12
12
|
var threadItemCounts = listFormat.threadItemCounts, levels = listFormat.levels;
|
|
13
13
|
var depth = levels.length;
|
|
14
|
-
if (
|
|
15
|
-
|
|
14
|
+
if (element.start == 1 ||
|
|
15
|
+
(typeof threadItemCounts[depth] === 'number' &&
|
|
16
|
+
element.start != threadItemCounts[depth] + 1)) {
|
|
16
17
|
format.startNumberOverride = element.start;
|
|
17
18
|
}
|
|
18
19
|
threadItemCounts[depth] = element.start - 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listLevelThreadFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts"],"names":[],"mappings":";;;;IAIA;;OAEG;IACU,QAAA,4BAA4B,GAAoC;QACzE,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;YAC5B,IAAI,IAAA,iCAAe,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACxB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;gBACvB,IAAA,gBAAgB,GAAa,UAAU,iBAAvB,EAAE,MAAM,GAAK,UAAU,OAAf,CAAgB;gBAChD,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;gBAE5B,IACI,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,QAAQ;
|
|
1
|
+
{"version":3,"file":"listLevelThreadFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/list/listLevelThreadFormatHandler.ts"],"names":[],"mappings":";;;;IAIA;;OAEG;IACU,QAAA,4BAA4B,GAAoC;QACzE,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;YAC5B,IAAI,IAAA,iCAAe,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACxB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;gBACvB,IAAA,gBAAgB,GAAa,UAAU,iBAAvB,EAAE,MAAM,GAAK,UAAU,OAAf,CAAgB;gBAChD,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;gBAE5B,IACI,OAAO,CAAC,KAAK,IAAI,CAAC;oBAClB,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,QAAQ;wBACxC,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACnD;oBACE,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC,KAAK,CAAC;iBAC9C;gBAED,gBAAgB,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;aAC/C;QACL,CAAC;QACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;YAExB,IAAA,KACA,OAAO,WADoC,EAA7B,gBAAgB,sBAAA,EAAE,SAAS,eAAE,CACnC;YAEZ,+FAA+F;YAC/F,0FAA0F;YAC1F,IAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAEnC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAA,iCAAe,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBAC9C,IAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;gBAE/C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;oBACjC,gBAAgB,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;iBAC7C;qBAAM,IAAI,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE;oBACnD,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC/B;gBAED,gBAAgB,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aAC/C;QACL,CAAC;KACJ,CAAC","sourcesContent":["import { isElementOfType } from '../../domUtils/isElementOfType';\nimport type { FormatHandler } from '../FormatHandler';\nimport type { ListThreadFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const listLevelThreadFormatHandler: FormatHandler<ListThreadFormat> = {\n parse: (format, element, context) => {\n if (isElementOfType(element, 'ol')) {\n const { listFormat } = context;\n const { threadItemCounts, levels } = listFormat;\n const depth = levels.length;\n\n if (\n element.start == 1 ||\n (typeof threadItemCounts[depth] === 'number' &&\n element.start != threadItemCounts[depth] + 1)\n ) {\n format.startNumberOverride = element.start;\n }\n\n threadItemCounts[depth] = element.start - 1;\n }\n },\n apply: (format, element, context) => {\n const {\n listFormat: { threadItemCounts, nodeStack },\n } = context;\n\n // The first one is always the parent of list, and minus another one to convert length to index\n // This format applier needs to be executed after new list level is pushed into node stack\n const depth = nodeStack.length - 2;\n\n if (depth >= 0 && isElementOfType(element, 'ol')) {\n const startNumber = format.startNumberOverride;\n\n if (typeof startNumber === 'number') {\n threadItemCounts[depth] = startNumber - 1;\n } else if (typeof threadItemCounts[depth] != 'number') {\n threadItemCounts[depth] = 0;\n }\n\n threadItemCounts.splice(depth + 1);\n element.start = threadItemCounts[depth] + 1;\n }\n },\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "tslib", "../common/addSegment", "./applyTableFormat", "../creators/createListItem", "../creators/createParagraph", "../creators/createSelectionMarker", "../creators/createTableCell", "./deleteSelection", "../../constants/EmptySegmentFormat", "./getClosestAncestorBlockGroupIndex", "../..//domUtils/getObjectKeys", "../common/mutate", "../common/normalizeContentModel", "./normalizeTable"], function (require, exports, tslib_1, addSegment_1, applyTableFormat_1, createListItem_1, createParagraph_1, createSelectionMarker_1, createTableCell_1, deleteSelection_1, EmptySegmentFormat_1, getClosestAncestorBlockGroupIndex_1, getObjectKeys_1, mutate_1, normalizeContentModel_1, normalizeTable_1) {
|
|
1
|
+
define(["require", "exports", "tslib", "../common/addBlock", "../common/addSegment", "./applyTableFormat", "../creators/createListItem", "../creators/createParagraph", "../creators/createSelectionMarker", "../creators/createTableCell", "./deleteSelection", "../../constants/EmptySegmentFormat", "./getClosestAncestorBlockGroupIndex", "../..//domUtils/getObjectKeys", "../common/mutate", "../common/normalizeContentModel", "./normalizeTable"], function (require, exports, tslib_1, addBlock_1, addSegment_1, applyTableFormat_1, createListItem_1, createParagraph_1, createSelectionMarker_1, createTableCell_1, deleteSelection_1, EmptySegmentFormat_1, getClosestAncestorBlockGroupIndex_1, getObjectKeys_1, mutate_1, normalizeContentModel_1, normalizeTable_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.mergeModel = void 0;
|
|
@@ -15,6 +15,11 @@ define(["require", "exports", "tslib", "../common/addSegment", "./applyTableForm
|
|
|
15
15
|
function mergeModel(target, source, context, options) {
|
|
16
16
|
var _a;
|
|
17
17
|
var insertPosition = (_a = options === null || options === void 0 ? void 0 : options.insertPosition) !== null && _a !== void 0 ? _a : (0, deleteSelection_1.deleteSelection)(target, [], context).insertPoint;
|
|
18
|
+
if (options === null || options === void 0 ? void 0 : options.addParagraphAfterMergedContent) {
|
|
19
|
+
var _b = insertPosition || {}, paragraph = _b.paragraph, marker = _b.marker;
|
|
20
|
+
var newPara = (0, createParagraph_1.createParagraph)(false /* isImplicit */, paragraph === null || paragraph === void 0 ? void 0 : paragraph.format, marker === null || marker === void 0 ? void 0 : marker.format);
|
|
21
|
+
(0, addBlock_1.addBlock)(source, newPara);
|
|
22
|
+
}
|
|
18
23
|
if (insertPosition) {
|
|
19
24
|
if ((options === null || options === void 0 ? void 0 : options.mergeFormat) && options.mergeFormat != 'none') {
|
|
20
25
|
var newFormat = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (target.format || {})), insertPosition.marker.format);
|