fix(page-display): connect header component visibility settings

This commit is contained in:
2026-08-19 13:35:31 +08:00
parent 8a738c7998
commit d4a9b7fd98
8 changed files with 152 additions and 34 deletions
@@ -14,6 +14,7 @@ const provider = read('src/Admin/SchemaProvider.php')
const settingsFacade = read('src/Settings/Settings.php')
const scriptsPart1c = read('src/Core/ScriptsPart1c.php')
const footerCss = read('assets/css/frontend/footer/zibll-shell.css')
const headerMenuButtons = read('inc/helpers/aksrt-header-menu-buttons.php')
function activeRepositorySource() {
const roots = ['assets/admin/src', 'assets/js', 'inc', 'src', 'templates']
@@ -54,7 +55,7 @@ test('top-level field IDs match the Zibll V9.0 eight-page contract', () => {
assert.deepEqual(topLevelFieldIds('header_nav'), [
'header_theme_custom', 'header_theme_bg_custom', 'header_theme_bg', 'header_theme_color_custom',
'header_layout', 'mobile_header_layout', 'mobile_navbar_align', 'nav_fixed', 'nav_scroll_down_hide',
'nav_newposts', 'nav_newposts_radius', 'nav_newposts_class', 'nav_newposts_text', 'nav_newposts_btns',
'nav_newposts', 'nav_newposts_radius', 'nav_newposts_class', 'nav_newposts_text',
'nav_user_newposts_btn', 'nav_user_newposts_btn_text',
])
assert.deepEqual(topLevelFieldIds('header_components'), [
@@ -90,10 +91,17 @@ test('defaults, nested structures, dependencies, and excluded product families a
assert.match(schema, /'author_main_tab_opt'.*?'post'.*?'favorite'.*?'comment'.*?'follow'/s)
assert.match(schema, /'home_posts_list_s', '首页文章', 'switcher', true/)
assert.match(schema, /'page_header_style', '页面标题', 'radio', ''/)
assert.match(schema, /'author' => '公开用户主页'/)
assert.match(schema, /'user_center' => '用户中心'/)
assert.match(schema, /'header_slider_search_s'.*?'dependsOn' => self::not_empty\('header_slider_show'\)/)
assert.match(schema, /'header_slider_card_s'.*?'dependsOn' => self::not_empty\('header_slider_show'\)/)
assert.match(schema, /'header_slider_filter_blur'.*?'dependsOn' => self::not_empty\('header_slider_show'\)/)
assert.match(schema, /'all' => \[self::enabled\('home_posts_list_s'\), self::enabled\('home_list1_orderby_s'\)\]/)
for (const dead of ['nav_pay_vip', 'nav_user_pay_vip', 'forum_home', 'forum_plate', 'forum_post', 'ajax_list_cat_topics', 'ajax_list_tag_topics']) {
for (const dead of ['nav_newposts_btns', 'nav_pay_vip', 'nav_user_pay_vip', 'forum_home', 'forum_plate', 'forum_post', 'ajax_list_cat_topics', 'ajax_list_tag_topics']) {
assert.equal(schema.includes(dead), false, `legacy/excluded field remains: ${dead}`)
}
assert.equal(headerMenuButtons.includes('nav_newposts_btns'), false)
assert.match(headerMenuButtons, /aksrt_render_new_add_btns\(\['post'\], \$class, \$label\)/)
})
test('schema REST saves are privileged, section-whitelisted, and deeply sanitized', () => {
@@ -206,4 +214,16 @@ test('save contract rejects invalid input and round-trips canonical nested value
})
assert.equal(data.footer_readback.fcode_t1_code, '<strong>Allowed</strong>')
assert.deepEqual(data.footer_readback.footer_mini_img, data.footer_clean.footer_mini_img)
assert.deepEqual(data.visibility, {
disabled: false,
disabled_with_page_override: false,
page_enabled: true,
public_user_home: true,
user_center: true,
legacy_author_public_home: true,
generic_page_excludes_home: false,
generic_page_excludes_center: false,
templated_public_user_home: true,
templated_user_center: true,
})
})