# lazy-xi/chaoxing-tools architecture

> Architecture diagram of the GitHub repository lazy-xi/chaoxing-tools, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lazy-xi/chaoxing-tools
- Repository: https://github.com/lazy-xi/chaoxing-tools

## Overview

chaoxing-tools is a Tampermonkey userscript collection: three cooperating scripts automate course task playback and progression, while a separate script filters the course list. The README documents regex/text filtering, multiple page formats, and localStorage enable/disable control. The sampled sources support the playback message flow and filter UI; the filter excerpt is partial, so uncertain details of its incomplete-course lookup are not expanded.

Main entry points: [`src/学习通挂机脚本 - 1.js`](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%201.js) (Task controller), [`src/学习通课程过滤.js`](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E8%AF%BE%E7%A8%8B%E8%BF%87%E6%BB%A4.js) (Course filter), [`src/学习通挂机脚本 - 2.js`](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%202.js) (Media player), [`src/学习通挂机脚本 - 3.js`](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%203.js) (File scroller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_playback["Task playback"]
  node_task_control["Task controller<br/>[学习通挂机脚本 - 1.js]"]
  node_media_player["Media player<br/>[学习通挂机脚本 - 2.js]"]
  node_file_scroller["File scroller<br/>[学习通挂机脚本 - 3.js]"]
end

subgraph group_filter["Course filtering"]
  node_course_filter["Course filter<br/>[学习通课程过滤.js]"]
  node_filter_rules["Filter rules<br/>[学习通课程过滤.js]"]
end

subgraph group_platform["Platform pages and state"]
  node_course_list["Course list"]
  node_course_tasks["Course tasks"]
  node_browser_storage[("Browser localStorage")]
end

node_learner(("Learner"))
node_chaoxing["Chaoxing pages"]

node_learner -->|"opens pages"| node_chaoxing
node_chaoxing -->|"runs on course"| node_task_control
node_task_control -->|"reads/writes setting"| node_browser_storage
node_task_control -->|"reads task points"| node_course_tasks
node_task_control -->|"sends play/stop"| node_media_player
node_media_player -->|"reports completion"| node_task_control
node_task_control -->|"advances task"| node_course_tasks
node_media_player -->|"requests scrolling"| node_file_scroller
node_file_scroller -->|"reports file end"| node_media_player
node_chaoxing -->|"runs on course list"| node_course_filter
node_learner -->|"enters filter"| node_course_filter
node_course_filter -->|"loads/saves rules"| node_filter_rules
node_filter_rules -->|"provides rules"| node_course_filter
node_course_filter -->|"filters courses"| node_course_list

click node_task_control "https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%201.js"
click node_media_player "https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%202.js"
click node_file_scroller "https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%203.js"
click node_course_filter "https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E8%AF%BE%E7%A8%8B%E8%BF%87%E6%BB%A4.js"
click node_filter_rules "https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E8%AF%BE%E7%A8%8B%E8%BF%87%E6%BB%A4.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_task_control,node_media_player,node_file_scroller toneBlue
class node_course_filter,node_filter_rules toneAmber
class node_course_list,node_course_tasks,node_browser_storage toneMint
class node_learner,node_chaoxing toneIndigo
```

## Components

### Task playback

- [Task controller](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%201.js): `src/学习通挂机脚本 - 1.js`
- [Media player](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%202.js): `src/学习通挂机脚本 - 2.js`
- [File scroller](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%8C%82%E6%9C%BA%E8%84%9A%E6%9C%AC%20-%203.js): `src/学习通挂机脚本 - 3.js`

### Course filtering

- [Course filter](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E8%AF%BE%E7%A8%8B%E8%BF%87%E6%BB%A4.js): `src/学习通课程过滤.js`
- [Filter rules](https://github.com/lazy-xi/chaoxing-tools/blob/main/src/%E5%AD%A6%E4%B9%A0%E9%80%9A%E8%AF%BE%E7%A8%8B%E8%BF%87%E6%BB%A4.js): `src/学习通课程过滤.js`

### Platform pages and state

- **Course list**
- **Course tasks**
- **Browser localStorage**

### Other components

- **Learner**
- **Chaoxing pages**

## Connections

- Learner → Chaoxing pages: opens pages
- Chaoxing pages → Task controller: runs on course
- Task controller → Browser localStorage: reads/writes setting
- Task controller → Course tasks: reads task points
- Task controller → Media player: sends play/stop
- Media player → Task controller: reports completion
- Task controller → Course tasks: advances task
- Media player → File scroller: requests scrolling
- File scroller → Media player: reports file end
- Chaoxing pages → Course filter: runs on course list
- Learner → Course filter: enters filter
- Course filter → Filter rules: loads/saves rules
- Filter rules → Course filter: provides rules
- Course filter → Course list: filters courses
