Implement proper mobile navigation
This commit is contained in:
parent
4ccf43cf4a
commit
3165714957
|
@ -5,9 +5,10 @@ module ApplicationHelper
|
|||
|
||||
def main_nav_class(current_section, link_to_section)
|
||||
if current_section == link_to_section
|
||||
"bg-gray-900/50 text-white px-3 py-2 rounded-md text-sm font-medium"
|
||||
"bg-gray-900/50 text-white px-3 py-2 rounded-md font-medium text-base md:text-sm block md:inline-block"
|
||||
else
|
||||
"text-gray-300 hover:bg-gray-900/30 hover:text-white px-3 py-2 rounded-md text-sm font-medium"
|
||||
"text-gray-300 hover:bg-gray-900/30 hover:text-white active:bg-gray-900/30 active:text-white px-3 py-2 rounded-md font-medium text-base md:text-sm block md:inline-block"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
31
app/javascript/controllers/topbar_controller.js
Normal file
31
app/javascript/controllers/topbar_controller.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { Controller } from "@hotwired/stimulus"
|
||||
|
||||
function show (element) {
|
||||
element.classList.add('block');
|
||||
element.classList.remove('hidden');
|
||||
}
|
||||
|
||||
function hide (element) {
|
||||
element.classList.remove('block');
|
||||
element.classList.add('hidden');
|
||||
}
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = [ 'mobileMenu', 'iconMobileMenuOpen', 'iconMobileMenuClose' ];
|
||||
|
||||
connect() {
|
||||
this.mobileMenuTarget.classList.add('hidden');
|
||||
}
|
||||
|
||||
toggleMobileNav() {
|
||||
if (this.mobileMenuTarget.classList.contains('hidden')) {
|
||||
show(this.mobileMenuTarget);
|
||||
show(this.iconMobileMenuCloseTarget);
|
||||
hide(this.iconMobileMenuOpenTarget);
|
||||
} else {
|
||||
hide(this.mobileMenuTarget);
|
||||
hide(this.iconMobileMenuCloseTarget);
|
||||
show(this.iconMobileMenuOpenTarget);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,16 +12,15 @@
|
|||
</head>
|
||||
<body id="admin-panel" class="h-full bg-red-500">
|
||||
<div class="min-h-full">
|
||||
<nav class="">
|
||||
<nav data-controller="topbar">
|
||||
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
|
||||
<div class="border-b border-gray-200/10">
|
||||
<div class="flex items-center justify-between h-16 px-4 sm:px-0">
|
||||
<div class="flex items-center">
|
||||
<div class="ks-site-icon flex-shrink-0">
|
||||
<%= render partial: "shared/icons/comet" %>
|
||||
<!-- <img class="h-8 w-8" src="https://tailwindui.com/img/logos/workflow-mark-indigo-500.svg" alt="Workflow"> -->
|
||||
</div>
|
||||
<% if user_signed_in? && current_user.is_admin? %>
|
||||
<% if user_signed_in? && current_user.confirmed? %>
|
||||
<div class="hidden md:block">
|
||||
<div class="ml-10 flex items-baseline space-x-4">
|
||||
<%= render partial: 'shared/admin_nav' %>
|
||||
|
@ -30,40 +29,54 @@
|
|||
<% end %>
|
||||
</div>
|
||||
<div class="hidden md:block">
|
||||
<%= render partial: 'shared/header_account' %>
|
||||
<% if user_signed_in? %>
|
||||
<div class="flex items-baseline space-x-4 text-gray-200/80 text-sm font-medium">
|
||||
<span>
|
||||
<strong class="text-white font-normal"><%= current_user.address %></strong>
|
||||
</span>
|
||||
<span>
|
||||
<%= link_to "Log out", destroy_user_session_path, class: 'underline hover:text-white' %>
|
||||
</span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="-mr-2 flex md:hidden">
|
||||
<button type="button" id="toggle-mobile-nav"
|
||||
data-action="topbar#toggleMobileNav"
|
||||
class="bg-gray-900/50 inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
|
||||
<span class="sr-only">Open main menu</span>
|
||||
<!-- Heroicon name: outline/menu -->
|
||||
<svg data-topbar-target="iconMobileMenuOpen" class="block h-6 w-6"
|
||||
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
|
||||
</svg>
|
||||
<!-- Heroicon name: outline/x -->
|
||||
<svg data-topbar-target="iconMobileMenuClose" class="hidden h-6 w-6"
|
||||
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile menu, show/hide based on menu state. -->
|
||||
<div class="border-b border-gray-700 md:hidden" id="mobile-menu">
|
||||
<div class="pt-4 pb-3 border-t border-gray-700">
|
||||
<div class="flex items-center px-5">
|
||||
<div class="flex-shrink-0">
|
||||
<img class="h-10 w-10 rounded-full" src="" alt="">
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-base font-medium leading-none text-white">Tom Cook</div>
|
||||
<div class="text-sm font-medium leading-none text-gray-400">tom@example.com</div>
|
||||
</div>
|
||||
<button type="button" class="ml-auto bg-gray-800 flex-shrink-0 p-1 text-gray-400 rounded-full hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
|
||||
<span class="sr-only">View notifications</span>
|
||||
<!-- Heroicon name: outline/bell -->
|
||||
<svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
|
||||
</svg>
|
||||
</button>
|
||||
<div data-topbar-target="mobileMenu" class="border-b border-gray-200/10 md:hidden">
|
||||
<% if user_signed_in? %>
|
||||
<div class="px-2 py-3 space-y-1 sm:px-3">
|
||||
<%= render partial: 'shared/admin_nav' %>
|
||||
</div>
|
||||
<div class="mt-3 px-2 space-y-1">
|
||||
<a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700">Your Profile</a>
|
||||
|
||||
<a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700">Settings</a>
|
||||
|
||||
<a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700">Sign out</a>
|
||||
<div class="pt-4 pb-3 border-t border-gray-200/10">
|
||||
<div class="px-5 text-base font-normal text-white">
|
||||
<%= current_user.address %></strong>
|
||||
</div>
|
||||
<div class="mt-3 px-2 space-y-1">
|
||||
<%= link_to "Log out", destroy_user_session_path,
|
||||
class: 'block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-900/30 active:text-white active:bg-gray-900/30' %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</nav>
|
||||
|
||||
<div class="fixed inset-0 px-4 py-6 pointer-events-none sm:px-6 sm:py-4 sm:items-start sm:justify-end">
|
||||
|
|
|
@ -12,14 +12,13 @@
|
|||
</head>
|
||||
<body class="h-full bg-sky-900">
|
||||
<div class="min-h-full">
|
||||
<nav class="">
|
||||
<nav data-controller="topbar">
|
||||
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
|
||||
<div class="border-b border-gray-200/10">
|
||||
<div class="flex items-center justify-between h-16 px-4 sm:px-0">
|
||||
<div class="flex items-center">
|
||||
<div class="ks-site-icon flex-shrink-0">
|
||||
<%= render partial: "shared/icons/comet" %>
|
||||
<!-- <img class="h-8 w-8" src="https://tailwindui.com/img/logos/workflow-mark-indigo-500.svg" alt="Workflow"> -->
|
||||
</div>
|
||||
<% if user_signed_in? && current_user.confirmed? %>
|
||||
<div class="hidden md:block">
|
||||
|
@ -30,38 +29,54 @@
|
|||
<% end %>
|
||||
</div>
|
||||
<div class="hidden md:block">
|
||||
<%= render partial: 'shared/header_account' %>
|
||||
<% if user_signed_in? %>
|
||||
<div class="flex items-baseline space-x-4 text-gray-200/80 text-sm font-medium">
|
||||
<span>
|
||||
<strong class="text-white font-normal"><%= current_user.address %></strong>
|
||||
</span>
|
||||
<span>
|
||||
<%= link_to "Log out", destroy_user_session_path, class: 'underline hover:text-white' %>
|
||||
</span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="-mr-2 flex md:hidden">
|
||||
<button type="button" id="toggle-mobile-nav"
|
||||
data-action="topbar#toggleMobileNav"
|
||||
class="bg-gray-900/50 inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
|
||||
<span class="sr-only">Open main menu</span>
|
||||
<!-- Heroicon name: outline/menu -->
|
||||
<svg data-topbar-target="iconMobileMenuOpen" class="block h-6 w-6"
|
||||
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
|
||||
</svg>
|
||||
<!-- Heroicon name: outline/x -->
|
||||
<svg data-topbar-target="iconMobileMenuClose" class="hidden h-6 w-6"
|
||||
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile menu, show/hide based on menu state. -->
|
||||
<div class="border-b border-gray-700 md:hidden" id="mobile-menu">
|
||||
<div class="pt-4 pb-3 border-t border-gray-700">
|
||||
<div class="flex items-center px-5">
|
||||
<div class="flex-shrink-0">
|
||||
<img class="h-10 w-10 rounded-full" src="" alt="">
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<div class="text-base font-medium leading-none text-white">Tom Cook</div>
|
||||
<div class="text-sm font-medium leading-none text-gray-400">tom@example.com</div>
|
||||
</div>
|
||||
<button type="button" class="ml-auto bg-gray-800 flex-shrink-0 p-1 text-gray-400 rounded-full hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
|
||||
<span class="sr-only">View notifications</span>
|
||||
<!-- Heroicon name: outline/bell -->
|
||||
<svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
|
||||
</svg>
|
||||
</button>
|
||||
<div data-topbar-target="mobileMenu" class="border-b border-gray-200/10 md:hidden">
|
||||
<% if user_signed_in? %>
|
||||
<div class="px-2 py-3 space-y-1 sm:px-3">
|
||||
<%= render partial: 'shared/main_nav' %>
|
||||
</div>
|
||||
<div class="mt-3 px-2 space-y-1">
|
||||
<a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700">Your Profile</a>
|
||||
<a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700">Settings</a>
|
||||
<a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700">Sign out</a>
|
||||
<div class="pt-4 pb-3 border-t border-gray-200/10">
|
||||
<div class="px-5 text-base font-normal text-white">
|
||||
<%= current_user.address %></strong>
|
||||
</div>
|
||||
<div class="mt-3 px-2 space-y-1">
|
||||
<%= link_to "Log out", destroy_user_session_path,
|
||||
class: 'block px-3 py-2 rounded-md text-base font-medium text-gray-300 hover:text-white hover:bg-gray-900/30 active:text-white active:bg-gray-900/30' %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</nav>
|
||||
|
||||
<div class="fixed inset-0 px-4 py-6 pointer-events-none sm:px-6 sm:py-4 sm:items-start sm:justify-end">
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
<% if user_signed_in? %>
|
||||
<div class="flex items-baseline space-x-4 text-gray-200/80 text-sm font-medium">
|
||||
<span>
|
||||
Signed in as <strong class="text-white font-normal"><%= current_user.cn %>@kosmos.org</strong>
|
||||
</span>
|
||||
<span>
|
||||
<%= link_to "Log out", destroy_user_session_path, class: 'underline hover:text-white' %>
|
||||
</span>
|
||||
</div>
|
||||
<% end %>
|
Loading…
Reference in New Issue
Block a user