require "json" module ApplicationHelper def render_widget(widget) key = Template::KEY file = File.join('../templates', "#{key}", "modules/#{widget}") render :partial => file end def link_to_show(module_name) "/module/#{module_name}/show" end def render_menu json_file = File.read(File.join(Rails.root, 'public', "menu.json")) @items = JSON.parse(json_file) key = Template::KEY menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{key}", '/home/menu.html.erb')) doc = Nokogiri::HTML(menu_file) menu_file.close temp = [] @menus = [] @menus_items = [] temp << doc.css("*[data-menu-level='0']") temp << doc.css("*[data-menu-level='1']") temp << doc.css("*[data-menu-level='2']") temp[0] = temp[0].to_s.gsub(temp[1].to_s,"{{level}}") temp[1] = temp[1].to_s.gsub(temp[2].to_s,"{{level}}") temp[2] = temp[2].to_s temp.each_with_index do |menu,i| t = Nokogiri::HTML(menu) a = t.css("*[data-menu-link='true']") a[0]["href"] = "href_here" li = t.css("*[data-menu-level='#{i}'] > *") @menus_items << li.to_html ul = t.css("*[data-menu-level='#{i}']") ul[0].inner_html = "{{here}}" @menus << ul[0].to_html end def create_menu(items,level) html = "" items.each do |key,item| li = @menus_items[level].gsub("href_here",item["url"]) li = li.gsub("{{link_name}}",key) if item["children"] li = li.gsub("{{level}}",create_menu(item["children"],level + 1)) else li = li.gsub("{{level}}","") end html = html + li end html = @menus[level].gsub("{{here}}",html) html = html.gsub("{{class_level}}",level.to_s) html end h = create_menu(@items,0) h.html_safe end end