Commit 3133d012e364cc121c42f1769937e374d35e611b

Authored by Antonio Terceiro
1 parent d76b9e3b

Allowing slideshow block to use better the space.

  * Adding new image size: slideshow
  * SlideshowBlock can choose which size to use (thumb or slideshow)

(ActionItem1493)
app/models/slideshow_block.rb
... ... @@ -4,6 +4,7 @@ class SlideshowBlock < Block
4 4 settings_items :interval, :type => 'integer', :default => 4
5 5 settings_items :shuffle, :type => 'boolean', :default => false
6 6 settings_items :navigation, :type => 'boolean', :default => false
  7 + settings_items :image_size, :type => 'string', :default => 'thumb'
7 8  
8 9 def self.description
9 10 _('Slideshow')
... ... @@ -13,6 +14,19 @@ class SlideshowBlock < Block
13 14 gallery_id ? Folder.find(:first, :conditions => { :id => gallery_id }) : nil
14 15 end
15 16  
  17 + def public_filename_for(image)
  18 + check_filename(image, image_size) || check_filename(image, 'thumb')
  19 + end
  20 +
  21 + def check_filename(image, size)
  22 + filename = image.public_filename(size)
  23 + if File.exists?(File.join(Rails.root, 'public', filename))
  24 + filename
  25 + else
  26 + nil
  27 + end
  28 + end
  29 +
16 30 def block_images
17 31 gallery.images.reject {|item| item.folder?}
18 32 end
... ...
app/models/uploaded_file.rb
... ... @@ -21,7 +21,7 @@ class UploadedFile < Article
21 21 # :min_size => 2.megabytes
22 22 # :max_size => 5.megabytes
23 23 has_attachment :storage => :file_system,
24   - :thumbnails => { :icon => [24,24], :thumb => '130x130>', :display => '640X480>' },
  24 + :thumbnails => { :icon => [24,24], :thumb => '130x130>', :slideshow => '320x240>', :display => '640X480>' },
25 25 :thumbnail_class => Thumbnail,
26 26 :max_size => 5.megabytes # remember to update validate message below
27 27  
... ...
app/views/blocks/slideshow.rhtml
... ... @@ -5,7 +5,7 @@
5 5 <div class='slideshow-container'>
6 6 <% images.each do |img| %>
7 7 <a href="<%= url_for(img.external_link.blank? ? img.view_url: img.external_link) %>">
8   - <%= content_tag('div', '', :style => "background-image: url(#{img.public_filename(:thumb)})", :title => (img.abstract.blank? ? '' : img.abstract)) %>
  8 + <%= content_tag('div', '', :style => "background-image: url(#{block.public_filename_for(img)})", :title => (img.abstract.blank? ? '' : img.abstract)) %>
9 9 <% if !img.abstract.blank? %>
10 10 <span class='image-description'><%= img.abstract %></span>
11 11 <% end %>
... ...
app/views/box_organizer/_slideshow_block.rhtml
... ... @@ -3,6 +3,8 @@
3 3 [ _('%{gallery} (%{count} images)') % {:gallery => item.path, :count => item.images.reject{|image| image.folder?}.count}, item.id ]
4 4 }) %>
5 5  
  6 +<%= labelled_form_field(_('Image size'), select('block', 'image_size', [[_('Miniatura'), 'thumb'],[_('Slideshow size'), 'slideshow']])) %>
  7 +
6 8 <%= labelled_form_field _('Image transition:'), select('block', 'interval', [[_('No automatic transition'), 0]] + [1, 2, 3, 4, 5, 10, 20, 30, 60].map {|item| [n_('Every 1 second', 'Every %d seconds', item) % item, item]}) %>
7 9  
8 10 <%= labelled_form_field check_box(:block, :shuffle) + _('Show images in random order'), '' %>
... ...
test/unit/slideshow_block_test.rb
... ... @@ -65,4 +65,36 @@ class SlideshowBlockTest &lt; ActiveSupport::TestCase
65 65 assert_not_includes block.block_images, folder
66 66 end
67 67  
  68 + should 'display "thumb" size by default' do
  69 + assert_equal 'thumb', SlideshowBlock.new.image_size
  70 + end
  71 +
  72 + should 'set different image size' do
  73 + block = SlideshowBlock.new(:image_size => 'slideshow')
  74 + assert_equal 'slideshow', block.image_size
  75 + end
  76 +
  77 + should 'decide correct public filename for image' do
  78 + image = mock
  79 + image.expects(:public_filename).with('slideshow').returns('/bli/slideshow.png')
  80 + File.expects(:exists?).with("#{Rails.root}/public/bli/slideshow.png").returns(true)
  81 +
  82 + assert_equal '/bli/slideshow.png', SlideshowBlock.new(:image_size => 'slideshow').public_filename_for(image)
  83 + end
  84 +
  85 + should 'fallback to existing size in case the requested size does not exist' do
  86 + block = SlideshowBlock.new(:image_size => 'slideshow')
  87 +
  88 + image = mock
  89 + # "slideshow" size does not exist
  90 + image.expects(:public_filename).with('slideshow').returns('/bli/slideshow.png')
  91 + File.expects(:exists?).with("#{Rails.root}/public/bli/slideshow.png").returns(false) # <<<<<
  92 +
  93 + # thumb size does exist
  94 + image.expects(:public_filename).with('thumb').returns('/bli/thumb.png')
  95 + File.expects(:exists?).with("#{Rails.root}/public/bli/thumb.png").returns(true) # <<<<<
  96 +
  97 + assert_equal '/bli/thumb.png', block.public_filename_for(image)
  98 + end
  99 +
68 100 end
... ...