# ggbx — GeoGebra 网页版拓展工具箱

> English version: [README.en.md](README.en.md)

ggbx 是一个围绕 [GeoGebra](https://www.geogebra.org) 网页版构建的非官方拓展工具箱，
面向教学演示场景，主要功能包括：

- **离线运行**：内置本地静态服务器启动脚本（`start.py` / `启动.bat` / `启动.vbs`），
  无需联网即可在浏览器中使用 GeoGebra；
- **多页课件（PPT 式）**：把多个 GeoGebra 画板组织成可翻页的课件，并支持保存为单个 HTML 文件；
- **GGB 脚本 / JavaScript 代码编辑器**：基于 CodeMirror，支持多页编辑，
  编辑内容随课件一起保存到 HTML；
- **中文命令补全**：为 GeoGebra 指令提供中文关键词与拼音补全（`js/kw/`）；
- **文件管理**：支持将课件 HTML 存放在子文件夹中并统一管理；
- **性能优化版 GeoGebra**：捆绑的 GeoGebra 网页应用由本项目作者基于官方源码
  修改编译，包含多项针对大型课件的性能优化（详见下方"版本溯源"及
  [GEOGEBRA-MODIFICATIONS.md](GEOGEBRA-MODIFICATIONS.md)）。

本项目为公益性质，免费提供，**禁止商业使用**。

## 版本溯源（捆绑的 GeoGebra 从何而来）

| 项目 | 内容 |
|---|---|
| 上游项目 | GeoGebra — <https://github.com/geogebra/geogebra> |
| 官方版本 | 5.4.926.0（Web/Classic 6 版本号显示为 6.0.926.0） |
| 基准提交 | `7e907db1f687181650da05165ef91ea76591f125`（"Fix compile error"，2026-07-02 14:02:01 +0200） |
| 源码拉取时间 | 2026-07-03（UTC，自官方 GitHub 仓库浅克隆） |
| 编译产物 | `geogebra/5.0/web3d/`（GWT permutation `1AA944323119FEA358CBF9FEB79D3605`） |
| 修改版源码 | 本压缩包内 `geogebra-source-optimized.tar.gz`（与捆绑编译产物一一对应） |

**作者所做的全部修改**（逐文件细节见
[GEOGEBRA-MODIFICATIONS.md](GEOGEBRA-MODIFICATIONS.md)）：

1. 代数区批量添加对象时的 O(N²) 布局抖动修复（大量对象加载不再卡顿）；
2. Ctrl/Shift+滚轮缩放动画性能修复（中间帧跳过全量依赖图重算，终帧不变）；
3. 代数区/绘图区分隔条拖动性能修复（拖动期间批处理设置通知）；
4. 实验性 Web Worker 曲线采样机制（默认关闭，仅 URL 加
   `?curveSamplingSmokeTest` 时运行，不影响正常使用）；
5. `gradle.properties` 构建环境适配（仅影响编译，不影响运行时行为）；
6. 滑动条工具对话框"步长"字段修复（原来用工具栏滑动条工具创建滑动条时，
   实际增量始终固定为 0.1，输入的步长值被忽略）。

## 版权与许可（重要，请务必阅读）

本仓库中的内容**并非全部同一许可证**，分为三类：

| 内容 | 位置 | 许可证 |
|---|---|---|
| ggbx 自有代码（本项目作者编写） | `js/`（除下述第三方目录外）、`index.html`、`4.0c.html`、`start.py`、各启动脚本等 | **CC BY-NC-SA 4.0**（署名-非商业-相同方式共享，见 [LICENSE.txt](LICENSE.txt)） |
| GeoGebra 应用（作者基于修改版源码自行编译） | `geogebra/` 整个目录 | 代码部分：**EUPL 1.2**（修改版源码已内置于本压缩包）；打包资源（语言文件、图标等）及 `deployggb.js`：**GeoGebra 非商业条款** → 目录整体仅限非商业使用 |
| 第三方开源库 | `js/codemirror/`、`js/FileSaver.js/` | MIT（版权归各自作者） |

因此请注意：

1. **整个软件包整体上仅限非商业使用。** ggbx 自有代码采用 CC BY-NC-SA
   4.0（禁止商用），`geogebra/` 目录亦含非商业许可内容。商业使用
   （收费产品、付费课程平台内嵌等）需**同时**取得本项目作者的许可，
   以及 GeoGebra GmbH 的商业授权（office@geogebra.org，详见
   <https://www.geogebra.org/license>）。
2. **捆绑的 GeoGebra 为非官方修改版**，来源与修改内容见上方"版本溯源"。
   按 EUPL 1.2 第 5 条的要求，与编译产物对应的完整修改版源码
   （`geogebra-source-optimized.tar.gz`）已包含在本压缩包内。
   如需官方版本请访问 <https://www.geogebra.org>。
3. **GeoGebra® 是 GeoGebra GmbH 的注册商标。** ggbx 是独立的非官方项目，
   与 GeoGebra GmbH 无关联，也未获其背书。本项目遵循官方要求进行署名：
   **Made with GeoGebra®** — <https://www.geogebra.org>。
4. 完整的第三方版权与商标声明见 [NOTICE.zh-CN.md](NOTICE.zh-CN.md)。

## 发布 / 二次分发指引

- 若你 fork 或转发本项目，请保留 `readme/` 文件夹内的全部许可与声明文件，
  并按 CC BY-NC-SA 4.0 的要求保持相同许可、注明出处；
- 再分发时请**保留压缩包内的修改版源码 `geogebra-source-optimized.tar.gz`**
  ——EUPL 1.2 第 5 条要求源码随编译产物一同可得，不可省略；
- 发布到 GitHub 等平台时，建议把 `LICENSE.txt` 复制一份到仓库根目录
  （平台会自动识别并展示许可证）；
- 若你进一步修改了 GeoGebra 源码并重新编译，同样需要公开你修改后的
  源码，并更新修改说明。

## 免责声明

本项目按"现状"提供，不附带任何明示或暗示的担保。使用本项目产生的任何风险由使用者自行承担。
