小优化
This commit is contained in:
@@ -0,0 +1,34 @@
|
|||||||
|
## 背景结论(回答"为什么没接入")
|
||||||
|
|
||||||
|
Toast 系统(notyf)其实已在所有前台页面全局加载(handle `aksrt-notyf`,`assets/js/notyf.js` 暴露 `window.notyf(message, type)`),公开主页上举报、面板加载失败也都在用。真正的缺口:
|
||||||
|
|
||||||
|
1. **关注/取消关注成功时零反馈**:`assets/js/follow.js:40-42` 成功后只翻转按钮状态,不调用 `notyf()`(对比文章页点赞/收藏 `article.js:225/250` 成功失败都有提示)——这是"页面没接 Toast"观感的来源。
|
||||||
|
2. **依赖声明不规范**:`author.js` 调用了 7 处 `notyf()`,但 handle `aksrt-author`(`ScriptsPart1b.php:335`)只声明 `['loader_js']`,靠全局加载碰巧可用。
|
||||||
|
3. **相邻 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(...)` 之后)增加:
|
||||||
|
```js
|
||||||
|
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 成功提示并将关注脚本改为全局加载`。
|
||||||
@@ -40,6 +40,7 @@
|
|||||||
if (result.success && result.data) {
|
if (result.success && result.data) {
|
||||||
var isFollowing = result.data.is_following;
|
var isFollowing = result.data.is_following;
|
||||||
updateFollowButton(btn, isFollowing, result.data.follower_count);
|
updateFollowButton(btn, isFollowing, result.data.follower_count);
|
||||||
|
notyf(isFollowing ? '关注成功' : '已取消关注', 'success');
|
||||||
} else {
|
} else {
|
||||||
notyf(result.message || '操作失败', 'danger');
|
notyf(result.message || '操作失败', 'danger');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -315,24 +315,15 @@ trait ScriptsPart1b {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 关注脚本
|
// 关注脚本已在全局栈注册(ScriptsPart1c),data-aksrt-follow 按钮
|
||||||
$follow_js_path = get_template_directory() . '/assets/js/follow.js';
|
// 也渲染于文章页作者栏与各处用户卡片,不能仅限本路由加载。
|
||||||
if (file_exists($follow_js_path)) {
|
|
||||||
wp_enqueue_script(
|
|
||||||
'aksrt-follow',
|
|
||||||
$base_uri . '/assets/js/follow.js',
|
|
||||||
['aksrt-notyf'],
|
|
||||||
filemtime($follow_js_path) ?: $version,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$author_js_path = get_template_directory() . '/assets/js/author.js';
|
$author_js_path = get_template_directory() . '/assets/js/author.js';
|
||||||
if (file_exists($author_js_path)) {
|
if (file_exists($author_js_path)) {
|
||||||
wp_enqueue_script(
|
wp_enqueue_script(
|
||||||
'aksrt-author',
|
'aksrt-author',
|
||||||
$base_uri . '/assets/js/author.js',
|
$base_uri . '/assets/js/author.js',
|
||||||
['loader_js'],
|
['loader_js', 'aksrt-notyf'],
|
||||||
(string) filemtime($author_js_path),
|
(string) filemtime($author_js_path),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -164,6 +164,21 @@ trait ScriptsPart1c {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Follow toggle: delegated [data-aksrt-follow] handler; the buttons render on
|
||||||
|
// user home / user center / single author bar and user cards anywhere.
|
||||||
|
// Depends on aksrt-runtime because aksrtData (REST root + nonce) is localized
|
||||||
|
// onto that handle and follow.js reads it at parse time.
|
||||||
|
$follow_js = get_template_directory() . '/assets/js/follow.js';
|
||||||
|
if (file_exists($follow_js)) {
|
||||||
|
wp_enqueue_script(
|
||||||
|
'aksrt-follow',
|
||||||
|
$base_uri . '/assets/js/follow.js',
|
||||||
|
['aksrt-notyf', 'aksrt-runtime'],
|
||||||
|
(string) filemtime($follow_js),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Core modules (split from main.js) — register with AksrtFrontend
|
// Core modules (split from main.js) — register with AksrtFrontend
|
||||||
$core_modules = [
|
$core_modules = [
|
||||||
'aksrt-core-article' => 'article.js',
|
'aksrt-core-article' => 'article.js',
|
||||||
|
|||||||
Reference in New Issue
Block a user