# M2 划词核心模块 (v0.1.1-0.1.9) ## 模块概述 - **版本范围**: 0.1.1 ~ 0.1.9 - **任务数**: 9 - **目标**: 实现网页文本选择检测和沙拉图标/面板交互功能 ## 关键产出 - 文本选择检测系统(selection.js) - 沙拉图标组件(Shadow DOM 封装) - 词典结果面板组件(DictPanel.js) - 智能位置计算和视口适配 - Popup 中的划词总开关 ## 任务列表 ### M2.1 文本选择检测 [目标版本: 0.1.1] **任务**: 监听网页文本选择事件 **验收标准**: - [ ] `src/content/selection.js` 存在 - [ ] 监听 `mouseup` 事件 - [ ] 当选中文本长度 > 0 时,打印选中文本到控制台 - [ ] 在任意网页划词,Console 能看到选中的文本 ### M2.2 获取选中文本坐标 [目标版本: 0.1.2] **任务**: 计算选中文本的位置信息 **验收标准**: - [ ] 函数 `getSelectionCoords()` 返回 `{x, y, width, height}` - [ ] 支持单行文本选择 - [ ] 支持多行文本选择(返回首行或整个选区的矩形) - [ ] 坐标值正确(相对于视口) ### M2.3 沙拉图标组件(基础) [目标版本: 0.1.3] **任务**: 创建浮动图标元素 **验收标准**: - [ ] `src/content/components/SaladIcon.js` 存在 - [ ] 图标为 24x24px 的 div,背景色为绿色(先不用真实Logo) - [ ] 使用 Shadow DOM 封装,样式不泄露到页面 - [ ] 图标 `position: fixed`,可定位到任意坐标 ### M2.4 图标定位显示 [目标版本: 0.1.4] **任务**: 划词后图标出现在选中文本附近 **验收标准**: - [ ] 划词后,图标显示在选中文本右上角(x + width, y) - [ ] 图标不随页面滚动而偏移(使用 fixed 定位) - [ ] 再次划词时,先隐藏旧图标,再显示新图标 - [ ] 点击页面空白处,图标消失 ### M2.5 图标点击事件 [目标版本: 0.1.5] **任务**: 点击图标触发回调 **验收标准**: - [ ] 点击图标时,打印 "icon clicked" 到控制台 - [ ] 回调函数可配置(通过参数传入) - [ ] 点击后图标不消失(后续再处理) ### M2.6 基础面板组件 [目标版本: 0.1.6] **任务**: 创建词典结果展示面板 **验收标准**: - [ ] `src/content/components/DictPanel.js` 存在 - [ ] 面板尺寸 400x300px,白色背景,带阴影 - [ ] 使用 Shadow DOM 封装 - [ ] 面板内显示标题 "词典结果" - [ ] 提供 `show(x, y)` 和 `hide()` 方法 ### M2.7 面板位置计算 [目标版本: 0.1.7] **任务**: 面板智能定位,不超出视口 **验收标准**: - [ ] 面板默认显示在图标右下方 - [ ] 如果右侧超出视口,显示在左侧 - [ ] 如果下方超出视口,显示在上方 - [ ] 面板边界与视口保留 10px 边距 ### M2.8 图标-面板联动 [目标版本: 0.1.8] **任务**: 点击图标显示面板 **验收标准**: - [ ] 点击图标,面板显示在图标附近 - [ ] 面板显示时,图标保持可见 - [ ] 点击面板外部区域,面板关闭 - [ ] 按 ESC 键,面板关闭 ### M2.9 图标显示开关 [目标版本: 0.1.9] **任务**: Popup 中添加总开关 **验收标准**: - [ ] Popup 中有一个 Toggle 开关,标签"启用划词" - [ ] 开关状态保存到 `chrome.storage.local` - [ ] 关闭开关后,网页划词不再显示图标 - [ ] 打开开关后,恢复划词显示图标 ## 依赖 - **前置模块**: M1 基础架构模块 - **后置模块**: M3 词典系统模块, M5 设置系统模块 ## 参考资料 - [AGENTS.md](./AGENTS.md) - 规范文档 - [QUICK_REF.md](./QUICK_REF.md) - 快速参考