Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 47 additions & 13 deletions decidim-core/app/views/decidim/searches/_filters.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -16,48 +16,82 @@
</button>
<% end %>
</div>
<button id="dropdown-trigger-search" data-component="dropdown" data-target="dropdown-menu-search" data-auto-close="true">
<button id="dropdown-trigger-search" data-component="dropdown" data-target="dropdown-menu-search" data-auto-close="true" aria-expanded="true">
<%= content_tag :span, t("decidim.searches.filters_small_view.filter_by"), class: "#{"is-active" if params.dig(:filter, :with_resource_type) == nil}" %>
<% @blocks.each do |elements| %>
<% elements.each do |type, results| %>
<%= content_tag :span, class: "#{"is-active" if params.dig(:filter, :with_resource_type) == type}" do %>
<span><%= searchable_resource_human_name(type) %></span>
<% end %>

<% end %>
<% end %>
<%= icon "arrow-down-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
<%= icon "arrow-up-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
</button>
<div id="dropdown-menu-search" aria-hidden="true">
<div>
<ul id="dropdown-menu-search" aria-hidden="true">
<li>
<%= link_to main_search_path, class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == nil}" do %>
<%= resource_type_icon("all") %>
<span><%= t("all", scope: "decidim.searches.filters.state") %></span>
<span class="label ml-auto"><%= @results_count %></span>
<% end %>
</div>
</li>
<% @blocks.each do |elements| %>
<div>
<% elements.each do |type, results| %>
<div>
<li>
<ul>
<% elements.each do |type, results| %>
<% if results[:count].positive? %>
<li>
<%= link_to search_path_by_resource_type(type), class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == type}" do %>
<%= resource_type_icon(type) %>
<span><%= searchable_resource_human_name(type) %></span>
<span class="label ml-auto"><%= results[:count] %></span>
<% end %>
</li>
<% else %>
<%= content_tag :div, class: "filter#{" is-empty" if results[:count].zero?}" do %>
<%= content_tag :li, class: "filter#{" is-empty" if results[:count].zero?}" do %>
<%= resource_type_icon(type) %>
<span><%= searchable_resource_human_name(type) %></span>
<span class="label ml-auto"><%= results[:count] %></span>
<% end %>
<% end %>
</div>
<% end %>
</div>
<% end %>
</ul>
</li>
<% end %>
</div>
</ul>
</div>
</nav>
<script type="text/javascript">
const button = document.querySelector('#dropdown-trigger-search');
const arrowDown = button.querySelector('svg:first-of-type');
const arrowUp = button.querySelector('svg:last-of-type');
const list = document.querySelector('#dropdown-menu-search');
// the arrow is up when user arrives on the page, with the list displayed
arrowUp.addEventListener('click', function(){
setTimeout(() => {
button.setAttribute('aria-expanded', 'false');
list.style.display = "none";
}, 300)
})
arrowDown.addEventListener('click', function(){
setTimeout(() => {
button.setAttribute('aria-expanded', 'true');
list.style.display = "block";
}, 300)
})
// 32 is code for space bar and 13 is code for enter
button.addEventListener('keydown', function(e){
if ((e.keyCode === 13 || e.keyCode === 32) && button.getAttribute('aria-expanded') === 'true') {
setTimeout(() => {
button.setAttribute('aria-expanded', 'false');
list.style.display = "none";
}, 300)
} else if ((e.keyCode === 13 || e.keyCode === 32) && button.getAttribute('aria-expanded') === 'false'){
setTimeout(() => {
button.setAttribute('aria-expanded', 'true');
list.style.display = "block";
}, 300)
}
})
</script>
Loading