1
0

feat: 实现模板元素混合模式功能

新增混合模式,允许幻灯片同时使用 template 和 elements,实现更灵活的布局组合。

核心变更:
- core/presentation.py: 修改 render_slide() 支持三种模式(纯模板/纯自定义/混合模式)
- 自定义元素可访问模板变量,实现主题色等值的统一控制
- 元素采用简单追加策略合并(模板元素在前,自定义元素在后)
- 完全向后兼容现有用法

测试覆盖:
- 新增 TestRenderSlideHybridMode 测试类,包含 8 个测试用例
- 验证向后兼容性(纯模板模式、纯自定义模式)
- 验证混合模式功能(变量共享、空元素列表、元素顺序等)
- 所有 79 个测试通过

文档更新:
- README.md: 新增"混合模式模板"章节,包含语法示例和使用场景
- README_DEV.md: 更新开发文档,说明元素合并策略和实现细节

规范更新:
- openspec/specs/template-system/spec.md:
  - 修改"系统必须支持自定义幻灯片"需求,支持混合模式
  - 新增 4 个需求:变量共享、元素合并策略、向后兼容、内联模板支持
  - 新增 13 个场景定义

归档:
- openspec/changes/archive/2026-03-04-template-element-composition/: 完整变更记录
This commit is contained in:
2026-03-04 13:12:51 +08:00
parent 5b367f7ef3
commit 5d60f3c2c2
10 changed files with 1042 additions and 21 deletions

View File

@@ -0,0 +1,34 @@
# Template Element Composition 变更提案
## Why
当前模板系统是"全有或全无"的幻灯片要么使用模板template要么完全自定义elements无法同时使用两者。这导致多个模板中需要重复定义相同的头部 logo、标题栏、底部页码等元素。当需要修改这些共享元素时必须同步更新多个模板文件维护成本高且容易遗漏。
例如在 `complex_presentation.yaml` 中,`title-slide``content-slide``two-column-slide` 都各自定义了右上角的 5G logo位置完全相同但需要重复编写。
## What Changes
- 支持幻灯片同时使用 `template``elements` 字段,实现模板与自定义元素的混合模式
- 自定义元素能够访问模板中定义的变量,实现主题色、布局参数的统一控制
- 元素合并采用简单追加策略模板元素在前自定义元素在后z轴顺序
- 完全向后兼容:不写 `elements` 时行为与之前完全一致
## Capabilities
### Modified Capabilities
- `template-system`: 新增"模板与自定义元素混合使用"需求,修改现有"系统必须支持自定义幻灯片"需求,允许 `template``elements` 同时存在
## Impact
### 受影响的代码
- `core/template.py` - Template.render() 方法需要调整,可能新增 merge_elements() 方法
- `loaders/yaml_loader.py` - 幻灯片解析逻辑需要处理混合模式
- `core/presentation.py` (或其他处理幻灯片的模块) - 调用模板渲染的流程需要修改
### 受影响的文档
- `README.md` - 新增"混合模式模板"使用说明和示例
- `README_DEV.md` - 更新开发文档,说明元素合并策略
### 向后兼容性
- 完全兼容:只使用 template、只使用 elements、两者都不用的现有用法保持不变
- 新功能为增量增强,不破坏任何现有用法