NavSidebarComponent.vala 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Spry;
  2. /**
  3. * NavSidebarComponent - A simple navigation sidebar for the documentation site
  4. *
  5. * Features:
  6. * - All items always visible (no collapsing)
  7. * - Current page highlighting
  8. */
  9. public class NavSidebarComponent : Component {
  10. public string current_path { get; set; default = "/"; }
  11. public override string markup { get {
  12. return """
  13. <aside class="nav-sidebar" sid="sidebar" hx-disinherit="*">
  14. <!-- Home - Single link -->
  15. <div class="nav-section">
  16. <a href="/" class="nav-item" sid="home-link">Home</a>
  17. </div>
  18. <!-- Components Section -->
  19. <div class="nav-section">
  20. <h3 class="nav-section-title">Components</h3>
  21. <ul class="nav-items">
  22. <li><a href="/components/overview" class="nav-item" sid="components-overview">Overview</a></li>
  23. <li><a href="/components/template-syntax" class="nav-item" sid="components-template-syntax">Template Syntax</a></li>
  24. <li><a href="/components/actions" class="nav-item" sid="components-actions">Actions</a></li>
  25. <li><a href="/components/outlets" class="nav-item" sid="components-outlets">Outlets</a></li>
  26. <li><a href="/components/continuations" class="nav-item" sid="components-continuations">Continuations</a></li>
  27. </ul>
  28. </div>
  29. <!-- Page Components Section -->
  30. <div class="nav-section">
  31. <h3 class="nav-section-title">Page Components</h3>
  32. <ul class="nav-items">
  33. <li><a href="/page-components/overview" class="nav-item" sid="page-components-overview">Overview</a></li>
  34. <li><a href="/page-components/templates" class="nav-item" sid="page-components-templates">Page Templates</a></li>
  35. </ul>
  36. </div>
  37. <!-- Static Resources Section -->
  38. <div class="nav-section">
  39. <h3 class="nav-section-title">Static Resources</h3>
  40. <ul class="nav-items">
  41. <li><a href="/static-resources/overview" class="nav-item" sid="static-resources-overview">Overview</a></li>
  42. <li><a href="/static-resources/spry-mkssr" class="nav-item" sid="static-resources-spry-mkssr">Using spry-mkssr</a></li>
  43. </ul>
  44. </div>
  45. </aside>
  46. """;
  47. }}
  48. public override async void prepare() throws Error {
  49. // Highlight the current page link
  50. highlight_current_link();
  51. }
  52. private void highlight_current_link() {
  53. // Get the sid for the current path and add active class
  54. string? sid = get_sid_for_path(current_path);
  55. if (sid != null) {
  56. var link = this[sid];
  57. if (link != null) {
  58. link.add_class("active");
  59. }
  60. }
  61. }
  62. private string? get_sid_for_path(string path) {
  63. switch (path) {
  64. case "/": return "home-link";
  65. case "/components/overview": return "components-overview";
  66. case "/components/template-syntax": return "components-template-syntax";
  67. case "/components/actions": return "components-actions";
  68. case "/components/outlets": return "components-outlets";
  69. case "/components/continuations": return "components-continuations";
  70. case "/page-components/overview": return "page-components-overview";
  71. case "/page-components/templates": return "page-components-templates";
  72. case "/static-resources/overview": return "static-resources-overview";
  73. case "/static-resources/spry-mkssr": return "static-resources-spry-mkssr";
  74. default: return null;
  75. }
  76. }
  77. }