Commit 0a0c7af5245ffc8c2a632227d441868c1d32e981

Authored by Joenio Costa
Committed by Antonio Terceiro
1 parent 1f9140cd

Navigation links to image gallery

(ActionItem1367)
app/models/uploaded_file.rb
... ... @@ -46,14 +46,37 @@ class UploadedFile < Article
46 46 File.read(self.full_filename)
47 47 end
48 48  
49   - # FIXME isn't this too much including just to be able to generate some HTML?
50   - include ActionView::Helpers::TagHelper
51 49  
52 50 def to_html(options = {})
  51 + article = self
53 52 if image?
54   - tag('img', :src => public_filename(:display), :class => css_class_name, :style => 'max-width: 100%')
  53 + lambda do
  54 + if article.display_as_gallery?
  55 + images = article.parent.images
  56 + current_index = images.index(article)
  57 + total_of_images = images.count
  58 +
  59 + link_to_previous = if current_index >= 1
  60 + link_to(_('« Previous'), images[current_index - 1].view_url, :class => 'left')
  61 + else
  62 + content_tag('span', _('« Previous'), :class => 'left')
  63 + end
  64 +
  65 + link_to_next = if current_index < total_of_images - 1
  66 + link_to(_('Next &raquo;'), images[current_index + 1].view_url, :class => 'right')
  67 + else
  68 + content_tag('span', _('Next &raquo;'), :class => 'right')
  69 + end
  70 +
  71 + content_tag(
  72 + 'div',
  73 + link_to_previous + content_tag('span', _('image %s of %d'), :class => 'total-of-images') % [current_index + 1, total_of_images] + link_to_next,
  74 + :class => 'gallery-navigation'
  75 + )
  76 + end.to_s +
  77 + tag('img', :src => article.public_filename(:display), :class => article.css_class_name, :style => 'max-width: 100%')
  78 + end
55 79 else
56   - article = self
57 80 lambda do
58 81 content_tag('ul', content_tag('li', link_to(article.name, article.url, :class => article.css_class_name)))
59 82 end
... ...
app/views/content_viewer/view_page.rhtml
... ... @@ -72,7 +72,7 @@
72 72  
73 73 <% if @page.parent && !@page.parent.path.blank? %>
74 74 <div id="article-parent">
75   - <%= link_to _('Go back'), @page.parent.url %>
  75 + <%= button(:back, _('Go back to %s') % @page.parent.title, @page.parent.url) %>
76 76 </div>
77 77 <% end %>
78 78  
... ...
features/gallery_navigation.feature 0 → 100644
... ... @@ -0,0 +1,65 @@
  1 +Feature: gallery_navigation
  2 + As a noosfero user
  3 + I want to navigate over image gallery
  4 +
  5 + Background:
  6 + Given the following users
  7 + | login |
  8 + | marciopunk |
  9 + And the following folders
  10 + | owner | name | view_as |
  11 + | marciopunk | my-gallery | image_gallery |
  12 + And the following files
  13 + | owner | file | mime | parent |
  14 + | marciopunk | rails.png | image/png | my-gallery |
  15 + | marciopunk | other-pic.jpg | image/jpeg | my-gallery |
  16 +
  17 + Scenario: provide link to go to next image
  18 + Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
  19 + Then I should see "Next »"
  20 +
  21 + Scenario: view next image when follow next link
  22 + Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
  23 + When I follow "Next »"
  24 + Then I should see "rails.png" within ".title"
  25 +
  26 + Scenario: not link to next when in last image
  27 + When I am on /marciopunk/my-gallery/rails.png?view=true
  28 + Then I should see "« Previous" within ".gallery-navigation a"
  29 + And I should not see "Next »" within ".gallery-navigation a"
  30 +
  31 + Scenario: provide link to go to previous image
  32 + Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
  33 + Then I should see "« Previous"
  34 +
  35 + Scenario: view previous image when follow previous link
  36 + Given I am on /marciopunk/my-gallery/rails.png?view=true
  37 + When I follow "« Previous"
  38 + Then I should see "other-pic.jpg" within ".title"
  39 +
  40 + Scenario: not link to previous when in first image
  41 + When I am on /marciopunk/my-gallery/other-pic.jpg?view=true
  42 + Then I should see "Next »" within ".gallery-navigation a"
  43 + And I should not see "« Previous" within ".gallery-navigation a"
  44 +
  45 + Scenario: display number of current and total of images
  46 + Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
  47 + Then I should see "image 1 of 2" within ".gallery-navigation"
  48 +
  49 + Scenario: increment current number when follow next
  50 + Given I am on /marciopunk/my-gallery/other-pic.jpg?view=true
  51 + Then I should see "image 1 of 2" within ".gallery-navigation"
  52 + When I follow "Next »"
  53 + Then I should see "image 2 of 2" within ".gallery-navigation"
  54 +
  55 + Scenario: decrement current number when follow next
  56 + Given I am on /marciopunk/my-gallery/rails.png?view=true
  57 + Then I should see "image 2 of 2" within ".gallery-navigation"
  58 + When I follow "« Previous"
  59 + Then I should see "image 1 of 2" within ".gallery-navigation"
  60 +
  61 + Scenario: provide button to go back to gallery
  62 + Given I am on /marciopunk/my-gallery/rails.png?view=true
  63 + Then I should see "Go back to my-gallery"
  64 + When I follow "Go back to my-gallery"
  65 + Then I should be on /marciopunk/my-gallery
