diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index e0071c9375054b05763857d6b6cae43e48d60ff5..f0ad406d989bc5f2974c435f45512c006b27e267 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -9,19 +9,18 @@ class LikesController < ApplicationController respond_to :html, :mobile, :json def create - positive = (params[:positive] == 'true') ? true : false if target - @like = current_user.build_like(:positive => positive, :target => target) + @like = current_user.build_like(:target => target) if @like.save - Rails.logger.info("event=create type=like user=#{current_user.diaspora_handle} status=success like=#{@like.id} positive=#{positive}") + Rails.logger.info("event=create type=like user=#{current_user.diaspora_handle} status=success like=#{@like.id}") Postzord::Dispatcher.build(current_user, @like).post respond_to do |format| format.js { render 'likes/update', :status => 201 } format.html { render :nothing => true, :status => 201 } format.mobile { redirect_to post_path(@like.post_id) } - format.json { render :json => {"id" => @like.id}, :status => 201 } + format.json{ render :json => @like.as_api_response(:backbone), :status => 201 } end else render :nothing => true, :status => 422 @@ -52,7 +51,11 @@ class LikesController < ApplicationController if target @likes = target.likes.includes(:author => :profile) @people = @likes.map{|x| x.author} - render :layout => false + + respond_to do |format| + format.all{ render :layout => false } + format.json{ render :json => @likes.as_api_response(:backbone) } + end else render :nothing => true, :status => 404 end diff --git a/app/models/comment.rb b/app/models/comment.rb index 24b95941f9f60b84491a5a4a4198a20cb13fd5eb..7ec5b236e7c6449f2d4418e2ef9933bdca31bf43 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -26,7 +26,6 @@ class Comment < ActiveRecord::Base t.add :created_at end - xml_attr :text xml_attr :diaspora_handle diff --git a/app/models/like.rb b/app/models/like.rb index 01a8b7d5b0f327b78aa4bcc5775c83557f45cefa..5466bddd1adc1e9559afc5c5836f61e4507d117b 100644 --- a/app/models/like.rb +++ b/app/models/like.rb @@ -11,6 +11,15 @@ class Like < ActiveRecord::Base xml_attr :target_type include Diaspora::Relayable + # NOTE API V1 to be extracted + acts_as_api + api_accessible :backbone do |t| + t.add :id + t.add :guid + t.add :author + t.add :created_at + end + xml_attr :positive xml_attr :diaspora_handle diff --git a/app/views/templates/stream_element.ujs b/app/views/templates/stream_element.ujs index 64c167ce86fb50791c13f47be0e4f1fc79530271..3100d1b75761847df30ab6f3f228274d51cd1798 100644 --- a/app/views/templates/stream_element.ujs +++ b/app/views/templates/stream_element.ujs @@ -67,11 +67,11 @@ </span> <% if(user_like) { %> - <a href="/posts/<%= id %>/likes/<%= user_like.id %>" class="like_action unlike" rel='nofollow'> + <a href="#" class="like_action unlike" data-id="<%= user_like.id %>" rel='nofollow'> Unlike </a> <% } else { %> - <a href="/posts/<%= id %>/likes?positive=true" class="like_action like" rel='nofollow'> + <a href="#" class="like_action like" rel='nofollow'> Like </a> <% } %> diff --git a/public/javascripts/app/models/like.js b/public/javascripts/app/models/like.js index efd9a3540955312e7d147430eec857d69847e179..3bed073f02b10b7fa71022efcc4534e9198acc37 100644 --- a/public/javascripts/app/models/like.js +++ b/public/javascripts/app/models/like.js @@ -1,10 +1,2 @@ App.Models.Like = Backbone.Model.extend({ - url: function(){ - if(this.get("id")) { - return "/" + this.get("target_type") + "s/" + this.get("target_id") + "/likes/" + this.get("id"); - } - else { - return "/posts/" + this.get("target_id") + "/likes"; - } - } }) diff --git a/public/javascripts/app/models/post.js b/public/javascripts/app/models/post.js index ecedef08cee7641b9eb8419b9e87e98cdc678284..528fabbd1404f725b2542516aa4a899284f0b20c 100644 --- a/public/javascripts/app/models/post.js +++ b/public/javascripts/app/models/post.js @@ -1,11 +1,13 @@ App.Models.Post = Backbone.Model.extend({ url: function(){ - return "/posts/" + this.get("id"); + return "/posts/" + this.id; }, initialize: function() { this.comments = new App.Collections.Comments(this.get("last_three_comments")); - this.likes = new App.Collections.Likes(); + + this.likes = new App.Collections.Likes(this.get("user_like")); // load in the user like initially + this.likes.url = '/posts/' + this.id + '/likes'; }, createdAt: function(){ diff --git a/public/javascripts/app/views/post_view.js b/public/javascripts/app/views/post_view.js index 3b36012714ed9a8c4766455ee9756a1ab313c673..0725a1a009a6d2c13385730526eff4a35a60e23d 100644 --- a/public/javascripts/app/views/post_view.js +++ b/public/javascripts/app/views/post_view.js @@ -67,21 +67,10 @@ App.Views.Post = App.Views.StreamObject.extend({ var link = $(evt.target); - if(link.hasClass('like')){ - this.model.likes.create({ - target_id: this.model.get("id"), - target_type: "post", - positive: "true" - }); - } - else { - var like = new App.Models.Like({ - "id": this.model.get("user_like")["posts"]["id"], - target_type: "post", - target_id: this.model.get("id") - }); - - like.destroy(); + if(link.hasClass('like')) { + this.model.likes.create(); + } else { + this.model.likes.get(link.data("id")).destroy(); } return this;