import {OOElement} from '../oo-element' import {html} from '../../lib/html' import {unsafeHTML} from 'lit-html/lib/unsafe-html' import markdownIt from 'markdown-it' import hljs from 'highlight.js' import weakMap from '../../lib/weak-map' const md = markdownIt({ linkify: true, highlight(str, lang) { if (lang && hljs.getLanguage(lang)) { try { return `
${hljs.highlight(lang, str, true).value}
` } catch (err) { // Empty } } return `
${md.utils.escapeHtml(str)}
` } }) const stateObserver = weakMap() export default class extends OOElement { connectedCallback() { super.connectedCallback() const observer = new MutationObserver(() => { if (this.connected) { this.update() } }) observer.observe(this, {characterData: true, childList: true}) stateObserver.set(this, observer) } disconnectedCallback() { super.disconnectedCallback() const observer = stateObserver.get(this) if (observer) { observer.disconnect() stateObserver.delete(this) } } render() { const markedBody = md.render(this.textContent) return html`
${unsafeHTML(markedBody)}
` } }