From 439f393d89a20ab94d6a2ced12fa2a3ddea43a84 Mon Sep 17 00:00:00 2001 From: cpradio Date: Wed, 22 Oct 2014 18:31:19 -0400 Subject: [PATCH 1/3] Show dismiss posts/topics buttons on category filtered lists --- .../discourse/controllers/discovery/topics.js.es6 | 13 +++++++++---- app/assets/javascripts/discourse/models/topic.js | 6 ++++-- app/controllers/topics_controller.rb | 6 +++++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 b/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 index a25502d663d..a58dccc90a5 100644 --- a/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 +++ b/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 @@ -85,7 +85,8 @@ var controllerOpts = { if (selected.length > 0) { promise = Discourse.Topic.bulkOperation(selected, operation); } else { - promise = Discourse.Topic.bulkOperationByFilter(this.get('filter'), operation); + var category = this.get('category'); + promise = Discourse.Topic.bulkOperationByFilter('unread', operation, category ? category.id : null); } promise.then(function(result) { if (result && result.topic_ids) { @@ -105,8 +106,12 @@ var controllerOpts = { return Discourse.TopicTrackingState.current(); }.property(), + isFilterPage: function(filter, filterType) { + return filter.match(new RegExp(filterType + '$', 'gi')) ? true : false; + }, + showDismissRead: function() { - return this.get('filter') === 'unread' && this.get('topics.length') > 0; + return this.isFilterPage(this.get('filter'), 'unread') && this.get('topics.length') > 0; }.property('filter', 'topics.length'), showResetNew: function() { @@ -114,8 +119,8 @@ var controllerOpts = { }.property('filter', 'topics.length'), showDismissAtTop: function() { - return (this.get('filter') === 'new' || - this.get('filter') === 'unread') && + return (this.isFilterPage(this.get('filter'), 'new') || + this.isFilterPage(this.get('filter'), 'unread')) && this.get('topics.length') >= 30; }.property('filter', 'topics.length'), diff --git a/app/assets/javascripts/discourse/models/topic.js b/app/assets/javascripts/discourse/models/topic.js index 40c0d9eb877..e0ddb17553d 100644 --- a/app/assets/javascripts/discourse/models/topic.js +++ b/app/assets/javascripts/discourse/models/topic.js @@ -452,10 +452,12 @@ Discourse.Topic.reopenClass({ }); }, - bulkOperationByFilter: function(filter, operation) { + bulkOperationByFilter: function(filter, operation, categoryId) { + var data = { filter: filter, operation: operation }; + if (categoryId) data['categoryId'] = categoryId; return Discourse.ajax("/topics/bulk", { type: 'PUT', - data: { filter: filter, operation: operation } + data: data }); }, diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index f8cdbac396a..6cf0501c5f0 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -359,7 +359,11 @@ class TopicsController < ApplicationController topic_ids = params[:topic_ids].map {|t| t.to_i} elsif params[:filter] == 'unread' tq = TopicQuery.new(current_user) - topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.pluck(:id) + if params[:categoryId] + topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.where('category_id = ?', params[:categoryId]).pluck(:id) + else + topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.pluck(:id) + end else raise ActionController::ParameterMissing.new(:topic_ids) end From c6e54741bbedc1189e32d36154c8e69339ebde1c Mon Sep 17 00:00:00 2001 From: cpradio Date: Fri, 24 Oct 2014 17:01:28 -0400 Subject: [PATCH 2/3] Apply comments from eviltrout, using this.get('category.id'), and use snake case for category_id --- .../javascripts/discourse/controllers/discovery/topics.js.es6 | 3 +-- app/assets/javascripts/discourse/models/topic.js | 2 +- app/controllers/topics_controller.rb | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 b/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 index a58dccc90a5..bc2794173f1 100644 --- a/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 +++ b/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 @@ -85,8 +85,7 @@ var controllerOpts = { if (selected.length > 0) { promise = Discourse.Topic.bulkOperation(selected, operation); } else { - var category = this.get('category'); - promise = Discourse.Topic.bulkOperationByFilter('unread', operation, category ? category.id : null); + promise = Discourse.Topic.bulkOperationByFilter('unread', operation, this.get('category.id')); } promise.then(function(result) { if (result && result.topic_ids) { diff --git a/app/assets/javascripts/discourse/models/topic.js b/app/assets/javascripts/discourse/models/topic.js index e0ddb17553d..0b876a96d5d 100644 --- a/app/assets/javascripts/discourse/models/topic.js +++ b/app/assets/javascripts/discourse/models/topic.js @@ -454,7 +454,7 @@ Discourse.Topic.reopenClass({ bulkOperationByFilter: function(filter, operation, categoryId) { var data = { filter: filter, operation: operation }; - if (categoryId) data['categoryId'] = categoryId; + if (categoryId) data['category_id'] = categoryId; return Discourse.ajax("/topics/bulk", { type: 'PUT', data: data diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index 6cf0501c5f0..ee03c40d742 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -359,8 +359,8 @@ class TopicsController < ApplicationController topic_ids = params[:topic_ids].map {|t| t.to_i} elsif params[:filter] == 'unread' tq = TopicQuery.new(current_user) - if params[:categoryId] - topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.where('category_id = ?', params[:categoryId]).pluck(:id) + if params[:category_id] + topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.where('category_id = ?', params[:category_id]).pluck(:id) else topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.pluck(:id) end From 50f7fbc36121c34a59b1a99c4565df093ccfd483 Mon Sep 17 00:00:00 2001 From: cpradio Date: Thu, 30 Oct 2014 10:19:49 -0400 Subject: [PATCH 3/3] Apply comment from @sam to consolidate logic --- app/controllers/topics_controller.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index ee03c40d742..e7b39785334 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -359,11 +359,9 @@ class TopicsController < ApplicationController topic_ids = params[:topic_ids].map {|t| t.to_i} elsif params[:filter] == 'unread' tq = TopicQuery.new(current_user) - if params[:category_id] - topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.where('category_id = ?', params[:category_id]).pluck(:id) - else - topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.pluck(:id) - end + topics = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics + topics = topics.where('category_id = ?', params[:category_id]) if params[:category_id] + topic_ids = topics.pluck(:id) else raise ActionController::ParameterMissing.new(:topic_ids) end