应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

扩展markdown增加mermaid支持画图

10903人阅读 2020/4/13 22:11 总访问:5182857 评论:0 收藏:0 手机
分类: 前端

我看网上没有什么资料,只有说怎么去用它,没有说怎么才能用它。那就自己慢慢研究在让markdown支持,要自己实现这个必须要看源码,看懂它渲染的逻辑,然后修改源码,其实也挺好的,看懂源码后面自己还想要扩展什么功能也方便!

要想让自己的markdown支持mermaid先要看看mermaid的资料

官网:
https://mermaidjs.github.io/#/

吐槽一下资料是真的不好找

就在首先往下滑,会看到一个Example

点击进去之后就可以看到,html和js资源

吐槽一下这个js文件是真的大,7.1版本的就算是压缩过的也是800多kb啊,高版本的更大,这样加载一个js多影响效率啊

然后分析这个index.html可以发现

其实渲染mermaid只需要一个js,也是牛掰只是真的太特么大了
讲过分析其实它的渲染一个带class=”mermaid”的div即可

感觉渲染还是挺简单的,如果想让markdown支持话,需要自定义语法,然后自定义解析。

然后去分析markdown的源码,看看怎么自定义解析的标签

可以参考流程图和时序图的插入方式!


讲过对源码的分析,发现源码中markedRenderer方法就是对marked的渲染
比如流程图时序图什么的

而且测试的时候发现输入内容的时候!都会执行一遍都会渲染哇!预览效果吧
其实也就是渲染三个点开头的

就是这个方法:l.code = function (e, i, o)

我们根据输出的格式看就知道是解析三个点这种格式的,可以看看输出的效果

I就是标志:这里是flow
E其实就输入的内容!
所以我猜想要支持自定义mermaid格式,是不是在这里加一个解析就行了!

哈哈加上这句话后就真的会生成这样一个div!

哈哈哈,然后就剩下渲染了!不过这个js800多kb也太大了接近1m了….emmmm,这个太影响加载速度了吧

看看画图的效果:

当然渲染过程也是坑多得很…..这里暂时先不说了…搞得太久了


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

扩展ef自动映射需要查询的字段(表达式树Expression),动态构建返回值

Entity Framework 动态构造select表达式比如我们需要返回某些字段会采用如下的写法但是发现每次都去写select如果字段很多不...

扩展mvc实现model直接传递匿名对象

如果我们直接通过model传递匿名对象,是不行滴后台通过model传递一个匿名对象publicActionResultIndex() { returnView(ne...

根据委托和lamdba表达式扩展方法

lamdba表达式ForEach扩展方法:public static void GetForEach<T>(this IEnumerable<T> list, Action<T>...

表达式树+反射扩展EF实现动态排序。List动态排序

我们在显示表格的时候经常会在点击表头的时候实现排序,当然很多前端的框架都实现了当前页的页面排序,直接配置一下就行了...

推荐Visual Studio好用的扩展插件(不定时更新)

嗨咯,大家好。什么是扩展?扩展是可以允许你在 Visual Studio 中进行自定义并增强在其中的体验的附加项,通过添加新功能或...

EF扩展反射实现动态排序+表达式树

现在各种网站上的表格可以通过点击排头来实现排序例如:今天我就来一探究竟,这是怎么实现的呢?具体步骤:我通过写扩展方...

表达式树+反射+扩展方法实现动态排序效果

后台代码如下:方法1:逐个判断 -->缺点:代码重复,体验感差 if(sort.ToLower()=="max") { if(sortway==...

.net Core3.0在Ubuntu 16.04上面的部署(Supervisor+nginx)(扩展docker)

前 言Linux 随着Linux越来越流行,本人一个.net程序员也多次研究linux与.net的相关产品,以及中间件的使用方式。So今天给...

字符串扩展方法

获取字符串的实际长度(按单字节) publicstaticintGetRealLength(thisstringsource) { returnSystem.Text.Encoding.Defau...

验证合法性扩展方法

Email格式是否合法 publicstaticboolIsEmail(thisstringsource) { returnRegex.IsMatch(source,@"^\w+((-\w+)|(\.\...

c扩展方法简单介绍

可以不用继承就可以给一个类增加方法!语法: Public static class 类名 { //你想添加的扩展方法 Public static ...

list扩展方法ForEach原理(where,FirstOrDefault同理!)

//ForEach的原理就是使用循环 //委托使用循环 publicstaticvoidMyForEach<T>(thisList<T>item,Action<T...

特性扩展实体对象验证、枚举验证值是否正确

如果实体属性字段过多,几十,上百个,如果我们每个字段都去判断的话很麻,代码量很大,我们可以采用特性加枚举进行验证:1、...

Mybatis的SQL构建7 小小扩展+springboot

pom.xml的依赖,我是直接在spring.io官方下的,这样避免依赖冲突<!--jdbc--> <dependency> <groupId>o...

nlog扩展官方文档

https://nlog-project.org/2015/06/30/extending-nlog-is-easy.html