Markdown轉HTML
目前,產品中所有前端元件的API文件均由Markdown編寫,之前的處理方式為在Atom中寫好,然後另存為html的方式放到產品的線上樣例庫中,最近越來越覺得這種方式太麻煩,不易於管理。考慮砍掉另存為html的步驟,直接在webstorm中寫文件,然後在執行時動態把markdown編譯成html文件,跟目前的很多線上的Markdown文字編輯器的原理類似。
經過調研,可以後端轉,也可以前端轉。最終,採用前端JS來把Markdown轉換為HTML。採用<a href="https://github.com/showdownjs/showdown">showdown</a>來實現。
從showdown的github主頁上看到過程挺簡單,引入js檔案,然後按照下面的語法轉換即可:
var converter = new showdown.Converter(),
text = '#hello, markdown!',
html = converter.makeHtml(text);
經過驗證,發現預設是不對錶格做轉換的。檢視<a href="http://showdownjs.github.io/demo/">官方DEMO</a>,發現在官方DEMO上一切正常,接著發現原來需要做一些配置項。懶得去一個個看API配置,直接在官方的Demo中加個斷點,通過getOptions
方法拿到DEMO樣例的配置項,結果如下:
//docurl即xxx.md檔案,這裡也可以使用jquery來載入指定url的markdown檔案
require([ "text!" + docUrl ], function(doc) {
var converter = new showdown.Converter({
"omitExtraWLInCodeBlocks":true,
"noHeaderId":false,
"prefixHeaderId":"",
"ghCompatibleHeaderId":true,
"headerLevelStart":1,
"parseImgDimensions":true,
"simplifiedAutoLink":true,
"excludeTrailingPunctuationFromURLs":false,
"literalMidWordUnderscores":true,
"strikethrough":true,
"tables":true,
"tablesHeaderId":false,
"ghCodeBlocks":true,
"tasklists":true,
"smoothLivePreview":true,
"smartIndentationFix":false,
"disableForced4SpacesIndentedSublists":false,
"simpleLineBreaks":false,
"requireSpaceBeforeHeadingText":false,
"ghMentions":false,"extensions":[],"sanitize":false
});
var html = converter.makeHtml(doc);
//接著把html放到DOM上即可
//......
//我這裡是彈出一個側邊欄,在側邊欄上顯示markdown所寫的API內容
Util.slidebar({
body : html,
width : slideWidth || "800px",
afterLoad : function($elem){
//容器的跟節點上加上class,解決markdown轉換為html後樣式不對的問題
$elem.addClass("markdown-body");
$elem.find("table").addClass("table table-bordered table-hover");
}
});
})
通過上述程式碼,能夠正常把markdown轉換為html。但是,發現樣式有問題,表格沒有邊框。從上面也看到了,額外增加了樣式。
最後,把樣式檔案markdown.css
也分享出來。當然,如果想結果跟showdown的DEMO樣例一樣,也可以去把DEMO的樣式扒下來。
.markdown-body {
overflow: hidden;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 14px;
line-height: 1.6;
word-wrap: break-word
}
ol {
list-style: decimal
}
ul {
list-style: square
}
.markdown-body > *:first-child {
margin-top: 0 !important
}
.markdown-body > *:last-child {
margin-bottom: 0 !important
}
.markdown-body a:not([href]) {
color: inherit;
text-decoration: none
}
.markdown-body .absent {
color: #c00
}
.markdown-body .anchor {
position: absolute;
top: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px
}
.markdown-body .anchor:focus {
outline: none
}
.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4
}
.markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle
}
.markdown-body h1:hover .anchor, .markdown-body h2:hover .anchor, .markdown-body h3:hover .anchor, .markdown-body h4:hover .anchor, .markdown-body h5:hover .anchor, .markdown-body h6:hover .anchor {
padding-left: 8px;
margin-left: -30px;
text-decoration: none
}
.markdown-body h1:hover .anchor .octicon-link, .markdown-body h2:hover .anchor .octicon-link, .markdown-body h3:hover .anchor .octicon-link, .markdown-body h4:hover .anchor .octicon-link, .markdown-body h5:hover .anchor .octicon-link, .markdown-body h6:hover .anchor .octicon-link {
display: inline-block
}
.markdown-body h1 tt, .markdown-body h1 code, .markdown-body h2 tt, .markdown-body h2 code, .markdown-body h3 tt, .markdown-body h3 code, .markdown-body h4 tt, .markdown-body h4 code, .markdown-body h5 tt, .markdown-body h5 code, .markdown-body h6 tt, .markdown-body h6 code {
font-size: inherit
}
.markdown-body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee
}
.markdown-body h1 .anchor {
line-height: 1
}
.markdown-body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee
}
.markdown-body h2 .anchor {
line-height: 1
}
.markdown-body h3 {
font-size: 1.5em;
line-height: 1.43
}
.markdown-body h3 .anchor {
line-height: 1.2
}
.markdown-body h4 {
font-size: 1.25em
}
.markdown-body h4 .anchor {
line-height: 1.2
}
.markdown-body h5 {
font-size: 1em
}
.markdown-body h5 .anchor {
line-height: 1.1
}
.markdown-body h6 {
font-size: 1em;
color: #777
}
.markdown-body h6 .anchor {
line-height: 1.1
}
.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body pre {
margin-top: 0;
margin-bottom: 16px
}
.markdown-body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none
}
.markdown-body ul, .markdown-body ol {
padding-left: 2em
}
.markdown-body ul.no-list, .markdown-body ol.no-list {
padding: 0;
list-style-type: none
}
.markdown-body ul ul, .markdown-body ul ol, .markdown-body ol ol, .markdown-body ol ul {
margin-top: 0;
margin-bottom: 0
}
.markdown-body li > p {
margin-top: 16px
}
.markdown-body dl {
padding: 0
}
.markdown-body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold
}
.markdown-body dl dd {
padding: 0 16px;
margin-bottom: 16px
}
.markdown-body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
font-size: 14px;
}
.markdown-body blockquote > :first-child {
margin-top: 0
}
.markdown-body blockquote > :last-child {
margin-bottom: 0
}
.markdown-body .table-bordered>thead>tr>th{
border-bottom-width: 0;
}
/*.markdown-body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all
}
.markdown-body table th {
font-weight: bold
}
.markdown-body table th, .markdown-body table td {
padding: 6px 13px;
border: 1px solid #ddd
}
.markdown-body table tr {
background-color: #fff;
border-top: 1px solid #ccc
}
.markdown-body table tr:nth-child(2n) {
background-color: #f8f8f8
}*/
.markdown-body img {
max-width: 100%;
box-sizing: border-box
}
.markdown-body .emoji {
max-width: none
}
.markdown-body span.frame {
display: block;
overflow: hidden
}
.markdown-body span.frame > span {
display: block;
float: left;
width: auto;
padding: 7px;
margin: 13px 0 0;
overflow: hidden;
border: 1px solid #ddd
}
.markdown-body span.frame span img {
display: block;
float: left
}
.markdown-body span.frame span span {
display: block;
padding: 5px 0 0;
clear: both;
color: #333
}
.markdown-body span.align-center {
display: block;
overflow: hidden;
clear: both
}
.markdown-body span.align-center > span {
display: block;
margin: 13px auto 0;
overflow: hidden;
text-align: center
}
.markdown-body span.align-center span img {
margin: 0 auto;
text-align: center
}
.markdown-body span.align-right {
display: block;
overflow: hidden;
clear: both
}
.markdown-body span.align-right > span {
display: block;
margin: 13px 0 0;
overflow: hidden;
text-align: right
}
.markdown-body span.align-right span img {
margin: 0;
text-align: right
}
.markdown-body span.float-left {
display: block;
float: left;
margin-right: 13px;
overflow: hidden
}
.markdown-body span.float-left span {
margin: 13px 0 0
}
.markdown-body span.float-right {
display: block;
float: right;
margin-left: 13px;
overflow: hidden
}
.markdown-body span.float-right > span {
display: block;
margin: 13px auto 0;
overflow: hidden;
text-align: right
}
.markdown-body code, .markdown-body tt {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0, 0, 0, 0.04);
border-radius: 3px
}
.markdown-body code:before, .markdown-body code:after, .markdown-body tt:before, .markdown-body tt:after {
letter-spacing: -0.2em;
content: "\00a0"
}
.markdown-body code br, .markdown-body tt br {
display: none
}
.markdown-body del code {
text-decoration: inherit
}
.markdown-body pre > code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0
}
.markdown-body .highlight {
margin-bottom: 16px
}
.markdown-body .highlight pre, .markdown-body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px
}
.markdown-body .highlight pre {
margin-bottom: 0;
word-break: normal
}
.markdown-body pre {
word-wrap: normal
}
.markdown-body pre code, .markdown-body pre tt {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0
}
.markdown-body pre code:before, .markdown-body pre code:after, .markdown-body pre tt:before, .markdown-body pre tt:after {
content: normal
}
.markdown-body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb
}
.markdown-body ul {
list-style: disc
}
.markdown-body ul ul, markdown-body ol ul {
list-style: circle
}
相關文章
- Java 實現 markdown轉HtmlJavaHTML
- vue 匯入.md檔案(markdown轉HTML)VueHTML
- 原生 JS 實現 HTML 轉 Markdown,以及其實現邏輯JSHTML
- 推薦一個markdown格式轉html格式的開源JavaScript庫HTMLJavaScript
- 谷歌外掛 HTML-to-Markdown谷歌HTML
- Markdown 利用HTML進行優雅排版HTML
- MarkDown語法教程(轉)
- Markdown常用轉義字元字元
- word轉化為markdown格式
- Python_ipynb 轉為 markdownPython
- 使用【APIDOC】生成JavaWeb的API文件(HTML,MarkDown,PDF)APIJavaWebHTML
- JavaScript實現線上Markdown編輯器、轉換HTML工具-toolfk程式設計師工具網JavaScriptHTML程式設計師
- html轉Excel表格HTMLExcel
- PDF檔案如何轉成markdown格式
- Markdown 繪製 UML 圖 -- PlantUML + Gravizo(轉)
- MarkDown/Html線上轉換(支援程式碼高亮,可複製到微信公眾號、今日頭條)HTML
- HTML標籤 轉 NSAttributedStringHTML
- HTML歷理 LaTeX轉HTML公式編輯器HTML公式
- C# 將PDF文件轉換為Markdown文件C#
- html轉image 儲存到zipHTML
- PDF檔案轉HTML方法HTML
- C#將html轉pdfC#HTML
- html 文字翻轉映象效果HTML
- md檔案批次轉htmlHTML
- Java 將HTML轉為XMLJavaHTMLXML
- Java 將HTML轉為XPSJavaHTML
- Java 將HTML轉為WordJavaHTML
- 將網頁轉換為Markdown的免費線上轉換工具網頁
- 使用 pandoc 將 Markdown 轉換為格式化文件
- Markdown | win10系統MarkEditor轉Sublime Text 3Win10
- html頁面轉PDF的功能HTML
- Java 將Html轉為PDF(二)JavaHTML
- C# 將HTML轉為XMLC#HTMLXML
- 【爬蟲工具】下載部落格轉成Markdown的形式爬蟲
- Java 將Markdown檔案轉換為Word和PDF文件Java
- ? 掘金小冊 markdown 轉換器 將小冊轉為 md 離線閱讀
- Python 將PowerPoint (PPT/PPTX) 轉為HTMLPythonHTML
- 10 個HTML轉為PDF最佳工具HTML
- Java 將Word轉為HTML的方法JavaHTML