Alsmwal commited on
Commit
40bf1a3
Β·
verified Β·
1 Parent(s): 2581b53

Update Admin-Dashboard.html

Browse files
Files changed (1) hide show
  1. Admin-Dashboard.html +168 -8
Admin-Dashboard.html CHANGED
@@ -49,10 +49,11 @@
49
  height: 100dvh;
50
  padding: 20px;
51
  transition: all 0.3s ease;
52
- z-index: 100;
53
  display: flex;
54
  flex-direction: column;
55
  overflow-y: auto;
 
56
  }
57
 
58
  .light-mode .sidebar {
@@ -65,12 +66,20 @@
65
  box-shadow: 2px 0 10px rgba(0,0,0,0.3);
66
  }
67
 
 
 
 
 
 
 
 
 
 
68
  .logo {
69
  font-size: 24px;
70
  font-weight: bold;
71
  color: var(--olive-light);
72
- margin-bottom: 40px;
73
- text-align: center;
74
  }
75
 
76
  .menu-item {
@@ -131,6 +140,7 @@
131
  margin-left: 250px;
132
  padding: 30px;
133
  min-height: 100vh;
 
134
  }
135
 
136
  .header-bar {
@@ -153,6 +163,7 @@
153
  position: relative;
154
  cursor: pointer;
155
  transition: all 0.3s ease;
 
156
  }
157
 
158
  .theme-toggle::after {
@@ -503,6 +514,11 @@
503
  cursor: pointer;
504
  box-shadow: 0 2px 5px rgba(0,0,0,0.2);
505
  font-size: 20px;
 
 
 
 
 
506
  }
507
 
508
  .sidebar-overlay {
@@ -518,6 +534,64 @@
518
  transition: opacity 0.3s;
519
  }
520
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
521
  @media (max-width: 768px) {
522
  .sidebar {
523
  transform: translateX(-100%);
@@ -563,6 +637,15 @@
563
  overflow-x: auto;
564
  -webkit-overflow-scrolling: touch;
565
  }
 
 
 
 
 
 
 
 
 
566
  }
567
 
568
  /* Modal Styles */
@@ -650,7 +733,7 @@
650
  </head>
651
  <body class="light-mode">
652
  <!-- Mobile Menu Toggle -->
653
- <button class="menu-toggle" onclick="toggleSidebar()">☰</button>
654
 
655
  <!-- Sidebar Overlay -->
656
  <div class="sidebar-overlay" onclick="toggleSidebar()"></div>
@@ -663,7 +746,13 @@
663
 
664
  <!-- Sidebar -->
665
  <div class="sidebar" id="sidebar">
666
- <div class="logo">πŸŽ“ University AI</div>
 
 
 
 
 
 
667
 
668
  <div class="menu-item active" data-section="dashboard">
669
  <span>πŸ“Š</span> Dashboard
@@ -681,13 +770,14 @@
681
  <button class="logout-btn" onclick="logout()">
682
  πŸšͺ Logout
683
  </button>
 
684
  </div>
685
 
686
  <!-- Main Content -->
687
  <div class="main-content">
688
  <div class="header-bar">
 
689
  <h1>Admin Dashboard πŸ‘¨β€πŸ’Ό</h1>
690
- <div class="theme-toggle" onclick="toggleTheme()"></div>
691
  </div>
692
 
693
  <div id="alert" class="alert"></div>
@@ -865,8 +955,72 @@
865
  // Toggle Sidebar for Mobile
866
  function toggleSidebar() {
867
  document.getElementById('sidebar').classList.toggle('active');
868
- const overlay = document.querySelector('.sidebar-overlay');
869
- overlay.classList.toggle('active');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
870
  }
871
 
872
  // Loading Spinner Functions
@@ -885,6 +1039,12 @@
885
  document.body.classList.remove("light-mode", "dark-mode");
886
  document.body.classList.add(savedTheme + "-mode");
887
 
 
 
 
 
 
 
888
  await checkAuth();
889
  await loadStats();
890
 
 
49
  height: 100dvh;
50
  padding: 20px;
51
  transition: all 0.3s ease;
52
+ z-index: 1000;
53
  display: flex;
54
  flex-direction: column;
55
  overflow-y: auto;
56
+ box-sizing: border-box;
57
  }
58
 
59
  .light-mode .sidebar {
 
66
  box-shadow: 2px 0 10px rgba(0,0,0,0.3);
67
  }
