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,6 +4,7 @@ class SlideshowBlock < Block
4 settings_items :interval, :type => 'integer', :default => 4 4 settings_items :interval, :type => 'integer', :default => 4
5 settings_items :shuffle, :type => 'boolean', :default => false 5 settings_items :shuffle, :type => 'boolean', :default => false
6 settings_items :navigation, :type => 'boolean', :default => false 6 settings_items :navigation, :type => 'boolean', :default => false
  7 + settings_items :image_size, :type => 'string', :default => 'thumb'
7 8
8 def self.description 9 def self.description
9 _('Slideshow') 10 _('Slideshow')
@@ -13,6 +14,19 @@ class SlideshowBlock < Block @@ -13,6 +14,19 @@ class SlideshowBlock < Block
13 gallery_id ? Folder.find(:first, :conditions => { :id => gallery_id }) : nil 14 gallery_id ? Folder.find(:first, :conditions => { :id => gallery_id }) : nil
14 end 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 def block_images 30 def block_images
17 gallery.images.reject {|item| item.folder?} 31 gallery.images.reject {|item| item.folder?}
18 end 32 end
app/models/uploaded_file.rb
@@ -21,7 +21,7 @@ class UploadedFile < Article @@ -21,7 +21,7 @@ class UploadedFile < Article
21 # :min_size => 2.megabytes 21 # :min_size => 2.megabytes
22 # :max_size => 5.megabytes 22 # :max_size => 5.megabytes
23 has_attachment :storage => :file_system, 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 :thumbnail_class => Thumbnail, 25 :thumbnail_class => Thumbnail,
26 :max_size => 5.megabytes # remember to update validate message below 26 :max_size => 5.megabytes # remember to update validate message below
27 27
app/views/blocks/slideshow.rhtml
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <div class='slideshow-container'> 5 <div class='slideshow-container'>
6 <% images.each do |img| %> 6 <% images.each do |img| %>
7 <a href="<%= url_for(img.external_link.blank? ? img.view_url: img.external_link) %>"> 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 <% if !img.abstract.blank? %> 9 <% if !img.abstract.blank? %>
10 <span class='image-description'><%= img.abstract %></span> 10 <span class='image-description'><%= img.abstract %></span>
11 <% end %> 11 <% end %>
app/views/box_organizer/_slideshow_block.rhtml
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
3 [ _('%{gallery} (%{count} images)') % {:gallery => item.path, :count => item.images.reject{|image| image.folder?}.count}, item.id ] 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 <%= 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]}) %> 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 <%= labelled_form_field check_box(:block, :shuffle) + _('Show images in random order'), '' %> 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,4 +65,36 @@ class SlideshowBlockTest &lt; ActiveSupport::TestCase
65 assert_not_includes block.block_images, folder 65 assert_not_includes block.block_images, folder
66 end 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 end 100 end