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 官方系统为准。本内核不执行任何自动抢课/注册动作。