Commit 424b795e83a802992aadeedddc06403979d30eea
1 parent
6dcb2e05
Exists in
master
and in
28 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; |