Commit 5827dbd831603cc3672af80021ffb9fd240cab36
1 parent
2f094f54
Exists in
master
and in
28 other branches
ActionItem0: adding simple template and making struture to change templates
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@68 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
8 changed files
with
143 additions
and
45 deletions
Show diff stats
app/controllers/application.rb
@@ -5,10 +5,10 @@ class ApplicationController < ActionController::Base | @@ -5,10 +5,10 @@ class ApplicationController < ActionController::Base | ||
5 | before_filter :detect_stuff_by_domain | 5 | before_filter :detect_stuff_by_domain |
6 | attr_reader :virtual_community | 6 | attr_reader :virtual_community |
7 | 7 | ||
8 | + before_filter :load_boxes | ||
8 | #TODO To diplay the content we need a variable called '@boxes'. | 9 | #TODO To diplay the content we need a variable called '@boxes'. |
9 | #This variable is a set of boxes belongs to a owner | 10 | #This variable is a set of boxes belongs to a owner |
10 | #We have to see a better way to do that | 11 | #We have to see a better way to do that |
11 | - before_filter :load_boxes | ||
12 | def load_boxes | 12 | def load_boxes |
13 | if Profile.exists?(1) | 13 | if Profile.exists?(1) |
14 | owner = Profile.find(1) | 14 | owner = Profile.find(1) |
@@ -17,11 +17,25 @@ class ApplicationController < ActionController::Base | @@ -17,11 +17,25 @@ class ApplicationController < ActionController::Base | ||
17 | end | 17 | end |
18 | 18 | ||
19 | before_filter :load_template | 19 | before_filter :load_template |
20 | + # Load the template belongs to a Profile and set it at @chosen_template variable. | ||
21 | + # If no profile exist the @chosen_template variable is set to 'default' | ||
20 | def load_template | 22 | def load_template |
21 | if Profile.exists?(1) | 23 | if Profile.exists?(1) |
22 | - owner = Profile.find(1) | 24 | + @owner = Profile.find(1) |
23 | end | 25 | end |
24 | - @chosen_template = owner.nil? ? "default" : owner.template | 26 | + @chosen_template = @owner.nil? ? "default" : @owner.template |
27 | + end | ||
28 | + | ||
29 | + def set_default_template | ||
30 | + p = Profile.find(params[:object_id]) | ||
31 | + set_template(p,params[:template_name]) | ||
32 | + end | ||
33 | + | ||
34 | + private | ||
35 | + | ||
36 | + def set_template(object, template_name) | ||
37 | + object.template = template_name | ||
38 | + object.save | ||
25 | end | 39 | end |
26 | 40 | ||
27 | protected | 41 | protected |
app/helpers/application_helper.rb
1 | # Methods added to this helper will be available to all templates in the application. | 1 | # Methods added to this helper will be available to all templates in the application. |
2 | module ApplicationHelper | 2 | module ApplicationHelper |
3 | + | ||
4 | + # Directories to be rejected of the directories list when needed. | ||
5 | + # TODO I think the better way is create a Dir class method that returns a list of files of a given path | ||
3 | REJECTED_DIRS = %w[ | 6 | REJECTED_DIRS = %w[ |
4 | . | 7 | . |
5 | .. | 8 | .. |
6 | .svn | 9 | .svn |
7 | ] | 10 | ] |
8 | 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) | ||
15 | + 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 | + end | ||
21 | + | ||
22 | + def change_tempate(observed_field, object) | ||
23 | + observe_field( observed_field, | ||
24 | + :url => {:action => 'set_default_template'}, | ||
25 | + :with =>"'template_name=' + escape(value) + '&object_id=' + escape(#{object.id})", | ||
26 | + :complete => "document.location.reload();" | ||
27 | + ) | ||
28 | + end | ||
29 | + | ||
9 | # This method expect an array of boxes and the content retuned of a controller action | 30 | # This method expect an array of boxes and the content retuned of a controller action |
10 | # It will generate the boxes div according the yaml definition | 31 | # It will generate the boxes div according the yaml definition |
11 | def display_boxes(boxes, main_content = "") | 32 | def display_boxes(boxes, main_content = "") |
@@ -31,9 +52,9 @@ module ApplicationHelper | @@ -31,9 +52,9 @@ module ApplicationHelper | ||
31 | #TODO I think that implements this idea describe above it's good. Let's discuss about it. | 52 | #TODO I think that implements this idea describe above it's good. Let's discuss about it. |
32 | # OBS: If no files are found in path the default template is used | 53 | # OBS: If no files are found in path the default template is used |
33 | def stylesheet_link_tag_template(template_name) | 54 | def stylesheet_link_tag_template(template_name) |
34 | - d = Dir.new("public/templates/#{template_name}/stylesheets/") | 55 | + d = Dir.new("public/templates/#{template_name}/stylesheets/").to_a - REJECTED_DIRS |
35 | d.map do |filename| | 56 | d.map do |filename| |
36 | - stylesheet_link_tag("/templates/#{template_name}/stylesheets/#{filename}") unless REJECTED_DIRS.include?(filename.gsub(/.css/,"")) | 57 | + stylesheet_link_tag("/templates/#{template_name}/stylesheets/#{filename}") |
37 | end | 58 | end |
38 | end | 59 | end |
39 | 60 | ||
@@ -46,9 +67,9 @@ module ApplicationHelper | @@ -46,9 +67,9 @@ module ApplicationHelper | ||
46 | #TODO I think that implements this idea describe above it's good. Let's discuss about it. | 67 | #TODO I think that implements this idea describe above it's good. Let's discuss about it. |
47 | # OBS: If no files are found in path the default template is used | 68 | # OBS: If no files are found in path the default template is used |
48 | def javascript_include_tag_template(template_name) | 69 | def javascript_include_tag_template(template_name) |
49 | - d = Dir.new("public/templates/#{template_name}/javascripts/") | 70 | + d = Dir.new("public/templates/#{template_name}/javascripts/").to_a - REJECTED_DIRS |
50 | d.map do |filename| | 71 | d.map do |filename| |
51 | - javascript_include_tag("/templates/#{template_name}/javascripts/#{filename}") unless REJECTED_DIRS.include?(filename.gsub(/.js/,"")) | 72 | + javascript_include_tag("/templates/#{template_name}/javascripts/#{filename}") |
52 | end | 73 | end |
53 | end | 74 | end |
54 | 75 | ||
@@ -74,43 +95,5 @@ module ApplicationHelper | @@ -74,43 +95,5 @@ module ApplicationHelper | ||
74 | ) | 95 | ) |
75 | end | 96 | end |
76 | 97 | ||
77 | - # Shows the blocks as defined in <tt>show_blocks</tt> adding the sortable and draggable elements. | ||
78 | - # In this case the layout can be manipulated | ||
79 | - def edit_blocks(box, main_content = "") | ||
80 | - blocks = box.blocks_sort_by_position | ||
81 | - content_tag(:ul, | ||
82 | - blocks.map {|b| | ||
83 | - content_tag(:li, b.main? ? main_content : b.to_html , :class =>"block_item_box_#{box.number}" , :id => "block_#{b.id}" ) + draggable("block_#{b.id}") | ||
84 | - }, :id => "sort_#{box.number}" | ||
85 | - ) + drag_drop_items(box) + sortable_block(box.number) | ||
86 | - end | ||
87 | - | ||
88 | - # Allows the biven box to have sortable elements | ||
89 | - def sortable_block(box_number) | ||
90 | - sortable_element "sort_#{box_number}", | ||
91 | - :url => {:action => 'sort_box', :box_number => box_number }, | ||
92 | - :complete => visual_effect(:highlight, "sort_#{box_number}") | ||
93 | - end | ||
94 | - | ||
95 | - # Allows an element item to be draggable | ||
96 | - def draggable(item) | ||
97 | - draggable_element(item, :ghosting=>true, :revert=>true) | ||
98 | - end | ||
99 | - | ||
100 | - # Allows an draggable element change between diferrents boxes | ||
101 | - def drag_drop_items(box) | ||
102 | - boxes = Box.find_not_box(box.id) | ||
103 | - | ||
104 | - boxes.map{ |b| | ||
105 | - drop_receiving_element("box_#{box.number}", | ||
106 | - :accept => "block_item_box_#{b.number}", | ||
107 | - :complete => "$('spinner').hide();", | ||
108 | - :before => "$('spinner').show();", | ||
109 | - :hoverclass => 'hover', | ||
110 | - :with => "'block=' + encodeURIComponent(element.id.split('_').last())", | ||
111 | - :url => {:action=>:change_box, :box_id => box.id}) | ||
112 | - }.to_s | ||
113 | - end | ||
114 | - | ||
115 | 98 | ||
116 | end | 99 | end |
@@ -0,0 +1,45 @@ | @@ -0,0 +1,45 @@ | ||
1 | +# Methods added to this helper will be available to all templates in the application. | ||
2 | +module EditTemplateHelper | ||
3 | + | ||
4 | + private | ||
5 | + | ||
6 | + # Shows the blocks as defined in <tt>show_blocks</tt> adding the sortable and draggable elements. | ||
7 | + # In this case the layout can be manipulated | ||
8 | + def edit_blocks(box, main_content = "") | ||
9 | + blocks = box.blocks_sort_by_position | ||
10 | + content_tag(:ul, box.name + | ||
11 | + blocks.map {|b| | ||
12 | + content_tag(:li, b.name, :class =>"block_item_box_#{box.number}" , :id => "block_#{b.id}" ) + draggable("block_#{b.id}") | ||
13 | + }.to_s, :id => "sort_#{box.number}" | ||
14 | + ) + drag_drop_items(box) + sortable_block(box.number) | ||
15 | + end | ||
16 | + | ||
17 | + # Allows the biven box to have sortable elements | ||
18 | + def sortable_block(box_number) | ||
19 | + sortable_element "sort_#{box_number}", | ||
20 | + :url => {:action => 'sort_box', :box_number => box_number }, | ||
21 | + :complete => visual_effect(:highlight, "sort_#{box_number}") | ||
22 | + end | ||
23 | + | ||
24 | + # Allows an element item to be draggable | ||
25 | + def draggable(item) | ||
26 | + draggable_element(item, :ghosting=>true, :revert=>true) | ||
27 | + end | ||
28 | + | ||
29 | + # Allows an draggable element change between diferrents boxes | ||
30 | + def drag_drop_items(box) | ||
31 | + boxes = Box.find_not_box(box.id) | ||
32 | + | ||
33 | + boxes.map{ |b| | ||
34 | + drop_receiving_element("box_#{box.number}", | ||
35 | + :accept => "block_item_box_#{b.number}", | ||
36 | + :complete => "$('spinner').hide();", | ||
37 | + :before => "$('spinner').show();", | ||
38 | + :hoverclass => 'hover', | ||
39 | + :with => "'block=' + encodeURIComponent(element.id.split('_').last())", | ||
40 | + :url => {:action=>:change_box, :box_id => box.id}) | ||
41 | + }.to_s | ||
42 | + end | ||
43 | + | ||
44 | + | ||
45 | +end |
app/views/layouts/application.rhtml
@@ -11,8 +11,14 @@ | @@ -11,8 +11,14 @@ | ||
11 | <%= link_to _('Show Layout'), :controller => 'home' %> | 11 | <%= link_to _('Show Layout'), :controller => 'home' %> |
12 | <%= link_to _('Edit Layout'), :controller => 'edit_template' %> | 12 | <%= link_to _('Edit Layout'), :controller => 'edit_template' %> |
13 | 13 | ||
14 | + <%= select_template(@owner, @chosen_template) %> | ||
15 | + | ||
14 | <%= display_boxes(@boxes, yield) %> | 16 | <%= display_boxes(@boxes, yield) %> |
15 | 17 | ||
18 | + <div id="footer"> | ||
19 | + footer content | ||
20 | + </div> | ||
21 | + | ||
16 | </body> | 22 | </body> |
17 | 23 | ||
18 | </html> | 24 | </html> |
1.75 KB
2.08 KB
@@ -0,0 +1,48 @@ | @@ -0,0 +1,48 @@ | ||
1 | +.edit_mode .hover { | ||
2 | + background-color: blue; | ||
3 | + border: 2px dotted red; | ||
4 | +} | ||
5 | + | ||
6 | +.edit_mode .hover ul li { | ||
7 | + border: 2px dotted yellow; | ||
8 | +} | ||
9 | + | ||
10 | +.edit_mode #box_1 ul, .edit_mode #box_2 ul, .edit_mode #box_3 ul { | ||
11 | + list-style: none; | ||
12 | + cursor: -moz-grab; | ||
13 | + margin: 10px; | ||
14 | + padding:0px; | ||
15 | + | ||
16 | +} | ||
17 | + | ||
18 | +.edit_mode #box_1 ul li, .edit_mode #box_2 ul li, .edit_mode #box_3 ul li { | ||
19 | + list-style: none; | ||
20 | + cursor: -moz-grab; | ||
21 | + border: 5px solid black; | ||
22 | + margin: 15px; | ||
23 | +} | ||
24 | + | ||
25 | +.edit_mode #box_1, .edit_mode #box_2, .edit_mode #box_3 { | ||
26 | + border: 3px solid brown; | ||
27 | +} | ||
28 | + | ||
29 | +#box_1 { | ||
30 | + width: 200px; | ||
31 | + float: left; | ||
32 | +} | ||
33 | +#box_2 { | ||
34 | + width: 600px; | ||
35 | + float: left; | ||
36 | + margin: 0px 10px 0px 10px; | ||
37 | +} | ||
38 | +#box_3 { | ||
39 | + width: 400px; | ||
40 | + | ||
41 | + clear: both; | ||
42 | +} | ||
43 | + | ||
44 | +#footer{ | ||
45 | + font-size: 30px; | ||
46 | + background: #FFFFFF url('../images/ufba_logo.png') repeat-x; | ||
47 | +} | ||
48 | + |