UNPKG

hackmd-to-html-cli

Version:

A node.js CLI tool for converting HackMD markdown to HTML.

727 lines (614 loc) 18.5 kB
<!DOCTYPE html> <html{{lang}}{{dir}}> <head> {{metas}} <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <meta property="og:type" content="article"> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" /> <style> @import url(https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,500,500i|Source+Code+Pro:300,400,500|Source+Sans+Pro:300,300i,400,400i,600,600i|Source+Serif+Pro&subset=latin-ext); html[lang^=ja] main { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica Neue, Helvetica, Roboto, Arial, Hiragino Kaku Gothic Pro, ヒラギノ角ゴ Pro W3, Osaka, Meiryo, メイリオ, MS Gothic, MS ゴシック, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol } html[lang=zh-tw] main { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica Neue, Helvetica, Roboto, Arial, PingFang TC, Microsoft JhengHei, 微軟正黑, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol } html[lang=zh-cn] main { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica Neue, Helvetica, Roboto, Arial, PingFang SC, Microsoft YaHei, 微软雅黑, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol } :root { --body-background: #f0f0f0; --hr-color: #e7e7e7; } body { background-color: var(--body-background); box-sizing: border-box; margin: 0px; padding: 10px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.42857143; color: #333; } h1 { font-size: 2rem; margin: 2rem 0; border-bottom: 1px solid #eee; } h2 { font-size: 1.5rem; margin: 1.5rem 0; border-bottom: 1px solid #eee; } h3 { font-size: 1.3rem; margin: 1.3rem 0; } h4 { font-size: 1.2rem; margin: 1.2rem 0; } h5 { font-size: 1.1rem; margin: 1.1rem 0; } h6 { font-size: 1rem; margin: 1rem 0; } ul, ol, li, section, summary, p { font-size: 1rem; } ul, ol { padding-left: 2rem; } li.task-list-item{ list-style-type: none; } input.task-list-item-checkbox{ float: left; margin: .31em 0 .2em -1.3em !important; vertical-align: middle; } main { background-color: #fff; box-sizing: border-box; border-radius: 20px; margin: 0px auto; max-width: 900px; padding: 10px; width: 100%; } a { color: #337ab7; text-decoration: none; } a:focus, a:hover { color: #23527c; text-decoration: underline; } a:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .success { background-color: #dff0d8; border-color: #d6e9c6; color: #3c763d; } .info { background-color: #d9edf7; border-color: #bce8f1; color: #31708f; } .warning { background-color: #fcf8e3; border-color: #faebcc; color: #8a6d3b; } .danger { background-color: #f2dede; border-color: #ebccd1; color: #a94442; } .success, .info, .warning, .danger { border: 1px solid transparent; border-radius: 4px; margin-bottom: 20px; padding: 15px; } hr{ margin: 24px 0px; height: .25rem; background-color: var(--hr-color); border: 0px; } img { max-width: 100%; } blockquote { border-left: 0.25rem solid #ddd; color: #777; font-size: 1rem; margin: 0px; padding: 0 1rem; } span.blockquoteX{ display: block; font-size: 80%; } span.blockquoteX::before{ content: '\2014 \00A0'; } span.material-symbols-outlined { font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 48; font-size: 1rem; margin: 3px 5px; vertical-align: bottom; } span.material-symbols-outlined-fill{ font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 48; } table { border-spacing: 0; border-collapse: collapse; display: block; margin-top: 0; margin-bottom: 16px; overflow: auto; width: 100%; word-break: keep-all; } table tr { border-top: 1px solid #ddd; padding: 6px 13px; } table th { border: 1px solid #ddd; padding: 6px 13px; } table td { border: 1px solid #ddd; padding: 6px 13px; } table tr:nth-child(2n) { background-color: var(--body-background); } pre { /* padding: 16px; */ overflow: auto; line-height: 1.45; } code{ padding: .2em; margin: 0; font-size: 85%; border-radius: 3px; background-color: var(--body-background); font-family: Menlo,Monaco,Consolas,"Courier New",monospace; } dl dt{ padding: 0; margin-top: 16px; font-style: italic; font-weight: bold; } /*block code*/ pre code { display: block; padding: 16px; overflow-x: auto; } code table tr:nth-child(2n) { background-color: transparent; } code.break { white-space: break-spaces; word-break: break-all; } code.language-mermaid, code.language-sequence, code.language-graphviz, code.language-vega, code.language-abc, code.language-flow { background-color: transparent; text-align: center; } mark { padding: 0.2rem; background-color: #fff1a7; } /*---embed---*/ embed{ overflow: auto; width: 100%; height: 400px; } iframe{ margin: 10px auto; width: 100%; height: 480px; } .gist table tr{ border: 0px; } .gist table td{ border: 0px; } /*---hljs---*/ .hljs-comment { color: #708090; } .hljs-punctuation, .hljs-tag { color: #444a } .hljs-tag .hljs-attr, .hljs-tag .hljs-name { color: #444 } .hljs-attribute, .hljs-doctag, .hljs-keyword, .hljs-meta .hljs-keyword, .hljs-name, .hljs-selector-tag { color: #07a; } .hljs-deletion, .hljs-number, .hljs-quote, .hljs-selector-class, .hljs-selector-id, .hljs-template-tag, .hljs-type { color: #690 } .hljs-section, .hljs-title { color: #dd4a68; } .hljs-link, .hljs-operator, .hljs-regexp, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-symbol, .hljs-template-variable, .hljs-variable { color: #bc6060 } .hljs-literal { color: #78a960 } .hljs-addition, .hljs-built_in, .hljs-bullet, .hljs-code { color: #397300 } .hljs-meta { color: #1f7199 } .hljs-meta, .hljs-string { color: #690 } .hljs-emphasis { font-style: italic } .hljs-strong { font-weight: 700 } table.hljs-ln, .hljs-ln td, .hljs-ln tr { /*override table style*/ border: 0px; padding: 0px; margin: 0px; } .hljs-ln-numbers { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; color: #afafaf !important; border-right: 3px solid #6ce26c !important; } .hljs-ln-n { box-sizing: content-box; vertical-align: top; padding: 0px 8px 0px 0px; min-width: 20px; text-align: right; } .hljs-ln-code { padding: 0px 0px 0px 16px !important; } /*---fretboard---*/ .fretTitle { color: #555; text-align: center; font-family: "Helvetica Neue", sans-serif; line-height: 1.4; font-size: 1.6em; margin: 10px 0 10px 0; font-weight: 900; padding: 5px; } .fretContainer section { padding: 20px; } .fretContainer .content { max-width: 960px; margin: auto; } .fretContainer, .fretContainer_h { outline: solid 1px #eeee; margin: 0 auto; padding: 15px 0; } .fretContainer { width: 320px; } .fretContainer_h { max-width: 400px; } .svg_wrapper { background-color: #fff; position: relative; height: 0; } .svg_wrapper svg.fretboard_bg { position: absolute; top: 0; left: 0; z-index: 0; } .svg_wrapper .cells { width: 100%; height: 100%; position: absolute; top: 0; left: 0; } .svg_wrapper.v4 { padding-top: 91.6666666667%; } .svg_wrapper.v5 { padding-top: 106.9444444444%; } .svg_wrapper.v7 { padding-top: 137.5%; } .svg_wrapper.v9 { padding-top: 168.0555555556%; } .svg_wrapper.v12 { padding-top: 213.8888888889%; } .svg_wrapper.v15 { padding-top: 259.7222222222%; } .svg_wrapper.v .cell svg { width: 12.5%; float: left; display: block; } .svg_wrapper.v4 .cell svg { height: 16.6666666667%; } .svg_wrapper.v5 .cell svg { height: 14.2857142857%; } .svg_wrapper.v7 .cell svg { height: 11.1111111111%; } .svg_wrapper.v9 .cell svg { height: 9.0909090909%; } .svg_wrapper.v12 .cell svg { height: 7.1428571429%; } .svg_wrapper.v15 .cell svg { height: 5.8823529412%; } .svg_wrapper.h5 { padding-top: 85.7142857143%; } .svg_wrapper.h6 { padding-top: 75%; } .svg_wrapper.h7 { padding-top: 72.7272727273%; } .svg_wrapper.h .cell svg { height: 12.5%; float: left; display: block; z-index: 2; } .svg_wrapper.h5 .cell svg { width: 14.2857142857%; } .svg_wrapper.h6 .cell svg { width: 12.5%; } .svg_wrapper.h7 .cell svg { width: 12.1212121212%; } /* Fretboard Element Styles */ .cell.dot .fretb_dot { fill: #27a9e1; } .cell.dot.root .fretb_dot { fill: #f05a28; } .cell.dot.faded .fretb_dot { opacity: .25; } .fretboard_bg .fret_bg rect { fill: #fff; } .fretboard_bg .frets rect { fill: #ddd; } .fretboard_bg .nut rect { fill: #6e6e6e; } .fretboard_bg .strings rect { fill: #6e6e6e; } .svg_wrapper.noNut .fretboard_bg .nut rect { fill: none; } @media all and (max-width: 400px) { .fretContainer_h { max-width: 288px; } } @media all and (max-width: 420px) { .fretContainer { max-width: 220px; } } </style> </head> <body> <main> {{main}} </main> <!--highlight--> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/highlightjs-line-numbers.js@2.8.0/dist/highlightjs-line-numbers.min.js"></script> <!--mermaid--> <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script> <!--sequence--> <script src="https://bramp.github.io/js-sequence-diagrams/js/webfont.js"></script> <script src="https://bramp.github.io/js-sequence-diagrams/js/snap.svg-min.js"></script> <script src="https://bramp.github.io/js-sequence-diagrams/js/underscore-min.js"></script> <script src="https://bramp.github.io/js-sequence-diagrams/js/sequence-diagram-min.js"></script> <!--flowchart--> <script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.min.js"></script> <script src="https://flowchart.js.org/flowchart-latest.js"></script> <!--Graphviz powered by viz.js--> <script src="https://cdnjs.cloudflare.com/ajax/libs/viz.js/2.1.2/viz.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/viz.js/2.1.2/full.render.js"></script> <!--Vega-Lite--> <script src="https://cdn.jsdelivr.net/npm/vega@5"></script> <script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script> <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script> <!--Abc--> <script src="https://cdnjs.cloudflare.com/ajax/libs/abcjs/6.1.9/abcjs-basic-min.min.js"></script> <script> mermaid.init({ noteMargin: 10 }, document.querySelectorAll(".language-mermaid")); mermaid.initialize({ startOnLoad: true }); document.querySelectorAll(".language-sequence")?.forEach((dom, i) => { dom.id = `sequence-${i}`; let content = dom.textContent; dom.textContent = ""; Diagram.parse(content).drawSVG(dom.id, { theme: 'simple' }); }); document.querySelectorAll(".language-flow")?.forEach((dom, i) => { dom.id = `flow-${i}`; let content = dom.textContent; dom.textContent = ""; flowchart.parse(content).drawSVG(dom.id); }); var viz = new Viz(); document.querySelectorAll(".language-graphviz")?.forEach((dom, i) => { dom.id = `graphviz-${i}`; let content = dom.textContent; dom.textContent = ""; viz.renderSVGElement(content) .then(function (element) { dom.appendChild(element); }) .catch(error => { // Create a new Viz instance (@see Caveats page for more info) viz = new Viz(); // Possibly display the error console.error(error); }); }); document.querySelectorAll(".language-abc")?.forEach((dom, i) => { dom.id = `abc-${i}`; let content = dom.textContent; ABCJS.renderAbc(dom.id, content); }); document.querySelectorAll(".language-vega")?.forEach((dom, i) => { dom.id = `vega-${i}`; let content = dom.textContent; let spec = {}; try { spec = JSON.parse(content); } catch (e) { spec = {}; } dom.textContent = ""; vegaEmbed(`#${dom.id}`, spec); }); // https://github.com/highlightjs/highlight.js/ // modified from: https://github.com/wcoder/highlightjs-line-numbers.js/ let lastLine = 0; const BREAK_LINE_REGEXP = /\r\n|\r|\n/g; function getLinesCount(text) { return (text.trim().match(BREAK_LINE_REGEXP) || []).length; } document.querySelectorAll('code')?.forEach((dom) => { let lang = dom.className.match(/language\-([^=]*)?(=?)(\+?[0-9]*)$/); if (lang === null) return; if (lang[1] === '!') { dom.classList.add("break"); return; } else { hljs.highlightElement(dom); } if (lang[2]) { let line; if (lang[3] === '') { line = 1; } else if (lang[3] === '+') { line = lastLine + 1; } else { line = Number(lang[3]); } lastLine = line + getLinesCount(dom.innerText); hljs.lineNumbersBlock(dom, { startFrom: line }); } }); // automatically set title const h1 = document.querySelector("h1"); if (!document.title && h1 && h1.textContent) { document.title = h1.textContent; } </script> </body> </html>