The 搜索框 and 一言 sidebar widgets fell into the generic renderer branch, so
they rendered a .jio-panel card wrapping a second bespoke card
(.jio-widget-search / .jio-widget-quote). In-article 一言 also used
divergent modifier classes and an extra hover rule.
- search: render through the shared jio_get_search_box() (legacy keyword,
history and category pickers) inside one reference card, mirroring the
reference widget's markup and title default 「搜索」
- quote: render the reference .yiyan-box card itself as the click root; the
shell now emits only the reference widget-container/title wrapper
- article 一言: adopt the reference class lists for header, footer and the
standalone after-article box; drop the invented yiyan--* modifiers and
the duplicate hover/opacity rules
- client: fill .cn/.en in the reference order (first line .cn, second .en)
and drop the stale window.JioYiyan bridge plus the dead qv-yiyan.php AJAX
path in runtime main.js
- schema: replace the ad-hoc search_style radio with the reference switches
(keywords, history, input category, more_cats) and default title
- assets: enqueue assets/js/yiyan.js through the quote widget's asset list
Tests: widget-system suite 820/821 (the one failure is the pre-existing
frontend-lifecycle theme-init stub); new search/quote card contracts pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The theme was renamed Zibll/子比 → AKSRT → Jio, but upstream branding
survived the sweeps in CSS classes, the SVG sprite prefix, a persisted
widget field ID, JS events, admin Vue class names, test infrastructure
and docblocks.
Renames:
- zib-widget / zib-widget-wrap / zib-slider → jio-widget-box /
jio-widget-box-wrap / jio-slider-box (jio-widget is taken by the modern
widget shell, jio-box-* by the card primitives)
- zib-partners-scroll + zps-* → jio-partners-scroll + jps-*
- zib-combo-info-card + zci-* → jio-combo-info-card + jci-*
- zibsvg- → jiosvg-, including the exported picker helpers and the
fa-zibsvg- family-prefix guard
- zibpay_type → pay_type; the dual-read fallback in PostQuery collapses
to a single key
- [zibajax="submit"] dropped (no PHP emitter); zib_ajax.success →
jio_ajax.success
- aks-* admin Vue classes → jio-*
- zib_palette() → palette()
User-facing vendor traces are gone: the floating "more" button default no
longer ships a zibll.com link or 子比主题 marketing copy, the notice
widget ships no preset promo entries, and the four 官网教程 links are
removed from the post-list admin schema.
Test infrastructure renamed to neutral names (docker-compose.reference.yml,
Caddyfile, article-baseline.json, modern-widgets-contract.test.cjs) with
their DB/volume/env/slug identifiers following.
Kept intentionally, documented in tests/fixtures/README.md: the golden
fixture reference fingerprint (a SHA-256 record of an external directory,
read by validate-widget-golden / generate-widget-golden-fixture /
audit-widget-system), the doesNotMatch guards that prove the old tokens are
gone, and the reference theme's own meta key in the visual fixtures.
No backward-compat or data migration: saved widget configs holding old
icon keys or the old field ID silently lose them, per the project's
rewrite-over-compatibility rule.
Verified: 132/132 node contract tests, php tests/widget-system/run.php
(146 assertions), audit-admin-contracts, audit-psr4-paths and
validate-widget-golden all green; tracked bundles regenerated and in sync.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Align homepage and category discovery, modern widgets, admin controls, quotes, and comments with the reference theme. Remove superseded paths and add rendering and behavior coverage. Update stale asset and finance contracts; all 760 Node tests and 139 widget assertions pass.
Reference contract: widget cards carry their own 15px padding and
.widget-content is bare. The added 20px padding inset every widget
card from the content max width on the fixed homepage (the only
bundle loading sidebar.css).
- drop the root padding rule and the unreferenced --flush modifier
- drop the now-redundant user-widget padding:0 workaround
- drop the dead --card-padding-lg token
- lock the contract with negative assertions in the display test
- rewrite schemas for posts, tab_posts, oneline_posts, hot_posts,
term_cards, term_aggregation, media_cards, combo_info, partners,
recent_comments, posts_toc and slider_media_combo to mirror the
modern reference modules field by field (options, defaults,
dependencies, min/max/step, subheadings)
- port reference renderers: hot ranking with TOP badges, category
aggregation card, graphic cover cards, partners CSS marquee,
combo info cards with auto band palette, recent comment list
- rename 分类与标签聚合卡片 to 分类聚合卡片 and restrict it to
categories (no tags/topics branch in this project)
- drop topics filter fields and the topics query branch; align
orderby value domain with supported post meta
- add searchable sortable terms admin field type and spinner unit
suffix rendering
- unify widget pagination and lazy loading on the REST client with
the runtime-owned ias reveal trigger; remove the legacy
post_ajax_trigger dual path
- align section-navs TOC with the reference contract (wznav ids,
3-heading minimum, zib-widget box)