refactor(assets): vendor 资产迁入标准目录并全仓去除 zibll 标识

- assets/vendor 全量迁移: fontawesome5→assets/fontawesome5, css→assets/css,
  js→assets/js/runtime(避开 14 个同名自有文件), img 合并去重→assets/img,
  fonts→assets/fonts; 删除 assets/vendor
- libs 五个与 widgets/third-party 字节相同的库不重复入库, loader paths 改指向
- 运行时切换: _win.uri=assets 根, loader baseUrl=/js/runtime, enlighter 注入
  路径同步; PHP 7 个引用文件切换并改名 $zibll_*→$runtime_*
- 去品牌: Qinver 头注释/品牌 console.log/演示链接清除, 默认文案中性化
- 功能标识符改名: zib__→aksrt__, zib_ajax→aksrt_ajax, window.zib→
  window.aksrtLegacy, zibllblock/*→aksrtblock/*, .zib-widget→.aksrt-panel,
  .zib-slider→.aksrt-slider, zib_menu_options meta 键等
- 自有 CSS 改名: legacy-utilities/compat-vars/footer shell
- admin SPA 重建; 契约测试同步(路径/断言/文件更名)
- 例外保留: tests/visual 对照环境与 fixtures 前缀(外部 Zibll 产品引用)

验证: php -l 133 个改动文件通过; runtime 86 个 JS node --check 通过;
契约测试 68/70(2 个失败经 stash 对照确认为存量问题)
This commit is contained in:
kate522 committed 2026-08-22 16:16:30 +08:00
1 parent 4f2391fb64
commit 9375b1c30c
591 files changed
+1690 -11041

No files matched your search

+13 -13
View File
@@ -98,7 +98,7 @@ function createRuntime() {
function parseNotification(html) {
const id = (html.match(/ id="([^"]+)"/) || [])[1] || '';
const content = html.match(/<div class="notyf ([^"]+)">([\s\S]*)<\/div><\/div>$/);
assert.ok(content, 'notification markup should follow the Zibll contract');
assert.ok(content, 'notification markup should follow the legacy runtime contract');
const wrapper = new FakeElement(['noty1'], id);
const message = new FakeElement(['notyf', content[1]]);
message.innerHTML = content[2];
@@ -121,7 +121,7 @@ function createRuntime() {
return { body, timers, window };
}
test('notyf follows Zibll defaults, type normalization, and timing', () => {
test('notyf follows legacy-runtime defaults, type normalization, and timing', () => {
const runtime = createRuntime();
runtime.window.notyf('完成');
@@ -156,7 +156,7 @@ test('fixed-id notifications stay open until an in-place update', () => {
assert.equal(runtime.timers[0].delay, 3000);
});
test('clicking a notification uses the Zibll exit class and removal delay', () => {
test('clicking a notification uses the legacy exit class and removal delay', () => {
const runtime = createRuntime();
runtime.window.notyf('可关闭');
const notification = runtime.body.children[0].children[0];
@@ -285,11 +285,11 @@ test('VIP purchase and points exchange use direct fixed-id notyf flows', () => {
assert.match(scripts, /'aksrt-pay-vip',[\s\S]*?\/assets\/js\/pay-vip\.js',[\s\S]*?\[[^\]]*'aksrt-notyf'[^\]]*\]/);
});
test('payment entry points never load the removed Zibll pay runtime', () => {
const loader = read('assets/vendor/zibll/js/loader.js');
const zibllMain = [
read('assets/vendor/zibll/js/main.js'),
read('assets/vendor/zibll/js/main.min.js'),
test('payment entry points never load the removed legacy pay runtime', () => {
const loader = read('assets/js/runtime/loader.js');
const legacyMain = [
read('assets/js/runtime/main.js'),
read('assets/js/runtime/main.min.js'),
].join('\n');
const vip = read('assets/js/pay-vip.js');
const content = read('assets/js/cms-download.js');
@@ -299,15 +299,15 @@ test('payment entry points never load the removed Zibll pay runtime', () => {
].join('\n');
assert.doesNotMatch(loader, /['"]pay['"]\s*:/);
assert.doesNotMatch(zibllMain, /tbquire\(\[['"]pay['"]\]\)/);
assert.doesNotMatch(zibllMain, /indexOf\(['"]zippay['"]\)/);
assert.doesNotMatch(legacyMain, /tbquire\(\[['"]pay['"]\]\)/);
assert.doesNotMatch(legacyMain, /indexOf\(['"]zippay['"]\)/);
assert.match(vip, /\.pay-vip/);
assert.match(content, /data-aksrt-pay-content/);
assert.match(scripts, /'aksrt-pay-vip'/);
assert.match(scripts, /'aksrt-cms-download'/);
assert.match(scripts, /\$zibll_loader_version = file_exists\(\$zibll_loader_path\)/);
assert.match(scripts, /\$zibll_runtime_version = file_exists\(\$zibll_main_path\)/);
assert.match(scripts, /'ver'\s*=> \$zibll_runtime_version/);
assert.match(scripts, /\$runtime_loader_version = file_exists\(\$runtime_loader_path\)/);
assert.match(scripts, /\$runtime_version = file_exists\(\$runtime_main_path\)/);
assert.match(scripts, /'ver'\s*=> \$runtime_version/);
});
test('profile save uses AJAX rehydrate and a fixed-id notyf flow without query feedback', () => {