From 983451adcc5c510b723952ee00aa2c8a84f92f5a Mon Sep 17 00:00:00 2001 From: Teal Bauer <teal@starsong.eu> Date: Tue, 11 Mar 2025 10:58:21 +0100 Subject: [PATCH] Bring back mobile hamburger --- app/views/layouts/application.html.erb | 64 +++++++++++++++++++++----- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 3bb06de..e2deef9 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -76,9 +76,8 @@ </button> <!-- Mobile dropdown menu --> - <div id="main-mobile-menu" class="hidden absolute right-0 mt-2 w-48 bg-white dark:bg-gray-800 rounded shadow-lg z-50"> + <div id="main-mobile-menu" class="hidden absolute right-0 mt-2 w-48 bg-white dark:bg-gray-800 rounded shadow-lg border border-gray-200 dark:border-gray-700 z-50"> <div class="py-2"> - <div class="px-4 py-2 font-semibold text-sm text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-700">Navigation</div> <%= link_to 'Conferences', conferences_path, class: 'block px-4 py-2 text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700' %> <%= link_to 'Assignments', assignments_path, class: 'block px-4 py-2 text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700' %> @@ -102,8 +101,29 @@ <!-- Not logged in state --> <div class="flex items-center space-x-4"> <span class="px-2 text-gray-600 dark:text-gray-300 hidden md:inline">not logged in</span> + <%= link_to "Assignments", assignments_path, class: "text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white" %> <%= link_to "Log in", new_user_session_path, class: "text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white" %> - <%= link_to "Sign Up", new_user_registration_path, class: "text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white" %> + </div> + + <!-- Mobile hamburger menu for non-logged in users --> + <div class="md:hidden relative ml-4"> + <button id="guest-menu-toggle" class="text-gray-900 dark:text-white"> + <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" /> + </svg> + </button> + + <!-- Mobile dropdown menu for guests --> + <div id="guest-mobile-menu" class="hidden absolute right-0 mt-2 w-48 bg-white dark:bg-gray-800 rounded shadow-lg border border-gray-200 dark:border-gray-700 z-50"> + <div> + <%= link_to 'Conferences', conferences_path, class: 'block px-4 py-2 text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700' %> + <%= link_to 'Assignments', assignments_path, class: 'block px-4 py-2 text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700' %> + + <div class="px-4 py-2 font-semibold text-sm text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-700 mt-2">Account</div> + <%= link_to "Log in", new_user_session_path, class: 'block px-4 py-2 text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700' %> + <%= link_to "Sign Up", new_user_registration_path, class: 'block px-4 py-2 text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700' %> + </div> + </div> </div> <% end %> </nav> @@ -111,7 +131,8 @@ </header> <script> - function initializeMainNavMenu() { + function initializeNavMenus() { + // Initialize main menu for logged in users const menuToggle = document.getElementById('main-menu-toggle'); const mobileMenu = document.getElementById('main-mobile-menu'); @@ -124,22 +145,41 @@ e.stopPropagation(); mobileMenu.classList.toggle('hidden'); }); + } + + // Initialize guest menu for non-logged in users + const guestMenuToggle = document.getElementById('guest-menu-toggle'); + const guestMobileMenu = document.getElementById('guest-mobile-menu'); + + if (guestMenuToggle && guestMobileMenu) { + // Remove any existing event listeners to prevent duplicates + const newGuestMenuToggle = guestMenuToggle.cloneNode(true); + guestMenuToggle.parentNode.replaceChild(newGuestMenuToggle, guestMenuToggle); - // Close the menu when clicking outside - document.addEventListener('click', function(e) { - if (mobileMenu && !mobileMenu.contains(e.target) && e.target !== newMenuToggle) { - mobileMenu.classList.add('hidden'); - } + newGuestMenuToggle.addEventListener('click', function(e) { + e.stopPropagation(); + guestMobileMenu.classList.toggle('hidden'); }); } + + // Close all menus when clicking outside + document.addEventListener('click', function(e) { + if (mobileMenu && !mobileMenu.contains(e.target) && e.target !== menuToggle) { + mobileMenu.classList.add('hidden'); + } + + if (guestMobileMenu && !guestMobileMenu.contains(e.target) && e.target !== guestMenuToggle) { + guestMobileMenu.classList.add('hidden'); + } + }); } // Initialize on DOMContentLoaded - document.addEventListener('DOMContentLoaded', initializeMainNavMenu); + document.addEventListener('DOMContentLoaded', initializeNavMenus); // Re-initialize on Turbo navigation - document.addEventListener('turbo:load', initializeMainNavMenu); - document.addEventListener('turbo:render', initializeMainNavMenu); + document.addEventListener('turbo:load', initializeNavMenus); + document.addEventListener('turbo:render', initializeNavMenus); </script> <main> -- GitLab