Skip to content

添加新图表/图表 📊

示例

请参考以下PRs了解如何使用Langium添加新的图表语法。

警告

以下步骤正在进行中,并将很快更新。

步骤 1: 语法 & 解析

步骤2:渲染

编写一个渲染器,根据解析过程中找到的数据渲染图表。要查看示例,请查看sequenceRenderer.js而不是流程图渲染器,因为这是一个更通用的示例。

将渲染器放置在图表文件夹中。

步骤3:检测新图表类型

第二件事是添加检测新图表类型的能力到diagram-api/detectType.ts中的detectType。检测应返回新图表类型的键。此键将用作aria roledescription,因此它应该是一个能清楚描述图表类型的词。例如,如果你的新图表使用UML部署图,一个好的键是"UMLDeploymentDiagram",因为辅助技术如屏幕阅读器会将其读作"U-M-L 部署图"。另一个好的键是"deploymentDiagram",因为它会被读作"部署图"。一个不好的键是"deployment",因为它不能充分描述图表。

请注意,图表类型键不必与为语法选择的图表关键字相同,但如果它们相同会更有帮助。

图表的常见部分

不同类型的图表之间有一些共同的特征。我们尝试标准化这些图表,使其对最终用户尽可能相似。这些共同点包括:

  • 指令,一种从图表代码内部修改图表配置的方式。
  • 可访问性,作者为使用屏幕阅读器访问带有图表的文本的人提供额外信息(如标题和描述)的一种方式。
  • 主题,有一种常见的方法可以修改Mermaid中图表的样式。
  • 注释应遵循mermaid标准

以下是一些关于如何处理这些不同领域的提示。

可访问性

Mermaid 自动为图表 SVG HTML 元素添加以下可访问性信息:

  • aria-roledescription
  • 可访问的标题
  • 可访问的描述

aria-roledescription

aria-roledescription 自动设置为 图表类型 并插入到 SVG 元素中。

请参阅aria-roledescription的定义可访问的富互联网应用W3标准中。

可访问的标题和描述

可访问标题和描述的语法在可访问性文档部分中进行了描述。

设置标题和描述的函数由一个公共模块提供。这是在flowDb.js中的导入:

import {
  setAccTitle,
  getAccTitle,
  getAccDescription,
  setAccDescription,
  clear as commonClear,
} from '../../commonDb';

可访问性标题和描述被插入到mermaidAPI中render函数的SVG元素中。

主题

Mermaid 支持主题并集成了主题引擎。您可以阅读更多关于如何使用主题的信息 在文档中

当向图表添加主题时,代码中有几个重要的位置需要注意。

样式引擎的入口点在src/styles.js中。当样式被应用到图表时,Mermaid将调用getStyles函数。

此函数将依次调用一个函数你的图表应提供返回新图表的CSS。图表特定的,通常也称为getStyles,位于src/diagrams下你的图表文件夹中,应命名为styles.js。getStyles函数将使用主题选项作为参数调用,如下例所示:

js
const getStyles = (options) =>
  `
    .line {
      stroke-width: 1;
      stroke: ${options.lineColor};
      stroke-dasharray: 2;
    }
    // ...
    `;

请注意,您需要通过将您的函数添加到src/styles.js中的themes对象中,将其提供给主getStyles,如提供的示例中的xyzDiagram所示:

js
const themes = {
  flowchart,
  'flowchart-v2': flowchart,
  sequence,
  xyzDiagram,
  //...
};

颜色的实际选项和值在src/theme/theme-[xyz].js中定义。如果您在现有的主题文件中提供了图表所需的选项,那么主题化将顺利进行,不会出现任何问题。