diff --git a/blocksuite/affine/blocks/block-code/src/clipboard/index.ts b/blocksuite/affine/blocks/block-code/src/clipboard/index.ts deleted file mode 100644 index 0259f9a850..0000000000 --- a/blocksuite/affine/blocks/block-code/src/clipboard/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { deleteTextCommand } from '@blocksuite/affine-inline-preset'; -import { - HtmlAdapter, - pasteMiddleware, - PlainTextAdapter, -} from '@blocksuite/affine-shared/adapters'; -import { - getBlockIndexCommand, - getBlockSelectionsCommand, - getTextSelectionCommand, -} from '@blocksuite/affine-shared/commands'; -import { - type BlockComponent, - Clipboard, - type UIEventHandler, -} from '@blocksuite/block-std'; -import { DisposableGroup } from '@blocksuite/global/disposable'; - -export class CodeClipboardController { - private _clipboard!: Clipboard; - - protected _disposables = new DisposableGroup(); - - protected _init = () => { - this._clipboard.registerAdapter('text/plain', PlainTextAdapter, 90); - this._clipboard.registerAdapter('text/html', HtmlAdapter, 80); - const paste = pasteMiddleware(this._std); - this._clipboard.use(paste); - - this._disposables.add({ - dispose: () => { - this._clipboard.unregisterAdapter('text/plain'); - this._clipboard.unregisterAdapter('text/html'); - this._clipboard.unuse(paste); - }, - }); - }; - - host: BlockComponent; - - onPagePaste: UIEventHandler = ctx => { - const e = ctx.get('clipboardState').raw; - e.preventDefault(); - - this._std.store.captureSync(); - this._std.command - .chain() - .try(cmd => [ - cmd.pipe(getTextSelectionCommand).pipe((ctx, next) => { - const textSelection = ctx.currentTextSelection; - if (!textSelection) return; - const end = textSelection.to ?? textSelection.from; - next({ currentSelectionPath: end.blockId }); - }), - cmd.pipe(getBlockSelectionsCommand).pipe((ctx, next) => { - const currentBlockSelections = ctx.currentBlockSelections; - if (!currentBlockSelections) return; - const blockSelection = currentBlockSelections.at(-1); - if (!blockSelection) return; - next({ currentSelectionPath: blockSelection.blockId }); - }), - ]) - .pipe(getBlockIndexCommand) - .try(cmd => [cmd.pipe(getTextSelectionCommand).pipe(deleteTextCommand)]) - .pipe((ctx, next) => { - if (!ctx.parentBlock) { - return; - } - this._clipboard - .paste( - e, - this._std.store, - ctx.parentBlock.model.id, - ctx.blockIndex ? ctx.blockIndex + 1 : 1 - ) - .catch(console.error); - - return next(); - }) - .run(); - return true; - }; - - private get _std() { - return this.host.std; - } - - constructor(host: BlockComponent) { - this.host = host; - } - - hostConnected() { - if (this._disposables.disposed) { - this._disposables = new DisposableGroup(); - } - if (navigator.clipboard) { - this._clipboard = new Clipboard(this._std); - this.host.handleEvent('paste', this.onPagePaste); - this._init(); - } - } - - hostDisconnected() { - this._disposables.dispose(); - } -} diff --git a/blocksuite/affine/blocks/block-code/src/code-block.ts b/blocksuite/affine/blocks/block-code/src/code-block.ts index ad4370b32a..fc6d4d1646 100644 --- a/blocksuite/affine/blocks/block-code/src/code-block.ts +++ b/blocksuite/affine/blocks/block-code/src/code-block.ts @@ -25,7 +25,6 @@ import { query } from 'lit/decorators.js'; import { classMap } from 'lit/directives/class-map.js'; import { bundledLanguagesInfo, type ThemedToken } from 'shiki'; -import { CodeClipboardController } from './clipboard/index.js'; import { CodeBlockConfigExtension } from './code-block-config.js'; import { CodeBlockInlineManagerExtension } from './code-block-inline.js'; import { CodeBlockHighlighter } from './code-block-service.js'; @@ -36,8 +35,6 @@ export class CodeBlockComponent extends CaptionedBlockComponent private _inlineRangeProvider: InlineRangeProvider | null = null; - clipboardController = new CodeClipboardController(this); - highlightTokens$: Signal = signal([]); languageName$: Signal = computed(() => { @@ -144,8 +141,6 @@ export class CodeBlockComponent extends CaptionedBlockComponent super.connectedCallback(); // set highlight options getter used by "exportToHtml" - this.clipboardController.hostConnected(); - this.disposables.add( effect(() => { this._updateHighlightTokens(); @@ -373,11 +368,6 @@ export class CodeBlockComponent extends CaptionedBlockComponent }); } - override disconnectedCallback() { - super.disconnectedCallback(); - this.clipboardController.hostDisconnected(); - } - override async getUpdateComplete() { const result = await super.getUpdateComplete(); await this._richTextElement?.updateComplete;