mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-17 18:16:15 +08:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { Protocol } from '@toeverything/datasource/db-service';
|
|
import {
|
|
AsyncBlock,
|
|
BaseView,
|
|
BlockEditor,
|
|
HTML2BlockResult,
|
|
} from '@toeverything/framework/virgo';
|
|
import { unescape } from 'html-escaper';
|
|
import {
|
|
Block2HtmlProps,
|
|
commonBlock2HtmlContent,
|
|
} from '../../utils/commonBlockClip';
|
|
import { CodeView } from './CodeView';
|
|
|
|
export class CodeBlock extends BaseView {
|
|
type = Protocol.Block.Type.code;
|
|
public override selectable = true;
|
|
public override editable = true;
|
|
// View = CodeView;
|
|
View = CodeView;
|
|
override async onCreate(block: AsyncBlock): Promise<AsyncBlock> {
|
|
if (!block.getProperty('text')) {
|
|
await block.setProperty('text', {
|
|
value: [{ text: '' }],
|
|
});
|
|
}
|
|
return block;
|
|
}
|
|
|
|
override async html2block({
|
|
element,
|
|
editor,
|
|
}: {
|
|
element: Element;
|
|
editor: BlockEditor;
|
|
}): Promise<HTML2BlockResult> {
|
|
// debugger;
|
|
if (element.tagName === 'CODE') {
|
|
return [
|
|
{
|
|
type: this.type,
|
|
properties: {
|
|
text: {
|
|
value: [
|
|
{
|
|
text: unescape(
|
|
(element as HTMLElement).innerText
|
|
),
|
|
},
|
|
],
|
|
},
|
|
lang:
|
|
element.classList[0] &&
|
|
element.classList[0].substr(9),
|
|
},
|
|
children: [],
|
|
},
|
|
];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
override async block2html(props: Block2HtmlProps) {
|
|
return `<code>${await commonBlock2HtmlContent(props)}<code/>`;
|
|
}
|
|
}
|