Files
AFFiNE-Mirror/blocksuite/affine/shared/src/utils/title.ts
2024-12-20 15:38:06 +08:00

33 lines
1.1 KiB
TypeScript

import type { EditorHost } from '@blocksuite/block-std';
import type { InlineEditor } from '@blocksuite/inline';
function getDocTitleByEditorHost(editorHost: EditorHost): HTMLElement | null {
const docViewport = editorHost.closest('.affine-page-viewport');
if (!docViewport) return null;
return docViewport.querySelector('doc-title');
}
export function getDocTitleInlineEditor(
editorHost: EditorHost
): InlineEditor | null {
const docTitle = getDocTitleByEditorHost(editorHost);
if (!docTitle) return null;
const titleRichText = docTitle.querySelector<
HTMLElement & { inlineEditor: InlineEditor }
>('rich-text');
if (!titleRichText || !titleRichText.inlineEditor) return null;
return titleRichText.inlineEditor;
}
export function focusTitle(editorHost: EditorHost, index = Infinity, len = 0) {
const titleInlineEditor = getDocTitleInlineEditor(editorHost);
if (!titleInlineEditor) {
return;
}
if (index > titleInlineEditor.yText.length) {
index = titleInlineEditor.yText.length;
}
titleInlineEditor.setInlineRange({ index, length: len });
}