| 
									
										
										
										
											2011-12-23 10:34:21 +00:00
										 |  |  | module ParserFrontEnd | 
					
						
							| 
									
										
										
										
											2012-03-21 17:51:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   require 'nokogiri' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |   def parse_page_noko(page, site) | 
					
						
							|  |  |  |     i18n = {} | 
					
						
							|  |  |  |     Site.first.valid_locales.each do |locale| | 
					
						
							|  |  |  |       body = Nokogiri::HTML(page.design.layout.body) | 
					
						
							|  |  |  |       parse_contents(body, page, locale) | 
					
						
							|  |  |  |       parse_footer(body, page, site) | 
					
						
							|  |  |  |       parse_images(body, page) | 
					
						
							|  |  |  |       parse_menu(body, page) | 
					
						
							|  |  |  |       parse_sub_menu(body, page, site) | 
					
						
							| 
									
										
										
										
											2013-02-01 09:07:16 +00:00
										 |  |  |       parse_breadcrumb(body, page, site) | 
					
						
							| 
									
										
										
										
											2012-12-28 02:36:18 +00:00
										 |  |  |       parse_counter(body) | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |       i18n.merge!({locale => body.to_html}) | 
					
						
							| 
									
										
										
										
											2012-03-27 09:57:50 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |     i18n | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-21 17:51:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-31 03:30:01 +00:00
										 |  |  |   def parse_page_content(page,args={}) | 
					
						
							|  |  |  |      args["category_id"] = args["category_id"].gsub(/\"|\[|\]/,'').split(",").each(&:strip!) if !args["category_id"].blank? and args["category_id"].is_a?(String) | 
					
						
							|  |  |  |      args["tag_id"] = args["tag_id"].gsub(/\"|\[|\]/,'').split(",").each(&:strip!) if  !args["tag_id"].blank? and args["tag_id"].is_a? String | 
					
						
							| 
									
										
										
										
											2013-05-29 02:21:21 +00:00
										 |  |  |     # tag = params[:tag_id].blank? ? page[:tag] : params[:tag_id] | 
					
						
							|  |  |  |     # category = params[:category_id].blank? ? page[:category] : params[:category_id] | 
					
						
							| 
									
										
										
										
											2013-05-31 03:30:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |     body = Nokogiri::HTML(page.content) | 
					
						
							| 
									
										
										
										
											2013-10-20 10:44:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if @edit | 
					
						
							|  |  |  |       body.css('.page_part').each do |page_part| | 
					
						
							|  |  |  |         ret = '' | 
					
						
							|  |  |  |         ret << "<div class='editable'>" | 
					
						
							|  |  |  |         ret << "<div class='edit_link'>" | 
					
						
							|  |  |  |         ret << "<a href='#{edit_admin_page_part_path(page_part['part_id'])}' class='nav'>#{t(:edit)}</a>" | 
					
						
							|  |  |  |         ret << '</div>' | 
					
						
							|  |  |  |         ret << page_part.child.to_html rescue nil | 
					
						
							|  |  |  |         ret << '</div>' | 
					
						
							|  |  |  |         fragment = Nokogiri::HTML::DocumentFragment.new(body, ret) | 
					
						
							|  |  |  |         page_part.swap(fragment) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |     body.css('orbit_front').each do |front| | 
					
						
							| 
									
										
										
										
											2012-12-28 03:51:56 +00:00
										 |  |  |       if front['value'] | 
					
						
							|  |  |  |         fragment = Nokogiri::HTML::DocumentFragment.new(body, "<div id='#{front['id']}' class='#{front['class']}'>#{eval(front['value']).to_s}</div>") | 
					
						
							|  |  |  |       else | 
					
						
							| 
									
										
										
										
											2012-12-28 02:36:18 +00:00
										 |  |  |         ret = '' | 
					
						
							|  |  |  |         part = PagePart.find(front['part_id']) if front['part_id'] | 
					
						
							|  |  |  |         ret << eval("\"#{front['path']}\"") rescue '' | 
					
						
							| 
									
										
										
										
											2013-04-23 02:01:02 +00:00
										 |  |  |         args.each do |index,arg| | 
					
						
							| 
									
										
										
										
											2013-05-29 02:21:21 +00:00
										 |  |  |           if index=="tag_id" || index=="category_id" | 
					
						
							|  |  |  |             ret << (ret.include?("?") ? "&#{index}[]=#{arg}": "?#{index}[]=#{arg}" ) | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |             ret << (ret.include?("?") ? "&#{index}=#{arg}": "?#{index}=#{arg}" )     | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2013-04-03 11:03:16 +00:00
										 |  |  |         end if args | 
					
						
							| 
									
										
										
										
											2012-12-28 02:36:18 +00:00
										 |  |  |         fragment = Nokogiri::HTML::DocumentFragment.new(body, "<div class='dymanic_load widget' path='#{ret}'></div>") | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |       front.swap(fragment) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-10-20 10:44:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-27 09:57:50 +00:00
										 |  |  |     body.to_html | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # page_footer | 
					
						
							|  |  |  |   def parse_footer(body, page, site) | 
					
						
							|  |  |  |     page_footer = body.css('.page_footer').first | 
					
						
							|  |  |  |     if page_footer | 
					
						
							|  |  |  |       res = "<div id='#{page_footer['id']}', class='#{page_footer['class']}'>" | 
					
						
							|  |  |  |       res << "<div class='dymanic_load' path='#{front_show_footer_path}'></div>" | 
					
						
							|  |  |  |       res << "</div>" | 
					
						
							|  |  |  |       fragment = Nokogiri::HTML::DocumentFragment.new(body, res) | 
					
						
							|  |  |  |       page_footer.swap(fragment) rescue nil | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       '' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # page_images | 
					
						
							|  |  |  |   def parse_images(body, page, edit=nil) | 
					
						
							|  |  |  |     body.css('.page_image').each do |page_image| | 
					
						
							|  |  |  |       image = page.design.images.detect{|image| image.name.eql?(File.basename(page_image['src'])) } unless image | 
					
						
							|  |  |  |       if image | 
					
						
							|  |  |  |         res = "<img src=#{image.file.url} " | 
					
						
							|  |  |  |         page_image.attributes.each do |l| | 
					
						
							|  |  |  |           res << "#{l[0]}='#{l[1]}' " | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         res << '>' | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       fragment = Nokogiri::HTML::DocumentFragment.new(body, res) | 
					
						
							|  |  |  |       page_image.swap(fragment) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # page_menu | 
					
						
							|  |  |  |   def parse_menu(body, page) | 
					
						
							|  |  |  |     page_menu = body.css('.page_menu').first | 
					
						
							|  |  |  |     if page_menu | 
					
						
							|  |  |  |       fragment = Nokogiri::HTML::DocumentFragment.new(body, "<div class='dymanic_load' path='#{front_show_menu_path(page.id)}'></div>") | 
					
						
							|  |  |  |       page_menu.swap(fragment) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       '' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # page_sub_menu | 
					
						
							|  |  |  |   def parse_sub_menu(body, page, site) | 
					
						
							|  |  |  |     page_sub_menu = body.css('.page_sub_menu').first | 
					
						
							|  |  |  |     if page_sub_menu | 
					
						
							|  |  |  |       res = "<div id='#{page_sub_menu['id']}', class='#{page_sub_menu['class']}'>" | 
					
						
							|  |  |  |       res << "<div class='dymanic_load' path='#{front_show_site_sub_menu_path}'></div>" | 
					
						
							|  |  |  |       res << "</div>" | 
					
						
							|  |  |  |       fragment = Nokogiri::HTML::DocumentFragment.new(body, res) | 
					
						
							|  |  |  |       page_sub_menu.swap(fragment) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       '' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-01 09:07:16 +00:00
										 |  |  |   # page_breadcrumb | 
					
						
							|  |  |  |   def parse_breadcrumb(body, page, site) | 
					
						
							|  |  |  |     page_breadcrumb = body.css('.page_breadcrumb').first | 
					
						
							|  |  |  |     if page_breadcrumb | 
					
						
							| 
									
										
										
										
											2013-02-06 13:06:08 +00:00
										 |  |  |       res = "<orbit_front path='\#{front_show_breadcrumb_path(@item)}' class='dymanic_load widget'></orbit_front>" | 
					
						
							| 
									
										
										
										
											2013-02-01 09:07:16 +00:00
										 |  |  |       fragment = Nokogiri::HTML::DocumentFragment.new(body, res) | 
					
						
							|  |  |  |       page_breadcrumb.swap(fragment) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       '' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |   # page_contents | 
					
						
							|  |  |  |   def parse_contents(body, page, edit=nil, locale) | 
					
						
							|  |  |  |     public_r_tags = [] | 
					
						
							| 
									
										
										
										
											2013-01-21 08:56:37 +00:00
										 |  |  |     url = '' | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |     body.css('.page_content').each do |content| | 
					
						
							| 
									
										
										
										
											2013-03-05 10:34:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |       ret = '' | 
					
						
							|  |  |  |       if (content["main"] == "true" && !page.module_app.nil?) | 
					
						
							| 
									
										
										
										
											2013-01-21 08:56:37 +00:00
										 |  |  |         if page.app_frontend_url == 'default_widget' | 
					
						
							|  |  |  |           url = "/panel/orbit_app/widget/#{page.frontend_style}?inner=true" | 
					
						
							| 
									
										
										
										
											2013-02-05 08:34:22 +00:00
										 |  |  |           url << "&id=\#{params[:id] if params[:id] && !params[:id].eql?(page.id.to_s)}" | 
					
						
							| 
									
										
										
										
											2013-01-21 08:56:37 +00:00
										 |  |  |         else | 
					
						
							| 
									
										
										
										
											2013-01-29 02:05:50 +00:00
										 |  |  |            url = "/panel/#{page.module_app.key}/front_end/#{page.app_frontend_url}\#{(\"/\" + params[:id]) if params[:id] && !params[:id].eql?(page.id.to_s)}\#{(\"/\" + params[:controller_action]) if params[:controller_action] && params[:id]}?inner=true" | 
					
						
							| 
									
										
										
										
											2013-01-21 08:56:37 +00:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-31 03:30:01 +00:00
										 |  |  |         categories_str=category.collect{|t| "base_category_id[]=#{t}"}.join('&') | 
					
						
							|  |  |  |         tags_str=tag.collect{|t| "base_tag_id[]=#{t}"}.join('&') | 
					
						
							| 
									
										
										
										
											2013-03-05 10:34:41 +00:00
										 |  |  |         categories_str = "&#{categories_str}" unless categories_str.blank? | 
					
						
							|  |  |  |         tags_str = "&#{tags_str}" unless tags_str.blank? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-03 11:03:16 +00:00
										 |  |  |         options = "&page_id=\#{page.id}#{categories_str}#{tags_str}&preview=\#{params[:preview]}&page_main=\#{params[:page_main]}&search_query=\#{params[:search_query]}&clicked_field_name=\#{params[:clicked_field_name]}&name=\#{params[:name]}&item_type=page" | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |         ret << "<orbit_front path='#{url + options}'></div>" | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         part = page.page_parts.detect{ |p| p.name.to_s == content['name'].to_s } rescue nil | 
					
						
							| 
									
										
										
										
											2013-10-20 10:44:04 +00:00
										 |  |  |         if part | 
					
						
							|  |  |  |           ret << "<div class='page_part' part_id='#{part.id}'>" | 
					
						
							|  |  |  |           case part.kind | 
					
						
							|  |  |  |           when 'text' | 
					
						
							|  |  |  |             ret << part.content_translations[locale.to_s] rescue '' | 
					
						
							|  |  |  |           when 'module_widget' | 
					
						
							|  |  |  |             # url = "/panel/\#{part.module_app.key}/widget/\#{part.widget_path}?inner=true" | 
					
						
							|  |  |  |             # options = "&part_id=\#{part.id}&category_id=\#{!part[:category].blank? ? part[:category].blank? : category}&tag_id=\#{!part[:tag].blank? ? part[:tag] : tag}&page=\#{params[:page]}&search_query=\#{params[:search_query]}&part_title=\#{Rack::Utils.escape(part_title).gsub(\"\+\", \"\%20\") rescue nil}" | 
					
						
							|  |  |  |             # ret << "<orbit_front path='#{url + options}' part_id=#{part.id}></div>" | 
					
						
							|  |  |  |                       url = case part.widget_path | 
					
						
							|  |  |  |                       when 'default_widget' | 
					
						
							|  |  |  |                           "/panel/orbit_app/widget/\#{part.widget_style}?inner=true" | 
					
						
							|  |  |  |                         else | 
					
						
							|  |  |  |                           "/panel/\#{part.module_app.key}/widget/\#{part.widget_path}?inner=true" | 
					
						
							|  |  |  |                       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             categories_str=part[:category].collect{|t| "base_category_id[]=#{t}"}.join('&') | 
					
						
							|  |  |  |             tags_str=part[:tag].collect{|t| "base_tag_id[]=#{t}"}.join('&') | 
					
						
							|  |  |  |             categories_str = "&#{categories_str}" unless categories_str.blank? | 
					
						
							|  |  |  |             tags_str = "&#{tags_str}" unless tags_str.blank? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             options = "&part_id=\#{part.id}#{categories_str}#{tags_str}&page=\#{params[:page]}&search_query=\#{params[:search_query]}&clicked_field_name=\#{params[:clicked_field_name]}&part_title=\#{Rack::Utils.escape(part_title).gsub(\"\+\", \"\%20\") rescue nil}&item_type=page_part&tag_id=\#{params[:tag_id]}&category_id=\#{params[:category_id]}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ret << "<orbit_front path='#{url + options}' part_id=#{part.id} class='dymanic_load widget'></orbit_front>" | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |           when 'public_r_tag' | 
					
						
							|  |  |  |             ret << send("generate_#{part.public_r_tag}s", part.public_r_tag_object_id, page) | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |               '' | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           ret << "</div>" | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |       end | 
					
						
							|  |  |  |       scope = "<#{content.name}" | 
					
						
							|  |  |  |       content.attributes.each_pair do |key, value| | 
					
						
							|  |  |  |         scope << " #{key}='#{value}'" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       scope << ">#{ret}</#{content.name}>" | 
					
						
							|  |  |  |       fragment = Nokogiri::HTML::DocumentFragment.new(body, scope) | 
					
						
							|  |  |  |       content.swap(fragment) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-28 02:36:18 +00:00
										 |  |  |   def parse_counter(body = nil) | 
					
						
							|  |  |  |     body.css('.page_counter').each do |counter| | 
					
						
							|  |  |  |       ret = '' | 
					
						
							|  |  |  |       case counter['option'] | 
					
						
							|  |  |  |       when 'all' | 
					
						
							|  |  |  |         ret << "display_visitors" | 
					
						
							|  |  |  |       when 'today' | 
					
						
							|  |  |  |         ret << "display_visitors_today" | 
					
						
							|  |  |  |       when 'this_week' | 
					
						
							|  |  |  |         ret << "display_visitors_this_week" | 
					
						
							|  |  |  |       when 'this_month' | 
					
						
							|  |  |  |         ret << "display_visitors_this_month" | 
					
						
							|  |  |  |       when 'this_year' | 
					
						
							|  |  |  |         ret << "display_visitors_this_year" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       fragment = Nokogiri::HTML::DocumentFragment.new(body, "<orbit_front id='#{counter['id']}' class='#{counter['class']}' value='#{ret}'></orbit_front>") | 
					
						
							|  |  |  |       counter.swap(fragment) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |   # ad_banners | 
					
						
							|  |  |  |   def generate_ad_banners(*args) | 
					
						
							|  |  |  |     "<div class='dymanic_load' path='#{front_show_banner_path(args[0])}'></div>" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # sitemap | 
					
						
							|  |  |  |   def generate_sitemaps(*args) | 
					
						
							|  |  |  |     "<div class='dymanic_load' path='#{front_show_sitemap_path}'></div>" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # sub_menus | 
					
						
							|  |  |  |   def generate_sub_menus(*args) | 
					
						
							|  |  |  |     "<div class='dymanic_load' path='#{front_show_page_sub_menu_path({:menu_page_id => args[0], :page_id => args[1]})}'></div>" | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-31 11:20:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # breadcrumb | 
					
						
							|  |  |  |   def generate_breadcrumbs(*args) | 
					
						
							| 
									
										
										
										
											2013-02-01 09:07:16 +00:00
										 |  |  |     "<div class='dymanic_load' path='#{front_show_breadcrumb_path(args[1])}'></div>" | 
					
						
							| 
									
										
										
										
											2013-01-31 11:20:55 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-05-24 10:42:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # tag_cloud | 
					
						
							|  |  |  |   def generate_tag_clouds(*args) | 
					
						
							|  |  |  |     "<div class='dymanic_load' path='#{front_show_tag_cloud_path(args[0])}'></div>" | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-10-11 13:08:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    # tag_cloud | 
					
						
							|  |  |  |   def generate_terms_of_uses(*args) | 
					
						
							|  |  |  |     "<div class='dymanic_load' path='#{front_show_terms_of_use_path}'></div>" | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-12-23 10:34:21 +00:00
										 |  |  | end |