Commit c47e2ba3715efa61e1e750123d70ca598a912789
Committed by
Antonio Terceiro
1 parent
70eccaa3
Exists in
master
and in
29 other branches
ActionItem741: now blocks can be hidden
Showing
11 changed files
with
91 additions
and
3 deletions
Show diff stats
app/controllers/box_organizer_controller.rb
... | ... | @@ -96,6 +96,13 @@ class BoxOrganizerController < ApplicationController |
96 | 96 | end |
97 | 97 | end |
98 | 98 | |
99 | + def toggle_visibility | |
100 | + @block = boxes_holder.blocks.find(params[:id]) | |
101 | + @block.visible = !@block.visible? | |
102 | + @block.save | |
103 | + redirect_to :action => 'index' | |
104 | + end | |
105 | + | |
99 | 106 | protected :boxes_editor? |
100 | 107 | |
101 | 108 | end | ... | ... |
app/helpers/boxes_helper.rb
... | ... | @@ -47,7 +47,11 @@ module BoxesHelper |
47 | 47 | end |
48 | 48 | |
49 | 49 | def display_box_content(box, main_content) |
50 | - box.blocks.map { |item| display_block(item, main_content) }.join("\n") + box_decorator.block_target(box) | |
50 | + box_decorator.select_blocks(box.blocks).map { |item| display_block(item, main_content) }.join("\n") + box_decorator.block_target(box) | |
51 | + end | |
52 | + | |
53 | + def select_blocks(arr) | |
54 | + arr | |
51 | 55 | end |
52 | 56 | |
53 | 57 | def display_block(block, main_content = nil) |
... | ... | @@ -59,7 +63,7 @@ module BoxesHelper |
59 | 63 | end |
60 | 64 | |
61 | 65 | options = { |
62 | - :class => classes = ['block', block.css_class_name ].uniq.join(' '), | |
66 | + :class => classes = ['block', block.css_classes ].uniq.join(' '), | |
63 | 67 | :id => "block-#{block.id}" |
64 | 68 | } |
65 | 69 | if ( block.respond_to? 'help' ) |
... | ... | @@ -103,6 +107,9 @@ module BoxesHelper |
103 | 107 | def self.block_edit_buttons(block) |
104 | 108 | '' |
105 | 109 | end |
110 | + def self.select_blocks(arr) | |
111 | + arr.select(&:visible?) | |
112 | + end | |
106 | 113 | end |
107 | 114 | |
108 | 115 | # generates a place where you can drop a block and get the block moved to |
... | ... | @@ -167,6 +174,7 @@ module BoxesHelper |
167 | 174 | end |
168 | 175 | |
169 | 176 | if !block.main? |
177 | + buttons << icon_button(:eyes, _('Toggle block visibility'), {:action => 'toggle_visibility', :id => block.id}) | |
170 | 178 | buttons << icon_button(:delete, _('Remove block'), { :action => 'remove', :id => block.id }, { :method => 'post'}) |
171 | 179 | end |
172 | 180 | ... | ... |
app/models/block.rb
... | ... | @@ -11,6 +11,11 @@ class Block < ActiveRecord::Base |
11 | 11 | belongs_to :box |
12 | 12 | |
13 | 13 | acts_as_having_settings |
14 | + settings_items :visible, :type => :boolean, :default => true | |
15 | + | |
16 | + def visible? | |
17 | + visible | |
18 | + end | |
14 | 19 | |
15 | 20 | # returns the description of the block, used when the user sees a list of |
16 | 21 | # blocks to choose one to include in the design. |
... | ... | @@ -63,6 +68,12 @@ class Block < ActiveRecord::Base |
63 | 68 | self.class.name.underscore.gsub('_', '-') |
64 | 69 | end |
65 | 70 | |
71 | + def css_classes | |
72 | + classes = css_class_name | |
73 | + classes += ' invisible-block' unless visible? | |
74 | + classes | |
75 | + end | |
76 | + | |
66 | 77 | def default_title |
67 | 78 | '' |
68 | 79 | end | ... | ... |
801 Bytes
public/designs/icons/default/style.css
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | .icon-help32off { background-image: url(help-off-32x32-HC.gif) } |
36 | 36 | .icon-spread { background-image: url(mega-phone-HC.gif) } |
37 | 37 | .icon-todo { background-image: url(stock_todo.png) } |
38 | +.icon-eyes { background-image: url(eyes.png) } | |
38 | 39 | .icon-menu- { background-image: url(menu-without-ico-HC.gif) } |
39 | 40 | .icon-menu-home { background-image: url(home-HC.gif) } |
40 | 41 | .icon-menu-blog { background-image: url(blog-HC.gif) } | ... | ... |
233 Bytes
public/stylesheets/blocks.css
... | ... | @@ -7,6 +7,15 @@ |
7 | 7 | border: none; |
8 | 8 | } |
9 | 9 | |
10 | +.invisible-block { | |
11 | + background: url(../images/hachure.png); | |
12 | +} | |
13 | + | |
14 | +/* ie6 hack */ | |
15 | +.invisible-block a.icon-button { | |
16 | + position: relative; | |
17 | +} | |
18 | + | |
10 | 19 | /*********************************************************** |
11 | 20 | * the handles to where you can drag the blocks |
12 | 21 | ***********************************************************/ | ... | ... |
test/functional/application_controller_test.rb
... | ... | @@ -424,4 +424,17 @@ class ApplicationControllerTest < Test::Unit::TestCase |
424 | 424 | :descendant => {:tag => 'a', :attributes => { :href => '/admin' }} |
425 | 425 | end |
426 | 426 | |
427 | + should 'not display invisible blocks' do | |
428 | + @controller.expects(:uses_design_blocks?).returns(true) | |
429 | + p = create_user('test_user').person | |
430 | + @controller.expects(:profile).at_least_once.returns(p) | |
431 | + b = p.blocks[1] | |
432 | + b.expects(:visible).returns(false) | |
433 | + b.save! | |
434 | + | |
435 | + get :index, :profile => p.identifier | |
436 | + | |
437 | + assert_no_tag :tag => 'div', :attributes => {:id => 'block-' + b.id.to_s} | |
438 | + end | |
439 | + | |
427 | 440 | end | ... | ... |
test/functional/profile_design_controller_test.rb
... | ... | @@ -280,4 +280,13 @@ class ProfileDesignControllerTest < Test::Unit::TestCase |
280 | 280 | assert_no_tag :tag => 'input', :attributes => { :id => 'type_blogarchivesblock', :value => 'BlogArchivesBlock' } |
281 | 281 | end |
282 | 282 | |
283 | + should 'toggle block visibility' do | |
284 | + state = @b1.visible? | |
285 | + get :toggle_visibility, :id => @b1.id, :profile => holder.identifier | |
286 | + block = Block.find(@b1.id) | |
287 | + | |
288 | + assert_equal block, assigns(:block) | |
289 | + assert_equal !state, block.visible? | |
290 | + end | |
291 | + | |
283 | 292 | end | ... | ... |
test/unit/block_test.rb
... | ... | @@ -46,6 +46,12 @@ class BlockTest < Test::Unit::TestCase |
46 | 46 | assert_equal 'my title', b.title |
47 | 47 | end |
48 | 48 | |
49 | - | |
49 | + should 'have a visible setting' do | |
50 | + b = Block.new | |
51 | + assert b.visible? | |
52 | + b.visible = false | |
53 | + b.save | |
54 | + assert !b.visible? | |
55 | + end | |
50 | 56 | |
51 | 57 | end | ... | ... |
test/unit/boxes_helper_test.rb
... | ... | @@ -23,4 +23,28 @@ class BoxesHelperTest < Test::Unit::TestCase |
23 | 23 | assert_tag_in_string display_boxes(holder, 'main content'), :tag => "div", :attributes => { :id => 'profile-footer' }, :content => 'my custom footer' |
24 | 24 | end |
25 | 25 | |
26 | + should 'display invisible block for editing' do | |
27 | + p = create_user('test_user').person | |
28 | + b = p.blocks.select{|bk| !bk.kind_of?(MainBlock) }[0] | |
29 | + b.visible = false; b.save! | |
30 | + box = b.box | |
31 | + box.expects(:blocks).returns([b]) | |
32 | + expects(:display_block).with(b, '') | |
33 | + stubs(:block_target).returns('') | |
34 | + with_box_decorator self do | |
35 | + display_box_content(box, '') | |
36 | + end | |
37 | + end | |
38 | + | |
39 | + should 'not display invisible block' do | |
40 | + p = create_user('test_user').person | |
41 | + b = p.blocks.select{|bk| !bk.kind_of?(MainBlock) }[0] | |
42 | + b.visible = false; b.save! | |
43 | + box = b.box | |
44 | + box.expects(:blocks).returns([b]) | |
45 | + expects(:display_block).with(b, '').never | |
46 | + stubs(:block_target).returns('') | |
47 | + display_box_content(box, '') | |
48 | + end | |
49 | + | |
26 | 50 | end | ... | ... |