Files
kane-diagnostics/hubzilla/addon/vs01/Widget/CivicNav.php
2026-06-07 06:05:13 -04:00

58 lines
1.7 KiB
PHP

<?php
namespace Zotlabs\Widget;
/**
* CivicNav — top-level section navigation widget.
*
* Renders Vital Signs / DSC Categories / Scenarios links with the current
* association slug carried through each URL. Active section is highlighted.
*
* Registered by vs01. Shared across vs01, dsc01, and scn01 PDLs.
* Requires argv(1) to contain the association slug — returns empty string
* on the module index page (no slug).
*/
class CivicNav {
public function widget($arr) {
$slug = \argv(1) ?? '';
if (!$slug) {
return '';
}
if (function_exists('head_add_css')) {
head_add_css('/addon/vs01/view/css/civicnav.css');
}
$module = \App::$module ?? '';
$sections = [
'vs01' => 'Vital Signs',
'dsc01' => 'DSC Categories',
'scn01' => 'Scenarios',
];
$slug_safe = htmlspecialchars($slug, ENT_QUOTES, 'UTF-8');
$out = '<nav class="civicnav" aria-label="Kane Diagnostics">';
$out .= '<ul class="civicnav-list">';
foreach ($sections as $mod => $label) {
$is_active = ($module === $mod);
$url = z_root() . '/' . $mod . '/' . $slug_safe;
$out .= '<li class="civicnav-item' . ($is_active ? ' civicnav-active' : '') . '">';
if ($is_active) {
$out .= '<span class="civicnav-link civicnav-current">' . $label . '</span>';
} else {
$out .= '<a href="' . $url . '" class="civicnav-link">' . $label . '</a>';
}
$out .= '</li>';
}
$out .= '</ul>';
$out .= '</nav>';
return $out;
}
}