Class: SmartNavigation::Renderer
- Inherits:
-
Object
- Object
- SmartNavigation::Renderer
- Defined in:
- lib/smart_navigation/renderer.rb
Instance Method Summary collapse
-
#current_group?(item) ⇒ Boolean
Check if current group.
-
#current_page?(item) ⇒ Boolean
Check if current page.
-
#group_item_tag(item, icons = false) ⇒ Object
Create group menu item.
-
#initialize(view_context, items, options = {}) ⇒ Renderer
constructor
Initialize builder.
-
#item_link_tag(item, icons = false) ⇒ Object
Create item link.
-
#item_tag(item, icons = false) ⇒ Object
Create menu list item.
-
#item_url(item) ⇒ Object
Get menu item url.
-
#menu_tag(items) ⇒ Object
Create menu list.
-
#method_missing(method, *args, &block) ⇒ Object
Get app helpers if method is missing.
-
#render ⇒ Object
Render menu.
-
#separator_tag(item) ⇒ Object
Create menu separator.
-
#single_item_tag(item, icons = false) ⇒ Object
Create single menu item.
-
#sort_items(items) ⇒ Object
Sort items by order.
-
#submenu_item_tag(item, active = false) ⇒ Object
Create submenu item.
Constructor Details
#initialize(view_context, items, options = {}) ⇒ Renderer
Initialize builder
4 5 6 7 8 9 10 11 12 13 14 |
# File 'lib/smart_navigation/renderer.rb', line 4 def initialize(view_context, items, ={}) @context = view_context @items = sort_items items = .fetch :menu_class, 'menu' @sep_class = .fetch :separator_class, 'separator' @group_class = .fetch :group_class, 'menu-group' = .fetch :submenu_class, 'submenu' @active_class = .fetch :active_class, 'active' = .fetch :active_submenu_class, 'open' = .fetch :submenu_icons, false end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
Get app helpers if method is missing
104 105 106 |
# File 'lib/smart_navigation/renderer.rb', line 104 def method_missing(method, *args, &block) @context.respond_to?(method) ? @context.send(method, *args, &block) : super end |
Instance Method Details
#current_group?(item) ⇒ Boolean
Check if current group
34 35 36 37 38 |
# File 'lib/smart_navigation/renderer.rb', line 34 def current_group?(item) current = item[:children].any? { |_k, v| current_page?(v) } current = item[:children].any? { |_k, v| current_group?(v) } if current.blank? current end |
#current_page?(item) ⇒ Boolean
Check if current page
28 29 30 31 |
# File 'lib/smart_navigation/renderer.rb', line 28 def current_page?(item) url = item_url(item) @context.current_page?(url) end |
#group_item_tag(item, icons = false) ⇒ Object
Create group menu item
65 66 67 68 69 70 71 72 |
# File 'lib/smart_navigation/renderer.rb', line 65 def group_item_tag(item, icons=false) active = @active_class if current_group?(item) link = item_link_tag item, icons = item, active content = link + content_tag :li, content.html_safe, class: "#{active} #{@group_class}" end |
#item_link_tag(item, icons = false) ⇒ Object
Create item link
46 47 48 49 50 51 52 53 |
# File 'lib/smart_navigation/renderer.rb', line 46 def item_link_tag(item, icons=false) arrow = content_tag :span, icon('angle-left pull-right'), class: 'pull-right-container' label = content_tag :span, item[:label] label = icon("#{item[:icon]}") + label if icons.present? label = label + arrow if item[:children].present? link_to label.html_safe, item_url(item) end |
#item_tag(item, icons = false) ⇒ Object
Create menu list item
83 84 85 86 87 88 89 90 91 |
# File 'lib/smart_navigation/renderer.rb', line 83 def item_tag(item, icons=false) if item[:separator].present? separator_tag(item) elsif item[:children].present? group_item_tag(item, icons) else single_item_tag(item, icons) end end |
#item_url(item) ⇒ Object
Get menu item url
22 23 24 25 |
# File 'lib/smart_navigation/renderer.rb', line 22 def item_url(item) params = { controller: item[:controller], action: item[:action] } params[:action] ? url_for(params) : "##{item[:id]}" end |
#menu_tag(items) ⇒ Object
Create menu list
94 95 96 |
# File 'lib/smart_navigation/renderer.rb', line 94 def (items) content_tag :ul, items.html_safe, class: end |
#render ⇒ Object
Render menu
99 100 101 |
# File 'lib/smart_navigation/renderer.rb', line 99 def render @items.map { |k, v| item_tag(v, true) }.join end |
#separator_tag(item) ⇒ Object
Create menu separator
41 42 43 |
# File 'lib/smart_navigation/renderer.rb', line 41 def separator_tag(item) content_tag :li, item[:label], class: @sep_class end |
#single_item_tag(item, icons = false) ⇒ Object
Create single menu item
75 76 77 78 79 80 |
# File 'lib/smart_navigation/renderer.rb', line 75 def single_item_tag(item, icons=false) active = @active_class if current_page?(item) link = item_link_tag(item, icons) content_tag :li, link.html_safe, class: "#{active}" end |
#sort_items(items) ⇒ Object
Sort items by order
17 18 19 |
# File 'lib/smart_navigation/renderer.rb', line 17 def sort_items(items) items.sort_by { |_k, v| v[:order] }.to_h end |
#submenu_item_tag(item, active = false) ⇒ Object
Create submenu item
56 57 58 59 60 61 62 |
# File 'lib/smart_navigation/renderer.rb', line 56 def (item, active=false) items = sort_items item[:children] items = items.map { |_k, v| item_tag(v, ) }.join active = if active.present? content_tag(:ul, items.html_safe, class: "#{active} #{@submenu_class}") end |