v29 第 29 批(9 条):日程定位/复选框提示/名册错乱三处真因修复 + 读书落盘 + 导航四设置 + 笔记阅读态与共享
前 4 条是"上批改了但用户仍报"的,这次先拿真机证据再动手,三处真因如下:
1. 首页没定位到红线 —— 真根因:定位脚本的 PHP 条件是
`if (!$todayEvents || empty($timed))`,**今天只有全天日程时整段脚本不渲染**
(实测 hasScript=False、scrollTop=0),而 .ag-grid(0–24h) 与红线都在。
有分时段日程时定位其实完全正确(偏差 0px)。已改成 `if (!$todayEvents)`。
2. 任务复选框提示还在 —— 真根因:`_task_check.php` 里那句无障碍文字
`<span class="visually-hidden">` 用的类名**在 app.css 里从来没有定义过**
(项目一直只用 .sr-only)→ 没有规则 = 普通 span = 直接可见。
已把两个类名合并到同一条规则(clip 隐藏,仍可读屏)。
3. 名册完全错乱 —— 真根因:v29 重写平铺列表时**漏了一个 `</div>`**(闭合 .person),
浏览器把下一张卡嵌进上一张里,实测 .person-main 只剩 24~151px(本该 ~800px)。
`php -l` 与全部静态断言都抓不到,只有真机量 DOM 才现形。已补上闭合。
另把 v28 引入的多列 grid 改回单列(它与 content-visibility 冲突)+窄屏动作区折行。
4. 读书慢 —— 按用户给的思路「做一个同步,然后落盘」:
新增 weread_snapshots 表 + App\WeReadCache(按人+数据集存 JSON);
渲染路径改走 notebooksCached()/readStatsCached()(永不联网);
同步从"渲染之前"挪到"**响应之后**"(queueBackgroundSync + fastcgi_finish_request)。
5. 导航设置改成右上角**下拉菜单 + 四视图**(addr/general/board/engine),
表单带 back 域 → 保存后回原来那一项。
🔴 顺带修掉一个真 bug:`if (!$inSettings && $canWrite)` 的 endif 漂到了文件末尾,
把 board/engine 两个视图也包进了"非设置态" → 打开时标题对、**内容是空的**。
6. 笔记列表缩略图:cover → contain + 固定高度(按比例完整显示,不裁切)。
7. 笔记段落编辑器:加 Markdown 工具条 + 斜线命令(行首打 /co → 回车补全代码块),
两者共用同一份命令表。
8. 笔记点进来默认**阅读态**(图文混排、附件在最下方、图片四档宽度、点「编辑」才可改);
清单块并入 Markdown —— 但**历史 list 块转写成 `- 项` 文本,老数据不丢**。
9. 笔记共享改成**逐人 + 权限**(note_shares,与 resource_shares 同构);
可见性收敛成全站唯一的 Note::VIS_COND;迁移用一次性哨兵。
This commit is contained in:
@@ -93,7 +93,9 @@ $canWrite = \App\Auth::canWrite();
|
||||
$firstImg = '';
|
||||
foreach ((array)$n['blocks'] as $b) {
|
||||
if ((string)$b['kind'] === 'image' && (string)$b['content'] !== '') {
|
||||
$firstImg = (string)$b['content'];
|
||||
// ⚠️ 图片块内容可能是 `key|50`(v29 第 8 条:可调宽度)。
|
||||
// 取 key 时要把 `|宽度` 去掉,否则拿它当 key 查会 404。
|
||||
$firstImg = trim(explode('|', (string)$b['content'])[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -101,8 +103,14 @@ $canWrite = \App\Auth::canWrite();
|
||||
<article class="note-card" data-note="<?= $nid ?>">
|
||||
<header class="note-head">
|
||||
<span class="note-meta">
|
||||
<?php if (!empty($n['is_shared'])): ?>
|
||||
<span class="note-share" title="全家可见">共享</span>
|
||||
<?php
|
||||
/* 🔴 v29 第 9 条:共享状态从"共享/私有"两态改成**按人数**显示 ——
|
||||
共享已升级成"逐人 + 权限",只说"共享"已经说不清共享给了几个人。
|
||||
$shareN 是路由一次查好的映射(别在循环里再查库)。 */
|
||||
$sN = (int)($shareN[$nid] ?? 0);
|
||||
?>
|
||||
<?php if ($sN > 0): ?>
|
||||
<span class="note-share" title="共享给 <?= $sN ?> 个人">共享 <?= $sN ?></span>
|
||||
<?php else: ?>
|
||||
<span class="note-private" title="只有自己可见">私有</span>
|
||||
<?php endif; ?>
|
||||
@@ -110,7 +118,7 @@ $canWrite = \App\Auth::canWrite();
|
||||
</span>
|
||||
<?php if ($mine && $canWrite): ?>
|
||||
<span class="note-ops">
|
||||
<a class="note-op" href="<?= e(url('notes/form', ['id' => $nid])) ?>"
|
||||
<a class="note-op" href="<?= e(url('notes/form', ['id' => $nid, 'edit' => 1])) ?>"
|
||||
title="编辑这条笔记">改</a>
|
||||
<form method="post" action="<?= e(url('notes/destroy')) ?>" class="inline-form"
|
||||
onsubmit="return confirm('删掉这条笔记?');">
|
||||
@@ -122,6 +130,7 @@ $canWrite = \App\Auth::canWrite();
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
|
||||
<?php /* 🔴 v29 第 8 条:卡片点进去是**阅读态**(不是编辑器) */ ?>
|
||||
<a class="note-hit" href="<?= e(url('notes/form', ['id' => $nid])) ?>">
|
||||
<?php if ($title !== ''): ?>
|
||||
<h3 class="note-title"><?= e($title) ?></h3>
|
||||
@@ -133,7 +142,13 @@ $canWrite = \App\Auth::canWrite();
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
|
||||
<?php /* 图片:等比缩放到卡片宽度,放在摘要下方(用户第 12 条原话) */ ?>
|
||||
<?php /* 🔴 v29 第 6 条:「笔记,首页显示的时候,里面的图片,和行程的类似,
|
||||
把图片按照比例缩放到固定的高度或者宽度,放在下面就行了。」
|
||||
⇒ 卡片下方的缩略图改成**固定高度 + 等比缩放**(`object-fit: cover`
|
||||
会裁切,用户看到的不再是完整的那张图;这里要的是"完整 + 整齐")。
|
||||
⇒ 用 `object-fit: contain` + 固定高度:图片**完整**显示、
|
||||
高度**整齐划一**,宽的那张两侧留白(比裁掉内容好,也比卡片高矮不一好)。
|
||||
对比"行程"那边的做法(用户说"和行程的类似"):同一套观感。 */ ?>
|
||||
<?php if ($firstImg !== ''): ?>
|
||||
<div class="note-thumb">
|
||||
<img src="<?= e(media_url($firstImg)) ?>" alt="" loading="lazy" decoding="async">
|
||||
|
||||
Reference in New Issue
Block a user