| 
									
										
										
										
											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) | 
					
						
							|  |  |  |       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| | 
					
						
							|  |  |  |       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>") | 
					
						
							|  |  |  |       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?) | 
					
						
							|  |  |  |         url = "/panel/#{page.module_app.key}/front_end/#{page.app_frontend_url}\#{(\"/\" + params[:id]) if params[:id] && !params[:id].eql?(page.id.to_s)}?inner=true" | 
					
						
							|  |  |  |         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' | 
					
						
							|  |  |  |           url = "/panel/\#{part.module_app.key}/widget/\#{part.widget_path}?inner=true" | 
					
						
							|  |  |  |           options = "&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>" | 
					
						
							|  |  |  |         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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # 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 |