]> git.openstreetmap.org Git - rails.git/commitdiff
Switch to/from compact nav by moving nav items
authorAnton Khorev <tony29@yandex.ru>
Tue, 28 May 2024 01:18:06 +0000 (04:18 +0300)
committerAnton Khorev <tony29@yandex.ru>
Wed, 12 Feb 2025 12:35:11 +0000 (15:35 +0300)
app/assets/javascripts/application.js
app/assets/stylesheets/common.scss
app/helpers/application_helper.rb
app/views/layouts/_header.html.erb

index 2e13f69671bec7253adbe5c98887a33c105d7725..005ab62175b7080faa5eb128a84f6f1d778682e3 100644 (file)
@@ -97,14 +97,40 @@ $(document).ready(function () {
     var windowWidth = $(window).width();
 
     if (windowWidth < compactWidth) {
-      $("body").removeClass("compact-nav").addClass("small-nav");
+      $("body").addClass("small-nav");
+      expandSecondaryMenu();
     } else if (windowWidth < headerWidth) {
-      $("body").addClass("compact-nav").removeClass("small-nav");
+      $("body").removeClass("small-nav");
+      collapseSecondaryMenu();
     } else {
-      $("body").removeClass("compact-nav").removeClass("small-nav");
+      $("body").removeClass("small-nav");
+      expandSecondaryMenu();
     }
   }
 
+  function expandSecondaryMenu() {
+    $("#compact-secondary-nav > ul").find("li").children("a")
+      .removeClass("dropdown-item")
+      .addClass("nav-link")
+      .addClass(function () {
+        return $(this).hasClass("active") ? "text-secondary-emphasis" : "text-secondary";
+      });
+    $("#compact-secondary-nav > ul").find("li")
+      .addClass("nav-item")
+      .prependTo("header nav.secondary > ul");
+    $("#compact-secondary-nav").hide();
+  }
+
+  function collapseSecondaryMenu() {
+    $("header nav.secondary > ul").find("li:not(#compact-secondary-nav)").children("a")
+      .addClass("dropdown-item")
+      .removeClass("nav-link text-secondary text-secondary-emphasis");
+    $("header nav.secondary > ul").find("li:not(#compact-secondary-nav)")
+      .removeClass("nav-item")
+      .prependTo("#compact-secondary-nav > ul");
+    $("#compact-secondary-nav").show();
+  }
+
   /*
    * Chrome 60 and later seem to fire the "ready" callback
    * before the DOM is fully ready causing us to measure the
@@ -116,14 +142,12 @@ $(document).ready(function () {
       headerWidth += $(e).outerWidth();
     });
 
-    $("body").addClass("compact-nav");
+    collapseSecondaryMenu();
 
     $("header").children(":visible").each(function (i, e) {
       compactWidth += $(e).outerWidth();
     });
 
-    $("body").removeClass("compact-nav");
-
     $("header").removeClass("text-nowrap");
     $("header nav.secondary > ul").removeClass("flex-nowrap");
 
index fc9af9803e53cbcdb340680b11ba95e9be3769e4..d0524fcbc19620fb811909bd5a2dbaef16698fde 100644 (file)
@@ -191,15 +191,6 @@ nav.primary, nav.secondary {
   display: none;
 }
 
-body.compact-nav {
-  #compact-secondary-nav {
-    display: inline-block;
-  }
-  .compact-hide {
-    display: none;
-  }
-}
-
 body.small-nav {
   #menu-icon {
     display: block;
index ff6dcd2ff194820556e8a85382f97677ddd97d30..86a3d56cdb96c2df8d8cf6c45e71a839c5a165c6 100644 (file)
@@ -43,7 +43,7 @@ module ApplicationHelper
   end
 
   def header_nav_link_class(path)
-    ["nav-link", current_page?(path) ? "text-secondary-emphasis" : "text-secondary"]
+    ["nav-link", current_page?(path) ? "active text-secondary-emphasis" : "text-secondary"]
   end
 
   def application_data
index 45e23fc2b914471be7f4f40a830ef341447c2ef6..926d623c03e5177d8aecc9b14109a7b5db096d11 100644 (file)
   <nav class='secondary d-flex gap-2 align-items-center'>
     <ul class='nav flex-nowrap'>
       <% if Settings.status != "database_offline" && can?(:index, Issue) %>
-        <li class="compact-hide nav-item">
+        <li class="nav-item">
           <%= link_to issues_path(:status => "open"), :class => header_nav_link_class(issues_path) do %>
             <%= t("layouts.issues") %>
             <%= open_issues_count %>
           <% end -%>
         </li>
       <% end %>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.history"), history_path, :class => header_nav_link_class(history_path) %>
       </li>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.export"), export_path, :class => header_nav_link_class(export_path) %>
       </li>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.gps_traces"), traces_path, :class => header_nav_link_class(traces_path) %>
       </li>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.user_diaries"), diary_entries_path, :class => header_nav_link_class(diary_entries_path) %>
       </li>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.communities"), communities_path, :class => header_nav_link_class(communities_path) %>
       </li>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.copyright"), copyright_path, :class => header_nav_link_class(copyright_path) %>
       </li>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.help"), help_path, :class => header_nav_link_class(help_path) %>
       </li>
-      <li class="compact-hide nav-item">
+      <li class="nav-item">
         <%= link_to t("layouts.about"), about_path, :class => header_nav_link_class(about_path) %>
       </li>
       <li id="compact-secondary-nav" class="dropdown nav-item">
         <button class="dropdown-toggle nav-link btn btn-outline-secondary border-0 bg-body text-secondary" type="button" data-bs-toggle="dropdown"><%= t "layouts.more" %></button>
         <ul class="dropdown-menu">
-          <% if Settings.status != "database_offline" && can?(:index, Issue) %>
-            <li>
-              <%= link_to issues_path(:status => "open"), :class => "dropdown-item" do %>
-                <%= t("layouts.issues") %>
-                <%= open_issues_count %>
-              <% end -%>
-            </li>
-          <% end %>
-          <li><%= link_to t("layouts.history"), history_path, :class => "dropdown-item" %></li>
-          <li><%= link_to t("layouts.export"), export_path, :class => "dropdown-item" %></li>
-          <li><%= link_to t("layouts.gps_traces"), traces_path, :class => "dropdown-item" %></li>
-          <li><%= link_to t("layouts.user_diaries"), diary_entries_path, :class => "dropdown-item" %></li>
-          <li><%= link_to t("layouts.communities"), communities_path, :class => "dropdown-item" %></li>
-          <li><%= link_to t("layouts.copyright"), copyright_path, :class => "dropdown-item" %></li>
-          <li><%= link_to t("layouts.help"), help_path, :class => "dropdown-item" %></li>
-          <li><%= link_to t("layouts.about"), about_path, :class => "dropdown-item" %></li>
         </ul>
       </li>
     </ul>