5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-07-03 13:46:09 +00:00
panel/app/javascript/packs/deserializer.js
2020-03-21 12:46:48 -03:00

56 lines
1.5 KiB
JavaScript

// From https://github.com/ProseMirror/prosemirror-markdown/blob/master/src/from_markdown.js
import { MarkdownParser } from 'prosemirror-markdown'
import markdownit from 'markdown-it'
import markdownitMark from 'markdown-it-mark'
import schema from './schema.js'
export default new MarkdownParser(
schema,
markdownit('commonmark', { html: false })
.use(markdownitMark)
.enable('strikethrough'),
{
blockquote: { block: 'blockquote' },
paragraph: { block: 'paragraph' },
list_item: { block: 'list_item' },
bullet_list: { block: 'bullet_list' },
ordered_list: {
block: 'ordered_list',
getAttrs: tok => ({ order: +tok.attrGet('start') || 1 }),
},
heading: {
block: 'heading',
getAttrs: tok => ({ level: +tok.tag.slice(1) }),
},
code_block: { block: 'code_block' },
fence: {
block: 'code_block',
getAttrs: tok => ({ params: tok.info || '' }),
},
hr: { node: 'horizontal_rule' },
image: {
node: 'image',
getAttrs: tok => ({
src: tok.attrGet('src'),
title: tok.attrGet('title') || null,
alt: (tok.children[0] && tok.children[0].content) || null,
}),
},
hardbreak: { node: 'hard_break' },
em: { mark: 'em' },
strong: { mark: 'strong' },
mark: { mark: 'mark' },
s: { mark: 'strikethrough' },
link: {
mark: 'link',
getAttrs: tok => ({
href: tok.attrGet('href'),
title: tok.attrGet('title') || null,
}),
},
code_inline: { mark: 'code' },
},
)