Skip to content

Commit f491c00

Browse files
Merge pull request #5147 from wangeditor-team/fix-text-indent-style
fix(indent menu): 修复了因为设置 fontSize 导致 text-indent 没法对齐的问题
2 parents 75812c3 + a431d46 commit f491c00

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

packages/basic-modules/__tests__/indent/menu/decrease-indent-menu.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ describe('decrease indent menu', () => {
2727
editor.select(startLocation)
2828
expect(menu.isDisabled(editor)).toBeTruthy() // 没有 indent 则 disabled
2929

30-
Transforms.setNodes(editor, { type: 'header1' })
30+
Transforms.setNodes(editor, { type: 'header1', children: [] })
3131
expect(menu.isDisabled(editor)).toBeTruthy() // 没有 indent 则 disabled
3232

3333
editor.insertNode({ type: 'pre', children: [{ type: 'code', children: [{ text: 'var' }] }] })
@@ -41,7 +41,7 @@ describe('decrease indent menu', () => {
4141

4242
it('exec', () => {
4343
editor.select(startLocation)
44-
Transforms.setNodes(editor, { indent: '2em' })
44+
Transforms.setNodes(editor, { type: 'paragraph', indent: '2em', children: [] })
4545

4646
expect(menu.isDisabled(editor)).toBeFalsy() // 有 indent 则取消 disabled
4747

packages/basic-modules/__tests__/indent/menu/increase-indent-menu.test.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ describe('increase indent menu', () => {
2727
editor.select(startLocation)
2828
expect(menu.isDisabled(editor)).toBeFalsy()
2929

30-
Transforms.setNodes(editor, { type: 'header1' })
30+
Transforms.setNodes(editor, { type: 'header1', children: [] })
3131
expect(menu.isDisabled(editor)).toBeFalsy()
3232

3333
editor.insertNode({ type: 'pre', children: [{ type: 'code', children: [{ text: 'var' }] }] })
@@ -44,4 +44,15 @@ describe('increase indent menu', () => {
4444
menu.exec(editor, '')
4545
expect(menu.getValue(editor)).toBe('2em')
4646
})
47+
48+
it('indent value', () => {
49+
editor.insertNode({
50+
type: 'paragraph',
51+
children: [{ fontSize: '18px', text: 'text1' } as any],
52+
})
53+
54+
menu.exec(editor, '')
55+
56+
expect(menu.getValue(editor)).toBe('36px')
57+
})
4758
})

packages/basic-modules/src/modules/indent/menu/IncreaseIndentMenu.ts

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@
33
* @author wangfupeng
44
*/
55

6-
import { Transforms, Element, Editor } from 'slate'
7-
import { IDomEditor, t } from '@wangeditor/core'
6+
import { Transforms, Element, Editor, Text } from 'slate'
7+
import { IDomEditor, t, DomEditor } from '@wangeditor/core'
88
import BaseMenu from './BaseMenu'
99
import { INDENT_RIGHT_SVG } from '../../../constants/icon-svg'
1010
import { IndentElement } from '../custom-types'
11+
import type { FontSizeAndFamilyText } from '../../font-size-family/custom-types'
1112

1213
class IncreaseIndentMenu extends BaseMenu {
1314
readonly title = t('indent.increase')
1415
readonly iconSvg = INDENT_RIGHT_SVG
16+
private DEFAULT_INDENT_VALUE = '2em'
1517

1618
isDisabled(editor: IDomEditor): boolean {
1719
const matchNode = this.getMatchNode(editor)
@@ -26,11 +28,31 @@ class IncreaseIndentMenu extends BaseMenu {
2628
return false
2729
}
2830

31+
private getIndentValue(editor: IDomEditor) {
32+
const matchNode = this.getMatchNode(editor)
33+
34+
if (!matchNode) return this.DEFAULT_INDENT_VALUE
35+
const textChildren = (matchNode as Element).children.filter(Text.isText)
36+
37+
const lastTextNode = textChildren[0] as FontSizeAndFamilyText
38+
39+
if (!lastTextNode || !lastTextNode.fontSize) return this.DEFAULT_INDENT_VALUE
40+
41+
// 如果段落的第一个 Text 节点 设置了 fontSize 样式,indent 值需要根据 fontSize 进行计算
42+
const fontSize = lastTextNode.fontSize
43+
const value = parseInt(lastTextNode.fontSize)
44+
const unit = fontSize.replace(`${value}`, '')
45+
46+
return `${value * 2}${unit}`
47+
}
48+
2949
exec(editor: IDomEditor, value: string | boolean): void {
50+
const indent = this.getIndentValue(editor)
51+
3052
Transforms.setNodes(
3153
editor,
3254
{
33-
indent: `2em`,
55+
indent,
3456
},
3557
{
3658
match: n => Element.isElement(n),

0 commit comments

Comments
 (0)