Commit 0a0c7af5245ffc8c2a632227d441868c1d32e981
Committed by
Antonio Terceiro
1 parent
1f9140cd
Exists in
master
and in
29 other branches
Navigation links to image gallery
(ActionItem1367)
Showing
8 changed files
with
135 additions
and
9 deletions
Show diff stats
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 »'), images[current_index + 1].view_url, :class => 'right') | |
67 | + else | |
68 | + content_tag('span', _('Next »'), :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
... | ... | @@ -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 | ... | ... |
2.43 KB
test/unit/blog_helper_test.rb
... | ... | @@ -70,11 +70,15 @@ class BlogHelperTest < 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 < 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 | ... | ... |