diff --git a/app/assets/javascripts/app.js.coffee b/app/assets/javascripts/app.js.coffee new file mode 100644 index 000000000..d8efafdee --- /dev/null +++ b/app/assets/javascripts/app.js.coffee @@ -0,0 +1 @@ +window.App = {} diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index c73d04209..08153c4ec 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -15,6 +15,16 @@ //= require foundation //= require turbolinks //= require ckeditor/init +//= require app //= require_tree . -$(function(){ $(document).foundation(); }); +var initialize_modules = function() { + App.Comments.initialize(); +}; + +$(function(){ + $(document).foundation(); + + $(document).ready(initialize_modules) + $(document).on('page:load', initialize_modules) +}); diff --git a/app/assets/javascripts/comments.js.coffee b/app/assets/javascripts/comments.js.coffee index b40da3485..7a8743f88 100644 --- a/app/assets/javascripts/comments.js.coffee +++ b/app/assets/javascripts/comments.js.coffee @@ -1,13 +1,20 @@ -jQuery -> +App.Comments = - toggle_comment = (id) -> + add_response: (parent_id, response_html) -> + $(response_html).insertAfter($("#js-comment-form-#{parent_id}")) + + reset_and_hide_form: (id) -> + form = $("#js-comment-form-#{id}") + form.val('') + form.hide() + + toggle_form: (id) -> $("#js-comment-form-#{id}").toggle() - ready = -> - $('.js-add-comment-link').click -> + initialize: -> + $('body').on 'click', '.js-add-comment-link', -> id = $(this).data().id - toggle_comment(id) + App.Comments.toggle_form(id) false - $(document).ready(ready) - $(document).on('page:load', ready) \ No newline at end of file + diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 91a92e5ba..00fd20653 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -1,12 +1,13 @@ class CommentsController < ApplicationController before_action :authenticate_user! before_action :set_debate, :set_parent + respond_to :html, :js def create - comment = Comment.build(@debate, current_user, params[:comment][:body]) - comment.save! - comment.move_to_child_of(@parent) if reply? - redirect_to @debate, notice: "Comentario guardado" + @comment = Comment.build(@debate, current_user, params[:comment][:body]) + @comment.save! + @comment.move_to_child_of(@parent) if reply? + respond_with @comment end private diff --git a/app/controllers/votes_controller.rb b/app/controllers/votes_controller.rb index 6ca2d45b2..e93968f35 100644 --- a/app/controllers/votes_controller.rb +++ b/app/controllers/votes_controller.rb @@ -1,11 +1,12 @@ class VotesController < ApplicationController before_action :set_debate before_action :authenticate_user! - + respond_to :html, :js + def create register_vote notice = @debate.vote_registered? ? I18n.t("votes.notice_thanks") : I18n.t("votes.notice_already_registered") - redirect_to @debate, notice: notice + respond_with @debate end private diff --git a/app/views/comments/_form.html.erb b/app/views/comments/_form.html.erb index dc2ad3a13..01661221f 100644 --- a/app/views/comments/_form.html.erb +++ b/app/views/comments/_form.html.erb @@ -1,7 +1,7 @@ <%= link_to comment_link_text(parent), "", class: "js-add-comment-link", data: {'id': dom_id(parent)} %> -
-
-
- <%= link_to debate_votes_path(@debate, value: 'yes'), class: 'in-favor', method: "post" do %> - - <%= percentage('likes', @debate) %> - <% end %> -
- - - -
- <%= link_to debate_votes_path(@debate, value: 'no'), class: 'against', method: "post" do %> - - <%= percentage('dislikes', @debate) %> - <% end %> -
-
- -
-

<%= pluralize(@debate.total_votes, t("debates.debate.vote"), t("debates.debate.votes")) %>

-
-
- -
- <%= link_to t("debates.show.leave_comment"), "#comments", :class => 'button radius expand' %> -
+
+ <%= render 'votes/votes' %> +
diff --git a/app/views/votes/_votes.html.erb b/app/views/votes/_votes.html.erb new file mode 100644 index 000000000..fd2704ed4 --- /dev/null +++ b/app/views/votes/_votes.html.erb @@ -0,0 +1,23 @@ +
+
+ <%= link_to debate_votes_path(@debate, value: 'yes'), class: 'in-favor', method: "post", remote: true do %> + + <%= percentage('likes', @debate) %> + <% end %> +
+ + + +
+ <%= link_to debate_votes_path(@debate, value: 'no'), class: 'against', method: "post", remote: true do %> + + <%= percentage('dislikes', @debate) %> + <% end %> +
+
+ +
+

+ <%= pluralize(@debate.total_votes, t("debates.debate.vote"), t("debates.debate.votes")) %> +

+
diff --git a/app/views/votes/create.js.erb b/app/views/votes/create.js.erb new file mode 100644 index 000000000..5e855e40e --- /dev/null +++ b/app/views/votes/create.js.erb @@ -0,0 +1 @@ +$("#votes").html("<%= j render('votes') %>"); \ No newline at end of file diff --git a/spec/features/comments_spec.rb b/spec/features/comments_spec.rb index 64cec27a8..624ac5b7e 100644 --- a/spec/features/comments_spec.rb +++ b/spec/features/comments_spec.rb @@ -31,8 +31,6 @@ feature 'Comments' do fill_in 'comment_body', with: '¿Has pensado en esto...?' click_button 'Publicar comentario' - expect(page).to have_content 'Comentario guardado' - within "#comments" do expect(page).to have_content '¿Has pensado en esto...?' end @@ -53,7 +51,6 @@ feature 'Comments' do click_button 'Publicar respuesta' end - expect(page).to have_content 'Comentario guardado' within "#comment-#{comment.id}" do expect(page).to have_content 'La semana que viene está hecho.' end diff --git a/spec/features/votes_spec.rb b/spec/features/votes_spec.rb index cec794376..d1aabd84a 100644 --- a/spec/features/votes_spec.rb +++ b/spec/features/votes_spec.rb @@ -28,21 +28,47 @@ feature 'Votes' do end end - scenario 'Create' do + scenario 'Create', :js do find('#in_favor a').click - expect(page).to have_content "Thanks for voting." + + within('#in_favor') do + expect(page).to have_content "100%" + end + + within('#against') do + expect(page).to have_content "0%" + end + + expect(page).to have_content "1 vote" end - scenario 'Update' do + scenario 'Update', :js do find('#in_favor a').click find('#against a').click - expect(page).to have_content "Thanks for voting." + + within('#in_favor') do + expect(page).to have_content "0%" + end + + within('#against') do + expect(page).to have_content "100%" + end + + expect(page).to have_content "1 vote" end - scenario 'Trying to vote multiple times' do + scenario 'Trying to vote multiple times', :js do find('#in_favor a').click find('#in_favor a').click - expect(page).to have_content "Your vote is already registered." + + within('#in_favor') do + expect(page).to have_content "100%" + end + + within('#against') do + expect(page).to have_content "0%" + end + expect(page).to have_content "1 vote" end