2.9 KiB
2.9 KiB
背景结论(回答"为什么没接入")
Toast 系统(notyf)其实已在所有前台页面全局加载(handle aksrt-notyf,assets/js/notyf.js 暴露 window.notyf(message, type)),公开主页上举报、面板加载失败也都在用。真正的缺口:
- 关注/取消关注成功时零反馈:
assets/js/follow.js:40-42成功后只翻转按钮状态,不调用notyf()(对比文章页点赞/收藏article.js:225/250成功失败都有提示)——这是"页面没接 Toast"观感的来源。 - 依赖声明不规范:
author.js调用了 7 处notyf(),但 handleaksrt-author(ScriptsPart1b.php:335)只声明['loader_js'],靠全局加载碰巧可用。 - 相邻 bug:
data-aksrt-follow按钮在文章页作者栏(single-author-bar.php:116、aksrt-single-render.php:442)、WidgetSystem 用户卡(UserRenderer.php:102)、身份铭牌(aksrt-identity.php:226)等多处渲染,但follow.js只在用户中心/公开主页路由注册 → 这些位置按钮是死的(用户已确认一并修复)。
改动内容
1. assets/js/follow.js — 补齐成功 Toast(核心)
成功分支(updateFollowButton(...) 之后)增加:
notyf(isFollowing ? '关注成功' : '已取消关注', 'success');
遵循 article.js 点赞/收藏既有惯例:客户端写死文案、两种状态都用 success(后端 follow_toggle 不返回 message,与点赞/收藏接口一致)。
2. src/Core/ScriptsPart1b.php + src/Core/ScriptsPart1c.php — follow.js 提升为全局注册
- 删除
ScriptsPart1b.php:318-328$is_profile_page块内的aksrt-follow注册; - 在
ScriptsPart1c.php全局栈(aksrt-runtime注册之后,约 165 行处)全局注册,依赖['aksrt-notyf', 'aksrt-runtime']——显式声明依赖aksrt-runtime是因为aksrtData(REST 地址 + nonce,follow.js IIFE 解析期就要读)localize 在该 handle 上,把目前"靠 footer 打印顺序碰巧正确"变为确定的依赖顺序。 - 效果:文章页作者栏、任意位置的用户卡片关注按钮恢复可用,并获得同样的 Toast 反馈。脚本仅 ~100 行、单个委托点击监听,全局加载成本可忽略(与已全局加载的 notyf/runtime/core modules 一致)。
3. src/Core/ScriptsPart1b.php:335 — aksrt-author 显式声明 notyf 依赖
['loader_js'] → ['loader_js', 'aksrt-notyf']。
验证
php -l检查两个改动的 PHP 文件。- 浏览器实测(桌面 + 移动):公开主页关注/取消关注弹出 success Toast、按钮翻转、粉丝数更新;未登录/网络失败路径弹 danger Toast;文章页作者栏关注按钮可点击且有提示;Tab 无刷新切换不受影响。
node --test tests/widget-system/post-visual-contract.test.cjs确认无回归(未改标记,应通过)。
提交
单条提交,遵循仓库 Conventional Commit 风格:fix(frontend): 关注操作接入 notyf 成功提示并将关注脚本改为全局加载。