文件路徑:/src/service/marked.js
~~~
const marked = require("marked");
const markToc = require("markdown-toc");
const highlight = require("highlight.js");
/**
* Markdown文檔轉換相關的服務
*/
export default class extends think.Service {
/**
* generate toc name
* @param {String} name []
* @return {String} []
*/
generateTocName(name) {
name = name
.trim()
.replace(/\s+/g, "")
.replace(/\)/g, "")
.replace(/[(,]/g, "-")
.toLowerCase();
if (/^[\w-]+$/.test(name)) {
return name;
}
return `toc-${think.md5(name).slice(0, 3)}`;
}
generateToc(content) {
const tocContent = marked(markToc(content).content).replace(
/<a\s+href="#([^"]+)">([^<>]+)<\/a>/g,
(a, b, c) => {
return `<a href="#${this.generateTocName(c)}">${c}</a>`;
}
);
return tocContent;
}
/**
* markdown to html
* @return {} []
*/
markdownToHtml(content, hasToc = false, tocClass = "toc") {
const renderer = new marked.Renderer();
let markedContent = marked(content, {
// breaks: true,
// headerIds: true,
highlight(code) {
return highlight.highlightAuto(code).value;
},
renderer: renderer,
}).replace(/<h(\d)[^<>]*>(.*?)<\/h\1>/g, (a, b, c) => {
if (b | (0 === 2)) {
return `<h${b} id="${this.generateTocName(c)}">${c}</h${b}>`;
}
return `<h${b} id="${this.generateTocName(
c
)}"><a class="anchor" href="#${this.generateTocName(
c
)}"></a>${c}</h${b}>`;
});
if (hasToc) {
const tocContent = this.generateToc(content);
markedContent = markedContent.replace(
/<h(\d)[^<>]*>([^<>]+)<\/h\1>/,
(a, b, c) => {
return `${a}<div class="${tocClass}">${tocContent}</div>`;
}
);
}
return markedContent; //Highlight HTML content
}
}
~~~
### 代碼說明
1、記住要安裝模塊
~~~
cnpm i marked --save
cnpm i markdown-toc --save
cnpm i highlight.js --save
~~~
- 文檔說明
- 服務端開發指南
- 客戶端開發指南
- 請求攔截器
- API接口實例分析
- 頁面文件
- NPM包管理
- 創建NPM包項目
- 課程設計
- 概述
- 內容管理系統項目
- 配置開發環境
- 設計靜態原型
- 快速構建項目
- 構建CMS系統前端界面
- 門戶模塊
- 新聞列表
- API接口規范
- 生成模擬數據
- 顯示新聞列表
- NavigatorPath組件
- ChannelHeader組件
- v-line-clamp指令
- formatDate過濾器
- 新聞詳情頁
- 修改頂部導航菜單
- 實現訪問遠程API
- 擴展功能
- 組件開發
- 服務端項目
- 編寫服務模塊
- 項目配置
- 數據庫
- 創建數據庫腳本
- 配置數據庫
- 創建模擬數據
- 新聞模塊控制器
- 添加邏輯驗證層
- 實現接口
- 書棧模塊
- QA