Commit c47e2ba3715efa61e1e750123d70ca598a912789

Authored by Moises Machado
Committed by Antonio Terceiro
1 parent 70eccaa3

ActionItem741: now blocks can be hidden

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 &lt; 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 &lt; 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
... ...
public/designs/icons/default/eyes.png 0 → 100644

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) }
... ...
public/images/hachure.png 0 → 100644

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 &lt; 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 &lt; 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 &lt; 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 &lt; 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
... ...