From e8cb8edd39246bf75ed72295b7832faf5056367c Mon Sep 17 00:00:00 2001 From: Mitsuhiro Shibuya Date: Sat, 6 Aug 2022 16:27:51 +0900 Subject: [PATCH] Make sidebar navigation collapsible Closes #3198 --- app/helpers/rails_admin/application_helper.rb | 25 ++++++++++++++---- .../rails_admin/_sidebar_navigation.html.erb | 2 +- .../rails_admin/application_helper_spec.rb | 14 +++++----- spec/integration/rails_admin_spec.rb | 21 +++++++++++++++ src/rails_admin/styles/base/theming.scss | 18 ++++++++----- src/rails_admin/ui.js | 26 ++++++++++++++++--- 6 files changed, 83 insertions(+), 23 deletions(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index 788caef63b..21050f5138 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -86,7 +86,7 @@ def main_navigation label = navigation_label || t('admin.misc.navigation') - %(#{li_stack}) if li_stack.present? + collapsible_stack(label, 'main', li_stack) end.join.html_safe end @@ -101,18 +101,17 @@ def root_navigation end.join.html_safe label ||= t('admin.misc.root_navigation') - %(#{li_stack}) if li_stack.present? + collapsible_stack(label, 'action', li_stack) end.join.html_safe end def static_navigation li_stack = RailsAdmin::Config.navigation_static_links.collect do |title, url| content_tag(:li, link_to(title.to_s, url, target: '_blank', rel: 'noopener noreferrer', class: 'nav-link')) - end.join + end.join.html_safe label = RailsAdmin::Config.navigation_static_label || t('admin.misc.navigation_static_label') - li_stack = %(#{li_stack}).html_safe if li_stack.present? - li_stack + collapsible_stack(label, 'static', li_stack) || '' end def navigation(parent_groups, nodes, level = 0) @@ -232,5 +231,21 @@ def edit_user_link_label def gravatar_url(email) "https://secure.gravatar.com/avatar/#{Digest::MD5.hexdigest email}?s=30" end + + def collapsible_stack(label, class_prefix, li_stack) + return nil unless li_stack.present? + + collapse_classname = "#{class_prefix}-#{Digest::MD5.hexdigest(label)[0..7]}" + content_tag(:li, class: 'mb-1') do + content_tag(:button, 'aria-expanded': true, class: 'btn btn-toggle align-items-center rounded', data: {bs_toggle: "collapse", bs_target: ".sidebar .#{collapse_classname}"}) do + content_tag(:i, '', class: 'fas fa-chevron-down') + html_escape(' ' + label) + end + + content_tag(:div, class: "collapse show #{collapse_classname}") do + content_tag(:ul, class: 'btn-toggle-nav list-unstyled fw-normal pb-1') do + li_stack + end + end + end + end end end diff --git a/app/views/layouts/rails_admin/_sidebar_navigation.html.erb b/app/views/layouts/rails_admin/_sidebar_navigation.html.erb index b161d6b8d4..f9367ec07c 100644 --- a/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +++ b/app/views/layouts/rails_admin/_sidebar_navigation.html.erb @@ -1,4 +1,4 @@ -