diff --git a/app/models/slideshow_block.rb b/app/models/slideshow_block.rb
index a34adbb..e47aa73 100644
--- a/app/models/slideshow_block.rb
+++ b/app/models/slideshow_block.rb
@@ -4,6 +4,7 @@ class SlideshowBlock < Block
settings_items :interval, :type => 'integer', :default => 4
settings_items :shuffle, :type => 'boolean', :default => false
settings_items :navigation, :type => 'boolean', :default => false
+ settings_items :image_size, :type => 'string', :default => 'thumb'
def self.description
_('Slideshow')
@@ -13,6 +14,19 @@ class SlideshowBlock < Block
gallery_id ? Folder.find(:first, :conditions => { :id => gallery_id }) : nil
end
+ def public_filename_for(image)
+ check_filename(image, image_size) || check_filename(image, 'thumb')
+ end
+
+ def check_filename(image, size)
+ filename = image.public_filename(size)
+ if File.exists?(File.join(Rails.root, 'public', filename))
+ filename
+ else
+ nil
+ end
+ end
+
def block_images
gallery.images.reject {|item| item.folder?}
end
diff --git a/app/models/uploaded_file.rb b/app/models/uploaded_file.rb
index 2fa561c..8918583 100644
--- a/app/models/uploaded_file.rb
+++ b/app/models/uploaded_file.rb
@@ -21,7 +21,7 @@ class UploadedFile < Article
# :min_size => 2.megabytes
# :max_size => 5.megabytes
has_attachment :storage => :file_system,
- :thumbnails => { :icon => [24,24], :thumb => '130x130>', :display => '640X480>' },
+ :thumbnails => { :icon => [24,24], :thumb => '130x130>', :slideshow => '320x240>', :display => '640X480>' },
:thumbnail_class => Thumbnail,
:max_size => 5.megabytes # remember to update validate message below
diff --git a/app/views/blocks/slideshow.rhtml b/app/views/blocks/slideshow.rhtml
index 48c0a3b..a06396a 100644
--- a/app/views/blocks/slideshow.rhtml
+++ b/app/views/blocks/slideshow.rhtml
@@ -5,7 +5,7 @@
<% images.each do |img| %>
- <%= content_tag('div', '', :style => "background-image: url(#{img.public_filename(:thumb)})", :title => (img.abstract.blank? ? '' : img.abstract)) %>
+ <%= content_tag('div', '', :style => "background-image: url(#{block.public_filename_for(img)})", :title => (img.abstract.blank? ? '' : img.abstract)) %>
<% if !img.abstract.blank? %>
<%= img.abstract %>
<% end %>
diff --git a/app/views/box_organizer/_slideshow_block.rhtml b/app/views/box_organizer/_slideshow_block.rhtml
index 2d1b293..b13d555 100644
--- a/app/views/box_organizer/_slideshow_block.rhtml
+++ b/app/views/box_organizer/_slideshow_block.rhtml
@@ -3,6 +3,8 @@
[ _('%{gallery} (%{count} images)') % {:gallery => item.path, :count => item.images.reject{|image| image.folder?}.count}, item.id ]
}) %>
+<%= labelled_form_field(_('Image size'), select('block', 'image_size', [[_('Miniatura'), 'thumb'],[_('Slideshow size'), 'slideshow']])) %>
+
<%= 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]}) %>
<%= labelled_form_field check_box(:block, :shuffle) + _('Show images in random order'), '' %>
diff --git a/test/unit/slideshow_block_test.rb b/test/unit/slideshow_block_test.rb
index 32367bf..a274592 100644
--- a/test/unit/slideshow_block_test.rb
+++ b/test/unit/slideshow_block_test.rb
@@ -65,4 +65,36 @@ class SlideshowBlockTest < ActiveSupport::TestCase
assert_not_includes block.block_images, folder
end
+ should 'display "thumb" size by default' do
+ assert_equal 'thumb', SlideshowBlock.new.image_size
+ end
+
+ should 'set different image size' do
+ block = SlideshowBlock.new(:image_size => 'slideshow')
+ assert_equal 'slideshow', block.image_size
+ end
+
+ should 'decide correct public filename for image' do
+ image = mock
+ image.expects(:public_filename).with('slideshow').returns('/bli/slideshow.png')
+ File.expects(:exists?).with("#{Rails.root}/public/bli/slideshow.png").returns(true)
+
+ assert_equal '/bli/slideshow.png', SlideshowBlock.new(:image_size => 'slideshow').public_filename_for(image)
+ end
+
+ should 'fallback to existing size in case the requested size does not exist' do
+ block = SlideshowBlock.new(:image_size => 'slideshow')
+
+ image = mock
+ # "slideshow" size does not exist
+ image.expects(:public_filename).with('slideshow').returns('/bli/slideshow.png')
+ File.expects(:exists?).with("#{Rails.root}/public/bli/slideshow.png").returns(false) # <<<<<
+
+ # thumb size does exist
+ image.expects(:public_filename).with('thumb').returns('/bli/thumb.png')
+ File.expects(:exists?).with("#{Rails.root}/public/bli/thumb.png").returns(true) # <<<<<
+
+ assert_equal '/bli/thumb.png', block.public_filename_for(image)
+ end
+
end
--
libgit2 0.21.2