Commit 9526f3aa5d61aeb3ab5d95e3b5872c5429cf93a2
1 parent
abc8b42c
Exists in
master
and in
29 other branches
ActionItem0: putting selection of themes and icons on system
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@110 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
6 changed files
with
103 additions
and
64 deletions
Show diff stats
app/controllers/application.rb
... | ... | @@ -2,8 +2,9 @@ |
2 | 2 | # available in all controllers. |
3 | 3 | class ApplicationController < ActionController::Base |
4 | 4 | |
5 | - TEMPLATE_DIR_PATH = 'public/templates' | |
6 | - ICON_DIR_PATH = 'public/icons' | |
5 | + ICONS_DIR_PATH = "#{RAILS_ROOT}/public/icons" | |
6 | + THEME_DIR_PATH = "#{RAILS_ROOT}/public/themes" | |
7 | + | |
7 | 8 | |
8 | 9 | before_filter :detect_stuff_by_domain |
9 | 10 | attr_reader :virtual_community |
... | ... | @@ -17,49 +18,63 @@ class ApplicationController < ActionController::Base |
17 | 18 | if Profile.exists?(1) |
18 | 19 | @owner = Profile.find(1) |
19 | 20 | end |
20 | - @chosen_template = @owner.nil? ? "default" : @owner.template | |
21 | + @chosen_template = @owner.template.nil? ? "default" : @owner.template | |
22 | + self.chosen_template = @chosen_template | |
21 | 23 | end |
22 | 24 | |
23 | 25 | before_filter :load_boxes |
24 | - #Load a set of boxes belongs to a owner. We have to situations. | |
25 | - # 1 - The owner has equal or more boxes that boxes defined in template. | |
26 | - # The system limit the max number of boxes to the number permited in template | |
27 | - # 2 - The owner there isn't enough box that defined in template | |
28 | - # The system create the boxes needed to use the current template | |
29 | - def load_boxes | |
30 | - raise _('Template not found') if @chosen_template.nil? | |
31 | - n = boxes_by_template(@chosen_template) | |
32 | - @boxes = Array.new | |
33 | - if Profile.exists?(1) | |
34 | - owner = Profile.find(1) | |
35 | - @boxes = owner.boxes | |
36 | - end | |
37 | 26 | |
38 | - if @boxes.length >= n | |
39 | - @boxes = @boxes.first(n) | |
40 | - else | |
41 | - @boxes = @boxes | |
27 | + before_filter :load_theme | |
28 | + # Load the theme belongs to a Profile and set it at @chosen_theme variable. | |
29 | + # If no profile exist the @chosen_theme variable is set to 'default' | |
30 | + def load_theme | |
31 | + if Profile.exists?(1) | |
32 | + @owner = Profile.find(1) | |
42 | 33 | end |
43 | - | |
34 | + @chosen_theme = @owner.theme.nil? ? "default" : @owner.theme | |
44 | 35 | end |
45 | 36 | |
46 | - def boxes_by_template(template) | |
47 | - f = YAML.load_file("#{RAILS_ROOT}/public/templates/default/default.yml") | |
48 | - number_of_boxes = f[template.to_s]["number_of_boxes"] | |
49 | - raise _("The file #{template}.yml it's not a valid template filename") if number_of_boxes.nil? | |
50 | - number_of_boxes | |
37 | + before_filter :load_icons_theme | |
38 | + # Load the icons belongs to a Profile and set it at @chosen_icons_theme variable. | |
39 | + # If no profile exist the @chosen_icons_theme variable is set to 'default' | |
40 | + def load_icons_theme | |
41 | + if Profile.exists?(1) | |
42 | + @owner = Profile.find(1) | |
43 | + end | |
44 | + @chosen_icons_theme = @owner.icons_theme.nil? ? "default" : @owner.icons_theme | |
51 | 45 | end |
52 | 46 | |
53 | 47 | |
48 | + # Set the default template to the profile | |
54 | 49 | def set_default_template |
55 | 50 | p = Profile.find(params[:object_id]) |
56 | 51 | set_template(p,params[:template_name]) |
57 | 52 | end |
58 | 53 | |
54 | + # Set the default theme to the profile | |
55 | + def set_default_theme | |
56 | + p = Profile.find(params[:object_id]) | |
57 | + set_theme(p,params[:theme_name]) | |
58 | + end | |
59 | + | |
60 | + # Set the default icons theme to the profile | |
61 | + def set_default_icons_theme | |
62 | + p = Profile.find(params[:object_id]) | |
63 | + set_icons_theme(p,params[:icons_theme_name]) | |
64 | + end | |
65 | + | |
66 | + | |
59 | 67 | private |
60 | 68 | |
61 | - def set_template(object, template_name) | |
62 | - object.template = template_name | |
69 | + # Set to the owner the theme choosed | |
70 | + def set_theme(object, theme_name) | |
71 | + object.theme = theme_name | |
72 | + object.save | |
73 | + end | |
74 | + | |
75 | + # Set to the owner the icons theme choosed | |
76 | + def set_icons_theme(object,icons_theme_name) | |
77 | + object.icons_theme = icons_theme_name | |
63 | 78 | object.save |
64 | 79 | end |
65 | 80 | ... | ... |
app/controllers/edit_template_controller.rb
app/helpers/application_helper.rb
... | ... | @@ -9,51 +9,72 @@ module ApplicationHelper |
9 | 9 | .svn |
10 | 10 | ] |
11 | 11 | |
12 | - # Generate a select option to choose one of the available templates. | |
13 | - # The available templates are those in 'public/templates' | |
14 | - def select_template(object, chosen_template = nil) | |
12 | + ICONS_DIR_PATH = "#{RAILS_ROOT}/public/icons" | |
13 | + THEME_DIR_PATH = "#{RAILS_ROOT}/public/themes" | |
14 | + | |
15 | + | |
16 | + # Generate a select option to choose one of the available themes. | |
17 | + # The available themes are those in 'public/themes' | |
18 | + def select_theme(object, chosen_theme = nil) | |
15 | 19 | return '' if object.nil? |
16 | - available_templates = Dir.new('public/templates').to_a - REJECTED_DIRS | |
17 | - template_options = options_for_select(available_templates.map{|template| [template, template] }, chosen_template) | |
18 | - select_tag('template_name', template_options ) + | |
19 | - change_tempate('template_name', object) | |
20 | + available_themes = Dir.new("#{THEME_DIR_PATH}").to_a - REJECTED_DIRS | |
21 | + theme_options = options_for_select(available_themes.map{|theme| [theme, theme] }, chosen_theme) | |
22 | + select_tag('theme_name', theme_options ) + | |
23 | + change_theme('theme_name', object) | |
20 | 24 | end |
21 | 25 | |
22 | - def change_tempate(observed_field, object) | |
26 | + # Generate a observer to reload a page when a theme is selected | |
27 | + def change_theme(observed_field, object) | |
23 | 28 | observe_field( observed_field, |
24 | - :url => {:action => 'set_default_template'}, | |
25 | - :with =>"'template_name=' + escape(value) + '&object_id=' + escape(#{object.id})", | |
29 | + :url => {:action => 'set_default_theme'}, | |
30 | + :with =>"'theme_name=' + escape(value) + '&object_id=' + escape(#{object.id})", | |
26 | 31 | :complete => "document.location.reload();" |
27 | 32 | ) |
28 | 33 | end |
29 | 34 | |
30 | - # Load all the css files of a existing template with the template_name passed as argument. | |
31 | - # | |
32 | - # The files loaded are in the path: | |
33 | - # | |
34 | - # 'public/templates/#{template_name}/stylesheets/*' | |
35 | - #TODO I think that implements this idea describe above it's good. Let's discuss about it. | |
36 | - # OBS: If no files are found in path the default template is used | |
37 | - def stylesheet_link_tag_template(template_name) | |
38 | - d = Dir.new("public/templates/#{template_name}/stylesheets/").to_a - REJECTED_DIRS | |
39 | - d.map do |filename| | |
40 | - stylesheet_link_tag("/templates/#{template_name}/stylesheets/#{filename}") | |
41 | - end | |
35 | + | |
36 | + # Generate a select option to choose one of the available icons themes. | |
37 | + # The available icons themes are those in 'public/icons' | |
38 | + def select_icons_theme(object, chosen_icons_theme = nil) | |
39 | + return '' if object.nil? | |
40 | + available_icons_themes = Dir.new("#{ICONS_DIR_PATH}").to_a - REJECTED_DIRS | |
41 | + icons_theme_options = options_for_select(available_icons_themes.map{|icons_theme| [icons_theme, icons_theme] }, chosen_icons_theme) | |
42 | + select_tag('icons_theme_name', icons_theme_options ) + | |
43 | + change_icons_theme('icons_theme_name', object) | |
42 | 44 | end |
43 | 45 | |
44 | - # Load all the javascript files of a existing template with the template_name passed as argument. | |
46 | + # Generate a observer to reload a page when a icons theme is selected | |
47 | + def change_icons_theme(observed_field, object) | |
48 | + observe_field( observed_field, | |
49 | + :url => {:action => 'set_default_icons_theme'}, | |
50 | + :with =>"'icons_theme_name=' + escape(value) + '&object_id=' + escape(#{object.id})", | |
51 | + :complete => "document.location.reload();" | |
52 | + ) | |
53 | + end | |
54 | + | |
55 | + #Display a given icon passed as argument | |
56 | + #The icon path should be '/icons/{icons_theme}/{icon_image}' | |
57 | + def display_icon(icon , icons_theme = "default", options = {}) | |
58 | + image_tag("/icons/#{icons_theme}/#{icon}", options) | |
59 | + end | |
60 | + | |
61 | + # Load all the css files of a existing theme with the theme_name passed as argument. | |
45 | 62 | # |
46 | 63 | # The files loaded are in the path: |
47 | 64 | # |
48 | - # 'public/templates/#{template_name}/javascripts/*' | |
49 | - # | |
50 | - #TODO I think that implements this idea describe above it's good. Let's discuss about it. | |
51 | - # OBS: If no files are found in path the default template is used | |
52 | - def javascript_include_tag_template(template_name) | |
53 | - d = Dir.new("public/templates/#{template_name}/javascripts/").to_a - REJECTED_DIRS | |
65 | + # 'public/themes/#{theme_name}/*' | |
66 | + # If a invalid theme it's passed the 'default' theme is applied | |
67 | + def stylesheet_link_tag_theme(theme_name) | |
68 | + if !File.exists? "#{THEME_DIR_PATH}/#{theme_name}" | |
69 | + flash[:notice] = _("The theme %s it's not a valid theme") % theme_name | |
70 | + theme_name = 'default' | |
71 | + end | |
72 | + | |
73 | + d = Dir.new("#{THEME_DIR_PATH}/#{theme_name}/").to_a - REJECTED_DIRS | |
54 | 74 | d.map do |filename| |
55 | - javascript_include_tag("/templates/#{template_name}/javascripts/#{filename}") | |
75 | + stylesheet_link_tag("/themes/#{theme_name}/#{filename}") | |
56 | 76 | end |
57 | 77 | end |
58 | 78 | |
79 | + | |
59 | 80 | end | ... | ... |
app/views/edit_template/index.rhtml
... | ... | @@ -1 +0,0 @@ |
1 | -<h1> something</h1> |
app/views/home/index.rhtml
app/views/layouts/application.rhtml
... | ... | @@ -3,15 +3,23 @@ |
3 | 3 | <%= javascript_include_tag :defaults %> |
4 | 4 | <%= javascript_include_tag_template @chosen_template %> |
5 | 5 | <%= stylesheet_link_tag_template @chosen_template %> |
6 | + <%= stylesheet_link_tag_theme @chosen_theme %> | |
6 | 7 | |
7 | 8 | </head> |
8 | 9 | <body> |
10 | + | |
9 | 11 | <%= image_tag 'loading.gif', :id => 'spinner', :style => "display:none; float:right;" %> |
10 | 12 | |
11 | 13 | <%= link_to _('Show Layout'), :controller => 'home' %> |
12 | 14 | <%= link_to _('Edit Layout'), :controller => 'edit_template' %> |
13 | 15 | |
14 | 16 | <%= select_template(@owner, @chosen_template) %> |
17 | + <%= select_theme(@owner, @chosen_theme) %> | |
18 | + <%= select_icons_theme(@owner, @chosen_icons_theme) %> | |
19 | + | |
20 | + <%= display_icon('back', @chosen_icons_theme )%> | |
21 | + | |
22 | + <%= flash[:notice] %> | |
15 | 23 | |
16 | 24 | <%= display_boxes(@boxes, yield) %> |
17 | 25 | ... | ... |