feat(navigation): hard-switch to Zibll navigation and Font Awesome 5

This commit is contained in:
kate522 committed 2026-08-18 20:46:21 +08:00
1 parent 3c3ddac8be
commit a0b84977a2
630 files changed
+101647 -11293

No files matched your search

+26 -56
View File
@@ -7,29 +7,6 @@
defined('ABSPATH') || exit;
if (!function_exists('aksrt_get_header_newposts_config')) :
/**
* @return array{enabled:bool,text:string,radius:int,radius_pill:bool,class:string,types:string[]}
*/
function aksrt_get_header_newposts_config(): array {
$cfg = class_exists('\AKSRT\Settings\Settings')
? \AKSRT\Settings\Settings::get_header_newposts_config()
: ['enabled' => true, 'text' => __('发布', 'aksrt'), 'radius' => 20, 'class' => 'jb-blue', 'types' => []];
// Single source: header_newposts_enabled (zibll nav_newposts).
// FacadeBulk maps publish_btn to the same setting.
$types = is_array($cfg['types'] ?? null) ? $cfg['types'] : [];
if (!$types) {
$types = ['post'];
}
$cfg['types'] = $types;
if (empty($cfg['class'])) {
$cfg['class'] = 'jb-blue';
}
return $cfg;
}
endif;
if (!function_exists('aksrt_get_new_add_actions')) :
/**
* Build multi-type publish actions.
@@ -52,7 +29,7 @@ if (!function_exists('aksrt_get_new_add_actions')) :
'type' => 'post',
'url' => $url,
'label' => __('写文章', 'aksrt'),
'icon' => 'fas fa-file-alt',
'icon' => 'fa fas fa-file-alt',
];
}
}
@@ -62,29 +39,14 @@ endif;
if (!function_exists('aksrt_normalize_header_cta_label')) :
/**
* Normalize CTA label HTML: map FA4 classes and keep a single leading icon.
* Normalize CTA label HTML: map FA5 classes and keep a single leading icon.
*/
function aksrt_normalize_header_cta_label(string $label, string $fallback_icon = 'fas fa-pen'): string {
function aksrt_normalize_header_cta_label(string $label, string $fallback_icon = 'fa fas fa-pen'): string {
$label = trim($label);
if ($label === '') {
return '<i class="' . esc_attr($fallback_icon) . '" aria-hidden="true"></i> ' . esc_html__('发布', 'aksrt');
}
$replacements = [
'fa-file-text-o' => 'fa-file-alt',
'fa-file-text' => 'fa-file-alt',
'fa-pencil-square-o' => 'fa-edit',
'fa-pencil' => 'fa-pen',
'fa-comments-o' => 'fa-comments',
'fa-clock-o' => 'fa-clock',
'fa-calendar-check-o' => 'fa-calendar-check',
'fa-diamond' => 'fa-gem',
];
$label = strtr($label, $replacements);
$label = preg_replace('/\bclass=(["\'])fa\s+/', 'class=$1fas ', $label) ?? $label;
$label = preg_replace('/<i\s+class=(["\'])(?!fas\b|far\b|fab\b)/', '<i class=$1fas ', $label) ?? $label;
if (stripos($label, '<i') === false) {
// No space between icon and label — spacing via CSS margin (zibll .but > .fa).
$label = '<i class="' . esc_attr($fallback_icon) . '" aria-hidden="true"></i><span class="navbar-cta-text">' . esc_html(wp_strip_all_tags($label)) . '</span>';
@@ -118,13 +80,13 @@ if (!function_exists('aksrt_render_new_add_btns')) :
'type' => 'post',
'url' => $fallback,
'label' => __('写文章', 'aksrt'),
'icon' => 'fas fa-file-alt',
'icon' => 'fa fas fa-file-alt',
]];
}
if ($label === '') {
$label = __('发布', 'aksrt');
}
$label_html = aksrt_normalize_header_cta_label((string) $label, 'fas fa-pen');
$label_html = aksrt_normalize_header_cta_label((string) $label, 'fa fas fa-pen');
// Split paint classes vs wrapper tokens.
$class_tokens = preg_split('/\s+/', trim($class), -1, PREG_SPLIT_NO_EMPTY) ?: [];
@@ -161,7 +123,7 @@ if (!function_exists('aksrt_render_new_add_btns')) :
// data-aksrt-newadd: JS may portal menu to body so chip width cannot track menu.
$html = '<span class="' . esc_attr(trim(implode(' ', $wrap_tokens) . ' hover-show')) . '" data-aksrt-newadd="1">';
$html .= '<span class="newadd-btns__toggle navbar-cta ' . esc_attr($cta_class) . '">' . $label_html
. '<i class="fas fa-caret-down" aria-hidden="true"></i></span>';
. '<i class="fa fas fa-caret-down" aria-hidden="true"></i></span>';
$html .= '<div class="hover-show-con dropdown-menu drop-newadd" role="menu">';
foreach ($actions as $a) {
$html .= '<a rel="nofollow" class="btn-newadd newadd-btns__item" role="menuitem" href="' . esc_url($a['url']) . '">';
@@ -179,7 +141,20 @@ if (!function_exists('aksrt_render_header_menu_buttons')) :
* Publish + optional VIP open button for header CTA.
*/
function aksrt_render_header_menu_buttons(): string {
$cfg = aksrt_get_header_newposts_config();
$settings = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_all() : [];
$types = is_array($settings['nav_newposts_btns'] ?? null)
? array_values(array_intersect(array_map('sanitize_key', $settings['nav_newposts_btns']), ['post']))
: ['post'];
if (!$types) {
$types = ['post'];
}
$cfg = [
'enabled' => !isset($settings['nav_newposts']) || !empty($settings['nav_newposts']),
'text' => trim((string) ($settings['nav_newposts_text'] ?? __('发布', 'aksrt'))),
'radius_pill' => !isset($settings['nav_newposts_radius']) || !empty($settings['nav_newposts_radius']),
'class' => sanitize_html_class((string) (($settings['nav_newposts_class'] ?? '') ?: 'jb-blue')),
'types' => $types,
];
$html = '';
if (!empty($cfg['enabled'])) {
// zibll default: but nowave jb-blue (+ radius).
@@ -189,18 +164,14 @@ if (!function_exists('aksrt_render_header_menu_buttons')) :
$skin = 'jb-blue';
}
$class .= ' ' . $skin;
$radius = (int) ($cfg['radius'] ?? 20);
$pill = !empty($cfg['radius_pill']) || $radius >= 16;
$pill = !empty($cfg['radius_pill']);
if ($pill && !str_contains($class, 'radius')) {
$class .= ' radius';
}
$radius_attr = $radius > 0
? ' data-radius="' . esc_attr((string) $radius) . '" style="--navbar-cta-radius:' . $radius . 'px"'
: '';
$label = (string) ($cfg['text'] ?? __('发布', 'aksrt'));
$btn = aksrt_render_new_add_btns($cfg['types'] ?? ['post'], $class, $label);
if ($btn !== '') {
$html .= '<div class="navbar-form navbar-right navbar-but"' . $radius_attr . '>' . $btn . '</div>';
$html .= $btn;
}
}
@@ -209,7 +180,7 @@ if (!function_exists('aksrt_render_header_menu_buttons')) :
$show_vip = false;
if (class_exists('\AKSRT\Settings\Settings')) {
$vs = \AKSRT\Settings\Settings::get_payment_vip_settings();
$show_vip = !empty($vs['enabled']) && !empty(\AKSRT\Settings\Settings::get_header_nav_settings()['nav_pay_vip']);
$show_vip = !empty($vs['enabled']) && (!isset($settings['nav_pay_vip']) || !empty($settings['nav_pay_vip']));
}
if ($show_vip) {
$is_vip = false;
@@ -228,14 +199,13 @@ if (!function_exists('aksrt_render_header_menu_buttons')) :
}
}
}
$html .= '<div class="navbar-form navbar-right navbar-vip">';
// zibll: span.hover-show wraps button + .hover-show-con.sub-vip-card
$html .= '<span class="hover-show inline-block navbar-vip-hover">';
$html .= '<a class="but jb-red radius payvip-icon navbar-cta ' . esc_attr($cls) . '" href="javascript:;"'
$html .= '<a class="but jb-red radius payvip-icon ml10 navbar-cta ' . esc_attr($cls) . '" href="javascript:;"'
. ($user_id > 0 ? ' vip-level="1"' : '') . '>';
$html .= '<i class="fas fa-gem" aria-hidden="true"></i>'
$html .= '<svg class="icon em12 mr3" aria-hidden="true"><use xlink:href="#icon-vip_1"></use></svg>'
. '<span class="navbar-cta-text">' . esc_html__('开通会员', 'aksrt') . '</span>';
$html .= '</a>' . $hover . '</span></div>';
$html .= '</a>' . $hover . '</span>';
}
}