diff --git a/app/assets/stylesheets/_consul_settings.scss b/app/assets/stylesheets/_consul_settings.scss index 34c716112..162671568 100644 --- a/app/assets/stylesheets/_consul_settings.scss +++ b/app/assets/stylesheets/_consul_settings.scss @@ -73,8 +73,8 @@ $border: #dee0e3 !default; $debates: $brand !default; -$like: #7bd2a8 !default; -$unlike: #ef8585 !default; +$like: #38a36f !default; +$unlike: #ea6666 !default; $delete: #db2e0f !default; $check: #46db91 !default; diff --git a/app/assets/stylesheets/in_favor_against.scss b/app/assets/stylesheets/in_favor_against.scss index 6e8d48481..a4dd6972c 100644 --- a/app/assets/stylesheets/in_favor_against.scss +++ b/app/assets/stylesheets/in_favor_against.scss @@ -14,49 +14,61 @@ button { background: #fff; - border: 2px solid; border-radius: rem-calc(3); - color: $text-light; + color: $dark-gray; display: inline-block; font-size: rem-calc(30); line-height: rem-calc(30); padding: rem-calc(3) rem-calc(6) rem-calc(6); position: relative; + &[aria-pressed=true] { + border-style: inset; + border-width: 3px 2px 2px 3px; + + &:active { + border-style: outset; + border-width: 2px 3px 3px 2px; + } + } + + &[aria-pressed=false] { + border-style: outset; + border-width: 2px 3px 3px 2px; + + &:active { + border-style: inset; + border-width: 3px 2px 2px 3px; + } + } + } + + @mixin like-unlike-icon($icon, $pressed-color) { + @include has-fa-icon($icon, regular); + &:not([disabled]) { - &:hover, - &:active, + cursor: pointer; + + &[aria-pressed=false]:hover, + &[aria-pressed=false]:active, + &[aria-pressed=true]:not(:hover, :active) { + @include has-fa-icon($icon, solid); + } + &[aria-pressed=true] { + background: $pressed-color; + border-color: $pressed-color; color: #fff; - cursor: pointer; } } } .in-favor button { - @include has-fa-icon(thumbs-up, solid); - - &:not([disabled]) { - &:hover, - &:active, - &[aria-pressed=true] { - background: $like; - border: 2px solid $like; - } - } + @include like-unlike-icon(thumbs-up, $like); } .against button { - @include has-fa-icon(thumbs-down, solid); - - &:not([disabled]) { - &:hover, - &:active, - &[aria-pressed=true] { - background: $unlike; - border: 2px solid $unlike; - } - } + @include like-unlike-icon(thumbs-down, $unlike); } .percentage { diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index 9a7b59f18..bbe7d56b2 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -1695,7 +1695,7 @@ table { button, form { - color: $text-light; + color: $dark-gray; display: inline-block; } @@ -1707,22 +1707,25 @@ table { } } - .in-favor button { - @include has-fa-icon(thumbs-up, solid); + @mixin like-unlike-icon($icon, $pressed-color) { + @include has-fa-icon($icon, regular); + + &[aria-pressed=false]:hover, + &[aria-pressed=true]:not(:hover) { + @include has-fa-icon($icon, solid); + } - &:hover, &[aria-pressed=true] { - color: $like; + color: $pressed-color; } } - .against button { - @include has-fa-icon(thumbs-down, solid); + .in-favor button { + @include like-unlike-icon(thumbs-up, $like); + } - &:hover, - &[aria-pressed=true] { - color: $unlike; - } + .against button { + @include like-unlike-icon(thumbs-down, $unlike); } } diff --git a/app/controllers/comments/votes_controller.rb b/app/controllers/comments/votes_controller.rb index d8289f9cf..e5ed1dfad 100644 --- a/app/controllers/comments/votes_controller.rb +++ b/app/controllers/comments/votes_controller.rb @@ -10,6 +10,7 @@ module Comments @comment.vote_by(voter: current_user, vote: params[:value]) respond_to do |format| + format.html { redirect_to request.referer, notice: I18n.t("flash.actions.create.vote") } format.js { render :show } end end @@ -18,6 +19,7 @@ module Comments @comment.unvote_by(current_user) respond_to do |format| + format.html { redirect_to request.referer, notice: I18n.t("flash.actions.destroy.vote") } format.js { render :show } end end diff --git a/app/controllers/debates/votes_controller.rb b/app/controllers/debates/votes_controller.rb index ae0cf33d5..23cbbd477 100644 --- a/app/controllers/debates/votes_controller.rb +++ b/app/controllers/debates/votes_controller.rb @@ -9,6 +9,7 @@ module Debates @debate.register_vote(current_user, params[:value]) respond_to do |format| + format.html { redirect_to request.referer, notice: I18n.t("flash.actions.create.vote") } format.js { render :show } end end @@ -17,6 +18,7 @@ module Debates @debate.unvote_by(current_user) respond_to do |format| + format.html { redirect_to request.referer, notice: I18n.t("flash.actions.destroy.vote") } format.js { render :show } end end diff --git a/app/controllers/legislation/proposals/votes_controller.rb b/app/controllers/legislation/proposals/votes_controller.rb index 5f70a5b95..d60715678 100644 --- a/app/controllers/legislation/proposals/votes_controller.rb +++ b/app/controllers/legislation/proposals/votes_controller.rb @@ -13,6 +13,7 @@ module Legislation @proposal.vote_by(voter: current_user, vote: params[:value]) respond_to do |format| + format.html { redirect_to request.referer, notice: I18n.t("flash.actions.create.vote") } format.js { render :show } end end @@ -21,6 +22,7 @@ module Legislation @proposal.unvote_by(current_user) respond_to do |format| + format.html { redirect_to request.referer, notice: I18n.t("flash.actions.destroy.vote") } format.js { render :show } end end diff --git a/config/locales/en/responders.yml b/config/locales/en/responders.yml index be118de2a..31e9350b0 100644 --- a/config/locales/en/responders.yml +++ b/config/locales/en/responders.yml @@ -17,6 +17,7 @@ en: support: "Investment supported successfully" topic: "Topic created successfully." valuator_group: "Valuator group created successfully" + vote: "Vote created successfully" save_changes: notice: Changes saved update: @@ -35,3 +36,4 @@ en: topic: "Topic deleted successfully." poll_question_answer_video: "Answer video deleted successfully." valuator_group: "Valuator group deleted successfully" + vote: "Vote deleted successfully" diff --git a/spec/controllers/comments/votes_controller_spec.rb b/spec/controllers/comments/votes_controller_spec.rb index cc164423f..fb8ee489a 100644 --- a/spec/controllers/comments/votes_controller_spec.rb +++ b/spec/controllers/comments/votes_controller_spec.rb @@ -1,7 +1,7 @@ require "rails_helper" describe Comments::VotesController do - let(:comment) { create(:comment) } + let(:comment) { create(:debate_comment) } describe "POST create" do it "allows voting" do @@ -11,6 +11,18 @@ describe Comments::VotesController do post :create, xhr: true, params: { comment_id: comment.id, value: "yes" } end.to change { comment.reload.votes_for.size }.by(1) end + + it "redirects authenticated users without JavaScript to the same page" do + request.env["HTTP_REFERER"] = comment_path(comment) + sign_in create(:user) + + expect do + post :create, params: { comment_id: comment.id, value: "yes" } + end.to change { comment.reload.votes_for.size }.by(1) + + expect(response).to redirect_to comment_path(comment) + expect(flash[:notice]).to eq "Vote created successfully" + end end describe "DELETE destroy" do @@ -30,5 +42,17 @@ describe Comments::VotesController do delete :destroy, xhr: true, params: { comment_id: comment.id, id: vote } end.to change { comment.reload.votes_for.size }.by(-1) end + + it "redirects authenticated users without JavaScript to the same page" do + request.env["HTTP_REFERER"] = debate_path(comment.commentable) + sign_in user + + expect do + delete :destroy, params: { comment_id: comment.id, id: vote } + end.to change { comment.reload.votes_for.size }.by(-1) + + expect(response).to redirect_to debate_path(comment.commentable) + expect(flash[:notice]).to eq "Vote deleted successfully" + end end end diff --git a/spec/controllers/debates/votes_controller_spec.rb b/spec/controllers/debates/votes_controller_spec.rb index 74bd009d2..0e55aa3a3 100644 --- a/spec/controllers/debates/votes_controller_spec.rb +++ b/spec/controllers/debates/votes_controller_spec.rb @@ -18,6 +18,19 @@ describe Debates::VotesController do expect(response).to redirect_to new_user_session_path end + it "redirects authenticated users without JavaScript to the same page" do + debate = create(:debate) + request.env["HTTP_REFERER"] = debate_path(debate) + sign_in create(:user) + + expect do + post :create, params: { debate_id: debate.id, value: "yes" } + end.to change { debate.reload.votes_for.size }.by(1) + + expect(response).to redirect_to debate_path(debate) + expect(flash[:notice]).to eq "Vote created successfully" + end + describe "Vote with too many anonymous votes" do it "allows vote if user is allowed" do Setting["max_ratio_anon_votes_on_debates"] = 100 @@ -52,5 +65,16 @@ describe Debates::VotesController do delete :destroy, xhr: true, params: { debate_id: debate.id, id: vote } end.to change { debate.reload.votes_for.size }.by(-1) end + + it "redirects authenticated users without JavaScript to the same page" do + request.env["HTTP_REFERER"] = debates_path + + expect do + delete :destroy, params: { debate_id: debate.id, id: vote } + end.to change { debate.reload.votes_for.size }.by(-1) + + expect(response).to redirect_to debates_path + expect(flash[:notice]).to eq "Vote deleted successfully" + end end end diff --git a/spec/controllers/legislation/proposals/votes_controller_spec.rb b/spec/controllers/legislation/proposals/votes_controller_spec.rb index f618277b1..e43560027 100644 --- a/spec/controllers/legislation/proposals/votes_controller_spec.rb +++ b/spec/controllers/legislation/proposals/votes_controller_spec.rb @@ -36,6 +36,18 @@ describe Legislation::Proposals::VotesController do post :create, xhr: true, params: vote_params end.not_to change { proposal.reload.votes_for.size } end + + it "redirects authenticated users without JavaScript to the same page" do + request.env["HTTP_REFERER"] = legislation_process_proposal_path(legislation_process, proposal) + sign_in create(:user, :level_two) + + expect do + post :create, params: vote_params + end.to change { proposal.reload.votes_for.size }.by(1) + + expect(response).to redirect_to legislation_process_proposal_path(legislation_process, proposal) + expect(flash[:notice]).to eq "Vote created successfully" + end end describe "DELETE destroy" do @@ -52,5 +64,17 @@ describe Legislation::Proposals::VotesController do delete :destroy, xhr: true, params: vote_params end.to change { proposal.reload.votes_for.size }.by(-1) end + + it "redirects authenticated users without JavaScript to the same page" do + request.env["HTTP_REFERER"] = legislation_process_proposals_path(legislation_process) + sign_in user + + expect do + delete :destroy, params: vote_params + end.to change { proposal.reload.votes_for.size }.by(-1) + + expect(response).to redirect_to legislation_process_proposals_path(legislation_process) + expect(flash[:notice]).to eq "Vote deleted successfully" + end end end