From 12d34a3ea1366fec274651a5a845c17bfb13e7ac Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 18 Sep 2017 19:07:18 +0200 Subject: [PATCH 1/3] Switch flag/unflag buttons on use via ajax --- app/assets/javascripts/application.js | 1 + app/assets/javascripts/flagable.js.coffee | 4 ++++ app/views/proposals/_refresh_flag_actions.js.erb | 3 ++- app/views/proposals/show.html.erb | 4 +++- 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/flagable.js.coffee diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 2ff87100a..32c0330f5 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -60,6 +60,7 @@ //= require legislation_annotatable //= require watch_form_changes //= require followable +//= require flagable //= require documentable //= require tree_navigator //= require custom diff --git a/app/assets/javascripts/flagable.js.coffee b/app/assets/javascripts/flagable.js.coffee new file mode 100644 index 000000000..417acf1a7 --- /dev/null +++ b/app/assets/javascripts/flagable.js.coffee @@ -0,0 +1,4 @@ +App.Flagable = + + update: (proposal_id, button) -> + $("#" + proposal_id + " .js-flag-actions-container").html(button).foundation() diff --git a/app/views/proposals/_refresh_flag_actions.js.erb b/app/views/proposals/_refresh_flag_actions.js.erb index 0e20636ae..8b563743b 100644 --- a/app/views/proposals/_refresh_flag_actions.js.erb +++ b/app/views/proposals/_refresh_flag_actions.js.erb @@ -1 +1,2 @@ -$("#<%= dom_id(@proposal) %> .js-flag-actions").html('<%= j render("proposals/flag_actions", proposal: @proposal) %>'); +App.Flagable.update("<%= dom_id(@proposal) %>", + "<%= j render("proposals/flag_actions", proposal: @proposal) %>") diff --git a/app/views/proposals/show.html.erb b/app/views/proposals/show.html.erb index 1dc918e8e..29e26efff 100644 --- a/app/views/proposals/show.html.erb +++ b/app/views/proposals/show.html.erb @@ -59,7 +59,9 @@ <% if current_user %>  •  - <%= render 'proposals/flag_actions', proposal: @proposal %> + + <%= render 'proposals/flag_actions', proposal: @proposal %> + <% end %> From cf2dff101386380cb38f500c658297bb3a76f6ea Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Tue, 19 Sep 2017 19:40:50 +0200 Subject: [PATCH 2/3] Small class names and html refactor --- app/assets/javascripts/application.js | 2 +- app/assets/javascripts/flagable.js.coffee | 4 --- app/assets/javascripts/flaggable.js.coffee | 4 +++ app/views/proposals/_flag_actions.html.erb | 36 +++++++++---------- .../proposals/_refresh_flag_actions.js.erb | 2 +- app/views/proposals/show.html.erb | 2 +- 6 files changed, 24 insertions(+), 26 deletions(-) delete mode 100644 app/assets/javascripts/flagable.js.coffee create mode 100644 app/assets/javascripts/flaggable.js.coffee diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 32c0330f5..cf579627b 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -60,7 +60,7 @@ //= require legislation_annotatable //= require watch_form_changes //= require followable -//= require flagable +//= require flaggable //= require documentable //= require tree_navigator //= require custom diff --git a/app/assets/javascripts/flagable.js.coffee b/app/assets/javascripts/flagable.js.coffee deleted file mode 100644 index 417acf1a7..000000000 --- a/app/assets/javascripts/flagable.js.coffee +++ /dev/null @@ -1,4 +0,0 @@ -App.Flagable = - - update: (proposal_id, button) -> - $("#" + proposal_id + " .js-flag-actions-container").html(button).foundation() diff --git a/app/assets/javascripts/flaggable.js.coffee b/app/assets/javascripts/flaggable.js.coffee new file mode 100644 index 000000000..7ada75686 --- /dev/null +++ b/app/assets/javascripts/flaggable.js.coffee @@ -0,0 +1,4 @@ +App.Flaggable = + + update: (resource_id, button) -> + $("#" + resource_id + " .js-flag-actions").html(button).foundation() diff --git a/app/views/proposals/_flag_actions.html.erb b/app/views/proposals/_flag_actions.html.erb index 3e776de66..8aa3e5cf4 100644 --- a/app/views/proposals/_flag_actions.html.erb +++ b/app/views/proposals/_flag_actions.html.erb @@ -1,21 +1,19 @@ - - - <% if show_flag_action? proposal %> - - - - - <%= link_to t('shared.flag'), flag_proposal_path(proposal), method: :put, remote: true, id: "flag-proposal-#{ proposal.id }" %> - - <% end %> + + <% if show_flag_action? proposal %> + + + + + <%= link_to t('shared.flag'), flag_proposal_path(proposal), method: :put, remote: true, id: "flag-proposal-#{ proposal.id }" %> + + <% end %> - <% if show_unflag_action? proposal %> - - - - - <%= link_to t('shared.unflag'), unflag_proposal_path(proposal), method: :put, remote: true, id: "unflag-proposal-#{ proposal.id }" %> - - <% end %> - + <% if show_unflag_action? proposal %> + + + + + <%= link_to t('shared.unflag'), unflag_proposal_path(proposal), method: :put, remote: true, id: "unflag-proposal-#{ proposal.id }" %> + + <% end %> diff --git a/app/views/proposals/_refresh_flag_actions.js.erb b/app/views/proposals/_refresh_flag_actions.js.erb index 8b563743b..e89e316c2 100644 --- a/app/views/proposals/_refresh_flag_actions.js.erb +++ b/app/views/proposals/_refresh_flag_actions.js.erb @@ -1,2 +1,2 @@ -App.Flagable.update("<%= dom_id(@proposal) %>", +App.Flaggable.update("<%= dom_id(@proposal) %>", "<%= j render("proposals/flag_actions", proposal: @proposal) %>") diff --git a/app/views/proposals/show.html.erb b/app/views/proposals/show.html.erb index 29e26efff..409c9a8aa 100644 --- a/app/views/proposals/show.html.erb +++ b/app/views/proposals/show.html.erb @@ -59,7 +59,7 @@ <% if current_user %>  •  - + <%= render 'proposals/flag_actions', proposal: @proposal %> <% end %> From 61c953669780084717e65db678497a607d4ed58f Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Tue, 19 Sep 2017 20:01:03 +0200 Subject: [PATCH 3/3] Add flagging/unflagging rspec --- spec/features/proposals_spec.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index a7c7880a8..d297a294b 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -1244,6 +1244,34 @@ feature 'Proposals' do expect(Flag.flagged?(user, proposal)).to_not be end + scenario 'Flagging/Unflagging AJAX', :js do + user = create(:user) + proposal = create(:proposal) + + login_as(user) + visit proposal_path(proposal) + + # Flagging + within "#proposal_#{proposal.id}" do + page.find("#flag-expand-proposal-#{proposal.id}").click + page.find("#flag-proposal-#{proposal.id}").click + + expect(page).to have_css("#unflag-expand-proposal-#{proposal.id}") + end + + expect(Flag.flagged?(user, proposal)).to be + + # Unflagging + within "#proposal_#{proposal.id}" do + page.find("#unflag-expand-proposal-#{proposal.id}").click + page.find("#unflag-proposal-#{proposal.id}").click + + expect(page).to have_css("#flag-expand-proposal-#{proposal.id}") + end + + expect(Flag.flagged?(user, proposal)).to_not be + end + it_behaves_like "followable", "proposal", "proposal_path", { "id": "id" } it_behaves_like "documentable", "proposal", "proposal_path", { "id": "id" }