From 5d3c365d97c34d69e0d36df96444d159fcbf2d92 Mon Sep 17 00:00:00 2001 From: Flrande <1978616327@qq.com> Date: Mon, 3 Mar 2025 08:52:38 +0000 Subject: [PATCH] fix(editor): format text in code block (#10575) Closes: [BS-2724](https://linear.app/affine-design/issue/BS-2724/code-block%E9%87%8C%E4%B8%8D%E5%BA%94%E8%AF%A5%E6%98%BE%E7%A4%BAtoolbar) --- .../src/highlight/affine-code-unit.ts | 29 ++++++++++++++++--- .../rich-text/inline/presets/nodes/index.ts | 1 + blocksuite/tests-legacy/e2e/code/crud.spec.ts | 16 +++++++++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/blocksuite/affine/block-code/src/highlight/affine-code-unit.ts b/blocksuite/affine/block-code/src/highlight/affine-code-unit.ts index 11e805bb39..33942b63ac 100644 --- a/blocksuite/affine/block-code/src/highlight/affine-code-unit.ts +++ b/blocksuite/affine/block-code/src/highlight/affine-code-unit.ts @@ -1,3 +1,4 @@ +import { affineTextStyles } from '@blocksuite/affine-components/rich-text'; import type { AffineTextAttributes } from '@blocksuite/affine-shared/types'; import { ShadowlessElement } from '@blocksuite/block-std'; import { type DeltaInsert, ZERO_WIDTH_SPACE } from '@blocksuite/inline'; @@ -16,7 +17,25 @@ export class AffineCodeUnit extends ShadowlessElement { } override render() { - const plainContent = html``; + } + + let style = this.delta.attributes + ? affineTextStyles(this.delta.attributes) + : {}; + if (this.delta.attributes?.code) { + style = { + ...style, + 'font-size': 'calc(var(--affine-font-base) - 3px)', + padding: '0px 4px 2px', + }; + } + + const plainContent = html``; @@ -53,12 +72,13 @@ export class AffineCodeUnit extends ShadowlessElement { endOffset - token.offset ); - return html``; + >`; } else { const firstToken = includedTokens[0]; const lastToken = includedTokens[includedTokens.length - 1]; @@ -79,6 +99,7 @@ export class AffineCodeUnit extends ShadowlessElement { .str=${token.content} style=${styleMap({ color: token.color, + ...style, })} >`; }); diff --git a/blocksuite/affine/components/src/rich-text/inline/presets/nodes/index.ts b/blocksuite/affine/components/src/rich-text/inline/presets/nodes/index.ts index fc1e91136a..c316fd4c8a 100644 --- a/blocksuite/affine/components/src/rich-text/inline/presets/nodes/index.ts +++ b/blocksuite/affine/components/src/rich-text/inline/presets/nodes/index.ts @@ -1,3 +1,4 @@ +export { affineTextStyles } from './affine-text.js'; export * from './footnote-node/footnote-config.js'; export { AffineFootnoteNode } from './footnote-node/footnote-node.js'; export { AffineLink, toggleLinkPopup } from './link-node/index.js'; diff --git a/blocksuite/tests-legacy/e2e/code/crud.spec.ts b/blocksuite/tests-legacy/e2e/code/crud.spec.ts index 58a71cccc1..95a633e8d8 100644 --- a/blocksuite/tests-legacy/e2e/code/crud.spec.ts +++ b/blocksuite/tests-legacy/e2e/code/crud.spec.ts @@ -597,7 +597,21 @@ test('format text in code block', async ({ page }, testInfo) => { await type(page, 'https://www.baidu.com'); await pressEnter(page); - expect(await line.innerText()).toBe('const aaa = 1000;'); + const linkLocator = page.locator('[data-block-id="3"] affine-link a'); + expect(await linkLocator.count()).toBe(3); + await expect(linkLocator.nth(0)).toHaveAttribute( + 'href', + 'https://www.baidu.com' + ); + await expect(linkLocator.nth(1)).toHaveAttribute( + 'href', + 'https://www.baidu.com' + ); + await expect(linkLocator.nth(2)).toHaveAttribute( + 'href', + 'https://www.baidu.com' + ); + expect(await getPageSnapshot(page, true)).toMatchSnapshot( `${testInfo.title}_link.json` );