Skip to content

v5.4.0 — Chunked Copy + Title URLs + Sanitizer Table Fix

Choose a tag to compare

@AAAAAnson AAAAAnson released this 17 May 07:26

Added — 长文一键复制

  • "复制富文本"对话框新增长文模式:HTML > 400KB 时弹"分段复制 / 改用草稿箱"选择面板。分段路径按 body 顶层 block 边界递归切到 ~250KB 一段,每段都是自洽的富文本片段,引导用户逐段粘到公众号后台末尾。
  • 切分算法 splitHtmlIntoChunks 递归下钻:遇到超预算的元素就钻到它的子级,每一层切完都用本层的开/闭标签把内容重新包起来,保证嵌套结构里的标题/卡片/章节等外层样式在每段粘贴时都还在。
  • 草稿箱兜底:未绑定公众号 appid+appsecret 时按钮灰掉并提示,绑了就一键跳 /wechat/draft 完全跳过剪贴板。

Added — 文章 URL 与标题对应

  • 路由从"/ 一招走天下"换成 /a/<encodeURIComponent(title)>-<4位ID> 的标题型 URL。浏览器地址栏现在能看出打开的是哪篇文章,可收藏可分享。
  • 标题改名时通过 replaceParams 原地同步 URL,不污染后退栈。
  • nginx 已有 try_files \$uri \$uri/ /index.html,刷新 /a/<slug> 直接命中 SPA fallback,无需服务端配置改动。

Fixed — 微信粘贴布局

  • Sanitizer 注入 table-layout:fixed:当 <table> 里至少一个直接子 <td> 写了 width:Xpx,就给该表加 table-layout:fixed,让作者的列宽真正生效。默认 table-layout:auto 会让浏览器把窄列压到 single-character min-content,正是"01""02"等数字徽章被分裂到两行的根因。
  • 同步规则:表本身没设 width/max-width/min-width 也没 width= HTML 属性的,自动补 width:100%——HTML5 规范里 fixed-layout 在无宽度表上等于 auto,必须给一个宽度才能生效。
  • table-layout 加进 sanitizer allowlist,值限定 {fixed, auto}

Backend 202/202 tests passing · Frontend 232/232 tests passing