Commit 0cddc2c31e8601261a77d81a1da6d4b0cb68d89b
Exists in
master
and in
28 other branches
Merge commit 'refs/merge-requests/337' of git://gitorious.org/noosfero/noosfero …
…into merge-requests/337 Conflicts: app/controllers/public/catalog_controller.rb app/helpers/application_helper.rb app/helpers/catalog_helper.rb app/views/catalog/index.rhtml public/stylesheets/application.css
Showing
15 changed files
with
292 additions
and
128 deletions
Show diff stats
app/controllers/my_profile/profile_design_controller.rb
| ... | ... | @@ -32,6 +32,7 @@ class ProfileDesignController < BoxOrganizerController |
| 32 | 32 | if profile.enterprise? |
| 33 | 33 | blocks << DisabledEnterpriseMessageBlock |
| 34 | 34 | blocks << HighlightsBlock |
| 35 | + blocks << ProductCategoriesBlock | |
| 35 | 36 | blocks << FeaturedProductsBlock |
| 36 | 37 | blocks << FansBlock |
| 37 | 38 | blocks += plugins.dispatch(:extra_blocks, :type => Enterprise) | ... | ... |
app/controllers/public/catalog_controller.rb
app/helpers/application_helper.rb
app/helpers/catalog_helper.rb
| ... | ... | @@ -9,7 +9,11 @@ module CatalogHelper |
| 9 | 9 | @categories = ProductCategory.on_level(params[:level]).order(:name) |
| 10 | 10 | end |
| 11 | 11 | |
| 12 | - @products = profile.products.from_category(@category).paginate(:order => 'available desc, highlighted desc, name asc', :per_page => 9, :page => options[:page]) | |
| 12 | + @products = profile.products.from_category(@category).paginate( | |
| 13 | + :order => 'available desc, highlighted desc, name asc', | |
| 14 | + :per_page => @profile.products_per_catalog_page, | |
| 15 | + :page => options[:page] | |
| 16 | + ) | |
| 13 | 17 | end |
| 14 | 18 | |
| 15 | 19 | def breadcrumb(category) |
| ... | ... | @@ -20,20 +24,24 @@ module CatalogHelper |
| 20 | 24 | content_tag('div', all_items.join(' → '), :id => 'breadcrumb') |
| 21 | 25 | end |
| 22 | 26 | |
| 23 | - def category_link(category, sub = false) | |
| 27 | + def category_link(category) | |
| 24 | 28 | count = profile.products.from_category(category).count |
| 25 | 29 | name = truncate(category.name, :length => 22 - count.to_s.size) |
| 26 | - link_name = sub ? name : content_tag('strong', name) | |
| 27 | - link = link_to(link_name, {:controller => :catalog, :action => 'index', :level => category.id}, :title => category.name) | |
| 28 | - content_tag('li', "#{link} (#{count})") if count > 0 | |
| 30 | + link = link_to(name, {:controller => 'catalog', :action => 'index', :level => category.id}, :title => category.name) | |
| 31 | + content_tag('div', "#{link} <span class=\"count\">#{count}</span>") if count > 0 | |
| 29 | 32 | end |
| 30 | 33 | |
| 31 | - def category_sub_links(category) | |
| 34 | + def category_with_sub_list(category) | |
| 35 | + content_tag 'li', "#{category_link(category)}\n#{sub_category_list(category)}" | |
| 36 | + end | |
| 37 | + | |
| 38 | + def sub_category_list(category) | |
| 32 | 39 | sub_categories = [] |
| 33 | 40 | category.children.order(:name).each do |sub_category| |
| 34 | - sub_categories << category_link(sub_category, true) | |
| 41 | + cat_link = category_link sub_category | |
| 42 | + sub_categories << content_tag('li', cat_link) unless cat_link.nil? | |
| 35 | 43 | end |
| 36 | - content_tag('ul', sub_categories) if sub_categories.size > 1 | |
| 44 | + content_tag('ul', sub_categories) if sub_categories.size > 0 | |
| 37 | 45 | end |
| 38 | 46 | |
| 39 | 47 | end | ... | ... |
app/models/box.rb
app/models/enterprise.rb
| ... | ... | @@ -23,6 +23,7 @@ class Enterprise < Organization |
| 23 | 23 | N_('Organization website'); N_('Historic and current context'); N_('Activities short description'); N_('City'); N_('State'); N_('Country'); N_('ZIP code') |
| 24 | 24 | |
| 25 | 25 | settings_items :organization_website, :historic_and_current_context, :activities_short_description, :zip_code, :city, :state, :country |
| 26 | + settings_items :products_per_catalog_page, :type => :integer, :default => 6 | |
| 26 | 27 | |
| 27 | 28 | extend SetProfileRegionFromCityState::ClassMethods |
| 28 | 29 | set_profile_region_from_city_state |
| ... | ... | @@ -131,8 +132,11 @@ class Enterprise < Organization |
| 131 | 132 | ] |
| 132 | 133 | blocks = [ |
| 133 | 134 | [MainBlock.new], |
| 134 | - [ProfileImageBlock.new, LinkListBlock.new(:links => links)], | |
| 135 | - [] | |
| 135 | + [ ProfileImageBlock.new, | |
| 136 | + LinkListBlock.new(:links => links), | |
| 137 | + ProductCategoriesBlock.new | |
| 138 | + ], | |
| 139 | + [LocationBlock.new] | |
| 136 | 140 | ] |
| 137 | 141 | if environment.enabled?('products_for_enterprises') |
| 138 | 142 | blocks[2].unshift ProductsBlock.new | ... | ... |
app/models/environment.rb
| ... | ... | @@ -692,7 +692,8 @@ class Environment < ActiveRecord::Base |
| 692 | 692 | end |
| 693 | 693 | |
| 694 | 694 | def community_template |
| 695 | - Community.find_by_id settings[:community_template_id] | |
| 695 | + template = Community.find_by_id settings[:community_template_id] | |
| 696 | + template if template && template.is_template | |
| 696 | 697 | end |
| 697 | 698 | |
| 698 | 699 | def community_template=(value) |
| ... | ... | @@ -700,7 +701,8 @@ class Environment < ActiveRecord::Base |
| 700 | 701 | end |
| 701 | 702 | |
| 702 | 703 | def person_template |
| 703 | - Person.find_by_id settings[:person_template_id] | |
| 704 | + template = Person.find_by_id settings[:person_template_id] | |
| 705 | + template if template && template.is_template | |
| 704 | 706 | end |
| 705 | 707 | |
| 706 | 708 | def person_template=(value) |
| ... | ... | @@ -708,7 +710,8 @@ class Environment < ActiveRecord::Base |
| 708 | 710 | end |
| 709 | 711 | |
| 710 | 712 | def enterprise_template |
| 711 | - Enterprise.find_by_id settings[:enterprise_template_id] | |
| 713 | + template = Enterprise.find_by_id settings[:enterprise_template_id] | |
| 714 | + template if template && template.is_template | |
| 712 | 715 | end |
| 713 | 716 | |
| 714 | 717 | def enterprise_template=(value) |
| ... | ... | @@ -716,7 +719,8 @@ class Environment < ActiveRecord::Base |
| 716 | 719 | end |
| 717 | 720 | |
| 718 | 721 | def inactive_enterprise_template |
| 719 | - Enterprise.find_by_id settings[:inactive_enterprise_template_id] | |
| 722 | + template = Enterprise.find_by_id settings[:inactive_enterprise_template_id] | |
| 723 | + template if template && template.is_template | |
| 720 | 724 | end |
| 721 | 725 | |
| 722 | 726 | def inactive_enterprise_template=(value) | ... | ... |
| ... | ... | @@ -0,0 +1,36 @@ |
| 1 | +class ProductCategoriesBlock < Block | |
| 2 | + | |
| 3 | + def self.description | |
| 4 | + _('Product category menu') | |
| 5 | + end | |
| 6 | + | |
| 7 | + # the title of the block. Probably will be overriden in subclasses. | |
| 8 | + def default_title | |
| 9 | + _('Catalog') | |
| 10 | + end | |
| 11 | + | |
| 12 | + def help | |
| 13 | + _('Helps to filter the products catalog.') | |
| 14 | + end | |
| 15 | + | |
| 16 | + def content(args={}) | |
| 17 | + profile = owner | |
| 18 | + lambda do | |
| 19 | + if @categories.nil? or @categories.length == 0 | |
| 20 | + categories = ProductCategory.on_level().order(:name) | |
| 21 | + if @categories and @categories.length == 0 | |
| 22 | + notice = _('There are no sub-categories for %s') % @category.name | |
| 23 | + end | |
| 24 | + else | |
| 25 | + categories = @categories | |
| 26 | + end | |
| 27 | + render :file => 'blocks/product_categories', | |
| 28 | + :locals => { | |
| 29 | + :profile => profile, | |
| 30 | + :categories => categories, | |
| 31 | + :notice => notice | |
| 32 | + } | |
| 33 | + end | |
| 34 | + end | |
| 35 | + | |
| 36 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,9 @@ |
| 1 | +<%= link_to _('Catalog start'), profile.catalog_url, :class=>'catalog-home-link' %> | |
| 2 | +<ul class="catalog-categories-list"> | |
| 3 | + <% categories.each do |category| %> | |
| 4 | + <%= category_with_sub_list(category) %> | |
| 5 | + <% end %> | |
| 6 | +</ul> | |
| 7 | +<% if notice %> | |
| 8 | + <div class="catalog-categories-notice"><%= notice %></div> | |
| 9 | +<% end %> | ... | ... |
app/views/catalog/index.rhtml
| 1 | 1 | <% extra_content = [] %> |
| 2 | 2 | <% extra_content_list = [] %> |
| 3 | 3 | |
| 4 | -<h1><%= _('Products/Services') %></h1> | |
| 5 | - | |
| 6 | -<% if @categories %> | |
| 7 | - <%= breadcrumb(@category) if params[:level] %> | |
| 8 | - | |
| 9 | - <div class='l-sidebar-left-bar'> | |
| 10 | - <ul> | |
| 11 | - <%= content_tag('li', link_to(_('Homepage'), profile.url), :class => 'catalog-categories-link') %> | |
| 12 | - <%= content_tag('li', link_to(_('Catalog start'), profile.catalog_url), :class => 'catalog-categories-link') %> | |
| 13 | - <% if @categories.present? %> | |
| 14 | - <% @categories.each do |category| %> | |
| 15 | - <%= category_link(category) %> | |
| 16 | - <%= category_sub_links(category) %> | |
| 17 | - <% end %> | |
| 18 | - <% elsif @category.present? %> | |
| 19 | - <%= content_tag('li', _('There are no sub-categories for %s') % @category.name, :id => 'catalog-categories-notice') %> | |
| 20 | - <% else %> | |
| 21 | - <%= content_tag('li', _('There are no categories available.'), :id => 'catalog-categories-notice') %> | |
| 22 | - <% end %> | |
| 23 | - </ul> | |
| 4 | +<div id="product-catalog"> | |
| 5 | +<% if !user.nil? && ( user.is_admin?(profile.environment) || user.is_admin?(profile) ) %> | |
| 6 | + <div class="product-catalog-ctrl"> | |
| 7 | + <%= button :product, _('Manage Products/Services'), :controller => 'manage_products' %> | |
| 24 | 8 | </div> |
| 25 | 9 | <% end %> |
| 26 | 10 | |
| 27 | -<ul id="product-list" class="<%="l-sidebar-left-content" if @categories %>"> | |
| 11 | +<h1><%= _('Products/Services') %></h1> | |
| 12 | + | |
| 13 | +<%= breadcrumb(@category) if params[:level] %> | |
| 14 | + | |
| 15 | +<ul id="product-list"> | |
| 28 | 16 | <% @products.each do |product| %> |
| 29 | 17 | <% extra_content = @plugins.dispatch(:catalog_item_extras, product).collect { |content| instance_eval(&content) } %> |
| 30 | 18 | <% extra_content_list = @plugins.dispatch(:catalog_list_item_extras, product).collect { |content| instance_eval(&content) } %> |
| ... | ... | @@ -132,10 +120,11 @@ |
| 132 | 120 | </ul> |
| 133 | 121 | </li> |
| 134 | 122 | <% end %> |
| 135 | -</ul> | |
| 123 | +</ul><!-- end id="product-list" --> | |
| 136 | 124 | |
| 137 | 125 | <%= pagination_links @products, :params => {:controller => :catalog, :action => :index, :profile => profile.identifier} %> |
| 138 | 126 | |
| 139 | 127 | <%= add_zoom_to_images %> |
| 140 | 128 | |
| 141 | 129 | <br style="clear:both"/> |
| 130 | +</div><!-- end id="product-catalog" --> | ... | ... |
app/views/profile_editor/_organization.rhtml
| ... | ... | @@ -65,3 +65,7 @@ |
| 65 | 65 | <%= labelled_check_box(_('Enable "contact us"'), 'profile_data[enable_contact_us]', "1", @profile.enable_contact_us) if @profile.enterprise? %> |
| 66 | 66 | |
| 67 | 67 | <%= render :partial => 'moderation', :locals => { :profile => @profile } %> |
| 68 | + | |
| 69 | +<h2><%=_('Product/Service catalog')%></h2> | |
| 70 | + | |
| 71 | +<%= f.text_field(:products_per_catalog_page, :size=>3) %> | ... | ... |
db/migrate/20130626152300_add_product_categories_block_to_enterprises.rb
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +class AddProductCategoriesBlockToEnterprises < ActiveRecord::Migration | |
| 2 | + def self.up | |
| 3 | + Enterprise.find_each do |enterprise| | |
| 4 | + enterprise.boxes << Box.new while enterprise.boxes.length < 2 | |
| 5 | + enterprise.boxes[1].blocks << ProductCategoriesBlock.new | |
| 6 | + end | |
| 7 | + end | |
| 8 | + | |
| 9 | + def self.down | |
| 10 | + Enterprise.find_each do |enterprise| | |
| 11 | + enterprise.boxes.each do |box| | |
| 12 | + box.blocks.each do |block| | |
| 13 | + block.destroy if block.class == ProductCategoriesBlock | |
| 14 | + end | |
| 15 | + end | |
| 16 | + end | |
| 17 | + end | |
| 18 | +end | ... | ... |
public/designs/themes/base/style.css
| ... | ... | @@ -729,6 +729,110 @@ div#notice { |
| 729 | 729 | filter:alpha(opacity=50); |
| 730 | 730 | } |
| 731 | 731 | |
| 732 | + | |
| 733 | +/********************* Product Categories Block **********************/ | |
| 734 | + | |
| 735 | +.product-categories-block .catalog-home-link { | |
| 736 | + display: block; | |
| 737 | + background: rgba(0,0,0,0.08); | |
| 738 | + font-weight: bold; | |
| 739 | + text-align: center; | |
| 740 | + border-radius: 5px; | |
| 741 | + padding: 0px; | |
| 742 | + line-height: 200%; | |
| 743 | + text-decoration: none; | |
| 744 | + color: #000; | |
| 745 | +} | |
| 746 | +.product-categories-block .catalog-home-link:hover { | |
| 747 | + background: rgba(0,0,0,0.6); | |
| 748 | + color: #FFF; | |
| 749 | + text-decoration: none; | |
| 750 | +} | |
| 751 | + | |
| 752 | +.product-categories-block .catalog-categories-list { | |
| 753 | + margin-top: 0.5em; | |
| 754 | +} | |
| 755 | + | |
| 756 | +.product-categories-block ul { | |
| 757 | + list-style-type: none; | |
| 758 | + margin: 0px; | |
| 759 | + padding: 0px; | |
| 760 | + border-radius: 5px; | |
| 761 | + color: rgba(0,0,0,0.4); | |
| 762 | +} | |
| 763 | + | |
| 764 | +.product-categories-block li { | |
| 765 | + margin: 0; | |
| 766 | + padding: 0; | |
| 767 | + white-space: nowrap; | |
| 768 | +} | |
| 769 | + | |
| 770 | +.product-categories-block li li div { | |
| 771 | + padding: 0 0 0 1.5em; | |
| 772 | +} | |
| 773 | + | |
| 774 | +.product-categories-block .catalog-categories-list a { | |
| 775 | + text-decoration: none; | |
| 776 | + font-size: 120%; | |
| 777 | + line-height: 150%; | |
| 778 | + color: #333; | |
| 779 | + overflow: hidden; | |
| 780 | + text-overflow: ellipsis; | |
| 781 | + display: inline-block; | |
| 782 | + padding: 0 0.3em 0 0.5em; | |
| 783 | + border-radius: 5px; | |
| 784 | + max-width: 80%; | |
| 785 | + vertical-align: middle; | |
| 786 | +} | |
| 787 | +.product-categories-block .catalog-categories-list ul a { | |
| 788 | + text-decoration: none; | |
| 789 | + font-size: 110%; | |
| 790 | + line-height: 163.6%; | |
| 791 | +} | |
| 792 | +.product-categories-block .catalog-categories-list div:hover a:hover { | |
| 793 | + background: rgba(0,0,0,0.6); | |
| 794 | + color: #FFF; | |
| 795 | + text-decoration: none; | |
| 796 | +} | |
| 797 | + | |
| 798 | +.product-categories-block .catalog-categories-list div:hover a, | |
| 799 | +.product-categories-block .catalog-categories-list div:hover .count { | |
| 800 | + background: rgba(0,0,0,0.08); | |
| 801 | +} | |
| 802 | + | |
| 803 | +.block.product-categories-block .catalog-categories-list a { | |
| 804 | + font-weight: bold; | |
| 805 | +} | |
| 806 | + | |
| 807 | +.block.product-categories-block .catalog-categories-list ul a { | |
| 808 | + font-weight: normal; | |
| 809 | +} | |
| 810 | + | |
| 811 | +.product-categories-block a:hover { | |
| 812 | + text-decoration: underline; | |
| 813 | +} | |
| 814 | + | |
| 815 | +.product-categories-block .count { | |
| 816 | + display: inline-block; | |
| 817 | + vertical-align: middle; | |
| 818 | + margin-left: -0.2em; | |
| 819 | + padding: 0 0.2em; | |
| 820 | + line-height: 180%; | |
| 821 | + border-radius: 5px; | |
| 822 | +} | |
| 823 | + | |
| 824 | +.block.product-categories-block .count:before { | |
| 825 | + content: "("; | |
| 826 | +} | |
| 827 | +.block.product-categories-block .count:after { | |
| 828 | + content: ")"; | |
| 829 | +} | |
| 830 | + | |
| 831 | +.catalog-categories-notice { | |
| 832 | + color: rgba(0,0,0,0.3); | |
| 833 | + padding: 0.5em 1em; | |
| 834 | +} | |
| 835 | + | |
| 732 | 836 | /********************* Environment Statistics ************************/ |
| 733 | 837 | |
| 734 | 838 | #content .environment-statistics-block ul { | ... | ... |
public/stylesheets/application.css
| ... | ... | @@ -2645,7 +2645,17 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation |
| 2645 | 2645 | /* ==> @import url('products.css'); <== */ |
| 2646 | 2646 | /* * * Products catalog * * * * * * * * * * * * */ |
| 2647 | 2647 | |
| 2648 | +#product-catalog { | |
| 2649 | + text-align: center; | |
| 2650 | +} | |
| 2651 | + | |
| 2652 | +.product-catalog-ctrl { | |
| 2653 | + float: right; | |
| 2654 | +} | |
| 2655 | + | |
| 2648 | 2656 | #product-list { |
| 2657 | + display: inline-block; | |
| 2658 | + text-align: left; | |
| 2649 | 2659 | line-height: 20px; |
| 2650 | 2660 | margin: 0px; |
| 2651 | 2661 | padding: 0px; |
| ... | ... | @@ -2657,11 +2667,11 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation |
| 2657 | 2667 | list-style: none; |
| 2658 | 2668 | } |
| 2659 | 2669 | #product-list li.product { |
| 2670 | + display: inline-block; | |
| 2660 | 2671 | width: 200px; |
| 2661 | 2672 | min-height: 280px; |
| 2662 | - padding: 10px 30px 10px 0; | |
| 2673 | + padding: 10px 15px; | |
| 2663 | 2674 | margin-bottom: 10px; |
| 2664 | - display: inline-block; | |
| 2665 | 2675 | vertical-align: top; |
| 2666 | 2676 | } |
| 2667 | 2677 | #product-list .expand-box:hover { |
| ... | ... | @@ -2871,67 +2881,13 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation |
| 2871 | 2881 | margin-top: -15px; |
| 2872 | 2882 | } |
| 2873 | 2883 | |
| 2874 | -.l-sidebar-left-bar ul, | |
| 2875 | -.l-sidebar-right-bar ul { | |
| 2876 | - list-style-type: none; | |
| 2877 | - margin-left: 0; | |
| 2878 | - padding: 1em 1em 0.5em 1em; | |
| 2879 | -} | |
| 2880 | - | |
| 2881 | -.l-sidebar-left-bar ul ul, | |
| 2882 | -.l-sidebar-right-bar ul ul { | |
| 2883 | - padding-top: 0; | |
| 2884 | -} | |
| 2885 | - | |
| 2886 | -.l-sidebar-left-bar ul{ | |
| 2887 | - background-color: #eeeeec; | |
| 2888 | - border-radius: 5px; | |
| 2889 | -} | |
| 2890 | - | |
| 2891 | -.l-sidebar-left-bar a, | |
| 2892 | -.l-sidebar-right-bar a { | |
| 2893 | - text-decoration: none; | |
| 2894 | -} | |
| 2895 | - | |
| 2896 | -.l-sidebar-left-bar a:hover, | |
| 2897 | -.l-sidebar-right-bar a:hover { | |
| 2898 | - text-decoration: underline; | |
| 2899 | -} | |
| 2900 | - | |
| 2901 | -.l-sidebar-left-bar li, | |
| 2902 | -.l-sidebar-right-bar li { | |
| 2903 | - margin: 0; | |
| 2904 | - padding: 0; | |
| 2905 | -} | |
| 2906 | - | |
| 2907 | -#catalog-categories-notice { | |
| 2908 | - color: #555753; | |
| 2909 | - padding-bottom: 0.5em; | |
| 2910 | -} | |
| 2911 | - | |
| 2912 | -.l-sidebar-left-bar .catalog-categories-link { | |
| 2913 | - background-color: #d3d7cf; | |
| 2914 | - font-weight: bold; | |
| 2915 | - height: 28px; | |
| 2916 | - text-align: center; | |
| 2917 | - border-radius: 5px; | |
| 2918 | - margin-bottom: 10px; | |
| 2919 | -} | |
| 2920 | - | |
| 2921 | - | |
| 2922 | -.l-sidebar-left-bar .catalog-categories-link:hover { | |
| 2923 | - background-color: #babdb6; | |
| 2884 | +#product-list .highlighted img.star { | |
| 2885 | + position: absolute; | |
| 2886 | + top: 2px; | |
| 2887 | + right: 2px; | |
| 2888 | + z-index: 1; | |
| 2924 | 2889 | } |
| 2925 | 2890 | |
| 2926 | - | |
| 2927 | -.l-sidebar-left-bar .catalog-categories-link a{ | |
| 2928 | - display: inline-block; | |
| 2929 | - height: 100%; | |
| 2930 | - width: 100%; | |
| 2931 | - line-height: 28px; | |
| 2932 | - text-decoration: none; | |
| 2933 | - color: #2e3436; | |
| 2934 | -} | |
| 2935 | 2891 | /* * * Show Product * * * * * * * * * * * * */ |
| 2936 | 2892 | |
| 2937 | 2893 | .controller-catalog #show_product .product-pic { |
| ... | ... | @@ -6454,33 +6410,12 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img { |
| 6454 | 6410 | line-height: 1.5; |
| 6455 | 6411 | } |
| 6456 | 6412 | |
| 6457 | -/* Sidebar Layout */ | |
| 6458 | - | |
| 6459 | -.l-sidebar-left-bar { | |
| 6460 | - float: left; | |
| 6461 | - width: 20%; | |
| 6462 | -} | |
| 6463 | - | |
| 6464 | -.l-sidebar-left-content { | |
| 6465 | - float: right; | |
| 6466 | - width: 78%; | |
| 6467 | -} | |
| 6468 | - | |
| 6469 | -.l-sidebar-right-bar { | |
| 6470 | - float: right; | |
| 6471 | - width: 20%; | |
| 6472 | -} | |
| 6473 | - | |
| 6474 | -.l-sidebar-right-content { | |
| 6475 | - float: left; | |
| 6476 | - width: 78%; | |
| 6477 | -} | |
| 6478 | - | |
| 6479 | 6413 | /* Breadcrumb */ |
| 6480 | 6414 | |
| 6481 | 6415 | #breadcrumb { |
| 6482 | 6416 | font-size: 16px; |
| 6483 | 6417 | margin: 15px 0; |
| 6418 | + text-align: left; | |
| 6484 | 6419 | } |
| 6485 | 6420 | |
| 6486 | 6421 | .controller-profile_editor #profile-data { |
| ... | ... | @@ -6531,11 +6466,3 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img { |
| 6531 | 6466 | width: 100px; |
| 6532 | 6467 | text-align: center; |
| 6533 | 6468 | } |
| 6534 | - | |
| 6535 | -#product-list .highlighted img.star { | |
| 6536 | - position: absolute; | |
| 6537 | - top: 2px; | |
| 6538 | - right: 2px; | |
| 6539 | - z-index: 1; | |
| 6540 | -} | |
| 6541 | - | ... | ... |
| ... | ... | @@ -0,0 +1,58 @@ |
| 1 | +require File.dirname(__FILE__) + '/../test_helper' | |
| 2 | + | |
| 3 | +class CatalogHelperTest < ActiveSupport::TestCase | |
| 4 | + | |
| 5 | + include CatalogHelper | |
| 6 | + include ActionView::Helpers::TextHelper | |
| 7 | + include ActionView::Helpers::UrlHelper | |
| 8 | + include ActionView::Helpers::TagHelper | |
| 9 | + include ActionController::Assertions::SelectorAssertions | |
| 10 | + | |
| 11 | + def url_for(opts) | |
| 12 | + #{:controller => 'catalog', :action => 'index', :level => category.id} | |
| 13 | + "#{opts[:controller]}-#{opts[:action]}-level=#{opts[:level]}" | |
| 14 | + end | |
| 15 | + | |
| 16 | + def new_productcategory(parent, name) | |
| 17 | + cat = ProductCategory.new( | |
| 18 | + :name => name, :environment => Environment.default, :parent => parent | |
| 19 | + ) | |
| 20 | + cat if cat.save | |
| 21 | + end | |
| 22 | + | |
| 23 | + def setup | |
| 24 | + @enterprise = Enterprise.create! :name => 'Test Enterprise', | |
| 25 | + :identifier => 'testenterprise', | |
| 26 | + :environment => Environment.default | |
| 27 | + @profile = @enterprise | |
| 28 | + @block = @enterprise.blocks.select{|b| b.class == ProductCategoriesBlock }[0] | |
| 29 | + @products = new_productcategory nil, 'Products' | |
| 30 | + @food = new_productcategory @products, 'Food' | |
| 31 | + @vegetables = new_productcategory @food, 'Vegetables' | |
| 32 | + @beans = new_productcategory @vegetables, 'Beans' | |
| 33 | + @rice = new_productcategory @vegetables, 'Rice' | |
| 34 | + @mineral = new_productcategory @products, 'Mineral' | |
| 35 | + @iron = new_productcategory @mineral, 'Iron' | |
| 36 | + @gold = new_productcategory @mineral, 'Gold' | |
| 37 | + end | |
| 38 | + attr_accessor :profile | |
| 39 | + | |
| 40 | + should 'list product category sub-list' do | |
| 41 | + @enterprise.products.create!(:name => 'Gold Ring', :product_category => @gold) | |
| 42 | + @enterprise.products.create!(:name => 'Uncle Jon Beans', :product_category => @beans) | |
| 43 | + @enterprise.products.create!(:name => 'Red Rice', :product_category => @rice) | |
| 44 | + | |
| 45 | + html = category_with_sub_list @products | |
| 46 | + | |
| 47 | + doc = HTML::Document.new "<body>#{html}</body>" | |
| 48 | + assert_select doc.root, 'div' do |divs| | |
| 49 | + assert_select divs[0], "a[href=catalog-index-level=#{@products.id}]" | |
| 50 | + assert_select divs[0], '.count', {:text=>'3'} | |
| 51 | + assert_select divs[1], "a[href=catalog-index-level=#{@food.id}]" | |
| 52 | + assert_select divs[1], '.count', {:text=>'2'} | |
| 53 | + assert_select divs[2], "a[href=catalog-index-level=#{@mineral.id}]" | |
| 54 | + assert_select divs[2], '.count', {:text=>'1'} | |
| 55 | + end | |
| 56 | + end | |
| 57 | + | |
| 58 | +end | ... | ... |