diff --git a/app/assets/javascripts/advanced_search.js b/app/assets/javascripts/advanced_search.js index 9fcf8ae5f..d987fda8a 100644 --- a/app/assets/javascripts/advanced_search.js +++ b/app/assets/javascripts/advanced_search.js @@ -1,13 +1,6 @@ (function() { "use strict"; App.AdvancedSearch = { - advanced_search_terms: function() { - return $("#js-advanced-search").data("advanced-search-terms"); - }, - toggle_form: function(event) { - event.preventDefault(); - $("#js-advanced-search").slideToggle(); - }, toggle_date_options: function() { if ($("#js-advanced-search-date-min").val() === "custom") { $("#js-custom-date").show(); @@ -18,13 +11,19 @@ } }, initialize: function() { - if (App.AdvancedSearch.advanced_search_terms()) { - $("#js-advanced-search").show(); + var toggle_button = $("#js-advanced-search-title"); + + toggle_button.removeAttr("hidden"); + + if (toggle_button.attr("aria-expanded") === "true") { App.AdvancedSearch.toggle_date_options(); + } else { + toggle_button.next().hide(); } - $("#js-advanced-search-title").on({ - click: function(event) { - App.AdvancedSearch.toggle_form(event); + toggle_button.on({ + click: function() { + $(this).attr("aria-expanded", !JSON.parse($(this).attr("aria-expanded"))); + $(this).next().slideToggle(); } }); $("#js-advanced-search-date-min").on({ diff --git a/app/assets/stylesheets/advanced_search.scss b/app/assets/stylesheets/advanced_search.scss index 9191bb83c..41b344f7b 100644 --- a/app/assets/stylesheets/advanced_search.scss +++ b/app/assets/stylesheets/advanced_search.scss @@ -1,18 +1,7 @@ -.advanced-search { - float: left; - margin: $line-height 0; - position: inherit; - - @include breakpoint(medium) { - float: right; - margin-bottom: 0; - margin-top: $line-height / 4; - position: absolute; - right: 0; - } -} - .advanced-search-form { + @include grid-row-nest; + display: flex; + flex-direction: column; @include breakpoint(large) { .filter { @@ -38,6 +27,25 @@ } } + > [aria-expanded] { + @include xy-gutters; + color: $link; + cursor: pointer; + margin-top: $line-height; + margin-bottom: $line-height; + max-width: max-content; + + @include breakpoint(medium) { + align-self: flex-end; + margin-bottom: 0; + margin-top: $line-height / 4; + } + + &:focus { + outline: $outline-focus; + } + } + .general-search, .filter, .submit { diff --git a/app/components/shared/advanced_search_component.html.erb b/app/components/shared/advanced_search_component.html.erb index 903542908..1155ef057 100644 --- a/app/components/shared/advanced_search_component.html.erb +++ b/app/components/shared/advanced_search_component.html.erb @@ -1,70 +1,66 @@ -
- <%= link_to t("shared.advanced_search.title"), "#advanced_search_form", id: "js-advanced-search-title", class: "advanced-search small" %> -
- -
- <%= form_tag request.path, id: "advanced_search_form", method: :get do %> - +<% end %> diff --git a/spec/components/shared/advanced_search_component_spec.rb b/spec/components/shared/advanced_search_component_spec.rb index 84f072b8f..1bb232cb0 100644 --- a/spec/components/shared/advanced_search_component_spec.rb +++ b/spec/components/shared/advanced_search_component_spec.rb @@ -1,9 +1,23 @@ require "rails_helper" describe Shared::AdvancedSearchComponent, type: :component do - describe "SDG filter" do - let(:component) { Shared::AdvancedSearchComponent.new } + let(:component) { Shared::AdvancedSearchComponent.new } + context "JavaScript disabled" do + it "renders the form" do + render_inline component + + expect(page).to have_button "Filter" + end + + it "hides the button to show the form" do + render_inline component + + expect(page.find("form")).to have_button "Advanced search", visible: :hidden + end + end + + describe "SDG filter" do before do Setting["feature.sdg"] = true Setting["sdg.process.proposals"] = true diff --git a/spec/system/advanced_search_spec.rb b/spec/system/advanced_search_spec.rb index 8eefdbec3..8303f9bea 100644 --- a/spec/system/advanced_search_spec.rb +++ b/spec/system/advanced_search_spec.rb @@ -11,7 +11,7 @@ describe "Advanced search" do visit debates_path - click_link "Advanced search" + click_button "Advanced search" fill_in "Write the text", with: "Schwifty" click_button "Filter" @@ -31,7 +31,7 @@ describe "Advanced search" do visit proposals_path - click_link "Advanced search" + click_button "Advanced search" fill_in "Write the text", with: "Schwifty" click_button "Filter" @@ -51,7 +51,7 @@ describe "Advanced search" do visit budget_investments_path(budget) - click_link "Advanced search" + click_button "Advanced search" fill_in "Write the text", with: "Schwifty" click_button "Filter" @@ -76,7 +76,7 @@ describe "Advanced search" do visit debates_path - click_link "Advanced search" + click_button "Advanced search" select "Official position 1", from: "advanced_search_official_level" click_button "Filter" @@ -100,7 +100,7 @@ describe "Advanced search" do visit proposals_path - click_link "Advanced search" + click_button "Advanced search" select "Official position 2", from: "advanced_search_official_level" click_button "Filter" @@ -124,7 +124,7 @@ describe "Advanced search" do visit budget_investments_path(budget) - click_link "Advanced search" + click_button "Advanced search" select "Official position 3", from: "advanced_search_official_level" click_button "Filter" @@ -148,7 +148,7 @@ describe "Advanced search" do visit debates_path - click_link "Advanced search" + click_button "Advanced search" select "Official position 4", from: "advanced_search_official_level" click_button "Filter" @@ -172,7 +172,7 @@ describe "Advanced search" do visit proposals_path - click_link "Advanced search" + click_button "Advanced search" select "Official position 5", from: "advanced_search_official_level" click_button "Filter" @@ -194,7 +194,7 @@ describe "Advanced search" do visit budget_investments_path(budget) - click_link "Advanced search" + click_button "Advanced search" select "Last 24 hours", from: "js-advanced-search-date-min" click_button "Filter" @@ -214,7 +214,7 @@ describe "Advanced search" do visit debates_path - click_link "Advanced search" + click_button "Advanced search" select "Last week", from: "js-advanced-search-date-min" click_button "Filter" @@ -234,7 +234,7 @@ describe "Advanced search" do visit proposals_path - click_link "Advanced search" + click_button "Advanced search" select "Last month", from: "js-advanced-search-date-min" click_button "Filter" @@ -254,7 +254,7 @@ describe "Advanced search" do visit budget_investments_path(budget) - click_link "Advanced search" + click_button "Advanced search" select "Last year", from: "js-advanced-search-date-min" click_button "Filter" @@ -275,7 +275,7 @@ describe "Advanced search" do visit debates_path - click_link "Advanced search" + click_button "Advanced search" select "Customized", from: "js-advanced-search-date-min" fill_in "advanced_search_date_min", with: 7.days.ago.strftime("%d/%m/%Y") fill_in "advanced_search_date_max", with: 1.day.ago.strftime("%d/%m/%Y") @@ -298,7 +298,7 @@ describe "Advanced search" do visit proposals_path - click_link "Advanced search" + click_button "Advanced search" select "Customized", from: "js-advanced-search-date-min" fill_in "advanced_search_date_min", with: 4000.years.ago.strftime("%d/%m/%Y") fill_in "advanced_search_date_max", with: "13/13/2199" @@ -325,7 +325,7 @@ describe "Advanced search" do visit budget_investments_path(budget) - click_link "Advanced search" + click_button "Advanced search" fill_in "Write the text", with: "Schwifty" select "Official position 1", from: "advanced_search_official_level" select "Last 24 hours", from: "js-advanced-search-date-min" @@ -343,7 +343,7 @@ describe "Advanced search" do Setting["official_level_1_name"] = "Official position 1" visit debates_path - click_link "Advanced search" + click_button "Advanced search" fill_in "Write the text", with: "Schwifty" select "Official position 1", from: "advanced_search_official_level" @@ -351,7 +351,7 @@ describe "Advanced search" do click_button "Filter" - within "#js-advanced-search" do + within ".advanced-search-form" do expect(page).to have_selector("input[name='search'][value='Schwifty']") expect(page).to have_select("advanced_search[official_level]", selected: "Official position 1") expect(page).to have_select("advanced_search[date_min]", selected: "Last 24 hours") @@ -360,7 +360,7 @@ describe "Advanced search" do scenario "Maintain custom date search criteria" do visit proposals_path - click_link "Advanced search" + click_button "Advanced search" select "Customized", from: "js-advanced-search-date-min" fill_in "advanced_search_date_min", with: 7.days.ago.strftime("%d/%m/%Y") @@ -370,7 +370,7 @@ describe "Advanced search" do expect(page).to have_content("citizen proposals cannot be found") - within "#js-advanced-search" do + within ".advanced-search-form" do expect(page).to have_select("advanced_search[date_min]", selected: "Customized") expect(page).to have_selector("input[name='advanced_search[date_min]'][value*='#{7.days.ago.strftime("%d/%m/%Y")}']") expect(page).to have_selector("input[name='advanced_search[date_max]'][value*='#{1.day.ago.strftime("%d/%m/%Y")}']") @@ -391,7 +391,7 @@ describe "Advanced search" do create(:budget_investment, title: "Hospital", heading: heading, sdg_goals: [SDG::Goal[3]]) visit budget_investments_path(budget) - click_link "Advanced search" + click_button "Advanced search" select "6. Clean Water and Sanitation", from: "By SDG" click_button "Filter" @@ -413,7 +413,7 @@ describe "Advanced search" do create(:debate, title: "Preschool", sdg_targets: [SDG::Target["4.2"]]) visit debates_path - click_link "Advanced search" + click_button "Advanced search" select "4.2", from: "By target" click_button "Filter" @@ -429,7 +429,7 @@ describe "Advanced search" do scenario "Dynamic target options depending on the selected goal" do visit proposals_path - click_link "Advanced search" + click_button "Advanced search" select "1. No Poverty", from: "By SDG" expect(page).to have_select "By target",