Refactor: Replace sidebar with horizontal navigation bar

- Remove sidebar and toggle functionality
- Add Bootstrap navbar with dropdown menus
- Move navigation to top between header and content
- Update menu rendering for Bootstrap dropdowns
- Clean up unused files (header.mustache, sidebar.mustache, sidebar.js)
- Add guide link with book icon in footer
- Simplify layout structure
- Remove duplicate code and fix syntax errors
- Add .gitignore for node_modules and other temp files
This commit is contained in:
2025-11-21 14:23:41 +01:00
parent 0f1c7234b8
commit a86809c243
87 changed files with 8369 additions and 1353 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,246 @@
// SCSS variables
$primary: #0d6efd;
$secondary: #6c757d;
$success: #198754;
$info: #0dcaf0;
$warning: #ffc107;
$danger: #dc3545;
$light: #f8f9fa;
$dark: #212529;
// SCSS mixins
@mixin transition($properties...) {
transition: $properties;
}
// Custom styles
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body {
height: 100%;
}
body {
display: flex;
flex-direction: column;
min-height: 100vh;
position: relative;
}
.main-wrapper {
flex: 1;
display: flex;
flex-direction: column;
min-height: calc(100vh - 70px);
}
.content-wrapper {
flex: 1;
display: flex;
overflow: hidden;
}
.sidebar {
width: 250px;
background-color: #f8f9fa;
border-right: 1px solid #dee2e6;
overflow-y: auto;
flex-shrink: 0;
@include transition(transform 0.3s ease);
position: fixed;
top: 70px;
left: 0;
height: calc(100vh - 140px);
z-index: 999;
transform: translateX(0);
}
.sidebar.collapsed {
transform: translateX(-250px);
}
.sidebar-toggle {
position: absolute;
top: 15px;
right: 15px;
z-index: 1001;
background: none;
border: none;
cursor: pointer;
@include transition(all 0.3s ease);
font-size: 20px;
color: #6c757d;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
&:hover {
color: #0d6efd;
background-color: #f8f9fa;
}
}
.sidebar-toggle-outer {
position: relative;
z-index: 1001;
background-color: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
margin-right: 10px;
color: white !important;
&:hover {
background-color: rgba(255, 255, 255, 0.3);
color: white !important;
}
}
.sidebar.collapsed .sidebar-toggle-inner {
right: auto;
left: 15px;
}
.sidebar.collapsed ~ .main-content {
margin-left: 0;
}
.sidebar.collapsed .sidebar-toggle-outer {
display: block !important;
}
.sidebar:not(.collapsed) .sidebar-toggle-outer {
display: none !important;
}
.main-content {
flex: 1;
overflow-y: auto;
padding: 20px;
@include transition(margin-left 0.3s ease);
margin-left: 250px;
}
.folder-toggle {
font-weight: bold;
color: #212529 !important;
cursor: pointer;
display: flex;
align-items: center;
padding: 0.5rem 0.75rem;
background-color: #f8f9fa !important;
margin: 0.125rem 0;
@include transition(background-color 0.2s ease);
&:hover {
background-color: #e9ecef !important;
}
&[aria-expanded=true] {
background-color: #dee2e6 !important;
color: #212529 !important;
font-weight: 600;
}
.arrow {
margin-right: 8px;
@include transition(transform 0.2s);
font-size: 0.8em;
}
&[aria-expanded=true] .arrow {
transform: rotate(90deg);
}
}
.page-link {
color: #495057 !important;
font-weight: 500;
padding: 0.5rem 0.75rem;
padding-left: 2rem;
background-color: #ffffff !important;
margin: 0.125rem 0;
@include transition(background-color 0.2s ease);
&:hover {
color: #212529 !important;
background-color: #f8f9fa !important;
}
&.active {
background-color: #0d6efd !important;
color: #212529 !important;
font-weight: 600;
}
}
.file-info {
font-size: 0.9rem;
color: #6c757d;
}
.site-info a {
color: #0d6efd;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
.auto-link {
color: #0d6efd;
text-decoration: none;
border-bottom: 2px dashed #0d6efd;
font-weight: 500;
@include transition(all 0.2s ease);
&:hover {
color: #0a58ca;
text-decoration: none;
border-bottom-style: solid;
border-bottom-color: #0a58ca;
}
}
.search-form {
max-width: 300px;
}
.card-title a {
text-decoration: none;
color: inherit;
&:hover {
text-decoration: underline;
}
}
.folder-disabled {
font-weight: 500;
color: #6c757d !important;
cursor: not-allowed;
display: flex;
align-items: center;
padding: 0.5rem 0.75rem;
background-color: #f8f9fa !important;
margin: 0.125rem 0;
opacity: 0.7;
.arrow {
margin-right: 8px;
font-size: 0.8em;
opacity: 0.6;
}
}
@media (max-width: 768px) {
.sidebar {
width: 200px;
}
}

View File

@@ -1,11 +0,0 @@
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<!-- < -->
<path d="M8 8 L3 16 L8 24" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
<!-- / -->
<path d="M12 24 L18 8" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
<!-- .. -->
<circle cx="22" cy="20" r="2" fill="#ffffff"/>
<circle cx="28" cy="20" r="2" fill="#ffffff"/>
</svg>

Before

Width:  |  Height:  |  Size: 442 B

View File

@@ -1,11 +0,0 @@
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<!-- < -->
<path d="M8 8 L3 16 L8 24" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
<!-- / -->
<path d="M12 24 L18 8" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
<!-- .. -->
<circle cx="22" cy="20" r="2" fill="#ffffff"/>
<circle cx="28" cy="20" r="2" fill="#ffffff"/>
</svg>

Before

Width:  |  Height:  |  Size: 442 B

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long