diff --git a/whm/gniza-whm/lib/GnizaWHM/UI.pm b/whm/gniza-whm/lib/GnizaWHM/UI.pm index bd4d6dc..05869b0 100644 --- a/whm/gniza-whm/lib/GnizaWHM/UI.pm +++ b/whm/gniza-whm/lib/GnizaWHM/UI.pm @@ -20,6 +20,7 @@ my $SCHEDULE_EXAMPLE = '/usr/local/gniza/etc/schedule.conf.example'; my $SSH_DIR = '/root/.ssh'; my $CSS_FILE = '/usr/local/cpanel/whostmgr/docroot/cgi/gniza-whm/assets/gniza-whm.css'; my $LOGO_FILE = '/usr/local/cpanel/whostmgr/docroot/cgi/gniza-whm/assets/gniza-logo.svg'; +my $_logo_data_uri = ''; # populated by page_header(), used by render_nav() # ── HTML Escaping ───────────────────────────────────────────── @@ -47,12 +48,19 @@ my @NAV_ITEMS = ( sub render_nav { my ($current_page) = @_; - my $html = qq{
\n}; + my $logo = ''; + if ($_logo_data_uri) { + $logo = qq{GNIZA}; + } + my $html = qq{
\n}; + $html .= qq{ $logo\n} if $logo; + $html .= qq{
\n}; for my $item (@NAV_ITEMS) { my $active = ($item->{url} eq $current_page) ? ' tab-active' : ''; my $label = esc($item->{label}); - $html .= qq{ $label\n}; + $html .= qq{ $label\n}; } + $html .= qq{
\n}; $html .= qq{
\n}; return $html; } @@ -681,19 +689,16 @@ sub page_header { # Scope :root/:host to our container so DaisyUI base styles # (background, color, overflow, scrollbar) don't leak into WHM. $css = _scope_to_container($css); - # Inline logo as base64 data URI - my $logo_html = ''; - if (open my $lfh, '<', $LOGO_FILE) { + # Pre-compute logo data URI for render_nav() + if (!$_logo_data_uri && open my $lfh, '<', $LOGO_FILE) { local $/; my $svg_data = <$lfh>; close $lfh; require MIME::Base64; - my $b64 = MIME::Base64::encode_base64($svg_data, ''); - $logo_html = qq{
GNIZA
\n}; + $_logo_data_uri = 'data:image/svg+xml;base64,' . MIME::Base64::encode_base64($svg_data, ''); } return qq{\n} - . qq{
\n} - . $logo_html; + . qq{
\n}; } sub _unwrap_layers {