v72:日历本显示与管理合并成一张清单,颜色改用内置调色模态框

用户 2026-10-21 两条:
  「日历设置里面日历本显示和日历管理可以放在一起」
  「预制的颜色点了之后没反应……选颜色那个地方点了之后是弹出 Windows 的
    一个颜色选择框,这个不好,我们把它改成内置的」

改动:
· calendar/display 整页删除,并入 calendar/calendars(保留 302 老地址)
· 新增 templates/_color_picker.php(按钮 + 值载体,表单/独立双模式)
· 新增 templates/_color_picker_modal.php(全页唯一模态框,预置色 + hex 手输)
· 共享本提到同一清单,标注归属与权限;owner 校验服务端做
· 清掉 display.php 时代遗留的死 CSS(.cal-set-page / .cal-set-book* 等)

部署中抓出并修掉两处真问题:
· 部署脚本「清掉被取代文件」清单漏了 display.php —— tar 只新增/覆盖,
  git rm 掉的文件在线上永远留着,被第 7 段断言拦下(断言是对的,缺的是删除步骤)
· _color_picker.php 里残留 <input type="color" class="cp-trigger">:
  原生取色控件既不能有子元素、也没有 data-cp-open ⇒
  按钮回显失效(找不到 .cp-trigger-dot/hex)+ 模态框永远打不开,
  用户点到的还是 Windows 取色框。改成 <button type="button"> + 色点 + hex
  (v72 探针在修复前实测 2 条红,修复后 50/0)
This commit is contained in:
2026-10-21 20:01:23 +08:00
parent b45cf671d1
commit 8a9629650a
7 changed files with 1030 additions and 309 deletions
+13 -3
View File
@@ -23,11 +23,21 @@
* 三处都是"☰ → 一串列表"。
*
* 四行(顺序是用户点名的):
* ① 显示设置 → `calendar/display`(默认视图 + 显示哪些本子)★ 本批新增的独立页
* ② 日历本管理 → `calendar/calendars`(改名/换色/共享/导入)
* ① 显示设置 → **v72 起与「日历本管理」合并**:两行都落到 `calendar/calendars`
* (用 `#cal-books` 锚点区分落点,见下)
* ② 日历本管理 → `calendar/calendars`(显隐 + 改名/换色/共享/导入,全在一页)
* ③ 订阅管理 → `calendar/calendars#caldav`(只读订阅进来的外部日历)
* ④ DAV 口令 → `settings/me#dav`(日历 + 通讯录共用那一把)
*
* 🔴 v72(用户 2026-10-21):「日历设置里面日历本显示和日历管理可以放在一起啊。
* 就是把日历本全都列出来,然后显示不显示,加个复选框就行了。」
* ⇒ ① 与 ② **现在是同一页**。但**四行都留着**,原因:
* · 用户 2026-10-15 第 6 条明确点名"下拉就是这四行",少一行他会以为功能没了;
* · 两行落到同一页、用锚点定位到各自那一段 —— 点"显示设置"落在清单、
* 点"日历本管理"也落在清单,但**用户想找的东西就在那儿**,不用再跳。
* ⚠️ 千万别因为"合并了"就把菜单砍成三行:那是**把用户的入口拿走**,
* 而他这次要的是"放一起",不是"少一个入口"。
*
* 用法(require 前 set 好):
* $setCurrent 当前页 key('view'|'books'|'dav')用来高亮;
* '' 也行(比如从旅程/观影页挂过来时没有当前项)
@@ -57,7 +67,7 @@ $setIcon = static function (string $name): string {
<div class="menu-list cal-set-list">
<?php /* ⚠️ 这里**只放列表**(不做任何表单)—— 见文件头那段「为什么必须这么改」。
表单全在各自的目标页上;下拉绝不随"日历本数量"变长。 */ ?>
<a href="<?= e(url('calendar/display')) ?>"<?= $setOn('view') ?>><?= $setIcon('view') ?><span>显示设置</span></a>
<a href="<?= e(url('calendar/calendars')) ?>#cal-books"<?= $setOn('view') ?>><?= $setIcon('view') ?><span>显示设置</span></a>
<a href="<?= e(url('calendar/calendars')) ?>"<?= $setOn('books') ?>><?= $setIcon('books') ?><span>日历本管理</span></a>
<a href="<?= e(url('calendar/calendars')) ?>#caldav"<?= $setOn('sub') ?>><?= $setIcon('sub') ?><span>订阅管理</span></a>
<?php /* v24 第 22 批:口令改成通用 DAV 口令(日历 + 通讯录共用)。落到能**生成口令**的