From 3133d012e364cc121c42f1769937e374d35e611b Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Mon, 26 Apr 2010 16:15:33 -0300 Subject: [PATCH] Allowing slideshow block to use better the space. --- app/models/slideshow_block.rb | 14 ++++++++++++++ app/models/uploaded_file.rb | 2 +- app/views/blocks/slideshow.rhtml | 2 +- app/views/box_organizer/_slideshow_block.rhtml | 2 ++ test/unit/slideshow_block_test.rb | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) 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