Commit 5827dbd831603cc3672af80021ffb9fd240cab36
1 parent
2f094f54
Exists in
master
and in
29 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 | 5 | before_filter :detect_stuff_by_domain |
6 | 6 | attr_reader :virtual_community |
7 | 7 | |
8 | + before_filter :load_boxes | |
8 | 9 | #TODO To diplay the content we need a variable called '@boxes'. |
9 | 10 | #This variable is a set of boxes belongs to a owner |
10 | 11 | #We have to see a better way to do that |
11 | - before_filter :load_boxes | |
12 | 12 | def load_boxes |
13 | 13 | if Profile.exists?(1) |
14 | 14 | owner = Profile.find(1) |
... | ... | @@ -17,11 +17,25 @@ class ApplicationController < ActionController::Base |
17 | 17 | end |
18 | 18 | |
19 | 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 | 22 | def load_template |
21 | 23 | if Profile.exists?(1) |
22 | - owner = Profile.find(1) | |
24 | + @owner = Profile.find(1) | |
23 | 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 | 39 | end |
26 | 40 | |
27 | 41 | protected | ... | ... |
app/helpers/application_helper.rb
1 | 1 | # Methods added to this helper will be available to all templates in the application. |
2 | 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 | 6 | REJECTED_DIRS = %w[ |
4 | 7 | . |
5 | 8 | .. |
6 | 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 | 30 | # This method expect an array of boxes and the content retuned of a controller action |
10 | 31 | # It will generate the boxes div according the yaml definition |
11 | 32 | def display_boxes(boxes, main_content = "") |
... | ... | @@ -31,9 +52,9 @@ module ApplicationHelper |
31 | 52 | #TODO I think that implements this idea describe above it's good. Let's discuss about it. |
32 | 53 | # OBS: If no files are found in path the default template is used |
33 | 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 | 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 | 58 | end |
38 | 59 | end |
39 | 60 | |
... | ... | @@ -46,9 +67,9 @@ module ApplicationHelper |
46 | 67 | #TODO I think that implements this idea describe above it's good. Let's discuss about it. |
47 | 68 | # OBS: If no files are found in path the default template is used |
48 | 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 | 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 | 73 | end |
53 | 74 | end |
54 | 75 | |
... | ... | @@ -74,43 +95,5 @@ module ApplicationHelper |
74 | 95 | ) |
75 | 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 | 99 | end | ... | ... |
... | ... | @@ -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 | 11 | <%= link_to _('Show Layout'), :controller => 'home' %> |
12 | 12 | <%= link_to _('Edit Layout'), :controller => 'edit_template' %> |
13 | 13 | |
14 | + <%= select_template(@owner, @chosen_template) %> | |
15 | + | |
14 | 16 | <%= display_boxes(@boxes, yield) %> |
15 | 17 | |
18 | + <div id="footer"> | |
19 | + footer content | |
20 | + </div> | |
21 | + | |
16 | 22 | </body> |
17 | 23 | |
18 | 24 | </html> | ... | ... |
1.75 KB
2.08 KB
... | ... | @@ -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 | + | ... | ... |