mole404
|
bc3751b394
|
feat: 侧栏可折叠 + 上传结果按钮不再压标签 + 文案与对齐调整
1) 上传结果行:「复制全部 / 清除」原来绝对定位盖在右上角,压住 Markdown with link /
Thumbnail url 两个标签,且只在 hover 时出现(手机没有 hover,等于点不到)。
改为与标签栏同一行的左右两段:标签栏 flex-1 自行横向滚动,按钮固定右侧、常显。
(div 开闭数已核对:与原始一致,只多一层包装)
2) 侧栏品牌块去掉 sm:justify-center → 桌面端 logo + 站点名靠左(手机端本就不居中,无影响)
3) 文案:「设置」→「用户设置」(侧栏导航项、页面大标题「基础设置」、顶栏标题、头像菜单)
4) 桌面端侧栏可折叠(手机端抽屉行为完全不变):
- 折叠状态 = <html class="sidebar-collapsed">,由 stores/sidebar.js 管理并记入 localStorage;
app.blade.php 的首屏内联脚本在样式之前就贴类,不会「先展开再收起」地抖一下
- 折叠宽度 4rem 只留图标;文字、分组标题、容量区整体隐藏;导航项居中;每项带 title 便于悬停辨认
- 折叠规则全部在 @media (min-width: 640px) 内,并用选择器权重(html.sidebar-collapsed #app-sidebar)
压过工具类 sm:w-64 / sm:ml-64 —— 不依赖打包顺序(components 层总在 utilities 之前)
- 顶栏 ☰ 桌面端也显示:桌面=折叠/展开、手机=抽屉,同一语义;toggleSmart() 按视口分流
- 我的图片页:图片墙按容器宽度算布局,侧栏一动必须重排 —— 监听 lsky:sidebar-toggled,
等 300ms 宽度动画结束后 justifiedGallery('norewind') + viewer.update() + ds.setSelectables()
(这三个 API 在翻页加载数据时本来就在用)
- 不做「悬停临时展开」:那会让图片墙每次鼠标划过都重排
验证:
- 新增 test/sidebar.test.mjs(6 例,jsdom):默认展开 / 存过 collapsed 则加载即贴类 /
折叠写存储并派发事件 / 展开还原 / 手机端只开抽屉不动折叠态 / 桌面端走折叠。
与既有 70 例一起由 npm test 串行执行(CI 那步就是 npm test)
- 用真编译产物 + 真实 DOM 结构在 Chromium 里量计算样式:
桌面折叠 → 侧栏 64px、内容左边距 64px、文字/分组/容量隐藏、图标居中偏差 0px、按钮与标签零重叠;
桌面展开 → 256px / 256px;手机端即使贴了折叠类 → 侧栏仍 75% 抽屉、无隐藏、边距 0(确认零影响)
- php -l 全仓库通过;php artisan view:cache 全量编译通过;verify_repo.py 通过;
context-js.js 两份仍字节一致(e114c840…,长按与点击防护未动)
|
2026-09-29 02:00:53 +08:00 |
|
mole404
|
7c3188e25a
|
refactor(源码): 应用源码 vendored 进 src/ + 上游 pin 升级到 38d52c46(2025-11-24)
上一版是「钉死上游 commit、构建时拉 archive、再用 overlay/ 叠加补丁」。但上游已明示停止维护
(README 里 2024-12-28 起挂着警告:「开源版本已停止维护,不再进行新特性更新和 bug 修复」),
所以把源码放进本仓库:构建不再依赖 github.com/lsky-org 长期可用,之后要改 PHP 代码直接改
src/ 提交即可,不必再维护叠加机制。
1) 上游 pin:911275c(2023-05-16)→ 38d52c4609eb85236b45ac75acac2ced55174953(2025-11-24)。
中间 32 个提交只动了 9 个文件,**数据库迁移 0 处**,所以升级不碰站点数据(SQLite 结构不变)。
吃进三个真实修复:图片格式转换时不同图片共用同一个临时文件(并发上传会变成同一张图,
默认配置即触发)、加水印后丢质量参数、SVG 支持;另有 laravel 9.52.4→9.52.17、
phpseclib 3.0.19→3.0.43、commonmark 2.3.9→2.6.0、aws-sdk-php 等一串依赖安全升级。
2) vendored 源码:src/ = 上游 38d52c46 的完整树(304 个文件、8.1MB,按 commit 精确复制,
文件数与上游 git 树一致)。我们的三个补丁文件就地打上补丁,取消 overlay/。
3) Dockerfile:去掉 curl 下载 archive 那一层,改成 COPY src/;自证拆成两组 ——
「自证 1 上游纯净性」ImageService.php / convention.php / public/index.php / routes/web.php /
composer.lock 必须等于上游 md5;「自证 2 补丁产物」三个补丁文件 md5 + 关键标记 grep。
快照被误改、补丁丢了,构建期就拦下。
4) 新增维护脚本:tools/diff-vs-upstream.sh(拉上游快照做全树对比 + 白名单校验:除三个补丁文件
外不许有别的改动,同时可重生成 patches/ios-longpress.patch)、tools/vendor-upstream.sh
(换 pin 时重新 vendor,自动保留补丁文件并打印上游侧差异)。
5) 测试与文档:jsdom 测试默认路径改指 src/public/js/context-js/context-js.js,新增两条结构自检
(两份 context-js.js 必须一致、blade 必须带 ?v= 版本串)→ 70/70 通过;README 重写
「代码在仓库哪里、怎么改、怎么升 pin」,并修正许可证说明(应用 GPL-3.0 / 打包 AGPL-3.0)。
数据安全逻辑一字未动:entrypoint.sh 仍是「版本标记不一致才同步」,排除
.env / storage / database / bootstrap/cache / public/i。换镜像后容器自动把新代码同步进卷。
|
2026-09-28 22:36:48 +08:00 |
|
mole404
|
565aa3fefc
|
feat: iOS 长按菜单修复 + 源码钉死在 911275c + GHCR 发布
问题:iOS WebKit 永远不派发 contextmenu(WebKit bug 213953),长按图片只弹系统
callout,导致"我的图片"页的自定义菜单在 iPhone/iPad 上完全不可用
(resources/js/context-js.js 的菜单只挂在 contextmenu 上)。
改动:
- overlay/context-js.js:纯增量补丁。新增仅 iOS 生效的长按分支(touchstart+500ms,
移动 >10px / 多指 / 短按都取消),复用原本的开菜单逻辑(beforeOpen/afterOpen 照旧);
注入 -webkit-touch-callout:none 压掉原生菜单(只作用于本库绑定的元素范围);
抬手吞掉 iOS 补发的 click,避免长按后误开图片预览;长按与 contextmenu 之间 700ms 去重。
判定只在 iPad/iPhone/iPod(含 iPadOS 伪装的 MacIntel+maxTouchPoints>1)为真,
Android / Windows / 真 Mac(含 M 系列,maxTouchPoints=0)一行新代码都不执行。
- overlay/images.blade.php:只给脚本加 ?v=ios-longpress,绕开 Safari 的启发式缓存
- Dockerfile:源码钉死 911275c(= 2024-04-29 那版线上镜像使用的 master HEAD);
基础镜像显式 bookworm;install-php-extensions 钉版本;构建期两处 md5 自证
- .github/workflows/build-image.yaml:替换上游的定时构建,改推 GHCR + 构建后真机自证
(核 md5、记录 PHP/扩展/Debian、真起容器 curl 安装页)
- test/:node + jsdom 行为测试(23 项,覆盖 iOS/iPad/Mac/Android/Windows 五类场景)
- README:补丁原理、跨平台隔离说明、升级/回滚步骤(含"换镜像不会更新已有卷代码"这个坑)
致谢与许可保留上游全部署名与 LICENSE(AGPL-3.0)。
|
2026-09-28 16:41:41 +08:00 |
|