From 159a12c481568c7e96cd962b1c1fe83d3cb05bd9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Jul 2026 12:51:56 +0800 Subject: [PATCH] feat(nav): deep-align menu_search panel, pill radius, senior media - Layout-2 remote-box AJAX panel (history/hot/posts) via aksrt_menu_search - Live suggestions for post/topic/product; local history for guests - Publish radius switch (zibll bool pill) mapped to CSS radius class - Senior menu editor: WP media library image picker - Active menu underline + panel CSS; acceptance/contract updates --- .../src/schema/sections/page-display/index.js | 4 +- assets/css/frontend/nav/zib-utilities.css | 58 ++++ assets/js/admin-nav-menu-senior.js | 26 +- assets/js/header-inline-search.js | 282 ++++++++++++------ inc/bootstrap.php | 1 + inc/helpers/aksrt-header-menu-buttons.php | 8 +- .../header/aksrt-header-menu-search.php | 141 +++++++++ inc/helpers/header/aksrt-header-navbar.php | 26 +- src/AKSRT/Admin/NavMenuOptions.php | 1 + src/AKSRT/Admin/Schema/SchemaPageDisplay.php | 2 +- src/AKSRT/Core/ScriptsPart2.php | 31 ++ src/AKSRT/Settings/FacadeBulk.php | 21 +- tools/nav-zibll-acceptance.md | 8 + tools/nav-zibll-contract-report.txt | 2 +- 14 files changed, 494 insertions(+), 117 deletions(-) create mode 100644 inc/helpers/header/aksrt-header-menu-search.php diff --git a/assets/admin/src/schema/sections/page-display/index.js b/assets/admin/src/schema/sections/page-display/index.js index a999be28..1b40dcab 100644 --- a/assets/admin/src/schema/sections/page-display/index.js +++ b/assets/admin/src/schema/sections/page-display/index.js @@ -51,7 +51,7 @@ export const pageDisplaySchemas = { mobile_navbar_align: 'left', header_newposts_enabled: true, header_newposts_text: ' 发布', - header_newposts_radius: 20, + header_newposts_radius: true, header_newposts_class: '', header_theme_custom: false, header_theme_bg_custom: '', @@ -126,7 +126,7 @@ export const pageDisplaySchemas = { fields: [ { key: 'header_newposts_enabled', label: '启用发布按钮', type: 'switch', default: true, help: '导航栏显示前台发布入口' }, { key: 'header_newposts_text', label: '按钮文案', type: 'input', default: ' 发布', dependsOn: { key: 'header_newposts_enabled', value: true } }, - { key: 'header_newposts_radius', label: '圆角 (px)', type: 'number', default: 20, min: 0, max: 30, dependsOn: { key: 'header_newposts_enabled', value: true } }, + { key: 'header_newposts_radius', label: '按钮圆角(胶囊)', type: 'switch', default: true, dependsOn: { key: 'header_newposts_enabled', value: true }, help: '开启后两端大圆角,对齐 zibll nav_newposts_radius' }, { key: 'header_newposts_class', label: '自定义 CSS 类', type: 'input', default: '', dependsOn: { key: 'header_newposts_enabled', value: true } }, { key: 'header_newposts_types', label: '发布类型', type: 'select', multiple: true, default: ['post'], options: [ { label: '文章', value: 'post' }, diff --git a/assets/css/frontend/nav/zib-utilities.css b/assets/css/frontend/nav/zib-utilities.css index ba3d1e3c..cda1622a 100644 --- a/assets/css/frontend/nav/zib-utilities.css +++ b/assets/css/frontend/nav/zib-utilities.css @@ -162,3 +162,61 @@ body.mobile-navbar-show { overflow: hidden; } .aksrt-sme-field { display: block; margin: 4px 0; } .aksrt-sme-field span { display: block; font-size: 12px; color: #646970; } .aksrt-sme-card, .aksrt-sme-col { border: 1px solid #dcdcde; padding: 8px; margin: 8px 0; border-radius: 4px; } + +/* Layout-2 remote menu search panel (zibll menu_search) */ +.aksrt-remote-box[data-aksrt-menu-search-remote] { + min-height: 8px; +} +.navbar-inline-search-panel { + min-width: 300px; + max-width: 380px; + max-height: 70vh; + overflow: auto; +} +.aksrt-menu-search-posts__item { + display: flex; + flex-direction: column; + gap: 2px; + padding: 6px 2px; + color: inherit; + text-decoration: none; + border-bottom: 1px solid rgba(0,0,0,.04); +} +.aksrt-menu-search-posts__item:last-child { border-bottom: 0; } +.aksrt-menu-search-posts__item:hover { color: var(--focus-color); } +.aksrt-menu-search-history__list .but, +.navbar-inline-search-hots .but { margin: 0 4px 4px 0; } +.loading-spot { + display: inline-block; + width: 1em; + height: 1em; + margin: 8px; + border: 2px solid rgba(0,0,0,.15); + border-top-color: var(--focus-color, #f04494); + border-radius: 50%; + animation: aksrt-spin .7s linear infinite; +} +@keyframes aksrt-spin { to { transform: rotate(360deg); } } +.navbar-but .radius, +.navbar-but .but.radius, +.navbar-cta.radius { + border-radius: 999px !important; +} + +/* Active menu underline (zibll-like) */ +.navbar-top .nav > li.current-menu-item > a, +.navbar-top .nav > li.current-menu-ancestor > a { + color: var(--focus-color); +} +.navbar-top .nav > li.current-menu-item > a::before, +.navbar-top .nav > li.current-menu-ancestor > a::before { + content: ""; + position: absolute; + left: 10px; + right: 10px; + top: 0; + height: 3px; + border-radius: 0 0 3px 3px; + background: var(--focus-color); +} +.navbar-top .nav > li > a { position: relative; } diff --git a/assets/js/admin-nav-menu-senior.js b/assets/js/admin-nav-menu-senior.js index a6dadc76..eb6dbcb6 100644 --- a/assets/js/admin-nav-menu-senior.js +++ b/assets/js/admin-nav-menu-senior.js @@ -39,11 +39,15 @@ }; } - function field(name, label, value, type) { + function field(name, label, value, type, withMedia) { type = type || 'text'; + var mediaBtn = withMedia + ? ' ' + : ''; return ( '