NavSidebarComponent.vala 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. <li><a href="/components/spry-mkconst" class="nav-item" sid="components-spry-mkconst">Using spry-mkconst</a></li>
  28. </ul>
  29. </div>
  30. <!-- Page Components Section -->
  31. <div class="nav-section">
  32. <h3 class="nav-section-title">Page Components</h3>
  33. <ul class="nav-items">
  34. <li><a href="/page-components/overview" class="nav-item" sid="page-components-overview">Overview</a></li>
  35. <li><a href="/page-components/templates" class="nav-item" sid="page-components-templates">Page Templates</a></li>
  36. </ul>
  37. </div>
  38. <!-- Static Resources Section -->
  39. <div class="nav-section">
  40. <h3 class="nav-section-title">Static Resources</h3>
  41. <ul class="nav-items">
  42. <li><a href="/static-resources/overview" class="nav-item" sid="static-resources-overview">Overview</a></li>
  43. <li><a href="/static-resources/spry-mkssr" class="nav-item" sid="static-resources-spry-mkssr">Using spry-mkssr</a></li>
  44. </ul>
  45. </div>
  46. </aside>
  47. """;
  48. }}
  49. public override async void prepare() throws Error {
  50. // Highlight the current page link
  51. highlight_current_link();
  52. }
  53. private void highlight_current_link() {
  54. // Get the sid for the current path and add active class
  55. string? sid = get_sid_for_path(current_path);
  56. if (sid != null) {
  57. var link = this[sid];
  58. if (link != null) {
  59. link.add_class("active");
  60. }
  61. }
  62. }
  63. private string? get_sid_for_path(string path) {
  64. switch (path) {
  65. case "/": return "home-link";
  66. case "/components/overview": return "components-overview";
  67. case "/components/template-syntax": return "components-template-syntax";
  68. case "/components/actions": return "components-actions";
  69. case "/components/outlets": return "components-outlets";
  70. case "/components/continuations": return "components-continuations";
  71. case "/components/spry-mkconst": return "components-spry-mkconst";
  72. case "/page-components/overview": return "page-components-overview";
  73. case "/page-components/templates": return "page-components-templates";
  74. case "/static-resources/overview": return "static-resources-overview";
  75. case "/static-resources/spry-mkssr": return "static-resources-spry-mkssr";
  76. default: return null;
  77. }
  78. }
  79. }