菜单

主题详情系统

相关源文件

主题详情系统是 roadmap.sh 平台的核心组件,负责在用户与路线图节点交互时显示特定主题的详细信息。它提供了一个弹出界面,展示主题内容、免费和付费资源,并允许用户跟踪他们学习每个主题的进度。

概述

主题详情系统作为可视化路线图表示与详细教育内容之间的桥梁。当用户点击路线图中的某个主题节点时,该系统会检索、渲染并以弹出模态框的形式显示相关内容。

系统组件图

来源: src/components/TopicDetail/TopicDetail.tsx37-629 src/components/TopicDetail/TopicProgressButton.tsx20-263

关键组件

TopicDetail 组件

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

资源显示

主题详情系统显示与主题相关的各种资源

  1. 主题内容: 关于主题的主要教育内容
  2. 免费资源: 指向文章、视频和文档等免费外部资源的链接
  3. 付费资源: 指向课程和书籍等付费资源的链接
  4. 搜索链接: 预生成的 Google 和 YouTube 搜索链接,用于查找其他资源

来源: src/components/TopicDetail/TopicDetail.tsx438-547

该系统将资源链接分类为不同的类型

链接类型视觉指示器优先级
官方官方图标
开源开源图标
文章文章图标中等
视频视频图标中等
FeedFeed 图标
课程课程图标适用于付费资源
书籍图书图标适用于付费资源

来源: src/components/TopicDetail/TopicDetail.tsx250-277

技术实现

内容加载

TopicDetail 组件按以下步骤加载内容

  1. 用户点击路线图中的某个主题
  2. 触发 `useLoadTopic` hook 来加载主题详情
  3. 通过 HTTP 请求从服务器获取主题内容
  4. 解析和处理 HTML 内容以提取
    • 主要内容
    • 资源链接
    • 贡献链接
  5. 然后将处理后的内容渲染到弹出界面中

来源: src/components/TopicDetail/TopicDetail.tsx174-307

进度管理

进度管理涉及几个关键功能

  1. updateResourceProgress: 更新主题的进度状态
  2. getResourceProgress: 获取当前的进度状态
  3. renderTopicProgress: 在视觉上更新 UI 以反映进度
  4. refreshProgressCounters: 更新 UI 中的进度计数器

来源: src/lib/resource-progress.ts51-82 src/lib/resource-progress.ts302-330

用户界面元素

主题详情弹出窗口包含以下 UI 元素

  1. 主题标题: 显示主题的标题
  2. 进度按钮: 允许用户更新他们的进度状态
  3. 内容区域: 显示主要的教育内容
  4. 免费资源: 列出免费的外部资源
  5. 付费资源: 列出付费资源(如果可用)
  6. 贡献链接: 提供贡献主题的链接(如果适用)
  7. 关闭按钮: 允许关闭弹出窗口

来源: src/components/TopicDetail/TopicDetail.tsx342-602

DOM 交互和视觉反馈

当用户更新主题进度时,系统会更新本地状态并在路线图上更新视觉表示。

视觉指示器

主题进度的视觉指示器通过 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 更新

该系统通过以下过程更新 DOM 以反映进度更改

  1. 使用选择器识别所有与主题对应的元素
  2. 根据进度状态应用适当的 CSS 类
  3. 更新进度计数器以反映总体进度

来源: 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平台的核心组件,它将可视化的路线图表示与详细的教育内容相结合。它提供了一个干净、用户友好的界面,用于访问主题信息和跟踪进度,同时支持资源链接、进度可视化和团队定制等功能。