Skip to content

Commit c4aa81a

Browse files
authored
Fix text to bullet issue (#3210)
* Fix text to bullet issue * fix test
1 parent 2fac28c commit c4aa81a

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ export const handleList: ContentModelBlockHandler<ContentModelListItem> = (
5252
const lastParent = nodeStack[nodeStack.length - 1].node;
5353

5454
lastParent.insertBefore(newList, layer == 0 ? refNode : null);
55-
nodeStack.push({ node: newList, ...level });
55+
nodeStack.push({
56+
node: newList,
57+
listType: level.listType,
58+
format: { ...level.format },
59+
dataset: { ...level.dataset },
60+
});
5661

5762
applyFormat(newList, context.formatAppliers.listLevelThread, level.format, context);
5863

packages/roosterjs-content-model-dom/test/modelToDom/handlers/handleListTest.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { createListLevel } from '../../../lib/modelApi/creators/createListLevel'
55
import { createModelToDomContext } from '../../../lib/modelToDom/context/createModelToDomContext';
66
import { expectHtml } from '../../testUtils';
77
import { handleList } from '../../../lib/modelToDom/handlers/handleList';
8+
import { listLevelMetadataApplier } from 'roosterjs-content-model-core/lib/override/listMetadataApplier';
89
import { NumberingListType } from '../../../lib/constants/NumberingListType';
910

1011
describe('handleList without format handlers', () => {
@@ -510,4 +511,66 @@ describe('handleList handles metadata', () => {
510511
expect(onNodeCreated.calls.argsFor(1)[0]).toBe(listLevel1);
511512
expect(onNodeCreated.calls.argsFor(1)[1]).toBe(parent.querySelector('ul'));
512513
});
514+
515+
it('List style type is changed by metadata, node stack should not be changed', () => {
516+
const listItem: ContentModelListItem = {
517+
blockType: 'BlockGroup',
518+
blockGroupType: 'ListItem',
519+
blocks: [
520+
{
521+
blockType: 'Paragraph',
522+
segments: [
523+
{
524+
segmentType: 'Br',
525+
format: {},
526+
},
527+
],
528+
format: {},
529+
},
530+
],
531+
levels: [
532+
{
533+
listType: 'UL',
534+
format: {},
535+
dataset: {
536+
editingInfo: '{"applyListStyleFromLevel":true}',
537+
},
538+
},
539+
],
540+
formatHolder: {
541+
segmentType: 'SelectionMarker',
542+
isSelected: false,
543+
format: {},
544+
},
545+
format: {},
546+
};
547+
548+
context = createModelToDomContext(undefined, {
549+
metadataAppliers: {
550+
listLevel: listLevelMetadataApplier,
551+
},
552+
});
553+
554+
handleList(document, parent, listItem, context, null);
555+
556+
expectHtml(parent.outerHTML, [
557+
'<div><ul data-editing-info="{&quot;applyListStyleFromLevel&quot;:true}" style="list-style-type: disc;"></ul></div>',
558+
'<div><ul style="list-style-type: disc;" data-editing-info="{&quot;applyListStyleFromLevel&quot;:true}"></ul></div>',
559+
]);
560+
expect(context.listFormat).toEqual({
561+
threadItemCounts: [],
562+
nodeStack: [
563+
{
564+
node: parent,
565+
},
566+
{
567+
node: parent.firstChild as HTMLElement,
568+
listType: 'UL',
569+
dataset: { editingInfo: '{"applyListStyleFromLevel":true}' },
570+
format: {},
571+
},
572+
],
573+
});
574+
expect(listItem.levels[0].format.listStyleType).toBe('disc');
575+
});
513576
});

0 commit comments

Comments
 (0)