Commit Graph
17 Commits
Author SHA1 Message Date
wangairnan f80cb74d11 feat(web): 调整编辑区为默认吃满视口高度
- index.css:.pn-ae-grid 锁高 calc(100vh - 110px)(topbar 62 + content padding 24×2)、
  min-height 520px;.pn-ae-main 与其 antd .ant-card-body 拉成纵向 flex,把剩余高度让给
  .pn-ae-body-wrap(flex:1 1 auto / min-height 280px / overflow hidden);
  ≤1023px 用 calc(100vh - 102px),≤900px 堆叠断点回落 height:auto 避免压扁
- Editor.tsx:CodeMirror 内联 minHeight 420 → 240,矮视口下可收缩而不撑破容器

原实现高度随内容撑开:新建空文档编辑区仅 420px 偏小,3000 行长文把页面撑到 8.4 万像素、
只能整页滚动。改为视口内布局后滚动交给 CodeMirror 的 .cm-scroller:1280×720 下两种场景
编辑卡均为 610px,长文页面保持一屏(实测见 docs/editor-live-rendering.md §12.7)。
2026-09-11 01:03:14 +08:00
wangairnan 9fcd8cd7cd feat(web): 移除分屏预览,编辑页改用源码模式开关
- AdminEdit:删除 showPreview 分屏块与 MarkdownViewer 引入;顶栏按钮语义改为
  「源码模式 / 退出源码」,作为即时渲染的逃生舱(方案 §4.7),工具栏提示随模式切换
- index.css:移除随分屏预览一并废弃的 .pn-ae-preview 样式

编辑态与阅读态已同构(同一套 --md-* 契约),分屏预览失去存在意义;保留一键源码模式,
装饰层万一出问题用户仍可退回可用的纯源码编辑。
2026-09-11 01:03:08 +08:00
wangairnan 5c5ab3dfc3 feat(web): 新增 Markdown 即时渲染装饰层(Typora 式)
- web/src/editor/:syntax(lezer 语法树 → 装饰描述,纯函数)、reveal(行粒度展开 +
  合并区间二分)、widgets(圆点/引用竖线/水平线/图片/围栏语言标签/任务框,全部
  createElement + textContent、零 innerHTML)、decorations(Spec → DecorationSet +
  原子区间 + 图片 src 白名单 + 可见区间补解析)、livePreview(ViewPlugin + atomicRanges +
  Compartment 源码开关 + view.composing 期间冻结装饰)
- Editor.tsx:挂载装饰层,新增可选 sourceMode prop
- index.css:抽出 --md-* 排版契约变量(阅读态 .pn-note-body 与编辑态 .cm-md-* 共用,
  杜绝两份样式漂移)、.cm-md-* 装饰样式(对齐阅读态字号/衬线标题/引用弱化色/代码底色)
- 数据层零改动:onChange 拿到的仍是 Markdown 原文,公开页渲染管线与 sanitize 防线不动;
  运行时零新增 npm 依赖

P3 加固(长文档惰性解析补解析、Cmd+A 全选退化、光标行在视口外也装饰)包含在
decorations.ts / livePreview.ts 内,回归用例见后续 test 提交,方案与实测见
docs/editor-live-rendering.md §12.5。
2026-09-11 01:03:02 +08:00
wangairnan 92d89717c5 refactor(web): 残留自制控件统一替换为 antd 组件
- 状态点自制徽标改用 Badge,回收站剩余天数紧急态改用红色 Tag
- 危险按钮改用 danger 属性并补充语言,text+danger 不套实心红样式
- 后台搜索框改 antd Input 前缀形态,删除手写容器与聚焦环样式
- 加载态统一 Spin/Skeleton(Table 用 loading),空态统一 Empty
- Segmented 选项计数改用 Badge count,弱化为 muted 灰
- 首页分页说明改 Pagination showTotal,笔记错误态改 Empty 承接布局
- 代码块复制按钮改 antd Button 并增加「已复制」反馈,修复悬浮不显示
- 博客/后台图标按钮与溢出菜单触发器统一为 antd Button type=text
2026-09-09 15:37:36 +08:00
wangairnan 969d537aee fix(web): 后台侧栏「新建笔记」上移至首位,移除管理员信息中的「站点所有者」
侧栏 Menu 与移动端 tabbar 同步调换,编辑页高亮新建入口的逻辑不变。
2026-09-09 12:25:10 +08:00
wangairnan 614bfe2852 fix(web): 后台侧栏选中项改黑底反白,修复明暗模式下选中态看不清
自定义主题 colorPrimary 为近黑/近白,antd Menu 选中项默认的
primary 淡色底与侧栏底色对比不足;选中/hover 态改用 sidebar
token(黑底反白/浅灰底),并覆盖此前对未选中文字色的误覆盖。
2026-09-09 12:09:33 +08:00
wangairnan 5bac272f6d feat: 前台标签接入 antd 组件、列表封面图、favicon 随站点 Logo 及侧栏收窄
- 前台列表/详情/标签页标签统一 antd Tag;标签页改 CheckableTagGroup 单选
  (选中态由组件承接,再点已选标签回到全部);移除首页标签筛选条,
  标签入口收敛至顶部「标签」页
