search_helper.rb
4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
module SearchHelper
MAP_SEARCH_LIMIT = 2000
LIST_SEARCH_LIMIT = 20
BLOCKS_SEARCH_LIMIT = 24
MULTIPLE_SEARCH_LIMIT = 8
SEARCHES = ActiveSupport::OrderedHash[
:articles, _('Contents'),
:enterprises, _('Enterprises'),
:people, _('People'),
:communities, _('Communities'),
:products, _('Products and Services'),
:events, _('Events'),
]
DEFAULT_DISPLAY = {
:articles => 'full',
:communities => 'compact',
:enterprises => 'full',
:events => 'full',
:people => 'compact',
:products => 'full',
}
# FIXME remove it after search_controler refactored
include EventsHelper
def multiple_search?
['index', 'category_index'].include?(params[:action]) || @searches.size > 1
end
def map_search?
!multiple_search? && params[:display] == 'map'
end
def asset_class(asset)
asset.to_s.singularize.camelize.constantize
end
def search_page_title(title, category = nil)
title = "<h1>" + title
title += ' - <small>' + category.name + '</small>' if category
title + "</h1>"
end
def category_context(category, url)
content_tag('div', category.full_name + _(', ') +
link_to(_('search in all categories'),
url.merge(:category_path => [], :action => (params[:action] == 'category_index' ? 'index' : params[:action]) )),
:align => 'center', :class => 'search-category-context') if category
end
def display_map?(asset)
[:enterprises, :products].include?(asset)
end
def display_compact?(asset)
[:communities, :enterprises, :people].include?(asset)
end
def display_full?(asset)
[:articles, :enterprises, :events, :products].include?(asset)
end
def display_results(asset = nil)
if display_map?(asset) and map_search?
partial = 'google_maps'
klass = 'map'
else
partial = 'display_results'
klass = 'list'
end
content_tag('div', render(:partial => partial), :class => "map-or-list-search-results #{klass}")
end
def city_with_state(city)
if city and city.kind_of?(City)
s = city.parent
if s and s.kind_of?(State) and s.acronym
city.name + ', ' + s.acronym
else
city.name
end
else
nil
end
end
def display_selector(asset, display, float = 'right')
if [display_map?(asset), display_compact?(asset), display_full?(asset)].select {|option| option}.count > 1
compact_link = display_compact?(asset) ? (display == 'compact' ? _('Compact') : link_to(_('Compact'), params.merge(:display => 'compact'))) : nil
map_link = display_map?(asset) ? (display == 'map' ? _('Map') : link_to(_('Map'), params.merge(:display => 'map'))) : nil
full_link = display_full?(asset) ? (display == 'full' ? _('Full') : link_to(_('Full'), params.merge(:display => 'full'))) : nil
content_tag('div',
content_tag('strong', _('Display')) + ': ' + [compact_link, map_link, full_link].compact.join(' | '),
:id => 'search-display-filter',
:style => "float: #{float}"
)
end
end
def filter_title(asset, filter)
{
'articles_more_recent' => _('More recent contents from network'),
'articles_more_popular' => _('More viewed contents from network'),
'articles_more_comments' => _('Most commented contents from network'),
'people_more_recent' => _('More recent people from network'),
'people_more_active' => _('More active people from network'),
'people_more_popular' => _('More popular people from network'),
'communities_more_recent' => _('More recent communities from network'),
'communities_more_active' => _('More active communities from network'),
'communities_more_popular' => _('More popular communities from network'),
'enterprises_more_recent' => _('More recent enterprises from network'),
'enterprises_more_active' => _('More active enterprises from network'),
'enterprises_more_popular' => _('More popular enterprises from network'),
'products_more_recent' => _('Highlights'),
}[asset.to_s + '_' + filter].to_s
end
end