|
| 1 | +# RoboCOIN DataManager 开发文档 |
| 2 | + |
| 3 | +本文档面向开发者,介绍项目的各个组成部分以及如何配置和修改项目。 |
| 4 | + |
| 5 | +## 📁 项目结构 |
| 6 | + |
| 7 | +### 根目录结构 |
| 8 | + |
| 9 | +``` |
| 10 | +docs/ |
| 11 | +├── css/ # 样式文件 |
| 12 | +│ ├── core/ # 核心样式(基础、布局、变量等) |
| 13 | +│ ├── components/ # 组件样式(模态框、提示等) |
| 14 | +│ ├── filter/ # 过滤器相关样式 |
| 15 | +│ ├── selection/ # 选择面板样式 |
| 16 | +│ ├── video/ # 视频卡片样式 |
| 17 | +│ ├── responsive/ # 响应式样式 |
| 18 | +│ └── animations/ # 动画效果 |
| 19 | +├── js/ # JavaScript 源代码 |
| 20 | +│ ├── modules/ # 功能模块 |
| 21 | +│ ├── app.js # 应用主入口 |
| 22 | +│ ├── main.js # 初始化入口 |
| 23 | +│ ├── templates.js # 模板定义 |
| 24 | +│ └── types.js # 类型定义 |
| 25 | +├── index.html # 主页面 |
| 26 | +└── favicon.ico # 网站图标 |
| 27 | +``` |
| 28 | + |
| 29 | +### 核心模块说明 |
| 30 | + |
| 31 | +#### 1. **配置管理模块** (`js/modules/config.js`) |
| 32 | +- **作用**:集中管理应用的所有配置项 |
| 33 | +- **功能**: |
| 34 | + - 从 CSS 变量读取配置值 |
| 35 | + - 管理资源路径(assets root) |
| 36 | + - 生成下载命令 |
| 37 | + - 处理文件大小格式化 |
| 38 | +- **关键方法**: |
| 39 | + - `getConfig()`: 获取完整配置对象 |
| 40 | + - `getAssetsRoot()`: 获取资源根路径 |
| 41 | + - `generateDownloadCommand()`: 生成下载命令 |
| 42 | + |
| 43 | +#### 2. **数据管理模块** (`js/modules/data-manager.js`) |
| 44 | +- **作用**:负责数据集的加载和管理 |
| 45 | +- **功能**: |
| 46 | + - 从远程加载数据集索引文件 |
| 47 | + - 构建数据集索引映射 |
| 48 | + - 管理数据集元数据 |
| 49 | + |
| 50 | +#### 3. **过滤器模块** (`js/modules/@filter/`) |
| 51 | +- **作用**:实现数据集筛选功能 |
| 52 | +- **组成**: |
| 53 | + - `filter-manager.js`: 过滤器管理器 |
| 54 | + - `filter-renderer.js`: 过滤器 UI 渲染 |
| 55 | + - `filter-state.js`: 过滤器状态管理 |
| 56 | + - `filter-hierarchy.js`: 过滤器层级结构 |
| 57 | + - `filter-search.js`: 过滤器搜索功能 |
| 58 | + - `data.js`: 过滤器数据定义 |
| 59 | + |
| 60 | +#### 4. **视频网格模块** (`js/modules/video-grid.js`) |
| 61 | +- **作用**:管理视频卡片的显示和虚拟滚动 |
| 62 | +- **功能**: |
| 63 | + - 渲染视频卡片网格 |
| 64 | + - 实现虚拟滚动优化性能 |
| 65 | + - 处理视频卡片交互 |
| 66 | + |
| 67 | +#### 5. **选择面板模块** (`js/modules/selection-panel.js`) |
| 68 | +- **作用**:管理批量下载选择功能 |
| 69 | +- **功能**: |
| 70 | + - 显示已选择的数据集列表 |
| 71 | + - 生成下载命令 |
| 72 | + - 支持导入/导出 JSON |
| 73 | + |
| 74 | +#### 6. **下载管理模块** (`js/modules/download-manager.js`) |
| 75 | +- **作用**:处理下载命令的生成和复制 |
| 76 | +- **功能**: |
| 77 | + - 支持 HuggingFace 和 ModelScope 两个平台 |
| 78 | + - 生成格式化的下载命令 |
| 79 | + - 复制命令到剪贴板 |
| 80 | + |
| 81 | +#### 7. **事件处理模块** (`js/modules/event-handlers.js`) |
| 82 | +- **作用**:统一管理所有 DOM 事件绑定 |
| 83 | +- **功能**: |
| 84 | + - 绑定按钮点击事件 |
| 85 | + - 处理搜索输入 |
| 86 | + - 管理选择状态变化 |
| 87 | + |
| 88 | +#### 8. **UI 工具模块** (`js/modules/ui-utils.js`) |
| 89 | +- **作用**:提供 UI 相关的工具函数 |
| 90 | +- **功能**: |
| 91 | + - 更新统计计数 |
| 92 | + - 显示/隐藏 UI 元素 |
| 93 | + - 工具函数集合 |
| 94 | + |
| 95 | +#### 9. **虚拟滚动模块** (`js/modules/virtual-scroll.js`) |
| 96 | +- **作用**:实现高性能的虚拟滚动 |
| 97 | +- **功能**: |
| 98 | + - 只渲染可见区域的元素 |
| 99 | + - 优化大量数据时的性能 |
| 100 | + |
| 101 | +#### 10. **其他工具模块** |
| 102 | +- `dom-utils.js`: DOM 操作工具函数 |
| 103 | +- `error-notifier.js`: 错误通知管理 |
| 104 | +- `toast-manager.js`: 提示消息管理 |
| 105 | +- `robot-aliases.js`: 机器人别名映射 |
| 106 | + |
| 107 | +## 🔧 如何更换 Assets 依赖仓库 |
| 108 | + |
| 109 | +### 方法一:修改默认配置(推荐用于开发环境) |
| 110 | + |
| 111 | +在 `js/modules/config.js` 文件的第 127-133 行,找到 `getDefaultRemoteAssetsRoot()` 方法: |
| 112 | + |
| 113 | +```javascript |
| 114 | +/** |
| 115 | + * Default Hugging Face dataset location for assets. |
| 116 | + * @returns {string} |
| 117 | + */ |
| 118 | +static getDefaultRemoteAssetsRoot() { |
| 119 | + return 'https://huggingface.co/datasets/RogersPyke/RoboCOIN-DataManager-assets/resolve/main'; |
| 120 | +} |
| 121 | +``` |
| 122 | + |
| 123 | +**修改步骤**: |
| 124 | +1. 打开 `docs/js/modules/config.js` 文件 |
| 125 | +2. 找到第 132 行的 `return` 语句 |
| 126 | +3. 将 URL 替换为你自己的 Hugging Face 数据集仓库地址 |
| 127 | +4. 确保 URL 格式为:`https://huggingface.co/datasets/用户名/仓库名/resolve/main` |
| 128 | + |
| 129 | +**示例**: |
| 130 | +```javascript |
| 131 | +static getDefaultRemoteAssetsRoot() { |
| 132 | + return 'https://huggingface.co/datasets/YourUsername/YourRepoName/resolve/main'; |
| 133 | +} |
| 134 | +``` |
| 135 | + |
| 136 | +### 方法二:通过 URL 参数覆盖(推荐用于测试) |
| 137 | + |
| 138 | +在浏览器地址栏中添加 `assetsRoot` 或 `assets` 参数: |
| 139 | + |
| 140 | +``` |
| 141 | +https://your-domain.com/?assetsRoot=https://huggingface.co/datasets/YourUsername/YourRepoName/resolve/main |
| 142 | +``` |
| 143 | + |
| 144 | +或使用简短的 `assets` 参数: |
| 145 | + |
| 146 | +``` |
| 147 | +https://your-domain.com/?assets=https://huggingface.co/datasets/YourUsername/YourRepoName/resolve/main |
| 148 | +``` |
| 149 | + |
| 150 | +**注意**:URL 参数只接受 `http://` 或 `https://` 开头的绝对 URL。 |
| 151 | + |
| 152 | +### 方法三:通过全局变量覆盖(用于调试) |
| 153 | + |
| 154 | +在浏览器控制台中设置: |
| 155 | + |
| 156 | +```javascript |
| 157 | +window.ROBOCOIN_ASSETS_ROOT = 'https://huggingface.co/datasets/YourUsername/YourRepoName/resolve/main'; |
| 158 | +``` |
| 159 | + |
| 160 | +或者: |
| 161 | + |
| 162 | +```javascript |
| 163 | +window.__ASSETS_ROOT__ = 'https://huggingface.co/datasets/YourUsername/YourRepoName/resolve/main'; |
| 164 | +``` |
| 165 | + |
| 166 | +然后刷新页面。 |
| 167 | + |
| 168 | +### Assets 仓库结构要求 |
| 169 | + |
| 170 | +无论使用哪种方法,你的 Assets 仓库必须遵循以下目录结构: |
| 171 | + |
| 172 | +``` |
| 173 | +your-repo/ |
| 174 | +├── info/ # JSON 索引文件 |
| 175 | +│ ├── data_index.json |
| 176 | +│ └── consolidated_datasets.json |
| 177 | +├── dataset_info/ # YAML 元数据文件 |
| 178 | +│ ├── dataset1.yml |
| 179 | +│ └── dataset2.yml |
| 180 | +├── thumbnails/ # 缩略图(可选) |
| 181 | +│ └── *.jpg |
| 182 | +└── videos/ # 视频文件(可选) |
| 183 | + └── *.mp4 |
| 184 | +``` |
| 185 | + |
| 186 | +### 优先级说明 |
| 187 | + |
| 188 | +配置的优先级从高到低为: |
| 189 | +1. URL 参数 (`?assetsRoot=` 或 `?assets=`) |
| 190 | +2. 全局变量 (`window.ROBOCOIN_ASSETS_ROOT` 或 `window.__ASSETS_ROOT__`) |
| 191 | +3. 默认配置 (`getDefaultRemoteAssetsRoot()`) |
| 192 | + |
| 193 | +## 🛠️ 开发建议 |
| 194 | + |
| 195 | +### 本地开发 |
| 196 | + |
| 197 | +1. 使用本地服务器运行项目(避免 CORS 问题) |
| 198 | +2. 可以通过 URL 参数快速切换不同的 assets 仓库进行测试 |
| 199 | +3. 使用浏览器开发者工具监控网络请求 |
| 200 | + |
| 201 | +### 调试技巧 |
| 202 | + |
| 203 | +- 打开浏览器控制台查看配置信息:`ConfigManager.getConfig()` |
| 204 | +- 查看当前 assets root:`ConfigManager.getAssetsRoot()` |
| 205 | +- 检查数据集加载状态:`dataManager.getAllDatasets()` |
| 206 | + |
| 207 | +### 性能优化 |
| 208 | + |
| 209 | +- 项目使用虚拟滚动处理大量数据集 |
| 210 | +- 过滤器使用静态计数优化性能 |
| 211 | +- 视频加载采用懒加载策略 |
| 212 | + |
| 213 | +## 📝 注意事项 |
| 214 | + |
| 215 | +1. **URL 格式**:所有 assets root URL 必须是以 `http://` 或 `https://` 开头的绝对 URL |
| 216 | +2. **路径规范化**:系统会自动去除 URL 末尾的斜杠 |
| 217 | +3. **网络连接**:由于资源托管在 Hugging Face,网络连接可能影响加载速度 |
| 218 | +4. **缓存控制**:HTML 中已设置无缓存策略,开发时注意浏览器缓存 |
| 219 | + |
| 220 | +## 🔗 相关文件 |
| 221 | + |
| 222 | +- 配置文件:`docs/js/modules/config.js` |
| 223 | +- 主应用:`docs/js/app.js` |
| 224 | +- 数据管理:`docs/js/modules/data-manager.js` |
| 225 | +- 主页面:`docs/index.html` |
| 226 | + |
0 commit comments