ZotCopilot 排课内核 —— 上游来源、许可与改动说明
================================================================================
一、上游项目
--------------------------------------------------------------------------------
项目名 : Zotcourse — Schedule Planner for UCI
作者 : Tristan Jogminas
仓库 : https://github.com/jogplus/zotcourse
线上 : https://zotcourse.appspot.com/
许可 : GNU GPL-3.0(全文见本目录 LICENSE-GPL-3.0.txt,亦见仓库 vendor/zotcourse/LICENSE)
本内核(/schedule 页面里那个可搜索、可排课、可保存的界面)使用的是该项目的
前端源码与样式:HTML 结构(templates/index.html)、CSS(static/css/**)、
交互逻辑(static/js/zotcourse.js)以及它自带的若干库文件。**外观与交互按原版保留**。
二、我们(ZotCopilot)改了什么
--------------------------------------------------------------------------------
GPL-3.0 要求标注修改。完整清单(含改动的文件、原因、逐条对照)在仓库里:
apps/web/src/app/(main)/(app)/schedule/VENDOR.md
概览:
1. HTML 模板(由 apps/web/scripts/sync-schedule-kernel-template.mts 从上游模板编译)
- 三处 Jinja 变量 {{ terms | safe }} / {{ general_eds | safe }} /
{{ departments | safe }} 改为服务端注入占位符(语义不变,仍是服务端渲染 HTML 片段);
- 第三方 CSS/JS 的 CDN 地址改为本站同源地址 /schedule-kernel/**(版本与上游一致);
- 去掉上游的 favicon/manifest 一组、Google Analytics 一段;
- 去掉上游页头(#main-nav)与其 GitHub / 捐助 / 反馈三行,替换为署名与许可信息
("Made By Tristan Jogminas" 原样保留);
-
与 meta description 改成本内核的说明。
- 其余标签、结构、类名逐字符未动。
2. 新增文件 js/zc-bridge.js(我们写的,不含上游代码)
- 把上游硬编码的 4 个后端根路径重写到本站 /api/zotcourse/**:
GET /catalogue → /api/zotcourse/catalogue
GET /search → /api/zotcourse/search
GET /schedule/load → /api/zotcourse/schedule/load
POST /schedules/add → /api/zotcourse/schedules/add
因此上游 js/zotcourse.js **一个字节都不用改**(可校验哈希)。
- 另外给课表保存/读取请求附加一个学期参数(YearTerm),供本站数据层落库使用。
3. 后端接口由本站实现(Next.js route handlers),响应形状照抄上游 Flask:
- /api/zotcourse/catalogue 课程简介 HTML(改为 Anteater API 数据,结构同上游)
- /api/zotcourse/search WebSOC 课程/section 列表(Anteater API → 上游三级树)
- /api/zotcourse/schedule/load 已保存课表(登录用户走 plans/plan_sections;
未登录走匿名 cookie 草稿)
- /api/zotcourse/schedules/add 保存课表(同上)
- /api/zotcourse/app 内核文档本体(等价于上游 Flask 的 GET /)
三、如何获取对应源码
--------------------------------------------------------------------------------
- 上游 Zotcourse 源码:https://github.com/jogplus/zotcourse (GPL-3.0)
- 本项目(含本内核的全部改动与说明):
https://github.com/ZotCopilot/ZotCopilot
重点文件:
apps/web/src/app/(main)/(app)/schedule/VENDOR.md 本内核的改动登记
apps/web/public/schedule-kernel/** 随部署发布的内核资产
apps/web/src/server/zotcourse/** 数据层(4 个接口的等价实现)
apps/web/src/app/api/zotcourse/** 路由层
vendor/zotcourse/** 上游源码快照
四、第三方组件
--------------------------------------------------------------------------------
内核依赖的第三方前端库(jQuery / moment / Popper / Bootstrap / Split.js /
DataTables / Chart.js / FullCalendar / Spectrum / toastr / select2 /
Font Awesome / ics.js)的版本、来源与许可见本目录 THIRD-PARTY-NOTICES.md。
它们各自保留原许可(多为 MIT;Font Awesome 的字体为 SIL OFL 1.1、CSS 为 CC BY 4.0)。
五、免责
--------------------------------------------------------------------------------
本内核的课程数据来自 UCI WebSOC(经 Anteater API 整理),仅供参考;
选课、退课与任何注册动作请以 UCI 官方系统为准。本内核不执行任何自动抢课/注册动作。