本文档描述了 Markdown Here 的核心架构,重点介绍实现 Markdown 到渲染 HTML 转换以及反向转换的中心组件、过程和交互。有关浏览器特定实现的信息,请参阅扩展结构。
Markdown Here 的核心架构为在基于 Web 的编辑器(主要是电子邮件撰写器)中将 Markdown 语法转换为格式化 HTML 奠定了基础。该架构旨在跨多个浏览器和电子邮件客户端工作,重点是保持在渲染的 HTML 和原始 Markdown 文本之间切换的能力。
来源
核心架构由三个主要组件组成,它们协同工作以提供 Markdown 渲染功能
| 组件 | 文件 | 主要职责 |
|---|---|---|
| 切换处理器 | markdown-here.js | 控制 Markdown 和 HTML 之间的切换,管理包装器 |
| 渲染引擎 | markdown-render.js | 使用外部库将 Markdown 语法转换为 HTML |
| 实用工具 | utils.js | 提供用于 DOM 操作、HTML 清理等的常用函数 |
切换处理器是 Markdown Here 的核心。它
来源
渲染引擎负责 Markdown 到 HTML 的实际转换。它
来源
实用工具组件提供整个扩展中使用的辅助函数
来源
渲染过程通过以下几个步骤将 Markdown 文本转换为格式化 HTML
来源
renderMarkdown 函数unrenderMarkdown 函数markdownRender 函数在渲染开始之前,系统必须确定
来源
findFocusedElem 函数elementCanBeRendered 函数isWrapperElem 函数架构的一个关键方面是包装器机制,它可以在渲染的 HTML 和原始 Markdown 之间进行切换
包装器机制的工作原理如下
这种方法确保了
来源
将 Markdown 渲染为 HTML 后,必须应用样式以确保正确显示
来源
makeStylesExplicit 函数核心架构旨在独立于浏览器特定代码,使其能够在不同浏览器中工作。浏览器特定代码与核心之间的通信通过定义的接口进行
关键接口包括
markdownHere() 函数markdownHere() 的渲染回调,它处理实际的 Markdown 到 HTML 转换来源
核心架构包含许多辅助函数,以支持主要的渲染过程
来源
walkDOM 函数isElementDescendant 函数rangeIntersectsNode 函数为了防止安全问题,架构包括 HTML 清理功能
来源
sanitizeDocumentFragment 函数saferSetInnerHTML 函数该架构包括用于查找电子邮件签名等元素的特殊函数
来源
findSignatureStart 函数Markdown Here 的核心架构被设计为模块化、跨浏览器兼容,并能稳健应对电子邮件客户端和 Web 编辑器的限制。包装器机制尤为重要,因为它解决了在渲染的 HTML 和原始 Markdown 之间切换的问题,同时在不同环境中保留了用户的内容。
核心渲染逻辑与浏览器特定集成之间的分离确保了核心功能在不同平台上的工作一致性,同时允许根据每个浏览器的扩展模型进行必要的调整。