Spaces:
Sleeping
Sleeping
Commit
·
e8b2ac4
1
Parent(s):
ec14506
Implement responsive design for mobile screens
Browse files- frontend/main.js +36 -3
- frontend/style.css +87 -0
frontend/main.js
CHANGED
|
@@ -33,14 +33,47 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
| 33 |
});
|
| 34 |
});
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
sidebarToggle.addEventListener('click', () => {
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
animateNavText();
|
| 41 |
}
|
| 42 |
});
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
function formatAIResponse(text) {
|
| 45 |
text = text.replace(/\*\*(.*?)\*\*/g, '<strong>$1<\/strong>');
|
| 46 |
text = text.replace(/^\d+\.\s+(.*)/gm, '<li>$1<\/li>');
|
|
|
|
| 33 |
});
|
| 34 |
});
|
| 35 |
|
| 36 |
+
// Function to check if it's a mobile view
|
| 37 |
+
function isMobileView() {
|
| 38 |
+
return window.innerWidth <= 768;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
// Initial setup for sidebar based on screen size
|
| 42 |
+
if (isMobileView()) {
|
| 43 |
+
sidebar.classList.add('collapsed'); // Start collapsed on mobile
|
| 44 |
+
mainContent.classList.remove('collapsed'); // Main content always full width on mobile
|
| 45 |
+
} else {
|
| 46 |
+
// Desktop default state (can be adjusted if you want it collapsed by default)
|
| 47 |
+
sidebar.classList.remove('collapsed');
|
| 48 |
+
mainContent.classList.remove('collapsed');
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
sidebarToggle.addEventListener('click', () => {
|
| 52 |
+
if (isMobileView()) {
|
| 53 |
+
sidebar.classList.toggle('active'); // Use 'active' for mobile slide-in
|
| 54 |
+
// mainContent does not toggle 'collapsed' on mobile
|
| 55 |
+
} else {
|
| 56 |
+
sidebar.classList.toggle('collapsed');
|
| 57 |
+
mainContent.classList.toggle('collapsed');
|
| 58 |
+
}
|
| 59 |
+
if (!sidebar.classList.contains('collapsed') && !isMobileView()) {
|
| 60 |
animateNavText();
|
| 61 |
}
|
| 62 |
});
|
| 63 |
|
| 64 |
+
// Adjust sidebar on window resize
|
| 65 |
+
window.addEventListener('resize', () => {
|
| 66 |
+
if (isMobileView()) {
|
| 67 |
+
sidebar.classList.add('collapsed');
|
| 68 |
+
sidebar.classList.remove('active');
|
| 69 |
+
mainContent.classList.remove('collapsed');
|
| 70 |
+
} else {
|
| 71 |
+
sidebar.classList.remove('collapsed');
|
| 72 |
+
sidebar.classList.remove('active');
|
| 73 |
+
mainContent.classList.remove('collapsed');
|
| 74 |
+
}
|
| 75 |
+
});
|
| 76 |
+
|
| 77 |
function formatAIResponse(text) {
|
| 78 |
text = text.replace(/\*\*(.*?)\*\*/g, '<strong>$1<\/strong>');
|
| 79 |
text = text.replace(/^\d+\.\s+(.*)/gm, '<li>$1<\/li>');
|
frontend/style.css
CHANGED
|
@@ -310,4 +310,91 @@ button:hover {
|
|
| 310 |
|
| 311 |
.sidebar.collapsed .nav-text {
|
| 312 |
animation: none;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 313 |
}
|
|
|
|
| 310 |
|
| 311 |
.sidebar.collapsed .nav-text {
|
| 312 |
animation: none;
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
+
/* Responsive adjustments for smaller screens */
|
| 316 |
+
@media (max-width: 768px) {
|
| 317 |
+
.app-layout {
|
| 318 |
+
flex-direction: column;
|
| 319 |
+
}
|
| 320 |
+
|
| 321 |
+
.sidebar {
|
| 322 |
+
width: 100%;
|
| 323 |
+
height: auto;
|
| 324 |
+
position: relative; /* Change from fixed to relative */
|
| 325 |
+
padding: 1rem;
|
| 326 |
+
box-shadow: none;
|
| 327 |
+
transform: translateX(-100%); /* Hide sidebar by default */
|
| 328 |
+
transition: transform 0.3s ease;
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
.sidebar.active {
|
| 332 |
+
transform: translateX(0);
|
| 333 |
+
}
|
| 334 |
+
|
| 335 |
+
.sidebar.collapsed {
|
| 336 |
+
width: 100%;
|
| 337 |
+
transform: translateX(-100%);
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
.sidebar-header {
|
| 341 |
+
margin-bottom: 1rem;
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
.sidebar-header h2 {
|
| 345 |
+
opacity: 1; /* Always show title on mobile */
|
| 346 |
+
}
|
| 347 |
+
|
| 348 |
+
#sidebar-toggle {
|
| 349 |
+
display: block; /* Ensure toggle is visible */
|
| 350 |
+
transform: rotate(0deg) !important; /* Reset rotation */
|
| 351 |
+
}
|
| 352 |
+
|
| 353 |
+
.sidebar.active #sidebar-toggle {
|
| 354 |
+
transform: rotate(180deg) !important; /* Rotate when active */
|
| 355 |
+
}
|
| 356 |
+
|
| 357 |
+
.sidebar-nav .nav-link .nav-text {
|
| 358 |
+
opacity: 1; /* Always show text on mobile */
|
| 359 |
+
width: auto;
|
| 360 |
+
overflow: visible;
|
| 361 |
+
}
|
| 362 |
+
|
| 363 |
+
.sidebar-nav .nav-link {
|
| 364 |
+
justify-content: flex-start;
|
| 365 |
+
}
|
| 366 |
+
|
| 367 |
+
.main-content {
|
| 368 |
+
margin-left: 0; /* Remove left margin */
|
| 369 |
+
width: 100%; /* Take full width */
|
| 370 |
+
padding: 1rem; /* Adjust padding */
|
| 371 |
+
overflow-y: auto; /* Ensure scrolling */
|
| 372 |
+
}
|
| 373 |
+
|
| 374 |
+
.main-content.collapsed {
|
| 375 |
+
margin-left: 0;
|
| 376 |
+
width: 100%;
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
.container {
|
| 380 |
+
padding: 1rem; /* Adjust container padding */
|
| 381 |
+
}
|
| 382 |
+
|
| 383 |
+
.card {
|
| 384 |
+
padding: 1.5rem; /* Adjust card padding */
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
/* Adjust font sizes for better mobile readability */
|
| 388 |
+
body {
|
| 389 |
+
font-size: 0.9rem;
|
| 390 |
+
}
|
| 391 |
+
|
| 392 |
+
.card h2 {
|
| 393 |
+
font-size: 1.5rem;
|
| 394 |
+
}
|
| 395 |
+
|
| 396 |
+
select, input[type="text"], button {
|
| 397 |
+
padding: 0.8rem;
|
| 398 |
+
font-size: 0.9rem;
|
| 399 |
+
}
|
| 400 |
}
|