- 公开列表新增 cover 字段(取正文第一张站内图,store.FirstImageRef),
  首页条目左侧显示封面缩略图,无图条目保持纯文字
- favicon 随站点 Logo:webui.Meta.Icon 服务端注入 index.html,
  前端 useSiteTitle 兜底(dev 模板占位符场景)并即时生效;
  设置页「重置默认」清空 Logo 后回退内置 /favicon.svg
- 后台侧栏改 antd Menu(inline 分组),宽度 256→208、窄侧栏档 224→184
2026-09-09 11:51:06 +08:00
wangairnan 5457aeaa33 feat: 新增发布日期自选、站点 Logo、回收站清空等十项改进
- 编辑页标题改 filled 变体;标签改 tags 选择器(可勾选既有/输入新建)
- 笔记发布日期可自选(schema v2 新增 published_at 并回填),前台展示发布日期
- 登录页移除「请输入管理密码以继续」「连续失败将被暂时锁定」文案
- 站点设置每页条数收敛为 10/20/30/50 选择器,后端白名单同源校验
- 站点设置两卡片宽屏左右/窄屏上下;修改密码按钮改常规大小
- 后台各页顶栏固定高度,切换页面不再抖动
- 站点 Logo:settings 新增 site_logo(站内路径),gc/孤儿清单豁免 Logo 图片,
  博客 header 站点名前展示,设置页支持上传/更换/清除
- 回收站右上角一键清空(DELETE /api/admin/trash,含确认弹窗)
- pn init 写入 Markdown 语法示例文档(slug welcome,公开)与程序生成的示例图片
2026-09-09 11:10:30 +08:00
wangairnan 87d9bab5dc feat(web): 整体替换 UI 框架为 Ant Design 6 并接入自定义主题
以 antd ConfigProvider + antd-style 承载 zinc 风格自定义主题(明暗双套 token),
button/input/select/notification 用 createStyles 定制;三态主题经
darkAlgorithm 无刷新切换;use-toast 改基于 antd notification;
移除 shadcn/ui 组件目录与 radix 依赖;样式桥接层保证排版与多端布局不变。
2026-09-09 10:35:24 +08:00
wangairnan 5a78de6aa6 feat(web): 后台主题切换与移动端溢出菜单,设置保存按钮上移 topbar
- 后台 topbar 右侧常驻主题切换按钮(复用博客端三态循环逻辑),
  tooltip 新增 tip-below 朝下变体适配近视口顶部的 topbar
- <768px 侧栏隐藏时主题/返回博客/退出登录收进「···」溢出菜单;
  博客 <640px 首页/标签收进 header 溢出菜单(带 active 高亮)
- 新增通用 MoreMenu 组件:点击外部/Escape/选中项自动关闭,
  面板用 --popover 令牌 + 0.15s 淡入,与现有卡片风格一致
- 站点设置保存按钮移至 topbar 标题右侧,删除底部 sticky 保存条
- 修复两处回归:tip-below 气泡居中锚定越界产生页面横向滚动条
  (改右对齐);pn-site-menu-btn 基础 display 规则源码顺序在
  640px MQ 之后导致移动端菜单按钮不显示(前移至博客 header 区)
- 已用 Playwright 在 1440×900 / 390×844 实测后台四页与博客
  菜单展开/跳转均无溢出
2026-09-09 00:12:21 +08:00
wangairnan 646a49a26e feat(web): 页脚品牌与备案信息、首页文案精简及导航/侧栏交互优化
- 页脚「纯文本驱动」改为 Powered by Pure Note(链至仓库地址),新增
  公安备案展示:国徽图标 + 备案号链至 beian.mps.gov.cn,备案号可在
  后台设置(站点描述下一项)配置,留空不显示
