diaspora/app/assets/javascripts/app/views/post_controls_view.js
Steffen van Bergerem 3ce4bba383
Only remove post from stream after successful response
Pass destroyModel from post control view to post view
and don't listen to the remove event in the post view
anymore. The `remove` function will be called from the
base view.

Fixes #5445
2017-03-26 23:50:48 +02:00

85 lines
2.4 KiB
JavaScript

// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.views.PostControls = app.views.Base.extend({
templateName: "post-controls",
className: "control-icons",
events: {
"click .remove_post": "destroyModel",
"click .hide_post": "hidePost",
"click .post_report": "report",
"click .block_user": "blockUser",
"click .create_participation": "createParticipation",
"click .destroy_participation": "destroyParticipation"
},
tooltipSelector: [".post_report",
".block_user",
".delete",
".create_participation",
".destroy_participation"].join(", "),
initialize: function(opts) {
this.model.bind("change", this.render, this);
this.post = opts.post;
},
presenter: function() {
return _.extend(this.defaultPresenter(), {
authorIsCurrentUser: app.currentUser.isAuthorOf(this.model)
});
},
blockUser: function(evt) {
if (evt) { evt.preventDefault(); }
if (!confirm(Diaspora.I18n.t("ignore_user"))) { return; }
this.model.blockAuthor().done(function() {
if (this.singlePost) { app._changeLocation(Routes.stream()); }
}.bind(this)).fail(function() {
app.flashMessages.error(Diaspora.I18n.t("ignore_failed"));
});
},
hidePost: function(evt) {
if (evt) { evt.preventDefault(); }
if (!confirm(Diaspora.I18n.t("confirm_dialog"))) { return; }
$.ajax({
url: Routes.shareVisibility(42),
type: "PUT",
data: {
/* eslint-disable camelcase */
post_id: this.model.id
/* eslint-enable camelcase */
}
}).done(function() {
if (this.singlePost) {
app._changeLocation(Routes.stream());
} else {
this.post.remove();
}
}.bind(this)).fail(function() {
app.flashMessages.error(Diaspora.I18n.t("hide_post_failed"));
});
},
createParticipation: function(evt) {
if (evt) { evt.preventDefault(); }
$.post(Routes.postParticipation(this.model.get("id")), {}, function() {
this.model.set({participation: true});
}.bind(this));
},
destroyParticipation: function(evt) {
if (evt) { evt.preventDefault(); }
$.post(Routes.postParticipation(this.model.get("id")), {_method: "delete"}, function() {
this.model.set({participation: false});
}.bind(this));
},
destroyModel: function() {
this.post.destroyModel();
}
});
// @license-end