想有自己的博客吗?浏览器支持 MarkDown和语法高亮的最简单示例(使用markdown-it、highlight.js和mermaid)
时间:2022-07-22
本文章向大家介绍想有自己的博客吗?浏览器支持 MarkDown和语法高亮的最简单示例(使用markdown-it、highlight.js和mermaid),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
MarkDown,写作神器,还是有必要掌握一下。写作也是一种很重要的能力,需要长久坚持和锻炼。
写作能力重不重要?语文重不重要?读书重不重要?
我觉得语文和写作能力是所有能力的基础,是重中之重。因为你所有感知和获取的信息的加工整理都离不开语文,你对外界产生的理解和影响也离不来语文。它甚至可能影响你的求职,你的工作,你的人际关系。你对其他信息的感知和获取,机遇的把握等等都离不开它,鲁迅的一只笔杆子抵得上千军万马。
以下为一个最简单的,使浏览器支持MarkDown渲染和语法高亮的示例,可以为以后的个人的markdown博客储备。
后续计划写个专栏,介绍下自己做一个markdown的个人博客网站是多么的简单,写博客就成了往目录里丢md文件这样简单。
使用了流行的markdown-it(MarkDown渲染),highlight.js(语法高亮)和mermaid.js(画流程图、时序图等的js库)组件。
先看一个我的个人博客截图,后续准备开源出来,没使用数据库,只使用md文件和配置文件就完成了所有功能。
所以部署也很简单,不用先建库,建表,直接放到服务器的一个任意目录里运行即可,写博客就是往目录里丢md文件而已。
增加功能,把微信公众号打通,使用自己的公众号发布文章,直接电脑上编译好md文件,往聊天窗口一丢就完成了文章的发布。至于文章分类,文章排序和推荐文章,都是内部搞了个算法自动完成的。且前台如果有新评论或留言,会自动推送到我的公众号里。
附图,测试demo浏览器显示出来的效果:
附个人的markdown博客截图,使用go语言加mardown实现。
附demo的完整的html的使用代码,仅在一个html文件中,可直接用浏览器打开运行看到效果:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>markdown in the browser</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/railscasts.min.css">
<link rel="stylesheet" href="./mytable.css">
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/atom-one-dark.min.css"> -->
<script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.0.0/build/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/10.0.0/markdown-it.min.js"></script>
<script src="https://cdn.bootcss.com/mermaid/8.0.0-rc.8/mermaid.min.js"></script>
<style>
.md_source{
display: none
}
</style>
</head>
<body>
<pre class="md_source">
# Welcome to Yang's Blog!
this is a most simple demo, used markdown-it and highlight.js in the browser to rendering markdown files
## used markdown-it in the browser
> 你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器。
可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
***
Rendered by **markdown-it**.
### 表格demo,欢迎使用Markdown
Name | Age
--------|------
Bob | 27
Alice | 23
### 代码高亮例子
```golang
package main
import "fmt"
func main() {
fmt.Println("hello ")
}
```
# 一级标题
## 二级标题
### 三级标题
### 表格例子 欢迎使用Markdown
| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |
### 链接
[baidu](https://baidu.com)
### 插入图片
![imgs](https://img-blog.csdnimg.cn/2019091813595558.png)
- 项目
- 项目
- 项目
- 列表信息
+ 二级列表
* 三级列表
1. 项目1
2. 项目2
3. 项目3
- [ ] 计划任务
- [x] 完成任务
创建脚注格式类似这样 [^RUNOOB]
> 最外层
> > 第一层嵌套
> > > 第二层嵌套
```mermaid
graph LR
A --- B
B-->C[fa:fa-ban forbidden]
B-->D(fa:fa-spinner);
```
</pre>
<div class="mermaid">
graph LR
A --- B
B-->C[fa:fa-ban forbidden]
B-->D(fa:fa-spinner);
</div>
<div class="md_render">
</div>
<script>
var md;
var defaults = {
html: false, // Enable HTML tags in source
xhtmlOut: false, // Use '/' to close single tags (<br />)
breaks: false, // Convert 'n' in paragraphs into <br>
langPrefix: 'language-', // CSS language prefix for fenced blocks
linkify: true, // autoconvert URL-like texts to links
typographer: true, // Enable smartypants and other sweet transforms
// options below are for demo only
_highlight: true,
_strict: false,
_view: 'html' // html / src / debug
};
const mermaidChart = (code) => {
try {
mermaid.parse(code)
return `<div class="mermaid">${code}</div>`
} catch ({ str, hash }) {
return `<pre>${str}</pre>`
}
}
defaults.highlight = function (str, lang) {
var esc = md.utils.escapeHtml;
console.log(str)
console.log(lang)
if (lang && hljs.getLanguage(lang)) {
try {
return '<pre class="hljs"><code>' +
hljs.highlight(lang, str, true).value +
'</code></pre>';
} catch (__) {}
}else if(lang == 'mermaid'){
return mermaidChart(str)
//return '<pre class="mermaid">' + mermaid.mermaidAPI.render('mermaid', str) + '</pre>';
}else{
return '<pre class="hljs"><code>' + esc(str) + '</code></pre>';
}
};
md = window.markdownit(defaults);
$('.md_render').html(md.render($('.md_source').html()));
mermaid.initialize({startOnLoad:true});
</script>
</body>
</html>
- 如何在Kerberos环境的CDH集群部署Livy
- 如何在Kerberos环境下使用Haproxy实现HiveServer2负载均衡
- Hive与Impala的关键字
- 如何通过Livy的RESTful API接口向非Kerberos环境的CDH集群提交作业
- 如何编译Livy并在非Kerberos环境的CDH集群中安装
- Livy,基于Apache Spark的开源REST服务,加入Cloudera Labs
- 如何在RedHat7上使用Bind搭建DNS服务
- 如何在Redhat7.3的CDH5.14中启用Kerberos
- 如何使用SAML配置Cloudera Manager的身份验证
- 如何使用Shibboleth搭建IDP服务并集成OpenLDAP
- 如何获取Hive正在执行或者已结束的的MapReduce作业的SQL语句
- 如何启用Oozie的HA
- 如何使用Oozie API接口向Kerberos环境的CDH集群提交Spark作业
- 如何降级Cloudera Manager和CDH
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用C++跟你聊聊“桥接模式”
- 用C++跟你聊聊“单例模式”,类的“计划生育”
- django-HttpResponse,render,redirect
- django-ForeignKey,OneToOneField,ManyToManyField
- 用C++跟你聊聊“备忘录模式” ,如果能重来,我要···
- 数据库(一)--通过django创建数据库表并填充数据
- springmvc之异常处理中ExceptionHanderExceptionResolver
- 【tensorflow2.0】损失函数losses
- 如何在python文件中测试sql语句
- 用C++跟你聊聊“适配器模式”
- 【tensorflow2.0】评价指标metrics
- 数据库(二)--多对多相关操作
- 【tensorflow2.0】优化器optimizers
- 数据库(三)--多对多,一对多,一对一
- 【tensorflow2.0】回调函数callbacks