主题详情系统是 roadmap.sh 平台的核心组件,负责在用户与路线图节点交互时显示特定主题的详细信息。它提供了一个弹出界面,展示主题内容、免费和付费资源,并允许用户跟踪他们学习每个主题的进度。
主题详情系统作为可视化路线图表示与详细教育内容之间的桥梁。当用户点击路线图中的某个主题节点时,该系统会检索、渲染并以弹出模态框的形式显示相关内容。
来源: src/components/TopicDetail/TopicDetail.tsx37-629 src/components/TopicDetail/TopicProgressButton.tsx20-263
TopicDetail 组件是负责显示主题信息的主要 UI 元素。当用户点击路线图中的某个主题时,它会以弹出模态框的形式出现。
来源: src/components/TopicDetail/TopicDetail.tsx37-629
| 组件 | 主要职责 | 关键属性 |
|---|---|---|
| TopicDetail | 显示主题信息弹出窗口 | resourceId, resourceType, topicId |
| TopicProgressButton | 管理主题的进度状态 | topicId, resourceId, resourceType, progress |
| ResourceProgress | 跟踪和可视化进度 | - |
来源: src/components/TopicDetail/TopicDetail.tsx37-44 src/components/TopicDetail/TopicProgressButton.tsx20-26
当用户与路线图中的主题进行交互时,会发生以下一系列事件
来源: src/components/TopicDetail/TopicDetail.tsx120-131 src/components/TopicDetail/TopicDetail.tsx174-307
主题详情系统与进度跟踪系统集成,允许用户标记他们在各个主题上的进度。此进度会在路线图界面上得到视觉反映。
该系统支持以下进度状态
| 进度状态 | 视觉指示器 | 描述 |
|---|---|---|
| 待处理 | 默认样式 | 主题尚未开始 |
| 已完成 | 绿色指示器,删除线文本 | 主题已完成 |
| 学习中 | 黄色指示器,下划线文本 | 主题进行中 |
| 已跳过 | 黑色指示器,删除线文本 | 主题已故意跳过 |
来源: src/lib/resource-progress.ts9-14 src/components/FrameRenderer/FrameRenderer.css51-97
来源: src/components/TopicDetail/TopicProgressButton.tsx121-151
主题详情系统显示与主题相关的各种资源
来源: src/components/TopicDetail/TopicDetail.tsx438-547
该系统将资源链接分类为不同的类型
| 链接类型 | 视觉指示器 | 优先级 |
|---|---|---|
| 官方 | 官方图标 | 高 |
| 开源 | 开源图标 | 高 |
| 文章 | 文章图标 | 中等 |
| 视频 | 视频图标 | 中等 |
| Feed | Feed 图标 | 低 |
| 课程 | 课程图标 | 适用于付费资源 |
| 书籍 | 图书图标 | 适用于付费资源 |
来源: src/components/TopicDetail/TopicDetail.tsx250-277
TopicDetail 组件按以下步骤加载内容
来源: src/components/TopicDetail/TopicDetail.tsx174-307
进度管理涉及几个关键功能
updateResourceProgress: 更新主题的进度状态getResourceProgress: 获取当前的进度状态renderTopicProgress: 在视觉上更新 UI 以反映进度refreshProgressCounters: 更新 UI 中的进度计数器来源: src/lib/resource-progress.ts51-82 src/lib/resource-progress.ts302-330
主题详情弹出窗口包含以下 UI 元素
来源: src/components/TopicDetail/TopicDetail.tsx342-602
当用户更新主题进度时,系统会更新本地状态并在路线图上更新视觉表示。
主题进度的视觉指示器通过 CSS 类实现
.done rect {
fill: #cbcbcb !important;
}
.done text,
.skipped text {
text-decoration: line-through;
}
.learning rect {
fill: #dad1fd !important;
}
.skipped rect {
fill: #496b69 !important;
}
.learning text {
text-decoration: underline;
}
来源: src/components/FrameRenderer/FrameRenderer.css51-79
该系统通过以下过程更新 DOM 以反映进度更改
来源: src/lib/resource-progress.ts266-330 src/lib/resource-progress.ts383-506
主题详情系统与 roadmap.sh 平台上的多个其他系统集成
来源: src/components/TopicDetail/TopicDetail.tsx137-171 src/components/TeamVersions/TeamVersions.tsx1-231
主题详情系统在允许用户更新其进度之前会检查用户是否已登录。如果用户未登录,则在尝试更新进度时会提示用户登录。
来源: src/components/TopicDetail/TopicDetail.tsx137-171
该系统支持团队版本的路线图,允许团队管理员为其团队成员自定义路线图,包括移除特定主题。
来源: src/components/TeamVersions/TeamVersions.tsx1-231
主题详情系统是roadmap.sh平台的核心组件,它将可视化的路线图表示与详细的教育内容相结合。它提供了一个干净、用户友好的界面,用于访问主题信息和跟踪进度,同时支持资源链接、进度可视化和团队定制等功能。