文件路径:/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