- settings 白名单新增 beian_no 键(trim、≤200 字符、可清空),/api/site
  一并下发;TestSettingsWhitelist 补生效/清空/超长用例
- 去除首页 hero 文案区(PURE NOTE · 极简笔记/记录,而不打扰。等),
  同步清理失效样式并微调顶部留白
- 博客 header 首页/标签菜单补 House/Tags 图标,与管理按钮同风格
- 管理侧栏「返回博客/退出登录」浓缩为图标按钮置于用户行右侧,CSS
  悬浮 tooltip(top-center、带箭头,原生 title 延迟高不采用),返回
  博客改新窗口打开
2026-09-08 23:40:57 +08:00
wangairnan 13ad202924 chore(web): 重新生成 package-lock 统一官方源并更新次要依赖 2026-09-08 23:05:15 +08:00
wangairnan dda5ad1e5a fix(web): 登录表单补充隐藏用户名字段以兼容 Safari 密码管理器
Safari/WebKit 在明文 HTTP 下不保存 Secure Cookie(无 localhost 豁免,
Chrome/Firefox 有),__Host- 会话被静默丢弃导致登录成功后仍弹回登录页;
本机调试需以 --dev 启动(pn_session 无 Secure,loopback-only 守卫,§7.3-3)。
纯密码表单另令 Safari 保存密码弹窗要求手动输入用户名:补充 sr-only 用户名
输入(autoComplete=username,只读预填 admin),弹窗不再阻断登录。
新增 login.test.tsx 回归测试锁定用户名/密码字段的自动填充标记。
2026-09-08 21:42:52 +08:00
wangairnan 51f528f516 feat(web): 重构 9 页面界面并统一设计令牌与响应式布局
- index.css 以 Tailwind 4 @theme 落地设计令牌,全部页面按新设计稿重写
  样式:首页/笔记详情/标签页/登录/后台列表/编辑/回收站/设置/404
- Layout 重构导航与主题切换;新增 Toast 轻提示组件
- 移除 vite 手动 codeSplitting:分组 chunk 会被提升进入口静态依赖并对
  HTML 发出 modulepreload,lazy 路由的 CodeMirror 在所有页面被预加载
  (Lighthouse unused-javascript 549KiB 的根因)
- vite dev 代理补 changeOrigin:false,保留浏览器原始 Host,避免后端
  Origin 校验误判跨源 403
2026-09-08 21:41:05 +08:00
wangairnan b94e9b1721 fix(web): 修复图片上传、自动保存竞态、登录竞态并统一失效公共缓存
FormData 不强设 Content-Type(P1-2),补 api 客户端回归测试; 自动保存成功仅失效列表与公共键,防详情 refetch 回滚输入(P1-4); login/logout 以请求序号丢弃迟到 /api/me 响应,401 统一回调跳登录(P2-15); 首页不硬编码 page_size,写操作后统一 invalidatePublic,TagPage 补 error 分支(P2-15)。
2026-09-08 17:32:57 +08:00
wangairnan 27ec9badf2 前端构建告警清理:happy-dom 替代 jsdom、批准 esbuild 安装脚本、CodeMirror 与重路由懒加载分包 2026-09-08 17:01:36 +08:00
wangairnan e9316c9169 前端:React 19 + Vite 8 + Tailwind 4 博客与管理后台 SPA
- 渲染管线(§8.2):react-markdown + remark-gfm + rehype-sanitize
  (GitHub schema 扩展 hljs class 与 checked)+ rehype-highlight 纯 class
  高亮;链接强制 target=_blank + rel=nofollow noopener noreferrer;
  schema 快照与恶意 Markdown 冒烟测试(vitest 6 用例)
- 编辑器:CodeMirror 6 源码编辑 + 分屏实时预览 + 工具栏 +
  粘贴/拖拽图片上传;slug 首存定稿(冲突 409 就地高亮)、
  摘要留空自动截取、2s 防抖自动保存
- 页面:博客首页(置顶/分页/标签云)、详情(面包屑/上一篇下一篇)、
  标签页、登录、管理列表/回收站/设置/改密、404
- lib:api 客户端(统一包络 + 内存态 CSRF,禁 localStorage)、
  AuthContext(/api/me 重取)、暗色主题(class 切换 + 系统跟随)
- index.html 内嵌 Go template 占位符供服务端 meta 注入;
  vite base 固定 '/'(防深链白屏);/api 代理 127.0.0.1:8080
2026-09-08 08:14:52 +08:00