2016-11-04 11:04:54 -07:00
|
|
|
/* eslint-disable */
|
|
|
|
/*
|
|
|
|
Based closely on
|
|
|
|
https://github.com/ProseMirror/prosemirror-markdown/blob/master/src/from_markdown.js
|
|
|
|
*/
|
|
|
|
|
2017-03-02 12:02:55 -08:00
|
|
|
import Remark from "remark";
|
|
|
|
const visit = require('unist-util-visit')
|
2016-11-04 11:04:54 -07:00
|
|
|
const {Mark} = require("prosemirror-model")
|
|
|
|
|
2017-03-02 12:02:55 -08:00
|
|
|
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)
|
2016-11-04 11:04:54 -07:00
|
|
|
}
|
|
|
|
|
2017-03-02 12:02:55 -08:00
|
|
|
/***
|
|
|
|
* 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)
|
2016-11-04 11:04:54 -07:00
|
|
|
} else {
|
2017-03-02 12:02:55 -08:00
|
|
|
return schema.node('bullet_list', {}, content)
|
2016-11-04 11:04:54 -07:00
|
|
|
}
|
2017-03-02 12:02:55 -08:00
|
|
|
} 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 })
|
2016-11-04 11:04:54 -07:00
|
|
|
}
|
2017-03-02 12:02:55 -08:00
|
|
|
/***
|
|
|
|
* end block items
|
|
|
|
***/
|
|
|
|
|
|
|
|
// Inline
|
|
|
|
if (node.type === 'text') {
|
|
|
|
console.log('text value', node.value)
|
|
|
|
return schema.text(node.value)
|
2016-11-04 11:04:54 -07:00
|
|
|
}
|
|
|
|
|
2017-03-02 12:02:55 -08:00
|
|
|
return doc
|
2016-11-04 11:04:54 -07:00
|
|
|
}
|
|
|
|
|
2017-03-02 12:02:55 -08:00
|
|
|
const compileMarkdownToProseMirror = (src) => {
|
|
|
|
console.log(src)
|
|
|
|
const mdast = remark.parse(src)
|
|
|
|
console.log(mdast)
|
|
|
|
const doc = processMdastNode(mdast)
|
|
|
|
console.log(doc.content)
|
|
|
|
return doc
|
|
|
|
}
|
2016-11-04 11:04:54 -07:00
|
|
|
|
2017-03-02 12:02:55 -08:00
|
|
|
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
|
|
|
}
|