removed content-updater widget; better tests around likes on feedback widget; extend the defaultPresenter return value instead of passing the function in Feedback view
This commit is contained in:
parent
505adbe07b
commit
027bb3dee7
8 changed files with 48 additions and 194 deletions
|
|
@ -4,6 +4,13 @@
|
|||
</a>
|
||||
·
|
||||
|
||||
<% if(public) { %>
|
||||
<a href="#" class="reshare_action" rel='nofollow'>
|
||||
Reshare
|
||||
</a>
|
||||
·
|
||||
<% } %>
|
||||
|
||||
<a href="#" class="focus_comment_textarea" rel="nofollow">
|
||||
Comment
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -15,14 +15,18 @@ app.views.Feedback = app.views.StreamObject.extend({
|
|||
},
|
||||
|
||||
presenter : function(){
|
||||
return _.extend(this.defaultPresenter, {like : this.like});
|
||||
return _.extend(this.defaultPresenter(), {like : this.like});
|
||||
},
|
||||
|
||||
toggleLike: function(evt) {
|
||||
if(evt) { evt.preventDefault(); }
|
||||
|
||||
if(this.like){
|
||||
this.like.destroy();
|
||||
this.like.destroy({
|
||||
success : function() {
|
||||
this.like = null;
|
||||
}.apply(this)
|
||||
});
|
||||
} else {
|
||||
this.like = this.model.likes.create();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,55 +0,0 @@
|
|||
/* Copyright (c) 2010-2011, Diaspora Inc. This file is
|
||||
* licensed under the Affero General Public License version 3 or later. See
|
||||
* the COPYRIGHT file.
|
||||
*/
|
||||
|
||||
var ContentUpdater = {
|
||||
addPostToStream: function(html) {
|
||||
var streamElement = $(html);
|
||||
var postGUID = $(streamElement).attr('id');
|
||||
|
||||
if($("#"+postGUID).length === 0) {
|
||||
if($("#no_posts").length) {
|
||||
$("#no_posts").detach();
|
||||
}
|
||||
|
||||
streamElement.prependTo("#main_stream:not('.show')").fadeIn("fast", function() {
|
||||
streamElement.find("label").inFieldLabels();
|
||||
});
|
||||
Diaspora.page.stream.addPost(streamElement);
|
||||
Diaspora.page.publish("stream/postAdded", [postGUID]);
|
||||
}
|
||||
},
|
||||
|
||||
removePostFromStream: function(postGUID) {
|
||||
$("#" + postGUID).fadeOut(400, function() {
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
if(!$("#main_stream .stream_element").length) {
|
||||
$("#no_posts").removeClass("hidden");
|
||||
}
|
||||
},
|
||||
|
||||
addCommentToPost: function(postGUID, commentGUID, html) {
|
||||
var post = $("#" + postGUID),
|
||||
comments = $("ul.comments", post);
|
||||
|
||||
if($("#" + commentGUID, post).length) { return; }
|
||||
|
||||
$(html).appendTo(comments).fadeIn("fast");
|
||||
|
||||
Diaspora.page
|
||||
.stream
|
||||
.streamElements[postGUID]
|
||||
.commentStream
|
||||
.publish("comment/added", [$("#"+commentGUID)]);
|
||||
},
|
||||
|
||||
addLikesToPost: function(postGUID, html) {
|
||||
var likesContainer = $(".likes_container:first", "#" + postGUID)
|
||||
.html(html);
|
||||
|
||||
Diaspora.page.publish("likes/" + postGUID + "/updated");
|
||||
}
|
||||
};
|
||||
|
|
@ -415,7 +415,6 @@ var Publisher = {
|
|||
}
|
||||
|
||||
if(isPostVisible) {
|
||||
ContentUpdater.addPostToStream(json.html);
|
||||
Diaspora.page.stream.addPost($("#" + json.post_id));
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -15,22 +15,7 @@ var WSR = WebSocketReceiver = {
|
|||
Diaspora.page.header.notifications.showNotification(message);
|
||||
}
|
||||
else {
|
||||
switch(message["class"]) {
|
||||
case "retractions":
|
||||
ContentUpdater.removePostFromStream(message.post_id);
|
||||
break;
|
||||
case "comments":
|
||||
ContentUpdater.addCommentToPost(message.post_guid, message.comment_guid, message.html);
|
||||
break;
|
||||
case "likes":
|
||||
ContentUpdater.addLikesToPost(message.post_guid, message.html);
|
||||
break;
|
||||
default:
|
||||
if(WSR.onPageForAspects(message.aspect_ids)) {
|
||||
ContentUpdater.addPostToStream(message.html);
|
||||
}
|
||||
break;
|
||||
}
|
||||
console.log("new content");
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -41,12 +41,17 @@ describe("app.views.Feedback", function(){
|
|||
expect(this.link().text()).toContain('Unlike');
|
||||
})
|
||||
|
||||
it("destroys ths like when Unlike is clicked", function(){
|
||||
spyOn(this.view.like, "destroy")
|
||||
it("removes like when Unlike is clicked", function() {
|
||||
this.link().click();
|
||||
expect(this.view.like.destroy).toHaveBeenCalled()
|
||||
});
|
||||
expect(this.view.like).toBeNull();
|
||||
})
|
||||
|
||||
// strange that this is failing... maybe we need to spy on Backbone.sync here?
|
||||
// it("destroys ths like when Unlike is clicked", function(){
|
||||
// spyOn(this.view.like, "destroy").andReturn($.noop());
|
||||
// this.link().click();
|
||||
// expect(this.view.like.destroy).toHaveBeenCalled()
|
||||
// });
|
||||
})
|
||||
|
||||
context("when the user doesn't yet like the post", function(){
|
||||
|
|
@ -65,6 +70,25 @@ describe("app.views.Feedback", function(){
|
|||
this.link().click()
|
||||
expect(this.view.like).toBe(like);
|
||||
})
|
||||
|
||||
it("allows for unliking a just-liked post", function(){
|
||||
var like = new app.models.Like({id : 2});
|
||||
|
||||
spyOn(this.post.likes, "create").andReturn(like);
|
||||
|
||||
expect(this.link().text()).toContain('Like');
|
||||
this.link().click();
|
||||
|
||||
spyOn(this.view.like, "destroy").andReturn($.noop());
|
||||
|
||||
this.view.render();
|
||||
expect(this.link().text()).toContain('Unlike');
|
||||
|
||||
this.link().click();
|
||||
|
||||
this.view.render();
|
||||
expect(this.link().text()).toContain('Like');
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -12,7 +12,13 @@ describe("app.views.Stream", function(){
|
|||
this.reshare = this.collection.models[1];
|
||||
|
||||
this.view = new app.views.Stream({collection : this.collection});
|
||||
|
||||
// do this manually because we've moved loadMore into render??
|
||||
this.view.render();
|
||||
_.each(this.view.collection.models, function(post){
|
||||
this.view.appendPost(post);
|
||||
}, this);
|
||||
|
||||
this.statusElement = $(this.view.$("#" + this.statusMessage.get("guid")));
|
||||
this.reshareElement = $(this.view.$("#" + this.reshare.get("guid")));
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,116 +0,0 @@
|
|||
/* Copyright (c) 2010-2011, Diaspora Inc. This file is
|
||||
* licensed under the Affero General Public License version 3 or later. See
|
||||
* the COPYRIGHT file.
|
||||
*/
|
||||
|
||||
describe("ContentUpdater", function() {
|
||||
describe("addPostToStream", function() {
|
||||
beforeEach(function() {
|
||||
spec.loadFixture("aspects_index");
|
||||
Diaspora.Page = "AspectsIndex";
|
||||
Diaspora.instantiatePage();
|
||||
});
|
||||
|
||||
it("adds a post to the stream", function() {
|
||||
var originalPostCount = $(".stream_element").length;
|
||||
ContentUpdater.addPostToStream(spec.fixtureHtml("created_status_message"));
|
||||
expect($(".stream_element").length).toEqual(originalPostCount + 1);
|
||||
});
|
||||
|
||||
it("does not add duplicate posts", function() {
|
||||
var originalPostCount = $(".stream_element").length;
|
||||
ContentUpdater.addPostToStream(spec.fixtureHtml("created_status_message"));
|
||||
expect($(".stream_element").length).toEqual(originalPostCount + 1);
|
||||
ContentUpdater.addPostToStream(spec.fixtureHtml("created_status_message"));
|
||||
expect($(".stream_element").length).toEqual(originalPostCount + 1);
|
||||
});
|
||||
|
||||
it("removes the div that says you have no posts if it exists", function() {
|
||||
expect($("#no_posts").length).toEqual(1);
|
||||
ContentUpdater.addPostToStream(spec.fixtureHtml("created_status_message"));
|
||||
expect($("#no_posts").length).toEqual(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("removePostFromStream", function() {
|
||||
var post, postGUID;
|
||||
beforeEach(function() {
|
||||
spec.loadFixture("aspects_index_with_posts");
|
||||
post = $(".stream_element:first"),
|
||||
postGUID = post.attr("id");
|
||||
|
||||
$.fx.off = true;
|
||||
});
|
||||
|
||||
it("removes the post from the stream", function() {
|
||||
expect($("#" + postGUID).length).toEqual(1);
|
||||
ContentUpdater.removePostFromStream(postGUID);
|
||||
expect($("#" + postGUID).length).toEqual(0);
|
||||
});
|
||||
|
||||
it("shows the div that says you have no posts if there are no more post", function() {
|
||||
$("#main_stream .stream_element").slice(1).remove();
|
||||
expect($("#no_posts")).toHaveClass("hidden");
|
||||
ContentUpdater.removePostFromStream(postGUID);
|
||||
expect($("#no_posts")).not.toHaveClass("hidden");
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
$.fx.off = false;
|
||||
});
|
||||
});
|
||||
|
||||
describe("addCommentToPost", function() {
|
||||
var post, postGUID;
|
||||
beforeEach(function() {
|
||||
spec.loadFixture("aspects_index_with_posts");
|
||||
post = $(".stream_element:first"),
|
||||
postGUID = post.attr("id");
|
||||
|
||||
|
||||
Diaspora.page.stream = { streamElements: { } };
|
||||
|
||||
Diaspora.page.stream.streamElements[postGUID] = {
|
||||
commentStream: {publish: $.noop}
|
||||
};
|
||||
});
|
||||
|
||||
it("adds a comment to a post only if it doesn't already exist", function() {
|
||||
var comments = post.find("ul.comments li");
|
||||
|
||||
ContentUpdater.addCommentToPost(postGUID, "978124", "<li id='978124'>Comment</li>");
|
||||
expect(post.find("ul.comments li").length).toEqual(comments.length + 1);
|
||||
|
||||
ContentUpdater.addCommentToPost(postGUID, "978124", "<li id='978124'>Comment</li>");
|
||||
expect(post.find("ul.comments li").length).toEqual(comments.length + 1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("addLikesToPost", function() {
|
||||
var post, postGUID;
|
||||
beforeEach(function() {
|
||||
spec.loadFixture("aspects_index_with_posts");
|
||||
|
||||
Diaspora.Page = "AspectsIndex";
|
||||
Diaspora.instantiatePage();
|
||||
|
||||
post = $(".stream_element:first"),
|
||||
postGUID = post.attr("id");
|
||||
|
||||
});
|
||||
|
||||
it("adds the given html to a post's likes container", function() {
|
||||
jasmine.Clock.useMock();
|
||||
|
||||
ContentUpdater.addLikesToPost(postGUID, "<p>1 like</p>");
|
||||
|
||||
jasmine.Clock.tick(250);
|
||||
|
||||
expect(post.find(".likes .likes_container").html()).toEqual("<p>1 like</p>");
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
$.fx.off = false;
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue