| 
									
										
										
										
											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) | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |   def parse_page_content(page) | 
					
						
							|  |  |  |     category = params[:category_id].blank? ? page[:category] : params[:category_id] | 
					
						
							|  |  |  |     tag = params[:tag_id].blank? ? page[:tag] : params[:tag_id] | 
					
						
							|  |  |  |     body = Nokogiri::HTML(page.content) | 
					
						
							|  |  |  |     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 '' | 
					
						
							|  |  |  |         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 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # page_contents | 
					
						
							|  |  |  |   def parse_contents(body, page, edit=nil, locale) | 
					
						
							|  |  |  |     public_r_tags = [] | 
					
						
							|  |  |  |     body.css('.page_content').each do |content| | 
					
						
							|  |  |  |       ret = '' | 
					
						
							|  |  |  |       if (content["main"] == "true" && !page.module_app.nil?) | 
					
						
							| 
									
										
										
										
											2012-12-20 08:02:03 +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" | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |         options = "&page_id=#{page.id}&category_id=\#{category}&tag_id=\#{tag}&preview=\#{params[:preview]}&page_main=\#{params[:page_main]}&search_query=\#{params[:search_query]}&name=\#{params[:name]}" | 
					
						
							|  |  |  |         ret << "<orbit_front path='#{url + options}'></div>" | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         part = page.page_parts.detect{ |p| p.name.to_s == content['name'].to_s } rescue nil | 
					
						
							|  |  |  |         case part.kind | 
					
						
							|  |  |  |         when 'text' | 
					
						
							|  |  |  |           ret << part.content_translations[locale.to_s] rescue '' | 
					
						
							|  |  |  |         when 'module_widget' | 
					
						
							| 
									
										
										
										
											2012-12-25 02:45:08 +00:00
										 |  |  |           # 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 | 
					
						
							| 
									
										
										
										
											2013-01-06 16:40:43 +00:00
										 |  |  |                         "/panel/\#{part.module_app.key}/widget/\#{part.widget_path}?inner=true" | 
					
						
							| 
									
										
										
										
											2012-12-25 02:45:08 +00:00
										 |  |  |                     end | 
					
						
							| 
									
										
										
										
											2012-12-24 06:04:32 +00:00
										 |  |  |           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}" | 
					
						
							| 
									
										
										
										
											2012-12-25 02:45:08 +00:00
										 |  |  |           ret << "<orbit_front path='#{url + options}' part_id=#{part.id} class='dymanic_load widget'></orbit_front>" | 
					
						
							|  |  |  |            | 
					
						
							| 
									
										
										
										
											2012-12-19 09:15:31 +00:00
										 |  |  |         when 'public_r_tag' | 
					
						
							|  |  |  |           ret << send("generate_#{part.public_r_tag}s", part.public_r_tag_object_id, page) | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             '' | 
					
						
							|  |  |  |         end if part | 
					
						
							|  |  |  |       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 | 
					
						
							| 
									
										
										
										
											2011-12-23 10:34:21 +00:00
										 |  |  |    | 
					
						
							|  |  |  | end |