From e8004ca1d3c5e6c6d64b48a0d440bf6e165ed16a Mon Sep 17 00:00:00 2001 From: Marko Lovic Date: Thu, 27 Aug 2015 14:54:04 +0200 Subject: [PATCH] Add to javascript to handle debates order change --- app/assets/javascripts/application.js | 1 + .../debates_order_selector.js.coffee | 17 +++++++++++++++++ app/helpers/debates_helper.rb | 12 ++++++++++++ app/views/debates/_order_selector.erb | 12 +++++------- spec/features/debates_spec.rb | 14 ++++++-------- spec/features/moderation_spec.rb | 1 - 6 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 app/assets/javascripts/debates_order_selector.js.coffee create mode 100644 app/helpers/debates_helper.rb diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index a5aaf5c01..6e5b1df3d 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -32,6 +32,7 @@ var initialize_modules = function() { App.Tags.initialize(); App.Stats.initialize(); App.LocaleSwitcher.initialize(); + App.DebatesOrderSelector.initialize(); }; $(function(){ diff --git a/app/assets/javascripts/debates_order_selector.js.coffee b/app/assets/javascripts/debates_order_selector.js.coffee new file mode 100644 index 000000000..94002f5ac --- /dev/null +++ b/app/assets/javascripts/debates_order_selector.js.coffee @@ -0,0 +1,17 @@ +App.DebatesOrderSelector = + + href_with_params: (query_params) -> + loc = window.location + + loc.protocol + "//" + loc.hostname + + (if loc.port then ':' + loc.port else '') + + loc.pathname + + loc.hash + + '?' + $.param(query_params) + + initialize: -> + $('.js-order-selector').on 'change', -> + query_params = window.getQueryParameters() + query_params['order'] = $(this).val() + window.location.assign(App.DebatesOrderSelector.href_with_params(query_params)) + diff --git a/app/helpers/debates_helper.rb b/app/helpers/debates_helper.rb new file mode 100644 index 000000000..52bb9c17c --- /dev/null +++ b/app/helpers/debates_helper.rb @@ -0,0 +1,12 @@ +module DebatesHelper + def available_options_for_order_selector(valid_orders, current_order) + options_for_select(available_order_filters_array(valid_orders), current_order) + end + + private + + def available_order_filters_array(orders) + orders.map { |f| [t("debates.index.order_#{f}"), f] } + end + +end diff --git a/app/views/debates/_order_selector.erb b/app/views/debates/_order_selector.erb index 6516a172d..de18cfc45 100644 --- a/app/views/debates/_order_selector.erb +++ b/app/views/debates/_order_selector.erb @@ -1,7 +1,5 @@ -<% options = @valid_orders.map { |f| [t("debates.index.order_#{f}"), f] } %> - -<%= form_tag('/debates', method: 'get', class: 'inline-block') do %> - - <%= select_tag 'order', options_for_select(options, @order), onchange: "this.form.submit()" %> - -<% end %> +
+ +
diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index 8904199b3..82669770d 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -365,17 +365,15 @@ feature 'Debates' do scenario 'Default order is created_at' do visit debates_path - expect(page).to have_select('order', selected: 'the newest') - #expect_debate_order([2, 1, 0]) + expect(page).to have_select('order-selector', selected: 'the newest') expect(@most_recent_debate.title).to appear_before(@most_liked_debate.title) - expect(@most_liked_debate.title).to appear_before(@most_voted_debate.title) end scenario 'Debates are ordered by most voted' do visit debates_path - select 'the most voted', from: 'order' - expect(page).to have_select('order', selected: 'the most voted') + select 'the most voted', from: 'order-selector' + expect(page).to have_select('order-selector', selected: 'the most voted') expect(find("#debates .debate", match: :first)).to have_content(@most_voted_debate.title) # Necessary to force capybara to wait for redirect expect(current_url).to include('order=total_votes') @@ -386,7 +384,7 @@ feature 'Debates' do scenario 'Debates are ordered by best rated' do visit debates_path - select 'the best rated', from: 'order' + select 'the best rated', from: 'order-selector' expect(find("#debates .debate", match: :first)).to have_content(@most_liked_debate.title) expect(current_url).to include('order=likes') @@ -397,10 +395,10 @@ feature 'Debates' do scenario 'Debates are ordered by newest' do visit debates_path - select 'the most voted', from: 'order' + select 'the most voted', from: 'order-selector' expect(find("#debates .debate", match: :first)).to have_content(@most_voted_debate.title) - select 'the newest', from: 'order' + select 'the newest', from: 'order-selector' expect(find("#debates .debate", match: :first)).to have_content(@most_recent_debate.title) expect(current_url).to include('order=created_at') diff --git a/spec/features/moderation_spec.rb b/spec/features/moderation_spec.rb index aa49d381c..78df5e56f 100644 --- a/spec/features/moderation_spec.rb +++ b/spec/features/moderation_spec.rb @@ -1,5 +1,4 @@ require 'rails_helper' -require 'support/matchers/appear_before' feature 'Admin' do let(:user) { create(:user) }