This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

add navbar dropdown organization

+175 -13
+118
src/components/Navbar/Navbar.css
··· 268 268 margin-left: 10.2px; 269 269 } 270 270 271 + /* Dropdown Menu Styles */ 272 + .dropdown-container { 273 + position: relative; 274 + } 275 + 276 + .dropdown-trigger { 277 + position: relative; 278 + display: inline-block; 279 + padding-right: 20px; /* Space for the arrow indicator */ 280 + } 281 + 282 + .dropdown-trigger::after { 283 + content: '▼'; 284 + font-size: 0.6em; 285 + position: absolute; 286 + right: 0; 287 + top: 50%; 288 + transform: translateY(-50%); 289 + transition: transform 0.2s ease; 290 + } 291 + 292 + .dropdown-container:hover .dropdown-trigger::after { 293 + transform: translateY(-50%) rotate(180deg); 294 + } 295 + 296 + .dropdown-menu { 297 + position: absolute; 298 + top: 100%; 299 + left: 0; 300 + background-color: var(--navbar-bg); 301 + border: 1px solid var(--card-border); 302 + border-radius: 4px; 303 + min-width: 180px; 304 + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 305 + z-index: 1000; 306 + padding: 8px 0; 307 + margin-top: 8px; 308 + opacity: 0; 309 + visibility: hidden; 310 + transform: translateY(-10px); 311 + transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s; 312 + } 313 + 314 + .dropdown-container:hover .dropdown-menu { 315 + opacity: 1; 316 + visibility: visible; 317 + transform: translateY(0); 318 + } 319 + 320 + .dropdown-menu li { 321 + margin: 0 !important; 322 + padding: 0; 323 + } 324 + 325 + .dropdown-menu li a { 326 + display: block; 327 + padding: 8px 16px; 328 + color: var(--text); 329 + text-decoration: none; 330 + transition: background-color 0.2s ease; 331 + white-space: nowrap; 332 + } 333 + 334 + .dropdown-menu li a:hover { 335 + background-color: rgba(59, 154, 248, 0.1); 336 + color: #3B9AF8; 337 + } 338 + 339 + /* Dark mode adjustments for dropdown */ 340 + .dark-mode .dropdown-menu { 341 + background-color: var(--navbar-bg); 342 + border-color: var(--card-border); 343 + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); 344 + } 345 + 346 + .dark-mode .dropdown-menu li a:hover { 347 + background-color: rgba(59, 154, 248, 0.2); 348 + color: #66b2ff; 349 + } 350 + 351 + /* Responsive Adjustments for Dropdown */ 352 + @media (max-width: 940px) { 353 + .dropdown-menu { 354 + position: static; 355 + display: none; 356 + box-shadow: none; 357 + border: none; 358 + min-width: auto; 359 + width: 100%; 360 + margin-top: 5px; 361 + padding: 5px 0; 362 + background-color: transparent; 363 + transform: none; 364 + } 365 + 366 + .dropdown-container:hover .dropdown-menu { 367 + display: block; 368 + opacity: 1; 369 + visibility: visible; 370 + transform: none; 371 + } 372 + 373 + .dropdown-menu li a { 374 + padding: 5px 10px; 375 + text-align: center; 376 + } 377 + 378 + .dropdown-trigger::after { 379 + position: static; 380 + margin-left: 5px; 381 + transform: none; 382 + } 383 + 384 + .dropdown-container:hover .dropdown-trigger::after { 385 + transform: rotate(180deg); 386 + } 387 + } 388 + 271 389 /* Responsive Design: Links display in a row under the logo */ 272 390 @media (max-width: 940px) { 273 391 .navbar-container {
+57 -13
src/components/Navbar/Navbar.js
··· 1 - import React, { useContext } from 'react'; 1 + import React, { useContext, useState } from 'react'; 2 2 import { Link, useNavigate } from 'react-router-dom'; 3 3 import { ThemeContext } from '../../contexts/ThemeContext'; 4 4 import './Navbar.css'; 5 5 6 + // Dropdown Menu Component 7 + const DropdownMenu = ({ title, path, items }) => { 8 + const [isHovered, setIsHovered] = useState(false); 9 + 10 + return ( 11 + <li 12 + className="dropdown-container" 13 + onMouseEnter={() => setIsHovered(true)} 14 + onMouseLeave={() => setIsHovered(false)} 15 + > 16 + <Link to={path} className="dropdown-trigger">{title}</Link> 17 + {isHovered && ( 18 + <ul className="dropdown-menu"> 19 + {items.map((item, index) => ( 20 + <li key={index}> 21 + <Link to={item.path}>{item.title}</Link> 22 + </li> 23 + ))} 24 + </ul> 25 + )} 26 + </li> 27 + ); 28 + }; 29 + 6 30 const Navbar = () => { 7 31 const { isDarkMode, toggleDarkMode } = useContext(ThemeContext); 8 32 const navigate = useNavigate(); 9 33 34 + // Define dropdown menus structure 35 + const scoreDropdown = { 36 + title: "score", 37 + path: "/", 38 + items: [ 39 + { title: "score", path: "/" }, 40 + { title: "compare", path: "/compare" }, 41 + { title: "leaderboard", path: "/leaderboard" }, 42 + { title: "alt text rating", path: "/alt-text" }, 43 + { title: "shortcut", path: "/shortcut" } 44 + ] 45 + }; 46 + 47 + const aboutDropdown = { 48 + title: "about", 49 + path: "/about", 50 + items: [ 51 + { title: "about", path: "/about" }, 52 + { title: "methodology", path: "/methodology" }, 53 + { title: "definitions", path: "/definitions" } 54 + ] 55 + }; 56 + 10 57 return ( 11 58 <header className="navbar"> 12 59 <div className="navbar-container"> ··· 23 70 </div> 24 71 <nav className="navbar-links"> 25 72 <ul> 26 - <li><Link to="/">score</Link></li> 27 - <li><Link to="/compare">compare</Link></li> 28 - <li><Link to="/leaderboard">leaderboard</Link></li> 73 + <DropdownMenu {...scoreDropdown} /> 29 74 <li><Link to="/resources">resources</Link></li> 30 - <li><Link to="/alt-text">alt text</Link></li> 31 - <li><Link to="/about">about</Link></li> 75 + <DropdownMenu {...aboutDropdown} /> 32 76 </ul> 33 77 </nav> 34 78 </div> ··· 67 111 </svg> 68 112 </button> 69 113 <div className="navbar-support-button-container"> 70 - <button 71 - className="navbar-support-button" 72 - type="button" 73 - onClick={() => navigate(`/supporter`)} 74 - > 75 - become a supporter 76 - </button> 114 + <button 115 + className="navbar-support-button" 116 + type="button" 117 + onClick={() => navigate(`/supporter`)} 118 + > 119 + become a supporter 120 + </button> 77 121 </div> 78 122 </div> 79 123 </div>