Select +Replies for bulk operations
This commit is contained in:
@@ -11,8 +11,15 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected
|
||||
summaryCollapsed: true,
|
||||
needs: ['header', 'modal', 'composer', 'quoteButton'],
|
||||
allPostsSelected: false,
|
||||
selectedPosts: new Em.Set(),
|
||||
editingTopic: false,
|
||||
selectedPosts: null,
|
||||
selectedReplies: null,
|
||||
|
||||
init: function() {
|
||||
this._super();
|
||||
this.set('selectedPosts', new Em.Set());
|
||||
this.set('selectedReplies', new Em.Set());
|
||||
},
|
||||
|
||||
jumpTopDisabled: function() {
|
||||
return (this.get('progressPosition') === 1);
|
||||
@@ -82,18 +89,49 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected
|
||||
return false;
|
||||
}.property('postStream.loaded', 'currentPost', 'postStream.filteredPostsCount'),
|
||||
|
||||
selectPost: function(post) {
|
||||
deselectPost: function(post) {
|
||||
this.get('selectedPosts').removeObject(post);
|
||||
|
||||
var selectedReplies = this.get('selectedReplies');
|
||||
selectedReplies.removeObject(post);
|
||||
|
||||
var selectedReply = selectedReplies.findProperty('post_number', post.get('reply_to_post_number'));
|
||||
if (selectedReply) { selectedReplies.removeObject(selectedReply); }
|
||||
|
||||
this.set('allPostsSelected', false);
|
||||
},
|
||||
|
||||
postSelected: function(post) {
|
||||
if (this.get('allPostsSelected')) { return true; }
|
||||
if (this.get('selectedPosts').contains(post)) { return true; }
|
||||
|
||||
if (this.get('selectedReplies').findProperty('post_number', post.get('reply_to_post_number'))) { return true; }
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
toggledSelectedPost: function(post) {
|
||||
var selectedPosts = this.get('selectedPosts');
|
||||
if (selectedPosts.contains(post)) {
|
||||
selectedPosts.removeObject(post);
|
||||
this.set('allPostsSelected', false);
|
||||
if (this.postSelected(post)) {
|
||||
this.deselectPost(post);
|
||||
return false;
|
||||
} else {
|
||||
selectedPosts.addObject(post);
|
||||
|
||||
// If the user manually selects all posts, all posts are selected
|
||||
if (selectedPosts.length === this.get('posts_count')) {
|
||||
this.set('allPostsSelected');
|
||||
this.set('allPostsSelected', true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
toggledSelectedPostReplies: function(post) {
|
||||
var selectedReplies = this.get('selectedReplies');
|
||||
if (this.toggledSelectedPost(post)) {
|
||||
selectedReplies.addObject(post);
|
||||
} else {
|
||||
selectedReplies.removeObject(post);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -108,6 +146,7 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected
|
||||
|
||||
deselectAll: function() {
|
||||
this.get('selectedPosts').clear();
|
||||
this.get('selectedReplies').clear();
|
||||
this.set('allPostsSelected', false);
|
||||
},
|
||||
|
||||
@@ -177,19 +216,28 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected
|
||||
},
|
||||
|
||||
deleteSelected: function() {
|
||||
var topicController = this;
|
||||
var self = this;
|
||||
bootbox.confirm(I18n.t("post.delete.confirm", { count: this.get('selectedPostsCount')}), function(result) {
|
||||
if (result) {
|
||||
|
||||
// If all posts are selected, it's the same thing as deleting the topic
|
||||
if (topicController.get('allPostsSelected')) {
|
||||
return topicController.deleteTopic();
|
||||
if (self.get('allPostsSelected')) {
|
||||
return self.deleteTopic();
|
||||
}
|
||||
|
||||
var selectedPosts = topicController.get('selectedPosts');
|
||||
Discourse.Post.deleteMany(selectedPosts);
|
||||
topicController.get('model.postStream').removePosts(selectedPosts);
|
||||
topicController.toggleMultiSelect();
|
||||
var selectedPosts = self.get('selectedPosts'),
|
||||
selectedReplies = self.get('selectedReplies'),
|
||||
postStream = self.get('postStream'),
|
||||
toRemove = new Ember.Set();
|
||||
|
||||
|
||||
Discourse.Post.deleteMany(selectedPosts, selectedReplies);
|
||||
postStream.get('posts').forEach(function (p) {
|
||||
if (self.postSelected(p)) { toRemove.addObject(p); }
|
||||
});
|
||||
|
||||
postStream.removePosts(toRemove);
|
||||
self.toggleMultiSelect();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user