| 
									
										
										
										
											2011-03-02 09:28:33 +00:00
										 |  |  | module Parser | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def parser_context(page_content, attributes = {}) | 
					
						
							|  |  |  |     Radius::Context.new do |c| | 
					
						
							|  |  |  |       c.define_tag 'content' do |tag| | 
					
						
							|  |  |  |         page_content | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       c.define_tag 'snippet' do |tag| | 
					
						
							|  |  |  |         snippet = Snippet.first(:conditions => {:name => tag.attr['name']}) | 
					
						
							|  |  |  |         if snippet | 
					
						
							|  |  |  |           snippet.content | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           t('nothing') | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       c.define_tag 'language_bar' do | 
					
						
							|  |  |  |         @site.in_use_locales.map{ |locale| | 
					
						
							|  |  |  |           lang = I18nVariable.first(:conditions => {:key => locale})[locale] | 
					
						
							|  |  |  |           if I18n.locale.to_s.eql?(locale) | 
					
						
							|  |  |  |             lang | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             "<a href='?locale=#{locale}'>#{lang}</a>" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         }.join(' | ') | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       c.define_tag 'locale' do |tag| | 
					
						
							|  |  |  |         case attributes[:locale] | 
					
						
							|  |  |  |           when 'create' | 
					
						
							|  |  |  |             var = I18nVariable.new(:key => (tag.attr['name'] rescue nil), :document_class => 'Text') | 
					
						
							|  |  |  |             @site.valid_locales.each do |locale| | 
					
						
							|  |  |  |               var[locale] = tag.attr[locale] rescue nil | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |             var.save! | 
					
						
							|  |  |  |             res = '' | 
					
						
							|  |  |  |             res << "<r:locale id='#{var.id}' "  | 
					
						
							|  |  |  |             res << "name='#{var.key}' " if var.key | 
					
						
							|  |  |  |             @site.valid_locales.each do |locale| | 
					
						
							|  |  |  |               res << "#{locale}='#{var[locale]}' " | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |             res << '/>' | 
					
						
							|  |  |  |           when 'show' | 
					
						
							|  |  |  |             var = I18nVariable.find(tag.attr['id']) | 
					
						
							|  |  |  |             res = '' | 
					
						
							|  |  |  |             res << "<r:locale "  | 
					
						
							|  |  |  |             res << "name='#{var.key}' " if var.key | 
					
						
							|  |  |  |             @site.valid_locales.each do |locale| | 
					
						
							|  |  |  |               res << "#{locale}='#{var[locale]}' " | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |             res << '/>' | 
					
						
							|  |  |  |           when 'destroy' | 
					
						
							|  |  |  |             var = I18nVariable.find(tag.attr['id']) | 
					
						
							|  |  |  |             var.destroy | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             tag.attr[I18n.locale.to_s] rescue nil | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-03-03 06:54:34 +00:00
										 |  |  |       c.define_tag 'css' do |tag| | 
					
						
							|  |  |  |         assets = Asset.any_in(:filename => tag.attr['name'].split(',').map(&:strip)) | 
					
						
							|  |  |  |         res = '' | 
					
						
							|  |  |  |         assets.each do |asset| | 
					
						
							|  |  |  |           res << "<link href='#{asset.data.file.url}' rel='stylesheet' type='text/css' /> " if asset.data.file.content_type.eql?('text/css') | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         res | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       c.define_tag 'image' do |tag| | 
					
						
							|  |  |  |         asset = Asset.find(tag.attr['id']) | 
					
						
							|  |  |  |         if asset | 
					
						
							|  |  |  |           res = "<img src=#{asset.data.file.url} " | 
					
						
							|  |  |  |           tag.attr.each do |l| | 
					
						
							| 
									
										
										
										
											2011-03-04 01:31:21 +00:00
										 |  |  |             res << "#{l[0]}='#{l[1]}' " | 
					
						
							| 
									
										
										
										
											2011-03-03 06:54:34 +00:00
										 |  |  |           end | 
					
						
							|  |  |  |           res << '>' | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-03-02 09:28:33 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def parse_content(page_content, attributes = {}) | 
					
						
							|  |  |  |     context = parser_context(page_content, attributes) | 
					
						
							|  |  |  |     parser = Radius::Parser.new(context, :tag_prefix => 'r') | 
					
						
							|  |  |  |     parser.parse(page_content) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def parse_page(page) | 
					
						
							|  |  |  |     layout_content = (page.layout)? page.layout.content : "<r:content />"   | 
					
						
							|  |  |  |     context = parser_context(page.content) | 
					
						
							|  |  |  |     parser = Radius::Parser.new(context, :tag_prefix => 'r') | 
					
						
							|  |  |  |     parser.parse(parser.parse(layout_content)) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end |