Commit 424b795e83a802992aadeedddc06403979d30eea
1 parent
6dcb2e05
Exists in
master
and in
22 other branches
Zoomable product images on catalog
* New method on display helper to create a product image link * Tweaks on catalog/index to show the zoomable images * Small fix on browse_catalogs.feature * Fixes on application.css to correctly show the images
Showing
4 changed files
with
43 additions
and
5 deletions
Show diff stats
app/helpers/display_helper.rb
| @@ -8,6 +8,14 @@ module DisplayHelper | @@ -8,6 +8,14 @@ module DisplayHelper | ||
| 8 | opts | 8 | opts |
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | + def image_link_to_product(product, opts={}) | ||
| 12 | + return _('No product') unless product | ||
| 13 | + target = product_path(product) | ||
| 14 | + link_to image_tag(product.default_image(:big), :alt => product.name), | ||
| 15 | + target, | ||
| 16 | + opts | ||
| 17 | + end | ||
| 18 | + | ||
| 11 | def price_span(price, options = {}) | 19 | def price_span(price, options = {}) |
| 12 | content_tag 'span', | 20 | content_tag 'span', |
| 13 | number_to_currency(price, :unit => environment.currency_unit, :delimiter => environment.currency_delimiter, :separator => environment.currency_separator), | 21 | number_to_currency(price, :unit => environment.currency_unit, :delimiter => environment.currency_delimiter, :separator => environment.currency_separator), |
app/views/catalog/index.rhtml
| @@ -11,7 +11,12 @@ | @@ -11,7 +11,12 @@ | ||
| 11 | <li class="product <%= "not-available" unless product.available %>"> | 11 | <li class="product <%= "not-available" unless product.available %>"> |
| 12 | <ul> | 12 | <ul> |
| 13 | <% if product.image %> | 13 | <% if product.image %> |
| 14 | - <li id="product-image-link"><%= link_to_product product, :class => 'product-big', :style => 'background-image:url(%s)' % product.default_image(:big) %></li> | 14 | + <li id="product-image-link"> |
| 15 | + <div class="zoomable-image"> | ||
| 16 | + <%= image_link_to_product product, :class => 'product-big' %> | ||
| 17 | + <a href='<%= product.default_image(:big).gsub('_big','') %>' class="zoomify-image"><span><%= _('Zoom in') %></span></a> | ||
| 18 | + </div> | ||
| 19 | + </li> | ||
| 15 | <% else %> | 20 | <% else %> |
| 16 | <li class="product-big no-image"><%= _('No image') %></li> | 21 | <li class="product-big no-image"><%= _('No image') %></li> |
| 17 | <% end %> | 22 | <% end %> |
| @@ -88,3 +93,13 @@ | @@ -88,3 +93,13 @@ | ||
| 88 | </ul> | 93 | </ul> |
| 89 | 94 | ||
| 90 | <%= pagination_links @products, :params => {:controller => :catalog, :action => :index, :profile => profile.identifier} %> | 95 | <%= pagination_links @products, :params => {:controller => :catalog, :action => :index, :profile => profile.identifier} %> |
| 96 | + | ||
| 97 | +<link href="/stylesheets/fancybox.css?1323903734" media="screen" rel="stylesheet" type="text/css" /><script src="/javascripts/jquery.fancybox-1.3.4.pack.js?1323903734" type="text/javascript"></script><script type="text/javascript"> | ||
| 98 | +//<![CDATA[ | ||
| 99 | +jQuery(function($) { | ||
| 100 | + $(window).load( function() { | ||
| 101 | + $('.zoomify-image').fancybox(); | ||
| 102 | + }); | ||
| 103 | + }); | ||
| 104 | +//]]> | ||
| 105 | +</script> |
features/browse_catalogs.feature
| @@ -95,6 +95,14 @@ Feature: browse catalogs | @@ -95,6 +95,14 @@ Feature: browse catalogs | ||
| 95 | And I should not see "qualifiers" | 95 | And I should not see "qualifiers" |
| 96 | And I should not see "price composition" | 96 | And I should not see "price composition" |
| 97 | 97 | ||
| 98 | + Scenario: display "zoom in" button | ||
| 99 | + Given the following products | ||
| 100 | + | owner | category | name | price | img | | ||
| 101 | + | artebonito | categ1 | Agrotox | 12.34 | agrotox | | ||
| 102 | + And I am on /catalog/artebonito | ||
| 103 | + And I should not see "No image" | ||
| 104 | + And I should see "Zoom in" within ".zoomify-image" | ||
| 105 | + | ||
| 98 | Scenario: image links to product page | 106 | Scenario: image links to product page |
| 99 | Given the following products | 107 | Given the following products |
| 100 | | owner | category | name | price | img | | 108 | | owner | category | name | price | img | |
| @@ -122,6 +130,7 @@ Feature: browse catalogs | @@ -122,6 +130,7 @@ Feature: browse catalogs | ||
| 122 | | owner | category | name | price | description | | 130 | | owner | category | name | price | description | |
| 123 | | artebonito | categ1 | Produto2 | 12.34 | A small description for a product that doesn't exist. | | 131 | | artebonito | categ1 | Produto2 | 12.34 | A small description for a product that doesn't exist. | |
| 124 | And I am on /catalog/artebonito | 132 | And I am on /catalog/artebonito |
| 133 | + And I reload and wait for the page | ||
| 125 | Then I should see "Produto2" within "li.product-link" | 134 | Then I should see "Produto2" within "li.product-link" |
| 126 | And I should see "12.34" within "span.product-price" | 135 | And I should see "12.34" within "span.product-price" |
| 127 | And I should see "description" within "#product-description-button" | 136 | And I should see "description" within "#product-description-button" |
public/stylesheets/application.css
| @@ -1075,10 +1075,12 @@ code input { | @@ -1075,10 +1075,12 @@ code input { | ||
| 1075 | text-align: left; | 1075 | text-align: left; |
| 1076 | background: transparent url(/images/black-alpha-pixel.png); | 1076 | background: transparent url(/images/black-alpha-pixel.png); |
| 1077 | border-bottom: 1px solid #333; | 1077 | border-bottom: 1px solid #333; |
| 1078 | + text-decoration: none; | ||
| 1078 | } | 1079 | } |
| 1079 | 1080 | ||
| 1080 | .zoomable-image:hover .zoomify-image { | 1081 | .zoomable-image:hover .zoomify-image { |
| 1081 | display: block; | 1082 | display: block; |
| 1083 | + text-decoration: none; | ||
| 1082 | } | 1084 | } |
| 1083 | 1085 | ||
| 1084 | #article .zoomify-image { | 1086 | #article .zoomify-image { |
| @@ -1093,6 +1095,7 @@ code input { | @@ -1093,6 +1095,7 @@ code input { | ||
| 1093 | border-bottom: 1px solid #eee; | 1095 | border-bottom: 1px solid #eee; |
| 1094 | display: block; | 1096 | display: block; |
| 1095 | background: transparent url(/images/zoom.png) left center no-repeat; | 1097 | background: transparent url(/images/zoom.png) left center no-repeat; |
| 1098 | + color: #fff; | ||
| 1096 | } | 1099 | } |
| 1097 | 1100 | ||
| 1098 | #article pre { | 1101 | #article pre { |
| @@ -2980,7 +2983,7 @@ div#activation_enterprise div { | @@ -2980,7 +2983,7 @@ div#activation_enterprise div { | ||
| 2980 | } | 2983 | } |
| 2981 | #product-list li.product { | 2984 | #product-list li.product { |
| 2982 | width: 200px; | 2985 | width: 200px; |
| 2983 | - min-height: 260px; | 2986 | + min-height: 280px; |
| 2984 | float: left; | 2987 | float: left; |
| 2985 | padding: 10px 30px 10px 0; | 2988 | padding: 10px 30px 10px 0; |
| 2986 | margin-bottom: 10px; | 2989 | margin-bottom: 10px; |
| @@ -3122,11 +3125,14 @@ div#activation_enterprise div { | @@ -3122,11 +3125,14 @@ div#activation_enterprise div { | ||
| 3122 | #product-list .product-big { | 3125 | #product-list .product-big { |
| 3123 | display: block; | 3126 | display: block; |
| 3124 | width: 200px; | 3127 | width: 200px; |
| 3125 | - height: 140px; | 3128 | + height: 160px; |
| 3126 | border: 1px solid #BFBFBF; | 3129 | border: 1px solid #BFBFBF; |
| 3127 | - background-repeat: no-repeat; | ||
| 3128 | - background-position: 50% 50%; | 3130 | +/* background-repeat: no-repeat; |
| 3131 | + background-position: 50% 50%; */ | ||
| 3129 | position: relative; /* work arround msie bug */ | 3132 | position: relative; /* work arround msie bug */ |
| 3133 | + text-align: center; | ||
| 3134 | + display: table-cell; | ||
| 3135 | + vertical-align: middle; | ||
| 3130 | } | 3136 | } |
| 3131 | #product-list .product-big.no-image { | 3137 | #product-list .product-big.no-image { |
| 3132 | line-height: 145px; | 3138 | line-height: 145px; |