(html)
| 179 | } |
| 180 | |
| 181 | function renderEmbeddedMarkdownBlocks(html) { |
| 182 | const template = document.createElement("template"); |
| 183 | template.innerHTML = html; |
| 184 | |
| 185 | const codeBlocks = template.content.querySelectorAll("pre > code"); |
| 186 | codeBlocks.forEach((codeEl) => { |
| 187 | const languageClass = Array.from(codeEl.classList).find((className) => |
| 188 | className.startsWith("language-") |
| 189 | ); |
| 190 | const language = languageClass ? languageClass.slice("language-".length) : ""; |
| 191 | |
| 192 | if (!/^(markdown|md)$/i.test(language)) { |
| 193 | return; |
| 194 | } |
| 195 | |
| 196 | const preview = document.createElement("div"); |
| 197 | preview.className = "embedded-markdown-preview markdown-body"; |
| 198 | preview.innerHTML = renderMarkdown(codeEl.textContent || "", { |
| 199 | renderEmbeddedMarkdown: false, |
| 200 | }); |
| 201 | |
| 202 | const pre = codeEl.parentElement; |
| 203 | if (pre) { |
| 204 | pre.replaceWith(preview); |
| 205 | } |
| 206 | }); |
| 207 | |
| 208 | return template.innerHTML; |
| 209 | } |
| 210 | |
| 211 | function clearReconnectTimer() { |
| 212 | if (reconnectTimer !== null) { |
no test coverage detected