feat: 增加 ECharts 渲染与预览交互增强
- 新增可复用的 markdown-echarts 工作区,支持安全的 YAML 围栏、默认值、语义校验、错误占位和 SVG 渲染 - 将 ECharts 接入统一 Markdown、快速预览、精确预览与 PDF 链路,并复用 Mermaid 的不可跨页和超高图单页适配策略 - 默认示例加入 ECharts,增加源文本折叠、顶部文档状态、页码输入跳转与滚动同步 - 快速预览改用外层容器滚动,使滚动条与精确预览统一贴在预览区域右侧,并兼容显示缩放 - 完善 Docker 工作区复制、可配置 Compose 镜像、测试覆盖和进度文档
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
EChartsFenceError,
|
||||
parseEChartsFence
|
||||
} from "../src/index.js";
|
||||
|
||||
const validSource = `
|
||||
version: 1
|
||||
height: 90mm
|
||||
theme: document
|
||||
caption: 年度趋势
|
||||
option:
|
||||
dataset:
|
||||
source:
|
||||
- [year, sales]
|
||||
- [2023, 120]
|
||||
- [2024, 180]
|
||||
xAxis:
|
||||
type: category
|
||||
yAxis:
|
||||
type: value
|
||||
series:
|
||||
- type: line
|
||||
encode:
|
||||
x: year
|
||||
y: sales
|
||||
`;
|
||||
|
||||
describe("parseEChartsFence", () => {
|
||||
it("解析并规范化有效协议", () => {
|
||||
expect(parseEChartsFence(validSource)).toEqual({
|
||||
version: 1,
|
||||
height: "90mm",
|
||||
theme: "document",
|
||||
caption: "年度趋势",
|
||||
option: {
|
||||
dataset: {
|
||||
source: [
|
||||
["year", "sales"],
|
||||
[2023, 120],
|
||||
[2024, 180]
|
||||
]
|
||||
},
|
||||
xAxis: {
|
||||
type: "category"
|
||||
},
|
||||
yAxis: {
|
||||
type: "value"
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: "line",
|
||||
encode: {
|
||||
x: "year",
|
||||
y: "sales"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it("补充协议版本、尺寸和直角坐标轴默认值", () => {
|
||||
expect(
|
||||
parseEChartsFence(`
|
||||
option:
|
||||
series:
|
||||
- type: line
|
||||
data: [12, 18, 26]
|
||||
`)
|
||||
).toEqual({
|
||||
version: 1,
|
||||
height: "80mm",
|
||||
theme: "document",
|
||||
option: {
|
||||
xAxis: {},
|
||||
yAxis: {},
|
||||
series: [
|
||||
{
|
||||
type: "line",
|
||||
data: [12, 18, 26]
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it("拒绝 YAML 锚点和别名", () => {
|
||||
expect(() =>
|
||||
parseEChartsFence(`
|
||||
version: 1
|
||||
height: 80mm
|
||||
option:
|
||||
series: &series
|
||||
- type: line
|
||||
color: *series
|
||||
`)
|
||||
).toThrow(EChartsFenceError);
|
||||
});
|
||||
|
||||
it("拒绝显式 YAML 标签", () => {
|
||||
expect(() =>
|
||||
parseEChartsFence(`
|
||||
version: 1
|
||||
height: 80mm
|
||||
option:
|
||||
series:
|
||||
- type: !!str line
|
||||
`)
|
||||
).toThrow(/不允许使用显式标签/u);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user