From 03f1a1877e81bd1f7c4893ba6fecbb54974fbdc1 Mon Sep 17 00:00:00 2001 From: pzgz Date: Wed, 21 Oct 2015 22:55:33 +0800 Subject: [PATCH 1/3] Compability with simple-navigation 4.0.0 I am not sure if it can work with simple-navigation prior 4.0.0 or not, so I simply forced the gemspec to work only with ver 4+. --- lib/simple-navigation-bootstrap/version.rb | 2 +- .../rendering/renderer/bootstrap.rb | 13 ++++++------- simple-navigation-bootstrap.gemspec | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/simple-navigation-bootstrap/version.rb b/lib/simple-navigation-bootstrap/version.rb index d493a8b..e2ab2d4 100644 --- a/lib/simple-navigation-bootstrap/version.rb +++ b/lib/simple-navigation-bootstrap/version.rb @@ -1,3 +1,3 @@ module SimpleNavigationBootstrap - VERSION = "1.0.2" + VERSION = "1.0.3" end diff --git a/lib/simple_navigation/rendering/renderer/bootstrap.rb b/lib/simple_navigation/rendering/renderer/bootstrap.rb index ef105d0..0f3bb9e 100644 --- a/lib/simple_navigation/rendering/renderer/bootstrap.rb +++ b/lib/simple_navigation/rendering/renderer/bootstrap.rb @@ -49,18 +49,17 @@ def tag_for(item, name = '', icon = nil, split = false, dropdown = false) link << content_tag(:i, '', :class => [icon].flatten.compact.join(' ')) unless icon.nil? link << name if include_sub_navigation?(item) - item_options = item.html_options - item_options[:link] = Hash.new if item_options[:link].nil? - item_options[:link][:class] = Array.new if item_options[:link][:class].nil? + item_link_html_opts = item.link_html_options || Hash.new + item_link_html_opts[:class] = Array.new if item_link_html_opts[:class].nil? unless split if dropdown - item_options[:link][:class] << 'dropdown-toggle' - item_options[:link][:'data-toggle'] = 'dropdown' - item_options[:link][:'data-target'] = '#' + item_link_html_opts[:class] << 'dropdown-toggle' + item_link_html_opts[:'data-toggle'] = 'dropdown' + item_link_html_opts[:'data-target'] = '#' end link << content_tag(:b, '', :class => 'caret') end - item.html_options = item_options + item.instance_variable_set(:'@link_html_options', item_link_html_opts) end link_to(link.join(" ").html_safe, url, options_for(item)) end diff --git a/simple-navigation-bootstrap.gemspec b/simple-navigation-bootstrap.gemspec index 535e2f2..6c43b81 100644 --- a/simple-navigation-bootstrap.gemspec +++ b/simple-navigation-bootstrap.gemspec @@ -18,6 +18,6 @@ Gem::Specification.new do |s| # specify any dependencies here; for example: s.add_development_dependency "rake" - s.add_runtime_dependency "simple-navigation", ">= 3.7.0", "< 4.0.0" + s.add_runtime_dependency "simple-navigation", ">= 4.0.0" s.add_runtime_dependency "railties", ">= 3.1" end From d851666940383619de25a4f3f874552012f568db Mon Sep 17 00:00:00 2001 From: Leon Guan Date: Sun, 29 Jul 2018 00:22:37 +0800 Subject: [PATCH 2/3] Hornor to skip_if_empty completely If skip_if_empty is set, the parent item won't be rendered if there's no children in it --- lib/simple_navigation/rendering/renderer/bootstrap.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/simple_navigation/rendering/renderer/bootstrap.rb b/lib/simple_navigation/rendering/renderer/bootstrap.rb index 0f3bb9e..3f96c02 100644 --- a/lib/simple_navigation/rendering/renderer/bootstrap.rb +++ b/lib/simple_navigation/rendering/renderer/bootstrap.rb @@ -13,6 +13,7 @@ def render(item_container) split = (include_sub_navigation?(item) and li_options.delete(:split)) if li_options.include?(:split) dropdown = (include_sub_navigation?(item) and li_options.delete(:dropdown)) if li_options.include?(:dropdown) li_content = tag_for(item, item.name, icon, split, dropdown) + to_skip = false if include_sub_navigation?(item) if split lio = li_options.dup @@ -23,10 +24,16 @@ def render(item_container) li_content = tag_for(item) end item.sub_navigation.dom_class = [item.sub_navigation.dom_class, dropdown ? 'dropdown-menu' : nil, split ? 'pull-right' : nil].flatten.compact.join(' ') - li_content << render_sub_navigation_for(item) + sub_content = render_sub_navigation_for(item) + to_skip = true if respond_to?(:skip_if_empty?) && skip_if_empty? && sub_content.blank? + li_content << sub_content li_options[:class] = [li_options[:class], dropdown ? 'dropdown' : nil, split ? 'dropdown-split-right' : nil].flatten.compact.join(' ') end - list << content_tag(:li, li_content, li_options) + if to_skip + list << '' + else + list << content_tag(:li, li_content, li_options) + end end.join SimpleNavigation.config.selected_class = config_selected_class if item_container.respond_to?(:dom_attributes) From 07f28170323b67626203122e9b096c8ac7c54145 Mon Sep 17 00:00:00 2001 From: Leon Guan Date: Sat, 8 Jun 2019 15:33:24 +0800 Subject: [PATCH 3/3] Make sure this worked with v4 of simple-navigation --- lib/simple_navigation/rendering/renderer/bootstrap.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/simple_navigation/rendering/renderer/bootstrap.rb b/lib/simple_navigation/rendering/renderer/bootstrap.rb index 3f96c02..d20df96 100644 --- a/lib/simple_navigation/rendering/renderer/bootstrap.rb +++ b/lib/simple_navigation/rendering/renderer/bootstrap.rb @@ -6,7 +6,8 @@ def render(item_container) config_selected_class = SimpleNavigation.config.selected_class SimpleNavigation.config.selected_class = 'active' list_content = item_container.items.inject([]) do |list, item| - li_options = item.html_options.reject {|k, v| k == :link} + # li_options = item.html_options.reject {|k, v| k == :link} + li_options = item.html_options icon = li_options.delete(:icon) dropdown = item_container.dropdown.nil? ? true : item_container.dropdown split = item_container.split