最新要闻
- 【世界独家】全天候显示能掉多少电?iOS 16.4告诉你
- 环球观速讯丨公司回应要求员工扫厕所:这是福利 每月有几十元奖励
- 焦点日报:冲击40亿有望!《流浪地球2》累计票房已超38亿
- 女子情人节翻垃圾桶捡到金链:最后被前主人要回 网友热议
- 观天下!假的!马斯克否认修改算法推荐自己帐号 将追责说谎员工
- 环球微动态丨颠覆性创新 潍柴全球首发大功率SOFC燃料电池:研发花了20亿
- 全球聚焦:北江纺织:拟冲刺上交所IPO上市,预计募资4.22亿元,近年综合毛利率逐年下降
- 【环球速看料】五菱会玩!城市玩乐潮品SUV悦也“小书包”是块屏:可自定义内容
- 天天看点:打造名族品牌!杨元庆:联想核心生产制造还是立足中国
- 全球头条:超越GPS主导国内导航定位 北斗日定位量超3000亿次
- 焦点简讯:努比亚Z50 Ultra保护壳泄漏:后置摄像模组巨大无比
- 全球快看:院士称我国已经具备ChatGPT算力基础 关键在如何爆发
- 全球新消息丨工作至死:日本789万老人还在打零工
- 资讯:菲律宾一飞机早上起飞后失联:近期第二起
- 快播:橙色奶油冰淇淋层蛋糕食谱
- 世界要闻:精装版吉利星越L?领克DX11最新谍照曝光:首上魅族车机
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球关注:tui.editor一款功能强大的markdown编辑器
(相关资料图)
简介
最近在捯饬自己的个人网站,想找一款类似于掘金的markdown编辑器,主要诉求包含实时预览、语法高亮、自动生成目录索引。对比了市面上主流的几款编辑器,最后采用了@toast-ui/editor。选择的主要原因就是开箱即用,内置一些实用的插件,如表格并且支持合并单元格、语法高亮、图形展示、uml
绘制等;支持自定义插件扩展,因为这款编辑器是基于prosemirror
,前身即codemirror
,编辑器本身是偏底层的,提供了丰富的api
供我们自定义开发,这也大大增强了编辑器的灵活性,如果想加一个目录索引,我们完全可以自定义开发一个插件使用。
在初次使用过程中,也遇到一些注意点,本文以vue3
为例,简单介绍@toast-ui/editor
的使用过程。
安装使用
安装
npm install @toast-ui/editor -S
初始化
import Editor from "@toast-ui/editor"import "@toast-ui/editor/dist/toastui-editor.css"import "@toast-ui/editor/dist/i18n/zh-cn";export default { mounted () { const editor = new Editor({ el: this.$refs.editor, language: "zh-CN", initialEditType: "markdown", previewStyle: "vertical", }); } }
通过以上两步,我们就能得到一个简易的编辑器了,如下图所示:
显然我们的目的不仅如此,markdown
编辑器还缺少语法高亮、目录栏,接下来我们看下如何扩展tui
官方插件
官方内置了以下插件:
插件名称 | 用途 |
---|---|
@toast-ui/editor-plugin-chart | 图形渲染 |
@toast-ui/editor-plugin-code-syntax-highlight | 语法高亮 |
@toast-ui/editor-plugin-color-syntax | 文本添加颜色 |
@toast-ui/editor-plugin-table-merged-cell | 合并单元格 |
@toast-ui/editor-plugin-uml | 渲染UML |
接下来我们配置代码语法高亮。
- 安装插件
npm install @toast-ui/editor-plugin-code-syntax-highlight
- 使用
import "prismjs/themes/prism.css";import "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css";import Editor from "@toast-ui/editor";// 支持所有语言语法高亮import codeSyntaxHighlight from "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight-all.js";const editor = new Editor({ // ... plugins: [codeSyntaxHighlight]});
功能拓展
目前编辑器包含了语法高亮,如果需要添加目录索引,可以监听文档编辑的change
事件,获取markdown
文档内容,通过正则表达式解析即可。具体实现如下:
const editor = new Editor({ // ... events: { change: this.handleContentChange.bind(this) },});methods: { handleContentChange () { const mdText = this.editor.mdEditor.getMarkdown() this.parseMdTitle(mdText) }, parseMdTitle (mdText) { // 解析markdown title const pattern = /^(#+)\s+(.+)/mg let result = mdText.match(pattern) if (!result) return const catalogList = result.map((vv, index) => { const levelText = vv.match(/^(#+)/) return { level: levelText[0].length, // 目录级别 index, cls: `heading-${levelText[0].length}`, content: vv.slice(levelText[0].length).trim(), // 内容 } }) this.catalogList = catalogList }}
以上仅仅是一些基础的使用。markdown
基础语法无法满足我们需要时、需要手动修改渲染样式等需求,tui.editor
也提供相应的能力。如需要修改标题的默认渲染样式,我们可以使用customHTMLRenderer
,这一块官方文档较少,可以从源码看出默认书写规则,内置schema
位置详见源码libs\toastmark\src\html\baseConvertors.ts
。
new Editor({ // ... customHTMLRenderer: { heading (node, { entering }) { const spec = { type: entering ? "openTag" : "closeTag", tagName: `h${node.level}`, outerNewLine: true, }; // 给每个header添加class if (entering) spec.attributes = { "class": `heading${node.level}` } return spec } }})
最新3.0
版本的编辑器是基于Prosemirror
,有兴趣的小伙伴可以去看下,功能十分强大,也是level1
级富文本编辑器的典型代表。
编辑器最终效果图如下:
实现源码
<script> import Editor from "@toast-ui/editor" import "@toast-ui/editor/dist/toastui-editor.css" import "@toast-ui/editor/dist/i18n/zh-cn"; import "prismjs/themes/prism.css"; import "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css"; import codeSyntaxHighlight from "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight-all.js"; import "@toast-ui/editor-plugin-table-merged-cell/dist/toastui-editor-plugin-table-merged-cell.css"; import tableMergedCell from "@toast-ui/editor-plugin-table-merged-cell"; export default { data () { return { catalogList: [] } }, mounted () { this.editor = new Editor({ el: this.$refs.editor, language: "zh-CN", initialEditType: "markdown", previewStyle: "vertical", placeholder: "请输入内容", plugins: [codeSyntaxHighlight, tableMergedCell], events: { change: this.handleContentChange.bind(this) }, customHTMLRenderer: { heading (node, { entering }) { const spec = { type: entering ? "openTag" : "closeTag", tagName: `h${node.level}`, outerNewLine: true, }; // 添加自定义属性 if (entering) spec.attributes = { "class": `heading${node.level}` } return spec } } }) }, methods: { handleContentChange () { const mdText = this.editor.mdEditor.getMarkdown() this.parseMdTitle(mdText) }, parseMdTitle (mdText) { // 解析markdown title const pattern = /^(#+)\s+(.+)/mg let result = mdText.match(pattern) if (!result) return const catalogList = result.map((vv, index) => { const levelText = vv.match(/^(#+)/) return { level: levelText[0].length, // 目录级别 index, cls: `heading-${levelText[0].length}`, content: vv.slice(levelText[0].length).trim(), // 内容 } }) this.catalogList = catalogList } } }</script>
参考资料
- toastui/editor
- tui.editor
-
【环球报资讯】Cesium CallbackProperty(十五)
Cesium中的entities可以随时间变化长度高度,主要依赖于CallbackProperty函数。因为使用CallbackPropert...
来源: 环球关注:tui.editor一款功能强大的markdown编辑器
热消息:关于python中将字典的所有key组成一个列表的方式
【环球报资讯】Cesium CallbackProperty(十五)
【世界独家】全天候显示能掉多少电?iOS 16.4告诉你
环球观速讯丨公司回应要求员工扫厕所:这是福利 每月有几十元奖励
焦点日报:冲击40亿有望!《流浪地球2》累计票房已超38亿
女子情人节翻垃圾桶捡到金链:最后被前主人要回 网友热议
全球速读:【算法训练营day48】LeetCode198. 打家劫舍 LeetCode213. 打家劫舍II LeetCode337. 打家劫舍III
GitHub 入门 与 2023年2月18日10:29:02
观天下!假的!马斯克否认修改算法推荐自己帐号 将追责说谎员工
环球微动态丨颠覆性创新 潍柴全球首发大功率SOFC燃料电池:研发花了20亿
环球新资讯:学习笔记——尚好房项目的数据库建表文件
VirtualBox 配置虚拟机 Host-only 和 Nat
世界百事通!win系统提示请插入多卷集的最后一张磁盘解决方法
第三章 计算机进行小数运算时出错的原因
全球聚焦:北江纺织:拟冲刺上交所IPO上市,预计募资4.22亿元,近年综合毛利率逐年下降
【环球速看料】五菱会玩!城市玩乐潮品SUV悦也“小书包”是块屏:可自定义内容
天天看点:打造名族品牌!杨元庆:联想核心生产制造还是立足中国
天天快播:[数据结构] AVL树
全球头条:超越GPS主导国内导航定位 北斗日定位量超3000亿次
焦点简讯:努比亚Z50 Ultra保护壳泄漏:后置摄像模组巨大无比
全球快看:院士称我国已经具备ChatGPT算力基础 关键在如何爆发
全球新消息丨工作至死:日本789万老人还在打零工
资讯:菲律宾一飞机早上起飞后失联:近期第二起
(数据库系统概论|王珊)第四章数据库安全性:习题
快播:橙色奶油冰淇淋层蛋糕食谱
世界要闻:精装版吉利星越L?领克DX11最新谍照曝光:首上魅族车机
天天消息!秒美国资费!每月198 还能更便宜:我国千兆宽带将全面普及 第二批城市名单来了
焦点报道:java便捷的word导出工具(officejj)
当前观点:关于 The River All Red (Tr.许渊冲) 的一点感想
高尔夫美女参战《蚁人3》
网友曝光《狂飙》拍摄地有人竖牌“拍视频5元1次”:官方回应来了
天天精选!三亚去世侏儒抹香鲸被解剖:胃内有大量塑料/线虫 导致无法进食
4.打包子应用 投票
环球今日讯!极兔一面:10亿级ES海量搜索狂飙10倍,该怎么办?
一文让你彻底了解ChatGPT
焦点快看:要控制人类节奏!聊天机器人爱上用户并诱其离婚 微软出手限制了
年制绿氢3万吨、绿氧24万吨!我国全球最大绿氢项目开工
刘强东完了!章泽天官宣喜讯,被出轨4年。网友:这反击漂亮!
环球观点:数据结构刷题2023.02.18小记
环球精选!特斯拉追尾公交致1死 车主呼吁放开单踏板模式:为何老是失控?这是原因
环球资讯:1986年拍摄的泰坦尼克号残骸视频首次公开:残骸尺寸巨大
当前滚动:如何保存石榴
当前观点:iPhone 15 Pro CAD渲染图对比iPhone 14 Pro:改用USB C端口、相机更凸起、边框更窄
今日热门!渔民出海偶遇100多只海豚逐浪嬉戏:场面很美很壮观
苹果iOS 16.4首个公测版发布:普通用户将告别测试版
天天观焦点:油电平价!比亚迪秦PLUS DM-i 2023冠军版杀疯了:9.98万就能买DM-i超级混动
start+up韩剧在线观看_start up
环球快消息!女子不吃碳水半年狂减46斤 结果脱发、怕冷:治了半年
时讯:老黄厨房新菜来了 NVIDIA确认GTC 2023大会3月20日开幕
环球观天下!为什么这年头是个人就能造车?这事真就没门槛?
比半张A4纸还小 惠普1L迷你主机实测:3050 Ti独显给力
环球头条:iPhone安装不了第三方App?没关系它会出手!
世界简讯:咬牙耳朵里面疼怎么办_耳朵外轮廓疼怎么办
当前简讯:《星际2》冠军为孙哥黄哥剃光头:“卤蛋”情绪稳定
Vue急速入门-4
python项目中的“填坑”记录
自命为缓存之王的Caffeine(6)
MyBatis-Plus (SpringBoot2 版) Learning Day01
百事通!河南安阳一楼盘推出0首付0月供购房,这是什么操作?
交个朋友陷恶意裁员风波 没有了罗永浩还能走多远
世界快资讯丨口碑又崩了 漫威大片《蚁人3》豆瓣开分6.4:量子力学也带不动
【世界快播报】红旗接入百度AI文心一言 打造国产豪车品牌标杆
【当前独家】物理老师用《塞尔达传说:荒野之息》讲解小船过河原理:林克听了都说好!
世界头条:144MB缓存游戏神U!锐龙9 7950X3D跑分首曝:果然不出所料
每日热门:小米13 Ultra渲染图曝光:中分造型四摄
世界观热点:剪绳子问题 之动态规划 及 大数越界情况下的求余问题
千万小心二手RTX 20显卡!新套路出现:黑片秒变白片
日本MRJ刚失败 印度也要自研国产飞机:可载100人
女子第一次打到无人驾驶网约车:十分激动
每日热门:支持30+种中外语言!搜狗输入法力挺麒麟OS
世界微头条丨网站设计师招聘_网站设计师
世界热点!3、TreeMap源码解析
每片5.5元!绿联苹果钢化膜促销:适用iPhone 14/13/12系列
每日视讯:河南发布电动车佩戴头盔规定草案:未戴拒不改正罚20元
全球观天下!苦等3年微软终于点头:苹果M1/M2 Mac正式支持运行Win11
天天短讯!李荣浩新歌《乌梅子酱》火了!乌梅子酱淘宝搜索量暴涨200倍
新资讯:1999元!小米米家智能除湿机50L发布:100平除湿 梅雨季不怕了
当前信息:阿里一面:谈一下你对DDD的理解?2W字,帮你实现DDD自由
看热讯:关于ChatGPT,我们到底在担心什么?
【世界新要闻】在centos stream 9上搭建k8s最新版本(当前:v1.26.1)集群环境
【环球热闻】云原生学习作业8
天天新消息丨本周盘点(2.13-2.17):永吉股份周跌2.30%,主力资金合计净流出1796.91万元
每日看点!三年之期已到 不换APP享受自由音乐的理想国还有多远?
诗与远方
天天快消息!男子初到上海见转弯扶梯被震撼 网友看呆:同没见过
6999元!爱玛联名雷神发布HERO限量款机车:2500W电机 一键弹射
张纪中回应张颂文沙漠捡垃圾被剧组丢下:请理性看待
ESXi Args勒索病毒来袭,VMware ESXi用户需提高警惕
2、HashMap源码分析
观热点:使用springboot cache + redis缓存时使用gzip压缩以提升性能
天天最新:微凸铜底设计!微星CORELIQUID M360散热器图赏
当前视讯!美俄亥俄州居民嘴唇变色脸上起红斑 官方称空气水质安全:小溪全是死鱼 污染超百公里
全球快资讯丨iPhone 15 Pro外观无悬念了!关键是价格会更贵
《生化危机4:重制版》新细节:艾达王将扮演重要角色
蚌埠住了!iPhone 18 Pro背面设计来了 堪称行星发动机
世界今日报丨2023湖南新能源汽车置换促销补贴怎么领取
如何用chatGPT、代理IP和网络爬虫,打造一个智能有趣的聊天机器人?
环球新动态:数据结构刷题2023.02.17小记
分享7个刺激的老司机网站,别轻易点开