68
 
69
+ .sidebar-header {
70
+ display: flex;
71
+ justify-content: space-between;
72
+ align-items: center;
73
+ margin-bottom: 30px;
74
+ width: 100%;
75
+ position: relative;
76
+ }
77
+
78
  .logo {
79
  font-size: 24px;
80
  font-weight: bold;
81
  color: var(--olive-light);
82
+ margin: 0;
 
83
  }
84
 
85
  .menu-item {
 
140
  margin-left: 250px;
141
  padding: 30px;
142
  min-height: 100vh;
143
+ transition: margin-left 0.3s ease;
144
  }
145
 
146
  .header-bar {
 
163
  position: relative;
164
  cursor: pointer;
165
  transition: all 0.3s ease;
166
+ flex-shrink: 0;
167
  }
168
 
169
  .theme-toggle::after {
 
514
  cursor: pointer;
515
  box-shadow: 0 2px 5px rgba(0,0,0,0.2);
516
  font-size: 20px;
517
+ transition: all 0.3s ease;
518
+ }
519
+
520
+ .menu-toggle.active {
521
+ left: 220px;
522
  }
523
 
524
  .sidebar-overlay {
 
534
  transition: opacity 0.3s;
535
  }
536
 
537
+ /* Desktop Sidebar Toggle */
538
+ .icon-btn {
539
+ background: transparent;
540
+ border: none;
541
+ color: var(--olive-light);
542
+ font-size: 24px;
543
+ cursor: pointer;
544
+ padding: 5px;
545
+ border-radius: 5px;
546
+ transition: all 0.2s;
547
+ display: flex;
548
+ align-items: center;
549
+ justify-content: center;
550
+ }
551
+
552
+ .icon-btn:hover {
553
+ background: rgba(58, 102, 42, 0.1);
554
+ }
555
+
556
+ /* Resizer Styles */
557
+ .resizer {
558
+ width: 6px;
559
+ height: 100%;
560
+ background: transparent;
561
+ position: absolute;
562
+ right: 0;
563
+ top: 0;
564
+ cursor: col-resize;
565
+ z-index: 102;
566
+ transition: background 0.2s;
567
+ }
568
+
569
+ .resizer:hover, .sidebar:hover .resizer {
570
+ background: rgba(58, 102, 42, 0.2);
571
+ }
572
+
573
+ body.resizing {
574
+ cursor: col-resize;
575
+ user-select: none;
576
+ }
577
+
578
+ body.resizing .sidebar,
579
+ body.resizing .main-content {
580
+ transition: none !important;
581
+ }
582
+
583
+ @media (min-width: 769px) {
584
+ body.sidebar-collapsed .sidebar {
585
+ transform: translateX(-100%);
586
+ }
587
+ body.sidebar-collapsed .main-content {
588
+ margin-left: 0 !important;
589
+ }
590
+ body.sidebar-collapsed #expandSidebarBtn {
591
+ display: block !important;
592
+ }
593
+ }
594
+
595
  @media (max-width: 768px) {
596
  .sidebar {
597
  transform: translateX(-100%);
 
637
  overflow-x: auto;
638
  -webkit-overflow-scrolling: touch;
639
  }
640
+ #collapseSidebarBtn {
641
+ display: none;
642
+ }
643
+ #expandSidebarBtn {
644
+ display: none !important;
645
+ }
646
+ .resizer {
647
+ display: none;
648
+ }
649
  }
650
 
651
  /* Modal Styles */
 
733
  </head>
734
  <body class="light-mode">
735
  <!-- Mobile Menu Toggle -->
736
+ <button class="menu-toggle" id="menuToggle" onclick="toggleSidebar()">☰</button>
737
 
738
  <!-- Sidebar Overlay -->
739
  <div class="sidebar-overlay" onclick="toggleSidebar()"></div>
 
746
 
747
  <!-- Sidebar -->
748
  <div class="sidebar" id="sidebar">
749
+ <div class="sidebar-header">
750
+ <div class="logo">πŸŽ“ University AI</div>
751
+ <div style="display: flex; gap: 10px; align-items: center;">
752
+ <div class="theme-toggle" onclick="toggleTheme()"></div>
753
+ <button id="collapseSidebarBtn" class="icon-btn" title="Collapse Sidebar">β—€</button>
754
+ </div>
755
+ </div>
756
 
