/** * 用户中心左侧栏图标契约(参考主题 1:1 对齐)。 * * 硬约束: * 1) 「我的服务 / 功能设置」两个网格使用参考主题的 icon-but-box / user-icon-but-box * 外壳,图标全部来自主题内置 SVG sprite(aksrt_icon_markup('zibsvg-*')), * 不再出现 Font Awesome 字形。 * 2) 侧栏其余部件(余额/积分卡、创作/推广卡、VIP 入口、抽屉触发器)同样只使用 * sprite 图标,箭头统一为 zibsvg-right,保证侧栏只剩一种图标族。 * 3) 旧的 uc-service-grid 外壳、色调底色与计数角标必须已彻底移除,不得残留。 */ 'use strict'; const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const test = require('node:test'); const root = path.resolve(__dirname, '..', '..'); const read = (file) => fs.readFileSync(path.join(root, file), 'utf8'); const sidebarDir = 'inc/helpers/user-center-renderers/'; const sidebarFiles = [ 'sidebar-nav.php', 'sidebar-commerce.php', 'sidebar-creator.php', 'sidebar-vip.php', 'profile-sidebar.php', ]; test('服务/设置网格使用参考主题 icon-but-box 外壳与 sprite 图标', () => { const nav = read(sidebarDir + 'sidebar-nav.php'); assert.match(nav, /class="flex ac hh text-center icon-but-box user-icon-but-box"/); assert.match(nav, /
<\?php echo \$icon_html;/); assert.match(nav, /
/); assert.match(nav, /aksrt_icon_markup\('zibsvg-' \. \(string\) \$item\['icon'\]\)/); // 参考主题选型:我的服务 = trend-color / user-auth / order-color。 assert.match(nav, /'icon'\s+=>\s+'trend-color'/); assert.match(nav, /'icon'\s+=>\s+'user-auth'/); assert.match(nav, /'icon'\s+=>\s+'order-color'/); // 功能设置 = msg-color / user-color / security-color。 assert.match(nav, /'icon'\s+=>\s+'msg-color'/); assert.match(nav, /'icon'\s+=>\s+'user-color'/); assert.match(nav, /'icon'\s+=>\s+'security-color'/); // 每项都带 tab,保证 icon-but-* 类名完整且选中态可同步。 for (const tab of ['level', 'auth', 'orders', 'msg', 'profile', 'settings']) { assert.match(nav, new RegExp(`'tab'\\s+=>\\s+'${tab}'`), `missing tab key: ${tab}`); } // AKSRT 的跳转契约保留 + data-tab,不搬参考主题的 。 assert.match(nav, //); assert.doesNotMatch(nav, /data-onclick/); }); test('侧栏五个部件均不再出现 Font Awesome 字形', () => { for (const file of sidebarFiles) { const source = read(sidebarDir + file); assert.doesNotMatch(source, /fa\s+fas\s+fa-/, `${file} still renders a Font Awesome glyph`); assert.doesNotMatch(source, /