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) @pages = Page.where(:parent_page_id.ne => "" , :parent_page_id.exists => false, :page_id.ne => "", :page_id.exists => true) def create_json(pages) item = {} pages.each do |page| if page.child_page.size > 0 item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "children"=>create_json(page.child_page)} else item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url} end end item end @items = create_json(@pages) key = Template::KEY menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{key}", '/home/menu.html.erb')) doc = Nokogiri::HTML(menu_file, nil, "UTF-8") 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, nil, "UTF-8") 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 def render_view if params[:target_action] == "index" file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller], "#{params[:target_action]}.html.erb")) doc = Nokogiri::HTML(file, nil, "UTF-8") file.close wrap_elements = doc.css("*[data-module]") controller = "#{params[:target_controller].capitalize}Controller".classify.constantize.new data = controller.send("#{params[:target_action]}") wrap_elements.each do |wrap_element| html_to_render = "" data.each do |item| el = wrap_element.inner_html item.each do |key,value| el = el.gsub("{{#{key}}}",value) el = el.gsub("%7B%7B#{key}%7D%7D",value) end html_to_render = html_to_render + el end wrap_element.inner_html = html_to_render end doc.to_s.html_safe elsif params[:target_action] == "show" file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller], "#{params[:target_action]}.html.erb")) doc = Nokogiri::HTML(file, nil, "UTF-8") file.close wrap_element_html = doc.to_s html_to_render = "" controller = "#{params[:target_controller].capitalize}Controller".classify.constantize.new data = controller.send("#{params[:target_action]}") el = wrap_element_html data.each do |key,value| el = el.gsub("{{#{key}}}",value) el = el.gsub("%7B%7B#{key}%7D%7D",value) end el.html_safe end end def action_data controller = "#{params[:target_controller].capitalize}Controller".constantize.new data = controller.send("#{params[:target_action]}") data end end