53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
|
import { defaultValueCtx, Editor, rootCtx } from '@milkdown/core';
|
||
|
import { html } from 'atomico';
|
||
|
import { listItemBlockComponent, listItemBlockConfig, ListItemBlockConfig, listItemBlockView } from '@milkdown/components/list-item-block'
|
||
|
import { commonmark } from '@milkdown/preset-commonmark';
|
||
|
import { gfm } from '@milkdown/preset-gfm';
|
||
|
import { nord } from '@milkdown/theme-nord'
|
||
|
import { listener, listenerCtx } from '@milkdown/plugin-listener';
|
||
|
import '@milkdown/theme-nord/style.css'
|
||
|
|
||
|
function configureListItem(ctx: Ctx) {
|
||
|
ctx.set(listItemBlockConfig.key, {
|
||
|
renderLabel: (label: string, listType, checked?: boolean) => {
|
||
|
if (checked == null) {
|
||
|
if (listType === 'bullet') {
|
||
|
return html`<span class='label'>•</span>`
|
||
|
}
|
||
|
|
||
|
return html`<span class='label'>${label}</span>`
|
||
|
} else {
|
||
|
return html`<input class='label' type="checkbox" checked=${checked} />`
|
||
|
}
|
||
|
},
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function createEditor(rootId, fieldId, content) {
|
||
|
Editor
|
||
|
.make()
|
||
|
.config(ctx => {
|
||
|
ctx.set(rootCtx, rootId)
|
||
|
ctx.set(defaultValueCtx, content)
|
||
|
|
||
|
const listener = ctx.get(listenerCtx);
|
||
|
listener.markdownUpdated((ctx, markdown, prevMarkdown) => {
|
||
|
if (markdown !== prevMarkdown) {
|
||
|
console.log(markdown);
|
||
|
console.log(fieldId);
|
||
|
document.getElementById(fieldId).value = markdown;
|
||
|
console.log("updated");
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
.config(configureListItem)
|
||
|
.use(commonmark)
|
||
|
.use(gfm)
|
||
|
.use(nord)
|
||
|
.use(listener)
|
||
|
.use(listItemBlockComponent)
|
||
|
.create();
|
||
|
}
|
||
|
|
||
|
window.createEditor = createEditor;
|