From 2b650721298b700c5b6a77cda48ae8bfc2de10f8 Mon Sep 17 00:00:00 2001 From: Jan Steinmetz Date: Tue, 28 Feb 2017 15:06:53 +0100 Subject: [PATCH 1/3] customizable menu --- app/helpers/rails_admin/application_helper.rb | 19 ++++++++++++++++++- .../_secondary_navigation.html.haml | 2 +- .../rails_admin/_sidebar_navigation.html.haml | 3 ++- config/locales/rails_admin.en.yml | 1 + lib/rails_admin/config/actions/base.rb | 16 ++++++++++++++++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index 2ef3e967bc..a86000c2b6 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -84,6 +84,23 @@ def main_navigation end.join.html_safe end + def root_navigation + + actions(:root).select(&:show_in_sidebar).group_by(&:sidebar_label).collect do |label, nodes| + + li_stack = nodes.map do |node| + url = rails_admin.url_for(action: node.action_name, controller: "rails_admin/main") + nav_icon = node.link_icon ? %().html_safe : '' + content_tag :li do + link_to nav_icon + " " + wording_for(:menu, node), url, class: "pjax" + end + end.join.html_safe + label = label || t('admin.misc.root_navigation') + + %(#{li_stack}) if li_stack.present? + 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')) @@ -138,7 +155,7 @@ def breadcrumb(action = @action, _acc = []) # parent => :root, :collection, :member def menu_for(parent, abstract_model = nil, object = nil, only_icon = false) # perf matters here (no action view trickery) - actions = actions(parent, abstract_model, object).select { |a| a.http_methods.include?(:get) } + actions = actions(parent, abstract_model, object).select { |a| a.http_methods.include?(:get) && a.show_in_menu } actions.collect do |action| wording = wording_for(:menu, action) %( diff --git a/app/views/layouts/rails_admin/_secondary_navigation.html.haml b/app/views/layouts/rails_admin/_secondary_navigation.html.haml index d4e59a204b..868c759507 100644 --- a/app/views/layouts/rails_admin/_secondary_navigation.html.haml +++ b/app/views/layouts/rails_admin/_secondary_navigation.html.haml @@ -1,5 +1,5 @@ %ul.nav.navbar-nav.navbar-right.root_links - - actions(:root).each do |action| + - actions(:root).select(&:show_in_navigation).each do |action| %li{class: "#{action.action_name}_root_link"}= link_to wording_for(:menu, action), { action: action.action_name, controller: 'rails_admin/main' }, class: action.pjax? ? "pjax" : "" - if main_app_root_path = (main_app.root_path rescue false) %li= link_to t('admin.home.name'), main_app_root_path diff --git a/app/views/layouts/rails_admin/_sidebar_navigation.html.haml b/app/views/layouts/rails_admin/_sidebar_navigation.html.haml index 2f84f94fdb..e6a67037f5 100644 --- a/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +++ b/app/views/layouts/rails_admin/_sidebar_navigation.html.haml @@ -1,2 +1,3 @@ %ul.nav.nav-pills.nav-stacked= main_navigation -%ul.nav.nav-pills.nav-stacked= static_navigation \ No newline at end of file +%ul.nav.nav-pills.nav-stacked= root_navigation +%ul.nav.nav-pills.nav-stacked= static_navigation diff --git a/config/locales/rails_admin.en.yml b/config/locales/rails_admin.en.yml index 7441f10bd4..6ed1a7c3ba 100644 --- a/config/locales/rails_admin.en.yml +++ b/config/locales/rails_admin.en.yml @@ -41,6 +41,7 @@ en: up: "Up" down: "Down" navigation: "Navigation" + root_navigation: "Actions" navigation_static_label: "Links" log_out: "Log out" ago: "ago" diff --git a/lib/rails_admin/config/actions/base.rb b/lib/rails_admin/config/actions/base.rb index 3dc5fb635e..d56773e2b8 100644 --- a/lib/rails_admin/config/actions/base.rb +++ b/lib/rails_admin/config/actions/base.rb @@ -18,6 +18,22 @@ class Base [] end + register_instance_option :show_in_navigation do + root? + end + + register_instance_option :show_in_sidebar do + !show_in_navigation + end + + register_instance_option :show_in_menu do + !show_in_sidebar + end + + register_instance_option :sidebar_label do + nil + end + # http://getbootstrap.com/2.3.2/base-css.html#icons register_instance_option :link_icon do 'icon-question-sign' From d60060d8980c62c1ec87e61494985861203488ce Mon Sep 17 00:00:00 2001 From: Jan Steinmetz Date: Mon, 6 Mar 2017 09:22:36 +0100 Subject: [PATCH 2/3] rubocop --- app/helpers/rails_admin/application_helper.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index a86000c2b6..f223dd2e1d 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -85,9 +85,7 @@ def main_navigation end def root_navigation - actions(:root).select(&:show_in_sidebar).group_by(&:sidebar_label).collect do |label, nodes| - li_stack = nodes.map do |node| url = rails_admin.url_for(action: node.action_name, controller: "rails_admin/main") nav_icon = node.link_icon ? %().html_safe : '' @@ -95,7 +93,7 @@ def root_navigation link_to nav_icon + " " + wording_for(:menu, node), url, class: "pjax" end end.join.html_safe - label = label || t('admin.misc.root_navigation') + label ||= t('admin.misc.root_navigation') %(#{li_stack}) if li_stack.present? end.join.html_safe From 33fdd64138bd541dc188e3e958622b2afc490210 Mon Sep 17 00:00:00 2001 From: Jan Steinmetz Date: Mon, 6 Mar 2017 09:45:51 +0100 Subject: [PATCH 3/3] prefer non breaking changes --- lib/rails_admin/config/actions/base.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_admin/config/actions/base.rb b/lib/rails_admin/config/actions/base.rb index d56773e2b8..423861decc 100644 --- a/lib/rails_admin/config/actions/base.rb +++ b/lib/rails_admin/config/actions/base.rb @@ -27,7 +27,7 @@ class Base end register_instance_option :show_in_menu do - !show_in_sidebar + true end register_instance_option :sidebar_label do