本文档解释了 Markdown Here 扩展中实现用户在 Markdown 和渲染的 HTML 之间切换的核心功能。它涵盖了如何在不同浏览器平台中触发切换,系统如何确定是渲染还是还原内容,以及在此过程中保留原始 Markdown 的技术机制。
有关将 Markdown 转换为 HTML 的具体渲染过程的信息,请参阅Markdown 渲染管道。
Markdown 切换功能是 Markdown Here 扩展的核心特性,允许用户在任何富文本编辑器中以 Markdown 格式书写,并通过简单的操作将其转换为格式化的 HTML。
来源: src/common/markdown-here.js570-646 src/chrome/contentscript.js18-52 src/firefox/chrome/content/ff-overlay.js31-74
Markdown Here 支持多个浏览器,并针对不同平台编写了特定代码来处理切换激活。
来源: src/chrome/backgroundscript.js94-96 src/chrome/backgroundscript.js187-189 src/chrome/contentscript.js18-64 src/firefox/chrome/content/ff-overlay.js31-79
在 markdown-here.js 中的 markdownHere() 函数是切换功能的核心。此函数决定是渲染 Markdown 到 HTML 还是将 HTML 还原回 Markdown。
来源: src/common/markdown-here.js570-646
findFocusedElem() 函数定位用户当前正在输入或放置光标的活动元素。
关键行为
来源: src/common/markdown-here.js60-106
并非所有元素都可以渲染。elementCanBeRendered() 函数检查元素是否适合 Markdown 渲染。
来源: src/common/markdown-here.js110-116
该扩展使用一种巧妙的机制来存储渲染为 HTML 时的原始 Markdown 文本,从而使其能够在以后切换回原始文本。
包装器标记结构如下所示:
来源: src/common/markdown-here.js13-35 src/common/markdown-here.js482-507 src/common/markdown-here.js536-552
当将 Markdown 渲染为 HTML 时,renderMarkdown() 函数会:
来源: src/common/markdown-here.js482-534
当将渲染的 HTML 转换回 Markdown 时,unrenderMarkdown() 函数会:
来源: src/common/markdown-here.js536-552
该扩展智能地处理选区范围
来源: src/common/markdown-here.js121-167 src/common/markdown-here.js174-208
电子邮件客户端通常会去除 <style> 标签,因此 Markdown Here 直接将样式应用于元素。
来源: src/common/markdown-here.js280-336
切换功能弥合了浏览器之间的差异
来源: src/chrome/backgroundscript.js94-96 src/chrome/backgroundscript.js187-189 src/chrome/contentscript.js18-64 src/firefox/chrome/content/ff-overlay.js31-79
切换功能以多种方式与用户界面集成
来源: src/chrome/contentscript.js91-147 src/firefox/chrome/content/ff-overlay.js292-325
该扩展可以检测用户何时可能发送包含未渲染 Markdown 的电子邮件。
来源: src/firefox/chrome/content/ff-overlay.js167-225 src/chrome/contentscript.js256-264