Commit Graph

131 Commits

Author SHA1 Message Date
6249b14096 Merge pull request 'terry-media-adaptive-trial' (#10) from terry-media-adaptive-trial into main
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 25s
Reviewed-on: #10
2026-05-29 16:21:39 +00:00
TerryM
ad885f578c Merge origin/main into terry-media-adaptive-trial
Combine collapsible long-text (main) with adaptive image frame
(this branch). Resolved conflict in ImageWithTextBubble.tsx by
keeping both SingleImageFrame and CollapsibleText imports.
2026-05-30 00:17:10 +08:00
TerryM
b370bf756c ci: free disk space on self-hosted runner before each job
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 33s
Add a pre-checkout cleanup step that removes stale act caches,
old setup-node/npm cache entries, dangling docker resources, and
leftover /tmp files older than 2h. Prevents recurring ENOSPC
failures on the EC2 self-hosted runner.

Note: the very first run after this change may still fail if the
runner disk was already at 100% beforehand; one-time manual cleanup
on the host is required to bootstrap.
2026-05-30 00:10:39 +08:00
TerryM
f3c51725fb Merge terry-staging into main: 消息气泡长文字可展开/收起
Some checks failed
Deploy to Frontend Servers / deploy (push) Failing after 6s
2026-05-30 00:03:54 +08:00
TerryM
64a41359b4 style: 展开/收起按钮去掉背景胶囊样式,仅保留文字+chevron 2026-05-29 23:58:14 +08:00
TerryM
b283ba74da feat: 消息气泡长文字支持「展开全部/收起全部」折叠
- 新增 CollapsibleText 组件:超过 8 行文字自动折叠,按行高对齐裁切,底部柔和渐隐遮罩暗示有更多内容
- 折叠按钮左对齐,胶囊样式 + chevron 图标,hover 浅背景高亮,点击 chevron 旋转 180°
- 应用到全部 5 种气泡:Text/ImageWithText/Album/Video/FileDoc
- 动画统一使用 motion 包的 EASE_OUT 缓动,尊重 reducedMotion=user
- i18n 七种语言新增 showMore/showLess 文案
2026-05-29 23:49:59 +08:00
TerryM
471d29bec9 fix: 相册改用绝对定位百分比布局,彻底消除底部黑边
CSS grid + aspect-ratio 下 fr 行在部分浏览器不撑满,留出 bg-black。
改为 Telegram 同款:算法输出每块 {left,top,width,height} 百分比坐标,
图块绝对定位铺满容器。顺带修复竖主图在左时右侧堆叠图高度算错未填满列。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 22:56:20 +08:00
TerryM
789920d2b9 fix: 修复相册底部黑边(grid 用 aspect-ratio 时 fr 行不撑满)
aspect-ratio 单独作用在 grid 上时,容器高度对 fr 行属"非确定高度",
fr 退化为 max-content,行被压成内容高度,容器底部露出 bg-black。
改为:aspect-ratio + maxHeight 放外层 wrapper,内层 grid 用 absolute
inset-0 撑满,获得确定高度,fr 行正常拉伸,黑边消除。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 22:37:16 +08:00
TerryM
0035457c6d feat: 媒体流图片自适应显示(单图/2图/Telegram式相册)
- 单图气泡按真实比例显示:横图限高260px、过高裁上下;竖图完整铺满宽度不裁、无黑边
- 2张同类相册:都竖图左右并排、都横图上下堆叠,按比例不裁
- 3+张相册:Telegram式马赛克拼贴(竖主图占左+其余堆右 / 横主图占顶+其余排底)
- 图片比例优先用后端width/height,缺失时从加载后的naturalWidth/Height读取
- 新增 constants/media.ts 统一尺寸规范;albumLayout 纯算法附单测

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 22:16:55 +08:00
TerryM
a7792c117d fix: 资料流提早显现内容,避免空白缺口被误认为到底
Reveal 加 300px 前置 viewport margin,内容在进入视口前淡入;
无限滚动预加载触发线 200px → 1000px,下一页提前请求。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 19:04:31 +08:00
TerryM
b66c35be11 Merge terry-staging into main: format fix (PublicLayout)
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 21s
2026-05-29 18:19:58 +08:00
TerryM
33a466841c style: prettier 格式化 PublicLayout 以修复 format:check
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 18:19:08 +08:00
b4f9b5b304 Merge pull request 'terry-staging' (#9) from terry-staging into main
Some checks failed
Deploy to Frontend Servers / deploy (push) Failing after 12s
Reviewed-on: #9
2026-05-29 10:17:12 +00:00
3e68bb4334 Merge branch 'main' into terry-staging 2026-05-29 10:17:00 +00:00
TerryM
042635528a feat: 灯箱支持下载、底部缩略图居中、关闭后保留滚动位置
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 18:11:30 +08:00
TerryM
e04dd7dc2a fix: 修复相册缩略图无法显示(dev 代理 + 前端兜底)
- vite: /uploads 代理指向源站根而非 /apnew 前缀,relative thumbnailUrl
  (/uploads/thumb…) 在 dev 下不再落到 SPA index.html
- BubbleImage: 新增 fallbackSrc 候选链,缩略图加载失败时自动回退到绝对
  thumbUrl/url,全部失败才显示占位符
- AlbumBubble / ImageLightbox: 缩略图传入绝对地址作为兜底

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:59:33 +08:00
TerryM
4a097bad9d feat: 热门榜单移除预览按钮,仅保留下载
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:58:30 +08:00
TerryM
1f8772f645 feat: 相册点击直接进大图查看器,移除「选择图片」列表
- AlbumBubble: 点 +N 直接打开全屏查看器(从该图开始),删除中间的选择列表弹窗
- ImageLightbox: 底部加可滑动缩略图条(当前高亮+自动滚动定位),顶栏加下载按钮
- 下载按钮保证此前藏在 +N 列表里的图片仍可下载

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:50:53 +08:00
TerryM
b22ecc22ad feat: 首页「最新更新」桌面端统一为手机端竖向气泡流(responsive)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:49:58 +08:00
TerryM
db5da8a841 feat: 优先使用 thumbUrl 作为 PDF 封面大图 2026-05-29 17:42:37 +08:00
TerryM
54bdbbc0e9 feat: 点击 logo 在首页时 scroll to top 2026-05-29 17:27:54 +08:00
3fa0a3ccc2 Merge pull request 'terry-staging' (#8) from terry-staging into main
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 22s
Reviewed-on: #8
2026-05-29 08:40:53 +00:00
TerryM
7eb2aa8b5b feat: 区块标题改回「热门资料」/ Popular assets
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 15:42:16 +08:00
TerryM
512fa53c2b feat: 首页热门区改为「社群常用资料」榜单(封面+名次,零数字)
- 新增 PopularRankList:前3名奖牌🥇🥈🥉 + 4·5灰序号,封面缩略图,
  类型·分类·更新时间,预览/下载按钮;与「最新更新」「官方推荐」版式区分
- 无封面时按资料类型渲染渐变+图标兜底(纯CSS),封面加载失败亦回退
- 分类名复用 cleanCategoryDisplayName,与全站一致(去掉括号后缀)
- i18n popularSection 改为 社群常用资料 / Community Favorites
- 新增后端接口契约文档 docs/specs/2026-05-29-popular-resources-section.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 14:53:52 +08:00
TerryM
cfae09a7d3 fix: make window the vertical scroller so back-to-top works
body had height:100% + overflow-x:hidden, which forces computed
overflow-y to `auto` — turning body into its own scroll box at viewport
height. window.scrollY then never moved, so the back-to-top button never
appeared and window.scrollTo was a no-op.

Apply overflow-x:hidden to <html> only; it propagates to the viewport
(still clipping horizontal overflow) while leaving the window as the
vertical scroller.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:30:44 +08:00
TerryM
4f6b4a498f fix: scope back-to-top to browse, speed up reveal, reset scroll on sort change
- BackToTop now only mounts on the /browse feed (covers all / latest /
  popular / search) instead of every route.
- Reveal animation duration cut 0.4s -> 0.25s so scrolled-in content
  appears faster.
- ScrollToTop also watches `search`, so switching between sort views on
  the same /browse path (e.g. 全部资料 <-> 热门资料) returns to the top.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:22:40 +08:00
TerryM
559c4f19c8 feat: image error placeholder + scroll-to-top on navigation
Image bubbles previously used the raw filename as alt text, so a failed
asset load exposed the file name in the broken-image box. Add a reusable
BubbleImage that renders an empty alt and falls back to a neutral
placeholder (ImageOff icon) on error; use it in the album, image, and
image-with-text bubbles, and drop the filename from their aria-labels.

Also add a global ScrollToTop that resets the window on route change so
desktop navigation matches mobile (e.g. clicking a category card no
longer lands at the bottom of the new page). Hash navigations are skipped
so #post-<id> deep-link scrolling still works.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:09:09 +08:00
TerryM
4464e6fdc5 fix: fall back to file icon when document thumbnail fails to load
Render the 52x52 preview with an empty alt and an onError handler, so a
broken thumbnail no longer shows the browser's broken-image box (which
leaked the raw filename) — it falls back to the file-type icon instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:08:16 +08:00
TerryM
b252fa113d feat: make entire recommended card clickable to jump to post bubble
Wrap the card in a stretched link overlay so clicking anywhere (not
just the title) navigates to /resource/:id and scrolls to the matching
bubble. Keep the download button above the overlay so it stays
clickable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:08:16 +08:00
87683293da Merge pull request 'style: apply prettier formatting to fix format:check' (#7) from terry-staging into main
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 21s
Reviewed-on: #7
2026-05-29 04:49:48 +00:00
TerryM
f73131dc03 style: apply prettier formatting to fix format:check
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 12:49:22 +08:00
bcd7395e77 Merge pull request 'feat: show attachment preview thumbnail in document bubble' (#6) from terry-staging into main
Some checks failed
Deploy to Frontend Servers / deploy (push) Failing after 11s
Reviewed-on: #6
2026-05-29 04:46:20 +00:00
TerryM
14c3defd23 feat: show attachment preview thumbnail in document bubble
Use thumbnailUrl/posterUrl (and the image url itself for image-type
attachments) inside the 52x52 box of the file/document bubble, falling
back to the file-type icon when no preview is available.

Also tune the deep-link scroll-mt offset (82px / 98px) so a targeted
bubble lands just below the sticky header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 12:40:17 +08:00
TerryM
88a25b6ad4 feat: scroll to post bubble from recommended card + back-to-top button
Some checks failed
Deploy to Frontend Servers / deploy (push) Failing after 14s
Recommended cards already routed to /browse#post-<id>, but the stream had
no logic to scroll to the target bubble — and the post might not be paged
in yet. MessageStream now resolves the #post-<id> hash, auto-loads more
pages until the bubble renders, scrolls to it, and gives it a brief gold
highlight. Bubbles get scroll-mt so they clear the sticky header.

Also adds a global floating back-to-top button (BackToTop) mounted in
PublicLayout, shown after scrolling past 400px.

Bundles related staging UI work already present in the working tree.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 11:50:27 +08:00
TerryM
8e36894851 docs: add website motion & UX design spec 2026-05-29 10:44:54 +08:00
TerryM
35e25fa023 fix: hide language selector in desktop menu
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 20s
2026-05-29 01:08:26 +08:00
TerryM
9b21b7e301 feat: add public page fade in 2026-05-29 00:50:15 +08:00
TerryM
9afb4de859 docs: add Cloudflare cache purge manual 2026-05-29 00:25:14 +08:00
TerryM
026b037c5b fix: remove home category height animation
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 21s
2026-05-29 00:20:41 +08:00
TerryM
bca69fe3bd fix: use mark-only favicon
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 22s
2026-05-28 23:48:11 +08:00
TerryM
f7828d8776 Avoid search cache loading flicker 2026-05-28 23:17:49 +08:00
TerryM
320739f91b Add stale cache for public data 2026-05-28 23:09:18 +08:00
TerryM
5ae9647465 Add header reveal animations 2026-05-28 22:57:05 +08:00
TerryM
b59fd82006 Refine mobile dropdown close behavior 2026-05-28 22:41:23 +08:00
TerryM
b24529afc4 feat: enable category slug pages 2026-05-28 22:36:08 +08:00
TerryM
f183a401fc feat: enhance SEO with meta tags and sitemap, add DocumentMeta component 2026-05-28 22:28:23 +08:00
TerryM
f1a0e9ab40 feat: animate dropdown menus 2026-05-28 22:01:17 +08:00
TerryM
4e44636d68 feat: add global animation styles 2026-05-28 21:55:17 +08:00
TerryM
15d873be63 fix: align popular sorting links
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 20s
2026-05-28 18:52:01 +08:00
TerryM
6f901f48e1 feat: add mobile search panel 2026-05-28 18:51:55 +08:00