import "./prism.js"; customElements.define( "rendered-md", class extends HTMLElement { constructor() { super(); } connectedCallback() { this.runMarked(); } attributeChangedCallback(name, oldValue, newValue) { this.runMarked(); } runMarked() { const renderer = new marked.Renderer(); const data = this.getAttribute("markdowndata"); renderer.heading = (text, level) => { if (level === 1) { return `

${text}

`; } const escapedText = text .trim() .toLowerCase() .replace(/[^\w]+/g, "-"); return ` ${text} # `; }; marked.setOptions({ renderer: renderer, highlight: function (code, lang) { const grammer = Prism.languages[lang]; if (!grammer) { console.warn(`Unable to find prism highlight for '${lang}'`); return; } console.info("Found", lang); return Prism.highlight(code, grammer, lang); }, }); this.innerHTML = marked.parse(data); console.log("Markdown rendering complete!"); } static get observedAttributes() { return ["markdowndata"]; } } );