Module: Menumatic::Navigation::Item::Renderers
- Includes:
- ActionView::Helpers::UrlHelper
- Included in:
- Base
- Defined in:
- lib/menumatic/navigation/item/renderers.rb
Constant Summary collapse
- @@level_options =
[:primary, :secondary, :tertiary, :quarternary, :quinary, :senary, :septenary, :octonary, :nonary, :denary]
Instance Method Summary collapse
- #count_active_descendants(request) ⇒ Object
- #depth_count(request, options = {}) ⇒ Object
- #has_active_descendant?(request, include_self = true) ⇒ Boolean
- #is_active?(request) ⇒ Boolean
- #levels_to_i(levels_in_words) ⇒ Object
- #on_valid_level?(levels, current_level) ⇒ Boolean
- #paths_match?(request) ⇒ Boolean
- #render(request, options = {}) ⇒ Object
- #render_sitemap(document, request, options = {}) ⇒ Object
Instance Method Details
#count_active_descendants(request) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 86 def count_active_descendants(request) self.items.each do |item| return item.count_active_descendants(request) + 1 if item.has_active_descendant?(request) end if (self.paths_match?(request) && !self.has_active_descendant?(request, false) && self.items.count > 0) return 1 elsif (self.is_group? && !self.has_active_descendant?(request)) || (self.paths_match?(request) && !self.has_active_descendant?(request, false)) return 0 end 0 end |
#depth_count(request, options = {}) ⇒ Object
99 100 101 102 103 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 99 def depth_count(request, = {}) return [:levels].count if [:levels] && ![:levels].empty? depth = count_active_descendants(request) (depth > 0) ? depth : 1 end |
#has_active_descendant?(request, include_self = true) ⇒ Boolean
78 79 80 81 82 83 84 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 78 def has_active_descendant?(request, include_self = true) self.items.each do |item| return true if item.has_active_descendant?(request) end return true if paths_match?(request) if include_self false end |
#is_active?(request) ⇒ Boolean
74 75 76 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 74 def is_active?(request) has_active_descendant?(request) || paths_match?(request) end |
#levels_to_i(levels_in_words) ⇒ Object
119 120 121 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 119 def levels_to_i(levels_in_words) levels_in_words.map{ |word| word.is_a?(Symbol) ? .index(word.to_sym) + 1 : word } if levels_in_words end |
#on_valid_level?(levels, current_level) ⇒ Boolean
115 116 117 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 115 def on_valid_level?(levels, current_level) levels.nil? || levels.empty? || levels_to_i(levels).include?(current_level-1) end |
#paths_match?(request) ⇒ Boolean
105 106 107 108 109 110 111 112 113 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 105 def paths_match?(request) if self.is_link? self.active_paths.each do |path| return true if path.is_a?(Regexp) && (request.fullpath.split('?').first =~ path || request.url.split('?').first =~ path) return true if path.is_a?(String) && (request.fullpath.split('?').first == path || request.url.split('?').first == path) end return request.fullpath.split('?').first == self.destination || request.url.split('?').first == self.destination if self.active_paths.empty? end end |
#render(request, options = {}) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 8 def render(request, = {}) [:current_level] ||= 0 = {} [:id] = [:id] if [:id] [:class] = [:class] if [:class] .delete(:id) .delete(:class) = .merge({}) [:current_level] += 1 [:show] ||= :active [:wrapper_tag] ||= :ul [:item_tag] ||= :li # 1.0 roadmap - rendering should be divided into these two methods render_as_link(request, ) || render_as_group(request, ) # render list list = self.items.map { |item| item.render(request, ) }.join("") [:class] ||= "" [:class] = ([:class].split(" ") + (self.is_active?(request) ? ["active"] : ["inactive"])).join(" ") unless list.blank? = .merge({}) [:class] += " level_#{options[:current_level]}" [:class] += " depth_#{depth_count(request, options)}" if [:current_level] == 1 if on_valid_level?([:levels], [:current_level]) || [:current_level] == 1 list = content_tag([:wrapper_tag], list.html_safe, ) else list = list.html_safe end end # render link link = "" link = link_to(self.label, self.destination, self.).html_safe if self.is_link? && ![:group] if on_valid_level?([:levels], [:current_level]) if ([:current_level] == 1 && self.is_group?) || (self.is_group? && [:group] == self.group_id) list.html_safe elsif [:show] == :all || self.is_active?(request) content_tag([:item_tag], link.to_s + list.to_s, .merge_with_join(self.)).to_s.html_safe elsif self.is_link? content_tag([:item_tag], link, .merge_with_join(self.)).to_s.html_safe end elsif self.is_active?(request) list.html_safe end end |
#render_sitemap(document, request, options = {}) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/menumatic/navigation/item/renderers.rb', line 58 def render_sitemap(document, request, = {}) if is_link? unless self.destination[0...10] == "javascript" document.url do if self.destination[0...4] == "http" document.loc self.destination else document.loc request.protocol + request.host_with_port + self.destination end document.changefreq "weekly" end end end self.items.each{ |item| item.render_sitemap(document, request, ) } end |