757
  <div class="menu-item active" data-section="dashboard">
758
  <span>πŸ“Š</span> Dashboard
 
770
  <button class="logout-btn" onclick="logout()">
771
  πŸšͺ Logout
772
  </button>
773
+ <div class="resizer" id="sidebarResizer"></div>
774
  </div>
775
 
776
  <!-- Main Content -->
777
  <div class="main-content">
778
  <div class="header-bar">
779
+ <button id="expandSidebarBtn" class="icon-btn" style="display: none; margin-right: 15px;" title="Show Sidebar">☰</button>
780
  <h1>Admin Dashboard πŸ‘¨β€πŸ’Ό</h1>
 
781
  </div>
782
 
783
  <div id="alert" class="alert"></div>
 
955
  // Toggle Sidebar for Mobile
956
  function toggleSidebar() {
957
  document.getElementById('sidebar').classList.toggle('active');
958
+ document.querySelector('.sidebar-overlay').classList.toggle('active');
959
+
960
+ const toggleBtn = document.getElementById('menuToggle');
961
+ toggleBtn.classList.toggle('active');
962
+
963
+ if (toggleBtn.classList.contains('active')) {
964
+ toggleBtn.innerHTML = '←';
965
+ } else {
966
+ toggleBtn.innerHTML = '☰';
967
+ }
968
+ }
969
+
970
+ // Desktop Sidebar Logic
971
+ function toggleDesktopSidebar() {
972
+ document.body.classList.toggle('sidebar-collapsed');
973
+ const isCollapsed = document.body.classList.contains('sidebar-collapsed');
974
+ localStorage.setItem('sidebar_collapsed', isCollapsed);
975
+ }
976
+
977
+ function initSidebarState() {
978
+ const isCollapsed = localStorage.getItem('sidebar_collapsed') === 'true';
979
+ if (isCollapsed && window.innerWidth > 768) {
980
+ document.body.classList.add('sidebar-collapsed');
981
+ }
982
+ }
983
+
984
+ function initResizer() {
985
+ const sidebar = document.getElementById('sidebar');
986
+ const resizer = document.getElementById('sidebarResizer');
987
+ const mainContent = document.querySelector('.main-content');
988
+ let isResizing = false;
989
+
990
+ // Load saved width
991
+ const savedWidth = localStorage.getItem('sidebar_width');
992
+ if (savedWidth && window.innerWidth > 768) {
993
+ sidebar.style.width = savedWidth;
994
+ if (!document.body.classList.contains('sidebar-collapsed')) {
995
+ mainContent.style.marginLeft = savedWidth;
996
+ }
997
+ }
998
+
999
+ resizer.addEventListener('mousedown', (e) => {
1000
+ isResizing = true;
1001
+ document.body.classList.add('resizing');
1002
+
1003
+ const handleMouseMove = (e) => {
1004
+ if (!isResizing) return;
1005
+ let newWidth = e.clientX;
1006
+ if (newWidth < 200) newWidth = 200;
1007
+ if (newWidth > 500) newWidth = 500;
1008
+
1009
+ sidebar.style.width = `${newWidth}px`;
1010
+ mainContent.style.marginLeft = `${newWidth}px`;
1011
+ };
1012
+
1013
+ const handleMouseUp = () => {
1014
+ isResizing = false;
1015
+ document.body.classList.remove('resizing');
1016
+ document.removeEventListener('mousemove', handleMouseMove);
1017
+ document.removeEventListener('mouseup', handleMouseUp);
1018
+ localStorage.setItem('sidebar_width', sidebar.style.width);
1019
+ };
1020
+
1021
+ document.addEventListener('mousemove', handleMouseMove);
1022
+ document.addEventListener('mouseup', handleMouseUp);
1023
+ });
1024
  }
1025
 
1026
  // Loading Spinner Functions
 
1039
  document.body.classList.remove("light-mode", "dark-mode");
1040
  document.body.classList.add(savedTheme + "-mode");
1041
 
1042
+ initSidebarState();
1043
+ initResizer();
1044
+
1045
+ document.getElementById('collapseSidebarBtn').addEventListener('click', toggleDesktopSidebar);
1046
+ document.getElementById('expandSidebarBtn').addEventListener('click', toggleDesktopSidebar);
1047
+
1048
  await checkAuth();
1049
  await loadStats();
1050