Commit d8736a0643af13f17b971d062489db327f0bda1e
1 parent
55d5a006
Exists in
master
and in
28 other branches
Resize children of container blocks at box organizer
Showing
7 changed files
with
99 additions
and
12 deletions
Show diff stats
plugins/container_block/controllers/admin/container_block_plugin_admin_controller.rb
0 → 100644
plugins/container_block/controllers/container_block_plugin_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,16 @@ |
1 | +module ContainerBlockPluginController | |
2 | + | |
3 | + def saveWidths | |
4 | + container = boxes_holder.blocks.find(params[:id]) | |
5 | + pairs = params[:widths].split('|') | |
6 | + settings = {} | |
7 | + pairs.each do |pair| | |
8 | + id, width = pair.split(',') | |
9 | + settings[id.to_i] = {:width => width} | |
10 | + end | |
11 | + container.children_settings = settings | |
12 | + container.save! | |
13 | + render :json => {:ok => true} | |
14 | + end | |
15 | + | |
16 | +end | ... | ... |
plugins/container_block/controllers/myprofile/container_block_plugin_myprofile_controller.rb
0 → 100644
plugins/container_block/lib/container_block.rb
1 | 1 | class ContainerBlock < Block |
2 | 2 | |
3 | - include Noosfero::Plugin::HotSpot | |
4 | - | |
5 | 3 | after_create :create_box |
6 | 4 | |
7 | 5 | settings_items :container_box_id, :type => Integer, :default => nil |
6 | + settings_items :children_settings, :type => Hash, :default => {} | |
8 | 7 | |
9 | 8 | def self.description |
10 | 9 | _('Container') |
... | ... | @@ -13,6 +12,10 @@ class ContainerBlock < Block |
13 | 12 | def help |
14 | 13 | _('This block acts as a container for another blocks') |
15 | 14 | end |
15 | + | |
16 | + def layout_template | |
17 | + 'default' | |
18 | + end | |
16 | 19 | |
17 | 20 | def create_box |
18 | 21 | box = Box.create!(:owner => self) |
... | ... | @@ -32,9 +35,8 @@ class ContainerBlock < Block |
32 | 35 | container_box.blocks |
33 | 36 | end |
34 | 37 | |
35 | - #FIXME needed? | |
36 | - def layout_template | |
37 | - 'default2' | |
38 | + def child_width(child_id) | |
39 | + children_settings[child_id][:width] if children_settings[child_id] | |
38 | 40 | end |
39 | 41 | |
40 | 42 | #FIXME controller test | ... | ... |
plugins/container_block/public/style.css
1 | -#content .boxes .container-block .block, #content .boxes .container-block .block-target { | |
1 | +#content .boxes .container-block .container_block_child { | |
2 | 2 | float: left; |
3 | 3 | } |
4 | 4 | |
5 | -#content .boxes .container-block .block-target { | |
6 | - width: 20px; | |
7 | -} | |
8 | - | |
9 | 5 | #content .boxes .container-block .block .icon-down, #content .boxes .container-block .block .icon-down-disabled, #content .boxes .container-block .block .icon-up, #content .boxes .container-block .block .icon-up-disabled { |
10 | 6 | display: none; |
11 | 7 | } |
8 | + | |
9 | +#content .boxes .container-block .block { | |
10 | + outline-offset: -2px; | |
11 | +} | |
12 | + | |
13 | +#content .boxes .container-block .block .ui-resizable-handle { | |
14 | + width: 10px; | |
15 | + height: 25px; | |
16 | + background-color: #ffffff; | |
17 | + border: 1px solid #000000; | |
18 | + z-index: 0; | |
19 | +} | |
20 | + | |
21 | +#content .boxes .container-block .block .ui-resizable-e { | |
22 | + right:-5px; | |
23 | + top:0%; | |
24 | + background-color: #AAA; | |
25 | +} | |
26 | + | |
27 | +#content .boxes .container-block .block .ui-resizable-w { | |
28 | + left:-5px; | |
29 | + top:50%; | |
30 | + background-color: #CCC; | |
31 | +} | |
32 | + | ... | ... |
plugins/container_block/test/unit/container_block_test.rb
... | ... | @@ -53,4 +53,16 @@ class ContainerBlockTest < ActiveSupport::TestCase |
53 | 53 | assert_equal [Block, Block], @block.blocks.map(&:class) |
54 | 54 | end |
55 | 55 | |
56 | + should 'return child width' do | |
57 | + @block.children_settings = {1 => {:width => 10} } | |
58 | + @block.save! | |
59 | + assert_equal 10, @block.child_width(1) | |
60 | + end | |
61 | + | |
62 | + should 'return nil in width if child do not exists' do | |
63 | + @block.children_settings = {2 => {:width => 10} } | |
64 | + @block.save! | |
65 | + assert_equal nil, @block.child_width(1) | |
66 | + end | |
67 | + | |
56 | 68 | end | ... | ... |
plugins/container_block/views/blocks/container.rhtml
1 | -<% block.blocks.each do |block| %> | |
2 | - <%= display_block(block, '') %> | |
1 | +<% edit_mode = @controller.send(:boxes_editor?) && @controller.send(:uses_design_blocks?) %> | |
2 | +<% box_decorator = edit_mode ? self : BoxesHelper::DontMoveBlocks %> | |
3 | + | |
4 | +<% box_decorator.select_blocks(block.blocks, { :article => @page, :request_path => request.path, :locale => locale }).each do |child| %> | |
5 | + <div class="container_block_child"> | |
6 | + <%= display_block(child, '') %> | |
7 | + </div> | |
8 | + <style>#block-<%=child.id%> { width: <%= block.child_width(child.id) %>px; }</style> | |
3 | 9 | <% end %> |
4 | 10 | <div class="clear"></div> |
11 | + | |
12 | +<% if edit_mode %> | |
13 | + <div class="button-bar"> | |
14 | + <%= link_to_remote '', :url => { :controller => @controller.boxes_holder.kind_of?(Environment) ? 'container_block_plugin_admin' : 'container_block_plugin_myprofile', :action => 'saveWidths', :id => block.id }, :with => "containerChildrenWidth(#{block.id})", :html => {:class => "button icon-save" } %> | |
15 | + </div> | |
16 | + | |
17 | + <script> | |
18 | + jQuery('.container-block .container_block_child .block').resizable({handles: 'e, w'}); | |
19 | + | |
20 | + function containerChildrenWidth(container) { | |
21 | + widths = ""; | |
22 | + jQuery('#block-'+container+' .container_block_child .block').each(function(i) { | |
23 | + //childId = jQuery(this).attr('id').substring(6); | |
24 | + childId = jQuery(this).attr('id').match(/block-(\d+)/)[1]; | |
25 | + widths+=childId+","+jQuery(this).width()+"|"; | |
26 | + }); | |
27 | + return "widths="+widths; | |
28 | + } | |
29 | + </script> | |
30 | +<% end %> | ... | ... |