惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
量子位
Blog — PlanetScale
Blog — PlanetScale
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
D
Docker
罗磊的独立博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
IT之家
IT之家
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog

Surmon.me

一人有限集团 你就是不敢 创造力是温柔的谎言 人类正在退出人类 AI 代替不了这样的你 脉冲点火背后的架构设计 基于 Cloudflare 生态的 AI Agent 实现 NodePress 支持用户登录了 从统计学习到通用智能 2025 投资报告:走慢的路 无依之地 会杀人的菩萨 无我不是共识 文化的积重与偏见 当下即安 科学的尽头是态度 无我不是 Egoless 信仰不因恐惧而存在 世间无解的矛与盾 先别急着做些什么 佛不需要你的皈依 真理的幻觉 两扇大门 造心里的浮屠 自胜者强 逻辑与智慧 真的相 快乐的秘密 只需愿意 是名体验
Markdown 编辑器的实现
Surmon · 2017-02-14 · via Surmon.me

博客后台需要快速实现一个定制版的 Markdown 编辑器,同时避免重复造无意义的轮子。

之前用的 ng2-quill-editor ,WYSIWYG编辑器,不爽,很不爽。

还是 Markdown 最亲切,无论可移植性,易用性,友好程度都太美好。

怎么实现?

简单说:

编辑器 + 解释器

解释器大把的,选了 marked ,10K+ star,用户也多,插件机制成熟。

        
        

123

var marked = require('marked'); console.log(marked('I am using __markdown__.')); // Outputs: <p>I am using <strong>markdown</strong>.</p>

编辑器,简单说一个 <textarea></textarea> 就够了,但我要美观,要能识别代码高亮,要能折叠,要能支持多种编程语言,总之我啥都要,这就不简单了,只能找第三方了; 然而还真的没一个如意的,大部分的项目都是迎合自身需求产出的,缺乏太多定制型,不灵活,不了解别人代码,不易优化。

无奈造了个简单的,简单到除了上面我列出的几个功能之外啥功能都没有,整挺好。

OK, 全部代码在这

不详说,讲几个核心:

  • Codemirror 中使用 "gmf" mode,而非 "markdown" mode,GFM 是 GitHub 拓展的基于 Markdown 的一种纯文本的书写格式。
  • 需要啥语言就引入啥包,自己用的,不必在意体积,功能才是第一位
  • 要实现实时预览模式,简单说就是双向绑定,编辑器的数据流直接到 marked 解析输出
  • 要添加什么按钮功能,比如 Link 这样的,直接调 Codemirror 的 API,很丰富很强壮
  • 代码高亮和代码块折叠之一类功能,require 进对应文件,Codemirror 配置好就 ok 了

效果如下: