diff --git a/packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnParagraph.ts b/packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnParagraph.ts index 2fc802337679..6f3e3570a5d1 100644 --- a/packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnParagraph.ts +++ b/packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnParagraph.ts @@ -102,6 +102,7 @@ export function handleTabOnParagraph( if (markerIndex <= 0) { return false; } + const tabText = paragraph.segments[markerIndex - 1]; const tabSpacesLength = tabSpaces.length; @@ -117,6 +118,8 @@ export function handleTabOnParagraph( } else { return false; } + } else { + return false; } } } diff --git a/packages/roosterjs-content-model-plugins/test/edit/tabUtils/handleTabOnParagraphTest.ts b/packages/roosterjs-content-model-plugins/test/edit/tabUtils/handleTabOnParagraphTest.ts index f770a1961107..a3ca2592b7c0 100644 --- a/packages/roosterjs-content-model-plugins/test/edit/tabUtils/handleTabOnParagraphTest.ts +++ b/packages/roosterjs-content-model-plugins/test/edit/tabUtils/handleTabOnParagraphTest.ts @@ -332,6 +332,49 @@ describe('handleTabOnParagraph', () => { runTest(model, paragraph, rawEvent, true); }); + it('Outdent - collapsed range should return false when only entities exist before the marker', () => { + const model: ContentModelDocument = { + blockGroupType: 'Document', + blocks: [ + { + blockType: 'Paragraph', + segments: [ + { + blockType: 'Entity', + segmentType: 'Entity', + format: {}, + entityFormat: { + id: 'entity-1', + entityType: 'test', + isReadonly: true, + }, + wrapper: document.createElement('span'), + }, + { + segmentType: 'SelectionMarker', + isSelected: true, + format: {}, + }, + { + segmentType: 'Text', + text: 'test', + format: {}, + }, + ], + format: {}, + }, + ], + format: {}, + }; + const paragraph = model.blocks[0] as ContentModelParagraph; + const rawEvent = new KeyboardEvent('keydown', { + key: 'Tab', + shiftKey: true, + }); + + runTest(model, paragraph, rawEvent, false); + }); + it('Indent - expanded range should return true', () => { const model: ContentModelDocument = { blockGroupType: 'Document', diff --git a/packages/roosterjs-content-model-plugins/test/paste/e2e/cmPasteFromPowerPointDesktopTest.ts b/packages/roosterjs-content-model-plugins/test/paste/e2e/cmPasteFromPowerPointDesktopTest.ts index f15041c6d222..9e7b323a0512 100644 --- a/packages/roosterjs-content-model-plugins/test/paste/e2e/cmPasteFromPowerPointDesktopTest.ts +++ b/packages/roosterjs-content-model-plugins/test/paste/e2e/cmPasteFromPowerPointDesktopTest.ts @@ -11,7 +11,6 @@ import { pptClipboardContent3, pptClipboardContent4, } from './htmlTemplates/powerPointClipboardContent'; -import { itChromeOnly } from 'roosterjs-content-model-dom/test/testUtils'; describe('PowerPoint', () => { let editor: IEditor = undefined!; @@ -34,7 +33,10 @@ describe('PowerPoint', () => { document.getElementById('PowerPoint')?.remove(); }); - itChromeOnly('PowerPoint 1', () => { + it('PowerPoint 1', () => { + const fontStyle = document.createElement('span').style; + fontStyle.fontFamily = 'Courier New'; + paste(editor!, pptClipboardContent1, 'normal'); expect(setProcessorF.setProcessor).toHaveBeenCalledTimes(2); @@ -107,7 +109,7 @@ describe('PowerPoint', () => { isSelected: false, segmentType: 'SelectionMarker', format: { - fontFamily: '"Courier New"', + fontFamily: fontStyle.fontFamily, fontSize: '7pt', textColor: 'rgb(0, 0, 0)', },