Commit 424b795e83a802992aadeedddc06403979d30eea

Authored by Rafael Martins
1 parent 6dcb2e05

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
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;