import * as _ from "lodash"; import { EditorJsDoc, Block, BlockTypes, Header, Paragraph, Image, Link, List, Raw, Warning, Quote, } from "./types/editor.types"; import { header, paragraph, image, link, list, warning, raw, quote } from "./templates/templates"; export const parse = (data: EditorJsDoc): string => { const blocks = data.blocks; let html = `
`; _.forEach(blocks, (block) => { html += parseBlock(block); }); html += "
"; return html; }; function parseBlock(block?: Block): string { if (!block) return ""; switch (block.type) { case BlockTypes.HEADER: { const data = block.data as Header; return header(data.level, data.text); } case BlockTypes.PARAGRAPH: { const data = block.data as Paragraph; return paragraph(data.text); } case BlockTypes.IMAGE: { const data = block.data as Image; return image(data.file.url, data.caption); } case BlockTypes.LINK: { const data = block.data as Link; return link(data.link, data.meta.description); } case BlockTypes.LIST: { const data = block.data as List; return list(data.style, data.items); } case BlockTypes.WARNING: { const data = block.data as Warning; return warning(data.title, data. message); } case BlockTypes.RAW: { const data = block.data as Raw; return raw(data.html); } case BlockTypes.QUOTE: { const data = block.data as Quote; return quote(data.text, data.caption); } default: { return `Unparseable ${JSON.stringify(block.data)}`; } } }