refactor: rename the theme brand and every identifier from AKSRT to Jio

Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.

Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
  cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
  window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)

Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
  so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
  (dropped 3 stale entries, added the 17 missing ones)

Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
  get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
  when it is empty

Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.

Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-01 20:05:04 +08:00
1 parent 5b16bc6e15
commit 35bb96e82f
997 files changed
+28216 -28188

No files matched your search

@@ -70,7 +70,7 @@ test('reference slider CSS includes responsive height and combo selectors', () =
test('icon card widgets expose Zibll vertical and horizontal contracts', () => {
const schemas = read('src/WidgetSystem/WidgetSchemas.php');
const renderer = read('src/WidgetSystem/Renderers/GeneralRenderer.php');
const helper = read('inc/helpers/aksrt-icon-cards.php');
const helper = read('inc/helpers/jio-icon-cards.php');
for (const token of ['show_widget_bg', "'id' => 'size'", 'icon_radius', 'icon_custom_color', "'id' => 'icon_radius4'", 'icon_background_palette', 'icon_text_palette']) {
assert.match(schemas, new RegExp(token.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&')));
}
@@ -78,12 +78,12 @@ test('icon card widgets expose Zibll vertical and horizontal contracts', () => {
assert.match(renderer + helper, new RegExp(token.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&')));
}
// Card title/desc must keep legacy badge markup: fields go through the
// shared inline whitelist (aksrt_icon_card_kses), never bare wp_kses_post
// shared inline whitelist (jio_icon_card_kses), never bare wp_kses_post
// which strips the custom <badge> element.
assert.match(helper, /function aksrt_icon_card_kses_tags/);
assert.match(helper, /function jio_icon_card_kses_tags/);
assert.match(helper, /'badge'\s+=>\s*\['class' => true\]/);
assert.match(helper, /aksrt_icon_card_kses\(\$title\)/);
assert.match(helper, /aksrt_icon_card_kses\(\$desc\)/);
assert.match(helper, /jio_icon_card_kses\(\$title\)/);
assert.match(helper, /jio_icon_card_kses\(\$desc\)/);
assert.doesNotMatch(helper, /wp_kses_post\(\$title\)/);
assert.doesNotMatch(helper, /wp_kses_post\(\$desc\)/);
});
@@ -98,7 +98,7 @@ test('button group uses the complete Zibll schema, DOM and responsive sizing con
for (const token of ['widget-buttons mb20 pc-size-', 'm-size-', 'widget-buttons-wrap flex hh align-', 'class="ml6"', 'obs-animate ani-']) {
assert.match(renderer, new RegExp(token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
}
assert.doesNotMatch(renderer, /aksrt-widget-buttons/);
assert.doesNotMatch(renderer, /jio-widget-buttons/);
assert.match(schema, /'id' => 'text'[^\n]+allow_html/);
assert.match(renderer, /wp_kses_post\(\(string\) \$item\['text'\]\)/);
assert.match(css, /\.widget-buttons\.pc-size-large \.but\s*\{\s*padding:\s*12px 24px/);
@@ -120,16 +120,16 @@ test('vertical notice supports only custom and article sources with Zibll swiper
assert.doesNotMatch(schema, /forums_opts|notice_forum_fields|zibpay_price|zibpay_points_price|sales_volume/);
assert.doesNotMatch(renderer, /zib_bbs_get_posts_query|forums_opts/);
assert.doesNotMatch(postQuery, /zibpay_price|zibpay_points_price|sales_volume/);
assert.doesNotMatch(form + controller + adminJs, /aksrt_widget_remote_options|aksrt-widget-remote-select|aksrt-widget-remote-picker/);
assert.doesNotMatch(form + controller + adminJs, /jio_widget_remote_options|jio-widget-remote-select|jio-widget-remote-picker/);
for (const token of ['swiper-bulletin mb20 ', 'notice-slide', 'new-swiper', 'data-direction="vertical"', 'data-loop="true"', 'data-autoplay="1"', 'bulletin-icon flex jc shrink0']) {
assert.match(renderer, new RegExp(token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
}
assert.doesNotMatch(renderer, /aksrt-widget-notice/);
assert.doesNotMatch(renderer, /jio-widget-notice/);
assert.match(schema, /'id' => 'title'[^\n]+allow_html/);
assert.match(renderer, /wp_html_excerpt\([^\n]+160, '\.\.\.'/);
// Icon value rendering lives in the unified helper the renderer delegates to.
assert.match(renderer, /aksrt_icon_markup\(\$icon\)/);
assert.match(read('inc/helpers/aksrt-icons.php'), /str_starts_with\(\$value, 'customsvg-'\)/);
assert.match(renderer, /jio_icon_markup\(\$icon\)/);
assert.match(read('inc/helpers/jio-icons.php'), /str_starts_with\(\$value, 'customsvg-'\)/);
assert.match(css, /\.swiper-bulletin \.new-swiper\s*\{[^}]*height:\s*2\.4em/s);
assert.match(css, /\.swiper-bulletin \.new-swiper\s*\{[^}]*line-height:\s*2\.4em/s);
assert.match(css, /\.bulletin-icon\s*\{[^}]*width:\s*26px[^}]*height:\s*26px[^}]*font-size:\s*18px/s);
@@ -155,7 +155,7 @@ test('slider media combo replicates the reference module front and back', () =>
assert.match(form, /\$library !== 'video'/);
// 前端:幻灯片 span/a 包裹、懒加载契约、视频背景与图层视差。
for (const token of ["'<span>' . $body . '</span>'", 'lazyload swiper-lazy', 'slide-background-video', "aksrt_is_lazy('lazy_sider')", 'data-swiper-parallax-opacity', 'data-swiper-parallax-scale']) {
for (const token of ["'<span>' . $body . '</span>'", 'lazyload swiper-lazy', 'slide-background-video', "jio_is_lazy('lazy_sider')", 'data-swiper-parallax-opacity', 'data-swiper-parallax-scale']) {
assert.match(renderer, new RegExp(token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
}
assert.doesNotMatch(renderer, /playsinline/);
@@ -165,7 +165,7 @@ test('slider media combo replicates the reference module front and back', () =>
assert.match(widgetCss, /\.widget-slider-graphic\s*\{\s*display:\s*flex;/);
// 组合模块:is_show 门控、管理端缺省提示、卡片列动画与比例变量。
for (const token of ["aksrt_is_lazy('lazy_cover')", 'alert alert-warning', '当前模块下没有可显示的幻灯片', 'obs-animate ani-', "widget-graphic-cover ' . ($is_row ? 'mb10' : 'mb20')", 'row gutters-5', 'col-xs-', 'graphic-text this-font', 'm-cover-ratio', 'cover-ratio', 'layout-ratio', 'data-row=', 'data-col=', "m-' . sanitize_html_class($m_layout_type)"]) {
for (const token of ["jio_is_lazy('lazy_cover')", 'alert alert-warning', '当前模块下没有可显示的幻灯片', 'obs-animate ani-', "widget-graphic-cover ' . ($is_row ? 'mb10' : 'mb20')", 'row gutters-5', 'col-xs-', 'graphic-text this-font', 'm-cover-ratio', 'cover-ratio', 'layout-ratio', 'data-row=', 'data-col=', "m-' . sanitize_html_class($m_layout_type)"]) {
assert.match(renderer, new RegExp(token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
}
// 参考主题 is_show:两侧均为空时不输出占位。