66 </ div >
77 <% end %>
88
9- <% if @projects . any? %>
10- <%= render @projects %>
11- <%== pagy_bootstrap_nav ( @pagy ) if @pagy . pages > 1 %>
12- <% else %>
13- < div class ="alert alert-info " role ="alert ">
14- No projects found for the search term "<%= params [ :q ] %> "
9+ < div class ="row ">
10+ < div class ="col-md-3 ">
11+ <% @projects . facets_distribution . each do |facet , values | %>
12+ < div class ="mb-3 ">
13+ < ul class ="list-group ">
14+ < li class ="list-group-item list-group-item-secondary ">
15+ <%= facet . humanize %>
16+ </ li >
17+ <% values . each_with_index do |( value , count ) , index | %>
18+ < li class ="list-group-item facet-item <%= 'd-none' if index >= 20 %> " data-facet ="<%= facet %> ">
19+ <%= link_to search_projects_path ( q : params [ :q ] , facet => value ) , class : "text-decoration-none d-flex justify-content-between align-items-center" do %>
20+ < span > <%= value %> </ span >
21+ < span class ="badge bg-secondary "> <%= count %> </ span >
22+ <% end %>
23+ </ li >
24+ <% end %>
25+ <% if values . size > 20 %>
26+ < li class ="list-group-item text-center ">
27+ < button class ="btn btn-link p-0 show-more " data-facet ="<%= facet %> "> Show More</ button >
28+ </ li >
29+ <% end %>
30+ </ ul >
31+ </ div >
32+ <% end %>
1533 </ div >
16- <% end %>
17- </ div >
34+
35+ < div class ="col-md-9 ">
36+ <% if @projects . any? %>
37+ <%= render @projects %>
38+ <%== pagy_bootstrap_nav ( @pagy ) if @pagy . pages > 1 %>
39+ <% else %>
40+ < div class ="alert alert-info " role ="alert ">
41+ No projects found for the search term "<%= params [ :q ] %> "
42+ </ div >
43+ <% end %>
44+ </ div >
45+ </ div >
46+ </ div >
47+
48+ < script >
49+ document . addEventListener ( "DOMContentLoaded" , function ( ) {
50+ document . querySelectorAll ( ".show-more" ) . forEach ( button => {
51+ button . addEventListener ( "click" , function ( ) {
52+ const facet = this . dataset . facet ;
53+
54+ // Show all hidden facet items
55+ document . querySelectorAll ( `.facet-item[data-facet="${ facet } "].d-none` ) . forEach ( el => {
56+ el . classList . remove ( "d-none" ) ;
57+ } ) ;
58+
59+ // Remove the entire list-group-item containing the button
60+ this . closest ( ".list-group-item" ) . remove ( ) ;
61+ } ) ;
62+ } ) ;
63+ } ) ;
64+ </ script >
0 commit comments