Commit 0a0c7af5245ffc8c2a632227d441868c1d32e981
Committed by
Antonio Terceiro
1 parent
1f9140cd
Exists in
master
and in
28 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 | ... | ... |