Commit ac098d9329a10a0d16c42c26979bb8de9802186f
Committed by
Daniela Feitosa
1 parent
c23f40da
Exists in
master
and in
23 other branches
Adding blocks whitelist for receive dropped draggable elements
Showing
3 changed files
with
57 additions
and
7 deletions
Show diff stats
app/helpers/boxes_helper.rb
| @@ -162,9 +162,6 @@ module BoxesHelper | @@ -162,9 +162,6 @@ module BoxesHelper | ||
| 162 | # | 162 | # |
| 163 | # +box+ is always needed | 163 | # +box+ is always needed |
| 164 | def block_target(box, block = nil) | 164 | def block_target(box, block = nil) |
| 165 | - # FIXME hardcoded | ||
| 166 | - return '' if box.position == 1 | ||
| 167 | - | ||
| 168 | id = | 165 | id = |
| 169 | if block.nil? | 166 | if block.nil? |
| 170 | "end-of-box-#{box.id}" | 167 | "end-of-box-#{box.id}" |
| @@ -172,14 +169,11 @@ module BoxesHelper | @@ -172,14 +169,11 @@ module BoxesHelper | ||
| 172 | "before-block-#{block.id}" | 169 | "before-block-#{block.id}" |
| 173 | end | 170 | end |
| 174 | 171 | ||
| 175 | - content_tag('div', ' ', :id => id, :class => 'block-target' ) + drop_receiving_element(id, :url => { :action => 'move_block', :target => id }, :accept => 'block', :hoverclass => 'block-target-hover') | 172 | + content_tag('div', ' ', :id => id, :class => 'block-target' ) + drop_receiving_element(id, :url => { :action => 'move_block', :target => id }, :accept => box.acceptable_blocks, :hoverclass => 'block-target-hover') |
| 176 | end | 173 | end |
| 177 | 174 | ||
| 178 | # makes the given block draggable so it can be moved away. | 175 | # makes the given block draggable so it can be moved away. |
| 179 | def block_handle(block) | 176 | def block_handle(block) |
| 180 | - # FIXME hardcoded | ||
| 181 | - return '' if block.box.position == 1 | ||
| 182 | - | ||
| 183 | draggable_element("block-#{block.id}", :revert => true) | 177 | draggable_element("block-#{block.id}", :revert => true) |
| 184 | end | 178 | end |
| 185 | 179 |
app/models/box.rb
| @@ -2,4 +2,45 @@ class Box < ActiveRecord::Base | @@ -2,4 +2,45 @@ class Box < ActiveRecord::Base | ||
| 2 | belongs_to :owner, :polymorphic => true | 2 | belongs_to :owner, :polymorphic => true |
| 3 | acts_as_list :scope => 'owner_id = #{owner_id} and owner_type = \'#{owner_type}\'' | 3 | acts_as_list :scope => 'owner_id = #{owner_id} and owner_type = \'#{owner_type}\'' |
| 4 | has_many :blocks, :dependent => :destroy, :order => 'position' | 4 | has_many :blocks, :dependent => :destroy, :order => 'position' |
| 5 | + | ||
| 6 | + def acceptable_blocks | ||
| 7 | + to_css_class_name (position == 1) ? acceptable_center_blocks : acceptable_side_blocks | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + private | ||
| 11 | + | ||
| 12 | + def acceptable_center_blocks | ||
| 13 | + %w{ MainBlock } | ||
| 14 | + end | ||
| 15 | + | ||
| 16 | + def acceptable_side_blocks | ||
| 17 | + %w{ | ||
| 18 | + ArticleBlock | ||
| 19 | + CategoriesBlock | ||
| 20 | + CommunitiesBlock | ||
| 21 | + EnterprisesBlock | ||
| 22 | + EnvironmentStatisticsBlock | ||
| 23 | + FeaturedProductsBlock | ||
| 24 | + FeedReaderBlock | ||
| 25 | + HighlightsBlock | ||
| 26 | + LinkListBlock | ||
| 27 | + LocationBlock | ||
| 28 | + LoginBlock | ||
| 29 | + MyNetworkBlock | ||
| 30 | + PeopleBlock | ||
| 31 | + ProfileImageBlock | ||
| 32 | + ProfileInfoBlock | ||
| 33 | + ProfileSearchBlock | ||
| 34 | + RawHTMLBlock | ||
| 35 | + RecentDocumentsBlock | ||
| 36 | + SellersSearchBlock | ||
| 37 | + SlideshowBlock | ||
| 38 | + TagsBlock | ||
| 39 | + } | ||
| 40 | + end | ||
| 41 | + | ||
| 42 | + def to_css_class_name(blocks) | ||
| 43 | + blocks.map{ |block| block.underscore.tr('_', '-') } | ||
| 44 | + end | ||
| 45 | + | ||
| 5 | end | 46 | end |
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
| 2 | + | ||
| 3 | +class BoxTest < ActiveSupport::TestCase | ||
| 4 | + | ||
| 5 | + should 'list allowed blocks for center box' do | ||
| 6 | + b = Box.new(:position => 1) | ||
| 7 | + assert b.acceptable_blocks.include?('main-block') | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + should 'list allowed blocks for box at position 2' do | ||
| 11 | + b = Box.new(:position => 2) | ||
| 12 | + assert !b.acceptable_blocks.include?('main-block') | ||
| 13 | + end | ||
| 14 | + | ||
| 15 | +end |