From 8a9629650a4d9c693290678cfbc56c11ff071de7 Mon Sep 17 00:00:00 2001 From: laoyang Date: Wed, 21 Oct 2026 20:01:23 +0800 Subject: [PATCH] =?UTF-8?q?v72=EF=BC=9A=E6=97=A5=E5=8E=86=E6=9C=AC?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8E=E7=AE=A1=E7=90=86=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E6=88=90=E4=B8=80=E5=BC=A0=E6=B8=85=E5=8D=95=EF=BC=8C=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E6=94=B9=E7=94=A8=E5=86=85=E7=BD=AE=E8=B0=83=E8=89=B2?= =?UTF-8?q?=E6=A8=A1=E6=80=81=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户 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 里残留 : 原生取色控件既不能有子元素、也没有 data-cp-open ⇒ 按钮回显失效(找不到 .cp-trigger-dot/hex)+ 模态框永远打不开, 用户点到的还是 Windows 取色框。改成 + \ No newline at end of file diff --git a/templates/_color_picker_modal.php b/templates/_color_picker_modal.php new file mode 100644 index 0000000..24732b7 --- /dev/null +++ b/templates/_color_picker_modal.php @@ -0,0 +1,253 @@ +`(用户明确不要) + * + * 用户原话:「选颜色那个地方点了之后是弹出 Windows 的一个颜色选择框,这个不好, + * 我们把它改成内置的……不要弹 Windows 的,那个一个体验也不好, + * 另外一个也不好看。」 + * + * `` 的外观与交互**完全由操作系统决定**:Windows 上弹出的是 + * 那个带色轮和 HSV 滑条的老式对话框,macOS 上是另一套,手机上是第三套。 + * ⇒ 站点自己控制不了,也无法与本站的圆角/配色对齐。所以整站不再用它取色。 + * + * ⚠️ **保留自定义 hex 输入**:预置色板只有 16 个,用户想要某个精确颜色时 + * 手输 `#RRGGBB` 是最快的路(也让"从别处复制一个色值"变得可能)。 + * 输入非法时不提交非法值 —— 按钮保持 disabled,输入框边框变红。 + * + * ⚠️ **键盘与焦点**:打开时焦点进模态框、关闭时焦点回触发按钮。 + * 不这么做的话,键盘用户关掉后焦点掉到 `body`,Tab 会从页首重新开始。 + * + * ⚠️ **焦点陷阱(Tab 循环)**:模态框开着时 Tab 不许跑到背后的页面上 —— + * 这是 `aria-modal="true"` 的语义要求,也是"看起来能点但其实点不到"的体验修复。 + * + * @var array $cpPalette 预置色板('#RRGGBB' 列表) + * @var string $cpModalTitle 可选,标题 + */ +$cpPalette = array_values(array_filter((array)($cpPalette ?? []), 'is_string')); +$cpModalTitle = (string)($cpModalTitle ?? '选个颜色'); +if (!$cpPalette) { + // 没有色板就没有"点一下选中"的价值,只剩 hex 输入 —— 但仍然比系统框好看 + $cpPalette = ['#4A7C82']; +} +?> + + \ No newline at end of file diff --git a/templates/calendar/_settings_menu.php b/templates/calendar/_settings_menu.php index b7852c9..6472f71 100644 --- a/templates/calendar/_settings_menu.php +++ b/templates/calendar/_settings_menu.php @@ -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 {
@@ -65,109 +121,201 @@ $canWrite = \App\Auth::canWrite();
-
-

我自己的

- -

还没有日历本。

- -
- - - - - - - - - - - - - - - -
名字颜色共享给操作
- - - 系统预置 + 套进大表单里(套了就整个失效)。 */ ?> + + + + + + +
+

+ 全部日历本 + 勾上就在日历里画出来;取消勾选只是不显示,数据都还在 +

+ + +

还没有日历本。

+ +
+ $c): ?> + + +
+ 别人共享给我的 + 只读的不能改,要改请找主人 +
+ + +
+ + + + + + $cid]; + $cpLabel = '改「' . (string)$c['name'] . '」的颜色'; + require __DIR__ . '/../_color_picker.php'; + ?> + + + + + + + + + + + + 系统预置 -
- - - - - - 不共享 - -
- - - - 里,现在
撤了,这里就地给个按钮。 */ ?> - - - - - - - - - -
- - - + + $c['owner_name'] ?? '', + 'my_nickname' => $c['owner_nick'] ?? '', + ]); + ?> + 共享给我 + + + + + + + + + + 不可修改 + + + data-cal-id="" + data-cal-name="">共享 + + 导出 + + 编辑 +
+ + + +
-
-
- - 导出 ics - - 编辑 -
- - - -
- - 不可改 - -
-
+ + + + + + +
+ 已共享给 + + + +
+ + + + +
+ +
+ + +
+ +
+ + +

+ 观影、旅行、有截止时间的任务会自动出现在这里,不用另建本子。 +

+ +
+ + 取消
- + + + + +
+

默认打开时看 + 打开日程页默认落在哪个视图

+
+ + + +
+ $vw): ?> + + +
+
+ +
+
+ 只能导进自定义本 —— 观影/旅行两本是派生的,塞进去就成了孤儿日程。 */ ?>

导入 ics @@ -191,17 +339,11 @@ $canWrite = \App\Auth::canWrite();

- .files` 始终是空的 → 带 required 的提交会被 - 浏览器原生校验拦下,弹「请选择一个文本。」(用户报的就是这句)。 */ - $sdName = 'ics'; $sdId = 'im-file'; $sdAccept = '.ics,text/calendar'; - $sdMultiple = false; $sdRequired = true; $sdStage = false; - require __DIR__ . '/../_stage_drop.php'; ?> + +
@@ -211,12 +353,7 @@ $canWrite = \App\Auth::canWrite();
- +

CalDAV 订阅 @@ -241,42 +378,13 @@ $canWrite = \App\Auth::canWrite();

- -
-

别人共享给我的

-
- - - - - - - - - - - - -
名字谁的我的权限
$c['owner_name'] ?? '', 'my_nickname' => $c['owner_nick'] ?? ''])) ?>
-
-
- - ` 兜底。12 本 ⇒ 整页 5.9 MB / 近万个 input - ⇒ 浏览器与密码管理器逐个扫描,慢得能感觉到。 - 收成一份之后:**一整套选人组件**(1 份 JSON + 1 份 noscript), - 与日历本数无关 —— 再多本日历页也不会再变大。 - - ⚠️ 选人组件是**单选**(`$ppMode='single'`):行上按钮被点开时,用 - `window.ppSetSelected('person_id', 0, panel)` 把它重置成"未选", - 再让用户挑 —— 否则上一次挑的人会留在表单里(看着像"已经选好了")。 */ ?> + ⇒ 浏览器与密码管理器逐个扫描,慢得能感觉到。 */ ?>