(() => { const timeouts = new WeakMap(); marked.use({ async: false, breaks: false, gfm: true, pedantic: false, walkTokens: (token) => { const { type, lang, text } = token; if (type !== "code") { return; } let code; if (lang && hljs.getLanguage(lang)) { code = hljs.highlight(text.trim(), { language: lang, }); } else { code = hljs.highlightAuto(text.trim()); } token.escaped = true; token.lang = code.language || "plaintext"; token.text = code.value; }, renderer: { code(code) { const header = `
${escapeHtml(code.lang)}
`; return `
${header}${code.text}
`; }, link(link) { return `${escapeHtml(link.text || link.href)}`; }, }, }); document.body.addEventListener("click", (event) => { const button = event.target, header = button.closest(".pre-header"), pre = header?.closest("pre"), code = pre?.querySelector("code"); if (!code) { return; } clearTimeout(timeouts.get(pre)); navigator.clipboard.writeText(code.textContent.trim()); button.classList.add("copied"); timeouts.set( pre, setTimeout(() => { button.classList.remove("copied"); }, 1000), ); }); window.render = (markdown) => { return marked.parse(markdown); }; })();