comment and post deletion now works on the backbone stream

This commit is contained in:
danielgrippi 2011-12-13 18:12:04 -08:00 committed by Dennis Collinson
parent 46b1567622
commit f5172fa977
8 changed files with 72 additions and 28 deletions

View file

@ -44,12 +44,14 @@ class CommentsController < ApplicationController
current_user.retract(@comment) current_user.retract(@comment)
respond_to do |format| respond_to do |format|
format.js { render :nothing => true, :status => 204 } format.js { render :nothing => true, :status => 204 }
format.json { render :nothing => true, :status => 204 }
format.mobile{ redirect_to @comment.post } format.mobile{ redirect_to @comment.post }
end end
else else
respond_to do |format| respond_to do |format|
format.mobile {redirect_to :back} format.mobile {redirect_to :back}
format.js {render :nothing => true, :status => 403} format.js {render :nothing => true, :status => 403}
format.json { render :nothing => true, :status => 403 }
end end
end end
end end

View file

@ -52,6 +52,7 @@ class PostsController < ApplicationController
current_user.retract(@post) current_user.retract(@post)
respond_to do |format| respond_to do |format|
format.js {render 'destroy'} format.js {render 'destroy'}
format.json { render :nothing => true, :status => 204 }
format.all {redirect_to multi_path} format.all {redirect_to multi_path}
end end
else else

View file

@ -1,28 +1,36 @@
<div class="reshare"> <div class="reshare">
<a href="/people/<%= root.author.id %>"> <% if(root) { %>
<img src="<%= root.author.avatar.small %>" class="avatar" data-person-id="<%= root.author.id %>"/>
</a> <a href="/people/<%= root.author.id %>">
<img src="<%= root.author.avatar.small %>" class="avatar" data-person-id="<%= root.author.id %>"/>
</a>
<div class="content">
<div class="post_initial_info">
<span class="from">
<a href="/people/<%= root.author.id %>">
<%= root.author.name %>
</a>
</span>
<span class="details">
-
<a href="/posts/<%= root.id %>">
<time class="timeago" datetime="<%= root.created_at %>"/>
</a>
</span>
</div>
<!-- duplicate from statusmessage partial -->
<p>
<%= root.text %>
</p>
<div class="content">
<div class="post_initial_info">
<span class="from">
<a href="/people/<%= root.author.id %>">
<%= root.author.name %>
</a>
</span>
<span class="details">
-
<a href="/posts/<%= root.id %>">
<time class="timeago" datetime="<%= root.created_at %>"/>
</a>
</span>
</div> </div>
<!-- duplicate from statusmessage partial --> <% } else { %>
<p> <p>
<%= root.text %> Original post deleted by author.
</p> </p>
<% } %>
</div>
</div> </div>

View file

@ -75,7 +75,7 @@
</span> </span>
· ·
<% if(public) { %> <% if(public && author.id != current_user.id) { %>
<span class="reshare_action"> <span class="reshare_action">
<% if(root) { <% if(root) {
var rootGuid = root.guid; var rootGuid = root.guid;

View file

@ -1,5 +1,3 @@
App.Models.Comment = Backbone.Model.extend({ App.Models.Comment = Backbone.Model.extend({
url: function() { urlRoot: "/comments"
return "/posts/" + this.get("post_id") + "/comments";
}
}); });

View file

@ -1,5 +1,7 @@
App.Models.Post = Backbone.Model.extend({ App.Models.Post = Backbone.Model.extend({
url: "/posts", url: function(){
return "/posts/" + this.get("id");
},
initialize: function() { initialize: function() {
this.comments = new App.Collections.Comments(this.get("last_three_comments")); this.comments = new App.Collections.Comments(this.get("last_three_comments"));

View file

@ -1,4 +1,8 @@
App.Views.Comment = Backbone.View.extend({ App.Views.Comment = Backbone.View.extend({
events : {
"click .delete": "destroyComment"
},
initialize: function(options) { initialize: function(options) {
this.model = options.model; this.model = options.model;
this.template = _.template($("#comment-template").html()); this.template = _.template($("#comment-template").html());
@ -10,6 +14,21 @@ App.Views.Comment = Backbone.View.extend({
App.user() App.user()
))); )));
this.delegateEvents(); //we need this because we are explicitly setting this.el in this.render()
return this; return this;
},
// NOTE: pull this out into a base class
destroyComment: function(evt) {
if(evt) { evt.preventDefault() }
var domElement = this.el;
this.model.destroy({
success: function(){
$(domElement).remove();
}
});
} }
}); });

View file

@ -2,7 +2,8 @@ App.Views.Post = Backbone.View.extend({
events: { events: {
"click .focus_comment_textarea": "focusCommentTextarea", "click .focus_comment_textarea": "focusCommentTextarea",
"focus .comment_box": "commentTextareaFocused" "focus .comment_box": "commentTextareaFocused",
"click .delete:first": "destroyPost"
}, },
initialize: function(options) { initialize: function(options) {
@ -51,6 +52,19 @@ App.Views.Post = Backbone.View.extend({
commentTextareaFocused: function(evt){ commentTextareaFocused: function(evt){
this.$("form").removeClass('hidden').addClass("open"); this.$("form").removeClass('hidden').addClass("open");
},
// NOTE: pull this out into a base class
destroyPost: function(evt){
if(evt){ evt.preventDefault(); }
var domElement = this.el;
this.model.destroy({
success: function(){
$(domElement).remove();
}
});
} }
}); });