92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| 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
 | |
|       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|
 | |
|             res << "#{l[0]}='#{l[1]}' "
 | |
|           end
 | |
|           res << '>'
 | |
|         end
 | |
|       end
 | |
|     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
 |