Merge with sub_roles
This commit is contained in:
1 parent
fc591ee308
commit
62aaf79491
308 files changed
+2844
-17841
No files matched your search
@@ -24,10 +24,10 @@
|
||||
</div>
|
||||
|
||||
<div id="main_content" class="content">
|
||||
<r:content name='content_1'>
|
||||
</r:content>
|
||||
<div class="dymanic_load" path="/panel/blog/widget_latest_post"></div>
|
||||
<div class="dymanic_load" path="/panel/blog/widget_index"></div>
|
||||
<r:content name='content_1' main='true'>
|
||||
</r:content>
|
||||
<div class="dymanic_load" path="/panel/blog/widget/latest_post"></div>
|
||||
<div class="dymanic_load" path="/panel/blog/widget/"></div>
|
||||
</div>
|
||||
|
||||
<div id="footer" class="footer">
|
||||
|
||||
-309
@@ -1,309 +0,0 @@
|
||||
module Parser
|
||||
|
||||
def parser_context(page, attributes = {})
|
||||
Radius::Context.new do |c|
|
||||
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
|
||||
end
|
||||
end
|
||||
c.define_tag 'multi_lang' do |tag|
|
||||
tag.expand
|
||||
end
|
||||
c.define_tag 'multi_lang:lang' do |tag|
|
||||
tag.expand if tag.attr['name'].eql?(I18n.locale.to_s)
|
||||
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 'stylesheets' do |tag|
|
||||
res = ''
|
||||
res << "<link href='#{page.design.reset_css.file.url}' rel='stylesheet' type='text/css' />" if page.design.reset_css
|
||||
res << "<link href='#{page.design.default_css.file.url}' rel='stylesheet' type='text/css' /> " if page.design.default_css
|
||||
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
|
||||
res << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />" if theme
|
||||
res
|
||||
end
|
||||
c.define_tag 'javascripts' do |tag|
|
||||
res = ''
|
||||
page.design.javascripts.each do |js|
|
||||
res << "<script type='text/javascript' src='#{js.file.url}'></script>"
|
||||
end
|
||||
res << "<script type='text/javascript' src='/static/jquery.js'></script>"
|
||||
res << "<script type='text/javascript' src='/static/kernel.js'></script>"
|
||||
res
|
||||
end
|
||||
c.define_tag 'image' do |tag|
|
||||
image = page.custom_images.detect{|image| image.name.eql?(tag.attr['name']) }
|
||||
image = page.design.custom_images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
image = page.design.images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
if image
|
||||
res = "<img src=#{image.file.url} "
|
||||
tag.attr.each do |l|
|
||||
res << "#{l[0]}='#{l[1]}' "
|
||||
end
|
||||
res << '>'
|
||||
end
|
||||
end
|
||||
c.define_tag 'layout_part' do |tag|
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s } rescue nil
|
||||
part.content
|
||||
end
|
||||
c.define_tag 'content' do |tag|
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s } rescue nil
|
||||
part.content
|
||||
end
|
||||
c.define_tag 'link' do |tag|
|
||||
item = Item.first(:conditions => { :full_name => tag.attr['name'] })
|
||||
ret = ''
|
||||
ret << "<a href='#{tag.attr['name']}'>"
|
||||
ret << item.i18n_variable[I18n.locale]
|
||||
ret << '</a>'
|
||||
end
|
||||
c.define_tag 'menu' do |tag|
|
||||
home = get_homepage
|
||||
menu = page.design.layout.menu
|
||||
menu_level(home, 1, menu)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def parse_page(page)
|
||||
if page._type == 'Page'
|
||||
layout_content = page.design.layout.content.force_encoding('UTF-8') rescue ''
|
||||
context = parser_context(page)
|
||||
parser = Radius::Parser.new(context, :tag_prefix => 'r')
|
||||
parser.parse(parser.parse(layout_content))
|
||||
end
|
||||
end
|
||||
|
||||
def parse_page_edit(page)
|
||||
if page._type == 'Page'
|
||||
layout_content = page.design.layout.content.force_encoding('UTF-8') rescue ''
|
||||
context = parser_context_edit(page)
|
||||
parser = Radius::Parser.new(context, :tag_prefix => 'r')
|
||||
parser.parse(parser.parse(layout_content))
|
||||
end
|
||||
end
|
||||
|
||||
def parser_context_edit(page, attributes = {})
|
||||
Radius::Context.new do |c|
|
||||
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 'multi_lang' do |tag|
|
||||
tag.expand
|
||||
end
|
||||
c.define_tag 'multi_lang:lang' do |tag|
|
||||
tag.expand if tag.attr['name'].eql?(I18n.locale.to_s)
|
||||
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|
|
||||
image = page.custom_images.detect{|image| image.name.eql?(tag.attr['name']) }
|
||||
image = page.design.custom_images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
image = page.design.images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
if image
|
||||
res = "<img src=#{image.file.url} "
|
||||
tag.attr.each do |l|
|
||||
res << "#{l[0]}='#{l[1]}' "
|
||||
end
|
||||
res << '>'
|
||||
end
|
||||
end
|
||||
c.define_tag 'stylesheets' do |tag|
|
||||
res = ''
|
||||
res << "<link href='#{page.design.reset_css.file.url}' rel='stylesheet' type='text/css' />" if page.design.reset_css
|
||||
res << "<link href='#{page.design.default_css.file.url}' rel='stylesheet' type='text/css' />" if page.design.default_css
|
||||
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
|
||||
res << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />" if theme
|
||||
res
|
||||
end
|
||||
c.define_tag 'javascripts' do |tag|
|
||||
res = ''
|
||||
page.design.javascripts.each do |js|
|
||||
res << "<script type='text/javascript' src='#{js.file.url}'></script>"
|
||||
end
|
||||
res << "<script type='text/javascript' src='/static/jquery.js'></script>"
|
||||
res << "<script type='text/javascript' src='/static/kernel.js'></script>"
|
||||
res
|
||||
end
|
||||
c.define_tag 'layout_part' do |tag|
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s }
|
||||
ret = ''
|
||||
ret << "<div id='#{tag.attr['name']}' part_id='#{part.id}'>"
|
||||
ret << tag.expand
|
||||
ret << '</div>'
|
||||
end
|
||||
c.define_tag 'content' do |tag|
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s }
|
||||
ret = ''
|
||||
ret << "<div id='#{tag.attr['name']}' part_id='#{part.id}' class='editable' style='border:solid 1px; margin:5px; padding:5px;'>"
|
||||
ret << "<div class='edit_link' style='display:none'>"
|
||||
ret << " <a href='#{edit_admin_page_part_path(part.id)}' class='nav'>#{t(:edit)}</a>"
|
||||
ret << '</div>'
|
||||
ret << part.i18n_variable[I18n.locale.to_s] rescue ''
|
||||
ret << '</div>'
|
||||
end
|
||||
c.define_tag 'link' do |tag|
|
||||
item = Item.first(:conditions => { :full_name => tag.attr['name'] })
|
||||
ret = ''
|
||||
ret << "<a href='"
|
||||
ret << eval("admin_#{item._type.downcase}_path(item.id)")
|
||||
ret << "' class='nav'>"
|
||||
ret << item.i18n_variable[I18n.locale]
|
||||
ret << "</a>"
|
||||
end
|
||||
c.define_tag 'menu' do |tag|
|
||||
home = get_homepage
|
||||
menu = page.design.layout.menu
|
||||
menu_level(home, 1, menu, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def menu_level(page, current, menu, edit = false)
|
||||
if current <= menu.levels
|
||||
res = "<ul id="
|
||||
res << menu.values["id_#{current}"]
|
||||
res << " class="
|
||||
res << menu.values["class_#{current}"]
|
||||
res << ">"
|
||||
i = nil
|
||||
i = 1 if menu.values["li_incremental_#{current}"]
|
||||
if current == 1 && menu.values['home'].eql?('true')
|
||||
res << menu_li(page, current, menu, i, edit)
|
||||
i += 1 if i
|
||||
end
|
||||
page.children.each do |child|
|
||||
res << menu_li(child, current, menu, i, edit)
|
||||
i += 1 if i
|
||||
end
|
||||
res << "</ul>"
|
||||
end
|
||||
end
|
||||
|
||||
def menu_li(page, current, menu, i, edit)
|
||||
res = "<li class="
|
||||
res << menu.values["li_class_#{current}"]
|
||||
res << "_#{i}" if i
|
||||
res << ">"
|
||||
res << "<a href='#{edit ? admin_page_path(page.id) : page.full_name}'>#{page.name}</a>"
|
||||
res << menu_level(page, current + 1, menu, edit) if page.children.size > 0 && !page.is_home?
|
||||
res << "</li>"
|
||||
end
|
||||
|
||||
#=============
|
||||
def parse_layout_contents(layout)
|
||||
content = layout.content.force_encoding('UTF-8')
|
||||
context = parser_layout_contents(layout)
|
||||
parser = Radius::Parser.new(context, :tag_prefix => 'r')
|
||||
parser.parse(content)
|
||||
end
|
||||
|
||||
def parser_layout_contents(layout )
|
||||
Radius::Context.new do |c|
|
||||
c.define_tag 'javascripts' do |tag|
|
||||
end
|
||||
c.define_tag 'stylesheets' do |tag|
|
||||
end
|
||||
c.define_tag 'menu' do |tag|
|
||||
layout.build_menu(:levels => 0, :values => {}) unless layout.menu
|
||||
layout.menu.levels = i = tag.attr['level'].to_i
|
||||
layout.menu.values.merge!({'home' => tag.attr['home']}) if i == 1
|
||||
layout.menu.values.merge!({"id_#{i}" => tag.attr['id'], "class_#{i}" => tag.attr['class'], "li_class_#{i}" => tag.attr['li_class'], "li_incremental_#{i}" => tag.attr['li_incremental']})
|
||||
layout.menu.save
|
||||
tag.expand
|
||||
end
|
||||
c.define_tag 'content' do |tag|
|
||||
layout.layout_parts.create(:name => tag.attr['name'], :editable => true)
|
||||
end
|
||||
c.define_tag 'image' do |tag|
|
||||
image = layout.design.images.detect{ |i| i.file_filename.eql?(parse_html_image(tag.expand)) }
|
||||
image.update_attributes(:name => tag.attr['name'], :html_id => tag.attr['id'], :html_class => tag.attr['class'])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def parse_html_image(html)
|
||||
html.scan(/(?<=\<img)(.*?)(?=\/\>)/){
|
||||
$1.gsub(' ','').scan(/(?<=src=\")(.*?)(?=\")/){
|
||||
return File.basename($1).gsub(/[\\\"]/, '')
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def self.included(base)
|
||||
base.send :helper_method, :parse_page if base.respond_to? :helper_method
|
||||
base.send :helper_method, :parse_page_edit if base.respond_to? :helper_method
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,119 @@
|
||||
module ParserBackEnd
|
||||
require 'radius'
|
||||
include ParserCommon
|
||||
|
||||
def parse_page_edit(page)
|
||||
if page._type == 'Page'
|
||||
layout_content = page.design.layout.content.force_encoding('UTF-8') rescue ''
|
||||
context = parser_context_edit(page)
|
||||
parser = Radius::Parser.new(context, :tag_prefix => 'r')
|
||||
parser.parse(parser.parse(layout_content))
|
||||
end
|
||||
end
|
||||
|
||||
def parser_context_edit(page, attributes = {})
|
||||
Radius::Context.new do |c|
|
||||
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 'multi_lang' do |tag|
|
||||
tag.expand
|
||||
end
|
||||
c.define_tag 'multi_lang:lang' do |tag|
|
||||
tag.expand if tag.attr['name'].eql?(I18n.locale.to_s)
|
||||
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|
|
||||
image = page.custom_images.detect{|image| image.name.eql?(tag.attr['name']) }
|
||||
image = page.design.custom_images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
image = page.design.images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
if image
|
||||
res = "<img src=#{image.file.url} "
|
||||
tag.attr.each do |l|
|
||||
res << "#{l[0]}='#{l[1]}' "
|
||||
end
|
||||
res << '>'
|
||||
end
|
||||
end
|
||||
c.define_tag 'stylesheets' do |tag|
|
||||
res = ''
|
||||
res << "<link href='#{page.design.reset_css.file.url}' rel='stylesheet' type='text/css' />" if page.design.reset_css
|
||||
res << "<link href='#{page.design.default_css.file.url}' rel='stylesheet' type='text/css' />" if page.design.default_css
|
||||
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
|
||||
res << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />" if theme
|
||||
res
|
||||
end
|
||||
c.define_tag 'javascripts' do |tag|
|
||||
res = ''
|
||||
page.design.javascripts.each do |js|
|
||||
res << "<script type='text/javascript' src='#{js.file.url}'></script>"
|
||||
end
|
||||
res << "<script type='text/javascript' src='/static/jquery.js'></script>"
|
||||
res << "<script type='text/javascript' src='/static/kernel.js'></script>"
|
||||
res
|
||||
end
|
||||
c.define_tag 'layout_part' do |tag|
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s }
|
||||
ret = ''
|
||||
ret << "<div id='#{tag.attr['name']}' part_id='#{part.id}'>"
|
||||
ret << tag.expand
|
||||
ret << '</div>'
|
||||
end
|
||||
c.define_tag 'content' do |tag|
|
||||
ret = ''
|
||||
if (tag.attributes["main"] == "true" && !page.module_app.nil?)
|
||||
ret << "<div id='appfrontend' class='dymanic_load' path='#{page.app_frontend_url}'></div>"
|
||||
else
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s }
|
||||
ret << "<div id='#{tag.attr['name']}' part_id='#{part.id}' class='editable' style='border:solid 1px; margin:5px; padding:5px;'>"
|
||||
ret << "<div class='edit_link' style='display:none'>"
|
||||
ret << " <a href='#{edit_admin_page_part_path(part.id)}' class='nav'>#{t(:edit)}</a>"
|
||||
ret << '</div>'
|
||||
ret << part.i18n_variable[I18n.locale.to_s] rescue ''
|
||||
ret << '</div>'
|
||||
end
|
||||
end
|
||||
c.define_tag 'link' do |tag|
|
||||
item = Item.first(:conditions => { :full_name => tag.attr['name'] })
|
||||
ret = ''
|
||||
ret << "<a href='"
|
||||
ret << eval("admin_#{item._type.downcase}_path(item.id)")
|
||||
ret << "' class='nav'>"
|
||||
ret << item.i18n_variable[I18n.locale]
|
||||
ret << "</a>"
|
||||
end
|
||||
c.define_tag 'menu' do |tag|
|
||||
home = get_homepage
|
||||
menu = page.design.layout.menu
|
||||
menu_level(home, 1, menu, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.included(base)
|
||||
base.send :helper_method, :parse_page_edit if base.respond_to? :helper_method
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,34 @@
|
||||
module ParserCommon
|
||||
|
||||
def menu_level(page, current, menu, edit = false)
|
||||
if current <= menu.levels
|
||||
res = "<ul id="
|
||||
res << menu.values["id_#{current}"]
|
||||
res << " class="
|
||||
res << menu.values["class_#{current}"]
|
||||
res << ">"
|
||||
i = nil
|
||||
i = 1 if menu.values["li_incremental_#{current}"]
|
||||
if current == 1 && menu.values['home'].eql?('true')
|
||||
res << menu_li(page, current, menu, i, edit)
|
||||
i += 1 if i
|
||||
end
|
||||
page.children.each do |child|
|
||||
res << menu_li(child, current, menu, i, edit)
|
||||
i += 1 if i
|
||||
end
|
||||
res << "</ul>"
|
||||
end
|
||||
end
|
||||
|
||||
def menu_li(page, current, menu, i, edit)
|
||||
res = "<li class="
|
||||
res << menu.values["li_class_#{current}"]
|
||||
res << "_#{i}" if i
|
||||
res << ">"
|
||||
res << "<a href='#{edit ? admin_page_path(page.id) : page.full_name}'>#{page.name}</a>"
|
||||
res << menu_level(page, current + 1, menu, edit) if page.children.size > 0 && !page.is_home?
|
||||
res << "</li>"
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,139 @@
|
||||
module ParserFrontEnd
|
||||
require 'radius'
|
||||
include ParserCommon
|
||||
|
||||
def parser_context(page, attributes = {},appfront_url = nil)
|
||||
Radius::Context.new do |c|
|
||||
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
|
||||
end
|
||||
end
|
||||
c.define_tag 'multi_lang' do |tag|
|
||||
tag.expand
|
||||
end
|
||||
c.define_tag 'multi_lang:lang' do |tag|
|
||||
tag.expand if tag.attr['name'].eql?(I18n.locale.to_s)
|
||||
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 'stylesheets' do |tag|
|
||||
res = ''
|
||||
res << "<link href='#{page.design.reset_css.file.url}' rel='stylesheet' type='text/css' />" if page.design.reset_css
|
||||
res << "<link href='#{page.design.default_css.file.url}' rel='stylesheet' type='text/css' /> " if page.design.default_css
|
||||
theme = page.design.themes.detect{ |d| d.id == page.theme_id }
|
||||
res << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />" if theme
|
||||
res
|
||||
end
|
||||
c.define_tag 'javascripts' do |tag|
|
||||
res = ''
|
||||
page.design.javascripts.each do |js|
|
||||
res << "<script type='text/javascript' src='#{js.file.url}'></script>"
|
||||
end
|
||||
res << "<script type='text/javascript' src='/static/jquery.js'></script>"
|
||||
res << "<script type='text/javascript' src='/static/kernel.js'></script>"
|
||||
res
|
||||
end
|
||||
c.define_tag 'image' do |tag|
|
||||
image = page.custom_images.detect{|image| image.name.eql?(tag.attr['name']) }
|
||||
image = page.design.custom_images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
image = page.design.images.detect{|image| image.name.eql?(tag.attr['name']) } unless image
|
||||
if image
|
||||
res = "<img src=#{image.file.url} "
|
||||
tag.attr.each do |l|
|
||||
res << "#{l[0]}='#{l[1]}' "
|
||||
end
|
||||
res << '>'
|
||||
end
|
||||
end
|
||||
c.define_tag 'layout_part' do |tag|
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s } rescue nil
|
||||
part.content
|
||||
end
|
||||
c.define_tag 'content' do |tag|
|
||||
ret = ''
|
||||
if (tag.attributes["main"] == "true" && !page.module_app.nil?)
|
||||
ret << "<div id='appfrontend' class='dymanic_load' path='#{appfront_url.nil?? page.app_frontend_url : appfront_url}'></div>"
|
||||
else
|
||||
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s } rescue nil
|
||||
ret << part.content
|
||||
end
|
||||
ret
|
||||
end
|
||||
c.define_tag 'link' do |tag|
|
||||
item = Item.first(:conditions => { :full_name => tag.attr['name'] })
|
||||
ret = ''
|
||||
ret << "<a href='#{tag.attr['name']}'>"
|
||||
ret << item.i18n_variable[I18n.locale]
|
||||
ret << '</a>'
|
||||
end
|
||||
c.define_tag 'menu' do |tag|
|
||||
home = get_homepage
|
||||
menu = page.design.layout.menu
|
||||
menu_level(home, 1, menu)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def parse_page(page ,appfront_url)
|
||||
if page._type == 'Page'
|
||||
layout_content = page.design.layout.content.force_encoding('UTF-8') rescue ''
|
||||
context = parser_context(page,{}, appfront_url)
|
||||
parser = Radius::Parser.new(context, :tag_prefix => 'r')
|
||||
parser.parse(parser.parse(layout_content))
|
||||
end
|
||||
end
|
||||
|
||||
def self.included(base)
|
||||
base.send :helper_method, :parse_page if base.respond_to? :helper_method
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,36 @@
|
||||
module ParserLayout
|
||||
require 'radius'
|
||||
include ParserCommon
|
||||
|
||||
def parse_layout_contents(layout)
|
||||
content = layout.content.force_encoding('UTF-8')
|
||||
context = parser_layout_contents(layout)
|
||||
parser = Radius::Parser.new(context, :tag_prefix => 'r')
|
||||
parser.parse(content)
|
||||
end
|
||||
|
||||
def parser_layout_contents(layout)
|
||||
Radius::Context.new do |c|
|
||||
c.define_tag 'javascripts' do |tag|
|
||||
end
|
||||
c.define_tag 'stylesheets' do |tag|
|
||||
end
|
||||
c.define_tag 'menu' do |tag|
|
||||
layout.build_menu(:levels => 0, :values => {}) unless layout.menu
|
||||
layout.menu.levels = i = tag.attr['level'].to_i
|
||||
layout.menu.values.merge!({'home' => tag.attr['home']}) if i == 1
|
||||
layout.menu.values.merge!({"id_#{i}" => tag.attr['id'], "class_#{i}" => tag.attr['class'], "li_class_#{i}" => tag.attr['li_class'], "li_incremental_#{i}" => tag.attr['li_incremental']})
|
||||
layout.menu.save
|
||||
tag.expand
|
||||
end
|
||||
c.define_tag 'content' do |tag|
|
||||
layout.layout_parts.create(:name => tag.attr['name'], :editable => true)
|
||||
end
|
||||
c.define_tag 'image' do |tag|
|
||||
image = layout.design.images.detect{ |i| i.file_filename.eql?(parse_html_image(tag.expand)) }
|
||||
image.update_attributes(:name => tag.attr['name'], :html_id => tag.attr['id'], :html_class => tag.attr['class'])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
# encoding: utf-8
|
||||
|
||||
namespace :app_auth do
|
||||
|
||||
task :build => :environment do
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
+58
-55
@@ -13,55 +13,61 @@ namespace :dev do
|
||||
|
||||
Site.create( :school => 'RulingDigital Universitry', :department => 'Computer Science', :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ])
|
||||
|
||||
# I18n_variables
|
||||
I18nVariable.create!( :document_class => 'language', :key => 'en', :en => 'English', :zh_tw => '英文' )
|
||||
I18nVariable.create!( :document_class => 'language', :key => 'zh_tw', :en => 'Chinese', :zh_tw => '中文' )
|
||||
var_1 = I18nVariable.create!( :document_class => 'UserRoleModel', :key => 'teacher', :en => 'Teacher', :zh_tw => '老師' )
|
||||
var_2 = I18nVariable.create!( :document_class => 'AttributeModel', :key => 'discipline', :en => 'Discipline', :zh_tw => '學科', :parent_id => var_1.id )
|
||||
var_3 = I18nVariable.create!( :document_class => 'AttributeModel', :key => 'department', :en => 'Department', :zh_tw => '學系', :parent_id => var_1.id )
|
||||
var_4 = I18nVariable.create!( :document_class => 'UserRoleModel', :key => 'student', :en => 'Student', :zh_tw => '學生' )
|
||||
var_5 = I18nVariable.create!( :document_class => 'AttributeModel', :key => 'department', :en => 'Department', :zh_tw => '學系', :parent_id => var_4.id )
|
||||
var_6 = I18nVariable.create!( :document_class => 'AttributeModel', :key => 'major', :en => 'Major', :zh_tw => '主修', :parent_id => var_4.id )
|
||||
var_7 = I18nVariable.create!( :document_class => 'UserInfoModel', :key => 'profile', :en => 'Profile', :zh_tw => '個人檔案' )
|
||||
var_8 = I18nVariable.create!( :document_class => 'AttributeModel', :key => 'last_name', :en => 'Last name', :zh_tw => '姓氏', :parent_id => var_7.id )
|
||||
var_9 = I18nVariable.create!( :document_class => 'AttributeModel', :key => 'first_name', :en => 'First name', :zh_tw => '名字', :parent_id => var_7.id )
|
||||
var_1 = I18nVariable.create!( :document_class => 'Role', :key => 'teacher', :en => 'Teacher', :zh_tw => '老師' )
|
||||
var_1_1 = I18nVariable.create!( :document_class => 'SubRole', :key => 'good_teacher', :en => 'Good teacher', :zh_tw => '好老師', :parent_id => var_1.id )
|
||||
var_1_1_1 = I18nVariable.create!( :document_class => 'Attribute', :key => 'field', :en => 'Field', :zh_tw => '領域', :parent_id => var_1_1.id )
|
||||
var_1_1_2 = I18nVariable.create!( :document_class => 'Attribute', :key => 'department', :en => 'Department', :zh_tw => '學系', :parent_id => var_1_1.id )
|
||||
var_1_2 = I18nVariable.create!( :document_class => 'SubRole', :key => 'bad_teacher', :en => 'Bad teacher', :zh_tw => '壞老師', :parent_id => var_1.id )
|
||||
var_1_2_1 = I18nVariable.create!( :document_class => 'Attribute', :key => 'field', :en => 'Field', :zh_tw => '領域', :parent_id => var_1_2.id )
|
||||
var_1_2_2 = I18nVariable.create!( :document_class => 'Attribute', :key => 'department', :en => 'Department', :zh_tw => '學系', :parent_id => var_1_2.id )
|
||||
var_1_2_3 = I18nVariable.create!( :document_class => 'Attribute', :key => 'speciality', :en => 'Speciality', :zh_tw => '專業', :parent_id => var_1_2.id )
|
||||
var_2 = I18nVariable.create!( :document_class => 'Role', :key => 'student', :en => 'Student', :zh_tw => '學生' )
|
||||
var_2_1 = I18nVariable.create!( :document_class => 'SubRole', :key => 'undergraduate', :en => 'Undergraduate', :zh_tw => '大學部學生', :parent_id => var_2.id )
|
||||
var_2_1_1 = I18nVariable.create!( :document_class => 'Attribute', :key => 'department', :en => 'Department', :zh_tw => '學系', :parent_id => var_2_1.id )
|
||||
var_2_1_2 = I18nVariable.create!( :document_class => 'Attribute', :key => 'major', :en => 'Major', :zh_tw => '主修', :parent_id => var_2_1.id )
|
||||
var_2_2 = I18nVariable.create!( :document_class => 'SubRole', :key => 'graduate', :en => 'Graduate', :zh_tw => '研究生', :parent_id => var_2.id )
|
||||
var_2_2_1 = I18nVariable.create!( :document_class => 'Attribute', :key => 'department', :en => 'Department', :zh_tw => '學系', :parent_id => var_2_2.id )
|
||||
var_2_2_2 = I18nVariable.create!( :document_class => 'Attribute', :key => 'major', :en => 'Major', :zh_tw => '主修', :parent_id => var_2_2.id )
|
||||
var_2_2_3 = I18nVariable.create!( :document_class => 'Attribute', :key => 'thesis_subject', :en => 'Thesis subject', :zh_tw => '論文題目', :parent_id => var_2_2.id )
|
||||
var_7 = I18nVariable.create!( :document_class => 'Info', :key => 'profile', :en => 'Profile', :zh_tw => '個人檔案' )
|
||||
var_8 = I18nVariable.create!( :document_class => 'Attribute', :key => 'last_name', :en => 'Last name', :zh_tw => '姓氏', :parent_id => var_7.id )
|
||||
var_9 = I18nVariable.create!( :document_class => 'Attribute', :key => 'first_name', :en => 'First name', :zh_tw => '名字', :parent_id => var_7.id )
|
||||
var_10 = I18nVariable.create!( :document_class => 'Home', :key => 'home', :en => 'Homepage', :zh_tw => '首頁')
|
||||
var_11 = I18nVariable.create!( :document_class => 'Page', :key => 'about', :en => 'About', :zh_tw => '關於我們' )
|
||||
var_12 = I18nVariable.create!( :document_class => 'Link', :key => 'google', :en => 'Google', :zh_tw => 'Google' )
|
||||
var_13 = I18nVariable.create!( :document_class => 'PagePart', :key => 'main_content', :en => 'This is the homepage', :zh_tw => '這是首頁', :parent_id => var_10.id )
|
||||
var_14 = I18nVariable.create!( :document_class => 'PagePart', :key => 'main_content', :en => 'This is about', :zh_tw => '這是關於', :parent_id => var_11.id )
|
||||
|
||||
# User roles
|
||||
r_1 = Role.new( :key => 'teacher', :i18n_variable => var_1, :built_in => true )
|
||||
sr_1_1 = r_1.sub_roles.build( :key => 'good_teacher', :i18n_variable => var_1_1, :built_in => true )
|
||||
sr_1_1.attribute_fields.build( :key => 'field', :locale => true, :i18n_variable => var_1_1_1, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
sr_1_1.attribute_fields.build( :key => 'department', :locale => true, :i18n_variable => var_1_1_2, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
sr_1_2 = r_1.sub_roles.build( :key => 'bad_teacher', :i18n_variable => var_1_2 )
|
||||
sr_1_2.attribute_fields.build( :key => 'field', :locale => true, :i18n_variable => var_1_2_1, :markup => 'text_field', :list_options => [] )
|
||||
sr_1_2.attribute_fields.build( :key => 'department', :locale => true, :i18n_variable => var_1_2_2, :markup => 'text_field', :list_options => [] )
|
||||
sr_1_2.attribute_fields.build( :key => 'speciality', :locale => true, :i18n_variable => var_1_2_3, :markup => 'text_field', :list_options => [] )
|
||||
r_1.save!
|
||||
r_2 = Role.new( :key => 'student', :i18n_variable => var_2 )
|
||||
sr_2_1 = r_2.sub_roles.build( :key => 'undergraduate', :i18n_variable => var_2_1 )
|
||||
sr_2_1.attribute_fields.build( :key => 'department', :locale => true, :i18n_variable => var_2_1_1, :markup => 'text_field', :list_options => [] )
|
||||
sr_2_1.attribute_fields.build( :key => 'major', :locale => true, :i18n_variable => var_2_1_2, :markup => 'text_field', :list_options => [] )
|
||||
sr_2_2 = r_2.sub_roles.build( :key => 'graduate', :i18n_variable => var_2_2 )
|
||||
sr_2_2.attribute_fields.build( :key => 'department', :locale => true, :i18n_variable => var_2_2_1, :markup => 'text_field', :list_options => [] )
|
||||
sr_2_2.attribute_fields.build( :key => 'major', :locale => true, :i18n_variable => var_2_2_2, :markup => 'text_field', :list_options => [] )
|
||||
sr_2_2.attribute_fields.build( :key => 'thesis_subject', :locale => true, :i18n_variable => var_2_2_3, :markup => 'text_field', :list_options => [] )
|
||||
r_2.save!
|
||||
|
||||
# User info
|
||||
i_1 = Info.new( :key => 'profile', :i18n_variable => var_7, :built_in => true )
|
||||
i_1.attribute_fields.build( :key => 'last_name', :locale => true, :i18n_variable => var_8, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
i_1.attribute_fields.build( :key => 'first_name', :locale => true, :i18n_variable => var_9, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
i_1.save!
|
||||
|
||||
|
||||
# TODO: modify for the new model
|
||||
urm_1 = UserRoleModel.new( :key => 'teacher', :i18n_variable_id => var_1.id, :built_in => true )
|
||||
urm_1.attribute_models.build( :key => 'discipline', :locale => true, :i18n_variable_id => var_2.id, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
urm_1.attribute_models.build( :key => 'department', :locale => true, :i18n_variable_id => var_3.id, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
urm_1.save!
|
||||
urm_2 = UserRoleModel.new( :key => 'student', :i18n_variable_id => var_4.id )
|
||||
urm_2.attribute_models.build( :key => 'department', :locale => true, :i18n_variable_id => var_5.id, :markup => 'text_field', :list_options => [] )
|
||||
urm_2.attribute_models.build( :key => 'major', :locale => true, :i18n_variable_id => var_6.id, :markup => 'text_field', :list_options => [] )
|
||||
urm_2.save!
|
||||
uim_1 = UserInfoModel.new( :key => 'profile', :i18n_variable_id => var_7.id, :built_in => true )
|
||||
uim_1.attribute_models.build( :key => 'last_name', :locale => true, :i18n_variable_id => var_8.id, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
uim_1.attribute_models.build( :key => 'first_name', :locale => true, :i18n_variable_id => var_9.id, :markup => 'text_field', :list_options => [], :built_in => true )
|
||||
uim_1.save!
|
||||
|
||||
|
||||
# layout = Layout.create!( :name => 'root', :description => 'root', :content => File.open("#{Rails.root}/lib/template/root.layout").read )
|
||||
# layout.layout_parts.create!( :name => 'header', :content => File.open("#{Rails.root}/lib/template/nav.snippet").read )
|
||||
# layout.layout_parts.create!( :name => 'main_content', :editable => true )
|
||||
# layout.layout_parts.create!( :name => 'footer', :content => File.open("#{Rails.root}/lib/template/footer.snippet").read )
|
||||
#
|
||||
# home = Page.create!( :i18n_variable_id => var_10.id, :layout_id => layout.id, :name => 'home', :is_published => true )
|
||||
# home.page_parts.create!( :name => 'main_content', :content => File.open("#{Rails.root}/lib/template/home.page").read, :kind => 'text', :i18n_variable_id => var_13.id )
|
||||
#
|
||||
# about = Page.create!( :i18n_variable_id => var_11.id, :layout_id => layout.id, :name => 'about', :is_published => true, :parent_id => home.id )
|
||||
# about.page_parts.create!( :name => 'main_content', :content => File.open("#{Rails.root}/lib/template/about.page").read, :kind => 'text', :i18n_variable_id => var_14.id )
|
||||
|
||||
# Link.create!( :i18n_variable_id => var_12.id, :name => 'google', :is_published => true, :parent_id => home.id, :url => 'www.google.com' )
|
||||
#
|
||||
# ["nav", "footer"].each do |page_name|
|
||||
# Snippet.create!( :name => page_name, :parent_id => home.id, :content => File.open("#{Rails.root}/lib/template/#{page_name}.snippet").read )
|
||||
# end
|
||||
|
||||
design = Design.new(:title => "Fraisier", :author => "Paul", :intro => "Strawberry cake")
|
||||
|
||||
@@ -112,28 +118,25 @@ namespace :dev do
|
||||
|
||||
home = Page.create!( :i18n_variable_id => var_10.id, :design_id => design_1.id, :name => 'home', :is_published => true, :theme_id => theme.id )
|
||||
home.page_parts.create!( :name => 'content_1', :content => File.open("#{Rails.root}/lib/template/home.page").read, :kind => 'text', :i18n_variable_id => var_13.id )
|
||||
|
||||
ModuleApp.create.from_json(File.open("#{Rails.root}/vendor/built_in_modules/NewBlog/NewBlog.json").read).save
|
||||
Post.create(:title=>"1st post",:body=>"Long long time ago.....")
|
||||
Post.create(:title=>"2ec post",:body=>"And?.....")
|
||||
|
||||
|
||||
|
||||
user = User.create( :email => 'chris@rulingcom.com', :password => 'password', :password_confirmation => 'password', :admin => true, :active_role => 'teacher' )
|
||||
user_info = UserInfo.create( :user_id => user.id, :key => 'profile' )
|
||||
user_role = UserRole.create( :user_id => user.id, :key => 'teacher' )
|
||||
AttributeValue.create( :user_attribute_id => user_info.id, :key => 'first_name', :en => 'Christophe', :zh_tw => '順發' )
|
||||
AttributeValue.create( :user_attribute_id => user_info.id, :key => 'last_name', :en => 'Vilayphiou', :zh_tw => '林' )
|
||||
AttributeValue.create( :user_attribute_id => user_role.id, :key => 'discipline', :en => 'Computer Architecture', :zh_tw => '計算機系統結構' )
|
||||
AttributeValue.create( :user_attribute_id => user_role.id, :key => 'department', :en => 'Computer Science', :zh_tw => '計算機科學' )
|
||||
user = User.create( :email => 'chris@rulingcom.com', :password => 'password', :password_confirmation => 'password', :admin => true, :role_id => r_1.id, :sub_role_ids => [sr_1_2.id] )
|
||||
AttributeValue.create( :user => user, :attribute_field => i_1.attribute_fields[0], :key => 'first_name', :en => 'Christophe', :zh_tw => '順發' )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => i_1.attribute_fields[1].id, :key => 'last_name', :en => 'Vilayphiou', :zh_tw => '林' )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => sr_1_2.attribute_fields[0].id, :key => 'field', :en => 'Computer Architecture', :zh_tw => '計算機系統結構' )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => sr_1_2.attribute_fields[1].id, :key => 'department', :en => 'Computer Science', :zh_tw => '計算機科學' )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => sr_1_2.attribute_fields[2].id, :key => 'speciality', :en => 'HSR', :zh_tw => '高鐵' )
|
||||
|
||||
|
||||
user = User.create( :email => 'matt@rulingcom.com', :password => 'password', :password_confirmation => 'password', :admin => true, :active_role => 'student' )
|
||||
user_info = UserInfo.create( :user_id => user.id, :key => 'profile' )
|
||||
user_role = UserRole.create( :user_id => user.id, :key => 'student' )
|
||||
AttributeValue.create( :user_attribute_id => user_info.id, :key => 'first_name', :en => 'Matt', :zh_tw => '儒淵' )
|
||||
AttributeValue.create( :user_attribute_id => user_info.id, :key => 'last_name', :en => 'Fu', :zh_tw => '傅' )
|
||||
AttributeValue.create( :user_attribute_id => user_role.id, :key => 'major', :en => 'Information management', :zh_tw => '信息化管理' )
|
||||
AttributeValue.create( :user_attribute_id => user_role.id, :key => 'department', :en => 'Computer Science', :zh_tw => '計算機科學' )
|
||||
user = User.create( :email => 'matt@rulingcom.com', :password => 'password', :password_confirmation => 'password', :admin => true, :role_id => r_2.id, :sub_role_ids => [sr_2_1.id ] )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => i_1.attribute_fields[0].id, :key => 'first_name', :en => 'Matt', :zh_tw => '儒淵' )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => i_1.attribute_fields[1].id, :key => 'last_name', :en => 'Fu', :zh_tw => '傅' )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => sr_2_1.attribute_fields[0].id, :key => 'major', :en => 'Information management', :zh_tw => '信息化管理' )
|
||||
AttributeValue.create( :user_id => user.id, :attribute_field_id => sr_2_1.attribute_fields[1].id, :key => 'department', :en => 'Computer Science', :zh_tw => '計算機科學' )
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user