92 lines
2.3 KiB
JavaScript
Raw Normal View History

/* eslint-disable */
/*
Based closely on
https://github.com/ProseMirror/prosemirror-markdown/blob/master/src/from_markdown.js
*/
import Remark from "remark";
const visit = require('unist-util-visit')
const {Mark} = require("prosemirror-model")
let schema
// Setup Remark.
const remark = new Remark({
commonmark: true,
footnotes: true,
pedantic: true,
});
const processMdastNode = (node) => {
console.log('processMdastNode', node)
if (node.type === 'root') {
const content = node.children.map((childNode) => (
processMdastNode(childNode)
))
return schema.node('doc', {}, content)
}
/***
* Block nodes
***/
if (node.type === 'heading') {
const content = node.children.map((childNode) => (
processMdastNode(childNode)
))
console.log(content)
return schema.node('heading', { level: node.depth }, content)
} else if (node.type === 'paragraph') {
const content = node.children.map((childNode) => (
processMdastNode(childNode)
))
return schema.node('paragraph', {}, content)
} else if (node.type === 'list') {
const content = node.children.map((childNode) => (
processMdastNode(childNode)
))
if (node.ordered) {
return schema.node('ordered_list', { tight: true, order: 1 }, content)
} else {
return schema.node('bullet_list', {}, content)
}
} else if (node.type === 'listItem') {
const content = node.children.map((childNode) => (
processMdastNode(childNode)
))
return schema.node('list_item', {}, content)
} else if (node.type === 'thematicBreak') {
return schema.node('horizontal_rule')
} else if (node.type === 'break') {
return schema.node('hard_break')
} else if (node.type === 'image') {
return schema.node('image', { src: node.url, alt: node.alt })
}
/***
* end block items
***/
// Inline
if (node.type === 'text') {
console.log('text value', node.value)
return schema.text(node.value)
}
return doc
}
const compileMarkdownToProseMirror = (src) => {
console.log(src)
const mdast = remark.parse(src)
console.log(mdast)
const doc = processMdastNode(mdast)
console.log(doc.content)
return doc
}
module.exports = (s, plugins) => {
//console.log(s)
//console.log(s.nodes.code_block.create({ params: { language: 'javascript' } }))
schema = s
return compileMarkdownToProseMirror
2016-11-01 23:31:20 -07:00
}