Commit 11142e99f55d9b6fd23dee8f553bd0a7d9018d68
1 parent
09f41a83
Exists in
master
and in
29 other branches
ActionItem323: better layout for category index
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1725 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
8 changed files
with
56 additions
and
108 deletions
Show diff stats
app/controllers/public/search_controller.rb
@@ -29,19 +29,6 @@ class SearchController < ApplicationController | @@ -29,19 +29,6 @@ class SearchController < ApplicationController | ||
29 | end | 29 | end |
30 | end | 30 | end |
31 | 31 | ||
32 | - def action_product_category | ||
33 | - @products = category.products | ||
34 | - @enterprises = category.products.map{|p| p.enterprise}.flatten.uniq | ||
35 | - @users = category.consumers | ||
36 | - end | ||
37 | - | ||
38 | - def action_category | ||
39 | - @recent_articles = @finder.recent('articles') | ||
40 | - @recent_comments = @finder.recent('comments') | ||
41 | - @most_commented_articles = @finder.most_commented_articles | ||
42 | - end | ||
43 | - alias :action_region :action_category | ||
44 | - | ||
45 | public | 32 | public |
46 | 33 | ||
47 | include SearchHelper | 34 | include SearchHelper |
@@ -58,7 +45,7 @@ class SearchController < ApplicationController | @@ -58,7 +45,7 @@ class SearchController < ApplicationController | ||
58 | ] | 45 | ] |
59 | 46 | ||
60 | # TODO don't hardcode like this >:-( | 47 | # TODO don't hardcode like this >:-( |
61 | - LIST_LIMIT = 10 | 48 | + LIST_LIMIT = 20 |
62 | 49 | ||
63 | def index | 50 | def index |
64 | @query = params[:query] || '' | 51 | @query = params[:query] || '' |
@@ -76,7 +63,18 @@ class SearchController < ApplicationController | @@ -76,7 +63,18 @@ class SearchController < ApplicationController | ||
76 | 63 | ||
77 | # view the summary of one category | 64 | # view the summary of one category |
78 | def category_index | 65 | def category_index |
79 | - send('action_' + category.class.name.underscore) | 66 | + @results = {} |
67 | + @names = {} | ||
68 | + [ | ||
69 | + [ :recent_people, _('Recently registered people'), @finder.recent('people') ], | ||
70 | + [ :recent_communities, _('Recently created communities'), @finder.recent('communities') ], | ||
71 | + [ :recent_articles, _('Recent articles'), @finder.recent('articles') ], | ||
72 | + [ :recent_comments, _('Recent comments'), @finder.recent('comments') ], | ||
73 | + [ :most_commented_articles, _('Most commented articles'), @finder.most_commented_articles ] | ||
74 | + ].each do |key, name, list| | ||
75 | + @results[key] = list | ||
76 | + @names[key] = name | ||
77 | + end | ||
80 | end | 78 | end |
81 | attr_reader :category | 79 | attr_reader :category |
82 | 80 |
app/views/search/_category.rhtml
@@ -1,34 +0,0 @@ | @@ -1,34 +0,0 @@ | ||
1 | - | ||
2 | -<div id="category-recent-articles"> | ||
3 | - <h2><%= _('Recent articles') %></h2> | ||
4 | - <div class="category-innerbox"> | ||
5 | - <ul class="recent_on_cat recent_articles"> | ||
6 | - <%= render :partial => 'article', :collection => @recent_articles %> | ||
7 | - </ul> | ||
8 | - </div><!-- end class="category-innerbox" --> | ||
9 | -</div><!-- end id="category-recent-articles" --> | ||
10 | - | ||
11 | -<div id="category-comments"> | ||
12 | - | ||
13 | -<div id="category-recent-comments"> | ||
14 | - <h2><%= _('Recent Comments') %></h2> | ||
15 | - <div class="category-innerbox"> | ||
16 | - <ul class="recent_on_cat recent_comments"> | ||
17 | - <% @recent_comments.each do |comment| %> | ||
18 | - <%= render :partial => 'comment', :object => comment %> | ||
19 | - <% end %> | ||
20 | - </ul> | ||
21 | - </div><!-- end class="category-innerbox" --> | ||
22 | -</div><!-- end id="category-recent-articles" --> | ||
23 | - | ||
24 | -<div id="most-commented"> | ||
25 | - <h2><%= _('Most commented articles') %></h2> | ||
26 | - <div class="category-innerbox"> | ||
27 | - <ul class="most_commented"> | ||
28 | - <%= render :partial => 'article', :collection => @most_commented_articles %> | ||
29 | - </ul> | ||
30 | - </div><!-- end class="category-innerbox" --> | ||
31 | -</div><!-- end id="most-commented" --> | ||
32 | - | ||
33 | -</div><!-- end id="category-comments" --> | ||
34 | - |
app/views/search/_display_results.rhtml
1 | <div id="search-results" class="<%= 'only-one-result-box' if @results.size == 1 %>"> | 1 | <div id="search-results" class="<%= 'only-one-result-box' if @results.size == 1 %>"> |
2 | 2 | ||
3 | -<% if @category %> | 3 | +<% if @category && !@query.blank? %> |
4 | <div id="search-whole-site"> | 4 | <div id="search-whole-site"> |
5 | <%= link_to _('Search for "%s" in the whole site') % @query, | 5 | <%= link_to _('Search for "%s" in the whole site') % @query, |
6 | :controller => 'search', :action => 'index', :category_path => [], :query => @query %> | 6 | :controller => 'search', :action => 'index', :category_path => [], :query => @query %> |
app/views/search/_product_category.rhtml
@@ -1,29 +0,0 @@ | @@ -1,29 +0,0 @@ | ||
1 | -<%= link_to(_('I consume this'), {:profile => current_user.login, :controller => 'consumed_products', :action => 'new', 'consumption[product_category_id]' => @category.id }, :method => :post) if logged_in? %> | ||
2 | -<ul> | ||
3 | - <li><%= n_("One product in this category.", "%{num} products in this category.", @products.size) % { :num => @products.size } %></li> | ||
4 | - <li><%= n_("One enterprise sells products in this category.", "%{num} enterprises sells products in this category.", @enterprises.size) % { :num => @enterprises.size} %></li> | ||
5 | - <li><%= n_("One user consumes this product.", "%{num} users consumes this product", @users.size) % {:num => @users.size} %></li> | ||
6 | -</ul> | ||
7 | - | ||
8 | -<h3> <%= _('Products under this category:') %> </h3> | ||
9 | -<ul> | ||
10 | - <% @products.each do |p| %> | ||
11 | - <li> | ||
12 | - <%= image_tag p.image.public_filename(:thumb) if p.image%> | ||
13 | - <%= link_to_product(p) %> <br/> | ||
14 | - <% if p.price %> | ||
15 | - <%= _('Price: %d') % p.price %> <br/> | ||
16 | - <% end %> | ||
17 | - <%= _('Enterprise:') %> <%= link_to_homepage p.enterprise.name, p.enterprise.identifier %> <br/><br/> | ||
18 | - </li> | ||
19 | - <% end %> | ||
20 | -</ul> | ||
21 | - | ||
22 | -<h3><%= _('Users that consumes products in this category:') %></h3> | ||
23 | - | ||
24 | -<% @users.each do |u| %> | ||
25 | - <p> | ||
26 | - <%= image_tag u.image.public_filename(:thumb) if u.image %> <br> | ||
27 | - <%= link_to_homepage(u.name, u.identifier) %> | ||
28 | - </p> | ||
29 | -<% end %> |
app/views/search/_region.rhtml
app/views/search/assets.rhtml
1 | -<h2><%= @category ? (_('%{asset_name} in %{category}') % { :asset_name => @asset_name, :category => @category.full_name}) : @asset_name %></h2> | 1 | +<h1><%= @category ? (_('%{asset_name} in %{category}') % { :asset_name => @asset_name, :category => @category.name}) : @asset_name %></h1> |
2 | 2 | ||
3 | <%= render :partial => 'display_results' %> | 3 | <%= render :partial => 'display_results' %> |
app/views/search/category_index.rhtml
@@ -6,10 +6,8 @@ | @@ -6,10 +6,8 @@ | ||
6 | 6 | ||
7 | <h1 id="category-name"><%= _('Category: %s') % @category.name %></h1> | 7 | <h1 id="category-name"><%= _('Category: %s') % @category.name %></h1> |
8 | 8 | ||
9 | - <div class="category_itens"> | ||
10 | - <%= render :partial => @category.class.name.underscore %> | ||
11 | - </div><!-- end class="category_itens" --> | ||
12 | - | 9 | + <%= render :partial => 'display_results' %> |
10 | + | ||
13 | <div id="category-childs"> | 11 | <div id="category-childs"> |
14 | <h2> <%= _('Sub-categories') %> </h2> | 12 | <h2> <%= _('Sub-categories') %> </h2> |
15 | <% if @category.children.empty? %> | 13 | <% if @category.children.empty? %> |
test/functional/search_controller_test.rb
@@ -433,46 +433,62 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -433,46 +433,62 @@ class SearchControllerTest < Test::Unit::TestCase | ||
433 | end | 433 | end |
434 | 434 | ||
435 | should 'list recent articles in the category' do | 435 | should 'list recent articles in the category' do |
436 | - @controller.expects(:category).returns(@category).at_least_once | ||
437 | recent = [] | 436 | recent = [] |
438 | - finder = CategoryFinder.new(@category) | ||
439 | - finder.expects(:recent).with('comments').returns(recent) | ||
440 | - finder.expects(:recent).with('articles').returns(recent) | ||
441 | - CategoryFinder.expects(:new).with(@category).returns(finder) | 437 | + finger = CategoryFinder.new(@category) |
438 | + finger.expects(:recent).with(anything).at_least_once | ||
439 | + finger.expects(:recent).with('articles').returns(recent) | ||
440 | + CategoryFinder.expects(:new).with(@category).returns(finger) | ||
442 | 441 | ||
443 | get :category_index, :category_path => [ 'my-category' ] | 442 | get :category_index, :category_path => [ 'my-category' ] |
444 | - assert_same recent, assigns(:recent_articles) | 443 | + assert_same recent, assigns(:results)[:recent_articles] |
445 | end | 444 | end |
446 | 445 | ||
447 | should 'list recent comments in the category' do | 446 | should 'list recent comments in the category' do |
448 | - @controller.expects(:category).returns(@category).at_least_once | ||
449 | recent = [] | 447 | recent = [] |
450 | - finder = CategoryFinder.new(@category) | ||
451 | - finder.expects(:recent).with('comments').returns(recent) | ||
452 | - finder.expects(:recent).with('articles').returns(recent) | ||
453 | - CategoryFinder.expects(:new).with(@category).returns(finder) | 448 | + finger = CategoryFinder.new(@category) |
449 | + finger.expects(:recent).with(anything).at_least_once | ||
450 | + finger.expects(:recent).with('comments').returns(recent) | ||
451 | + CategoryFinder.expects(:new).with(@category).returns(finger) | ||
454 | 452 | ||
455 | get :category_index, :category_path => [ 'my-category' ] | 453 | get :category_index, :category_path => [ 'my-category' ] |
456 | - assert_same recent, assigns(:recent_comments) | 454 | + assert_same recent, assigns(:results)[:recent_comments] |
457 | end | 455 | end |
458 | 456 | ||
459 | should 'list most commented articles in the category' do | 457 | should 'list most commented articles in the category' do |
460 | - @controller.expects(:category).returns(@category).at_least_once | ||
461 | most_commented = [] | 458 | most_commented = [] |
462 | - finder = CategoryFinder.new(@category) | ||
463 | - finder.expects(:most_commented_articles).returns(most_commented) | ||
464 | - CategoryFinder.expects(:new).with(@category).returns(finder) | 459 | + finger = CategoryFinder.new(@category) |
460 | + finger.expects(:most_commented_articles).returns(most_commented) | ||
461 | + CategoryFinder.expects(:new).with(@category).returns(finger) | ||
465 | 462 | ||
466 | get :category_index, :category_path => [ 'my-category' ] | 463 | get :category_index, :category_path => [ 'my-category' ] |
467 | - assert_same most_commented, assigns(:most_commented_articles) | 464 | + assert_same most_commented, assigns(:results)[:most_commented_articles] |
468 | end | 465 | end |
469 | 466 | ||
470 | - should 'display category of products' do | ||
471 | - cat = ProductCategory.create!(:name => 'Food', :environment => Environment.default) | ||
472 | - ent = Enterprise.create!(:name => 'Enterprise test', :identifier => 'enterprise_test') | ||
473 | - p = cat.products.create!(:name => 'product test', :enterprise => ent) | ||
474 | - get :category_index, :category_path => cat.path.split('/') | ||
475 | - assert_includes assigns(:products), p | 467 | + should 'list recently registered people in the category' do |
468 | + recent_people = [] | ||
469 | + finger = CategoryFinder.new(@category) | ||
470 | + finger.expects(:recent).with(anything).at_least_once | ||
471 | + finger.expects(:recent).with('people').returns(recent_people) | ||
472 | + CategoryFinder.expects(:new).with(@category).returns(finger) | ||
473 | + | ||
474 | + get :category_index, :category_path => [ 'my-category' ] | ||
475 | + assert_same recent_people, assigns(:results)[:recent_people] | ||
476 | + end | ||
477 | + | ||
478 | + should 'list recently registered communities in the category' do | ||
479 | + recent_communities = [] | ||
480 | + finger = CategoryFinder.new(@category) | ||
481 | + finger.expects(:recent).with(anything).at_least_once | ||
482 | + finger.expects(:recent).with('communities').returns(recent_communities) | ||
483 | + CategoryFinder.expects(:new).with(@category).returns(finger) | ||
484 | + | ||
485 | + get :category_index, :category_path => [ 'my-category' ] | ||
486 | + assert_same recent_communities, assigns(:results)[:recent_communities] | ||
487 | + end | ||
488 | + | ||
489 | + should 'not list "Search for ..." in category_index' do | ||
490 | + get :category_index, :category_path => [ 'my-category' ] | ||
491 | + assert_no_tag :content => /Search for ".*" in the whole site/ | ||
476 | end | 492 | end |
477 | 493 | ||
478 | # SECURITY | 494 | # SECURITY |