... ...
features/step_definitions/noosfero_steps.rb
... ... @@ -27,11 +27,12 @@ Given /^the following blocks$/ do |table|
27 27 end
28 28 end
29 29  
30   -Given /^the following (articles|events|blogs)$/ do |content, table|
  30 +Given /^the following (articles|events|blogs|folders)$/ do |content, table|
31 31 klass = {
32 32 'articles' => TextileArticle,
33 33 'events' => Event,
34 34 'blogs' => Blog,
  35 + 'folders' => Folder,
35 36 }[content] || raise("Don't know how to build %s" % content)
36 37 table.hashes.map{|item| item.dup}.each do |item|
37 38 owner_identifier = item.delete("owner")
... ... @@ -44,7 +45,11 @@ Given /^the following files$/ do |table|
44 45 table.hashes.each do |item|
45 46 owner = Profile[item[:owner]]
46 47 file = "/files/#{item[:file]}"
47   - article = UploadedFile.create!(:profile => owner, :uploaded_data => fixture_file_upload(file, item[:mime]))
  48 + article = UploadedFile.new(:profile => owner, :uploaded_data => fixture_file_upload(file, item[:mime]))
  49 + if item[:parent]
  50 + article.parent = Article.find_by_slug(item[:parent])
  51 + end
  52 + article.save!
48 53 if item[:homepage]
49 54 owner.home_page = article
50 55 owner.save!
... ...
public/stylesheets/controller_content_viewer.css
... ... @@ -50,3 +50,18 @@ div#article-parent {
50 50 .article-body-uploaded-file {
51 51 text-align: center;
52 52 }
  53 +
  54 +/************* uploaded file *****************/
  55 +
  56 +#article .gallery-navigation {
  57 + padding: 10px 0;
  58 +}
  59 +#article .gallery-navigation .left {
  60 + margin-right: 10px;
  61 +}
  62 +#article .gallery-navigation .right {
  63 + margin-left: 10px;
  64 +}
  65 +#article .gallery-navigation .total-of-images {
  66 + font-weight: bold;
  67 +}
... ...
test/factories.rb
... ... @@ -237,6 +237,15 @@ module Noosfero::Factory
237 237 end
238 238  
239 239 ###############################################
  240 + # UploadedFile
  241 + ###############################################
  242 +
  243 + def defaults_for_uploaded_file
  244 + name = 'My uploaded file ' + factory_num_seq.to_s
  245 + { :name => name, :abstract => name }
  246 + end
  247 +
  248 + ###############################################
240 249 # Blog
241 250 ###############################################
242 251 def create_blog
... ...
test/fixtures/files/other-pic.jpg 0 → 100644

2.43 KB

test/unit/blog_helper_test.rb
... ... @@ -70,11 +70,15 @@ class BlogHelperTest &lt; Test::Unit::TestCase
70 70  
71 71 self.stubs(:params).returns({:npage => nil})
72 72  
  73 + display_filename = file.public_filename(:display)
  74 +
73 75 result = display_post(file)
74   - assert_tag_in_string result, :content => 'rails.png'
75   - assert_tag_in_string result, :tag => 'img', :attributes => { :src => /#{file.public_filename(:display)}/ }
  76 + assert_match /rails.png/, result
  77 + assert_tag_in_string result, :tag => 'img', :attributes => { :src => /#{display_filename}/ }
76 78 end
77 79  
  80 + protected
  81 +
78 82 def will_paginate(arg1, arg2)
79 83 end
80 84  
... ... @@ -82,6 +86,11 @@ class BlogHelperTest &lt; Test::Unit::TestCase
82 86 content
83 87 end
84 88  
  89 + def tag(tag, args = {})
  90 + attrs = args.map{|k,v| "#{k}='#{v}'"}.join(' ')
  91 + "<#{tag} #{attrs} />"
  92 + end
  93 +
85 94 def content_tag(tag, content, options = {})
86 95 "<#{tag}>#{content}</#{tag}>"
87 96 end
... ...