diff --git a/app/assets/javascripts/discourse/components/category_group_component.js b/app/assets/javascripts/discourse/components/category_group_component.js
index 28cc4ea4b7..e8a97ff91f 100644
--- a/app/assets/javascripts/discourse/components/category_group_component.js
+++ b/app/assets/javascripts/discourse/components/category_group_component.js
@@ -19,7 +19,7 @@ Discourse.CategoryGroupComponent = Ember.Component.extend({
},
template: Discourse.CategoryGroupComponent.templateFunction(),
transformComplete: function(category){
- return Discourse.HTML.categoryLink(category);
+ return Discourse.HTML.categoryLink(category, {allowUncategorized: true});
}
});
}
@@ -32,7 +32,7 @@ Discourse.CategoryGroupComponent.reopenClass({
"
" +
"{{#each options}}" +
"- " +
- "{{categoryLinkRaw this}}" +
+ "{{categoryLinkRaw this allowUncategorized=true}}" +
"
" +
"{{/each}}" +
"
" +
diff --git a/app/assets/javascripts/discourse/lib/autocomplete.js b/app/assets/javascripts/discourse/lib/autocomplete.js
index 33d3715a1e..6c181deee4 100644
--- a/app/assets/javascripts/discourse/lib/autocomplete.js
+++ b/app/assets/javascripts/discourse/lib/autocomplete.js
@@ -114,6 +114,7 @@ $.fn.autocomplete = function(options) {
if (options.onChangeItems) {
options.onChangeItems(inputSelectedItems);
}
+ return false;
});
};
diff --git a/app/assets/javascripts/discourse/models/category.js b/app/assets/javascripts/discourse/models/category.js
index dc1a125a2f..d4e963a681 100644
--- a/app/assets/javascripts/discourse/models/category.js
+++ b/app/assets/javascripts/discourse/models/category.js
@@ -209,6 +209,12 @@ Discourse.Category.reopenClass({
return Discourse.Category.list().findBy('id', id);
},
+ findByIds: function(ids){
+ return ids.map(function(id){
+ return Discourse.Category.findById(id);
+ });
+ },
+
findBySlug: function(slug, parentSlug) {
var categories = Discourse.Category.list(),
diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js
index 6baecbced6..c200722b2e 100644
--- a/app/assets/javascripts/discourse/models/user.js
+++ b/app/assets/javascripts/discourse/models/user.js
@@ -181,8 +181,12 @@ Discourse.User = Discourse.Model.extend({
'external_links_in_new_tab',
'watch_new_topics',
'enable_quoting');
+
_.each(['muted','watched','tracked'], function(s){
- data[s + '_category_ids'] = user.get(s + 'Categories').map(function(c){ return c.get('id')});
+ var cats = user.get(s + 'Categories').map(function(c){ return c.get('id')});
+ // HACK: denote lack of categories
+ if(cats.length === 0) { cats = [-1]; }
+ data[s + '_category_ids'] = cats;
});
return Discourse.ajax("/users/" + this.get('username_lower'), {
@@ -358,22 +362,17 @@ Discourse.User = Discourse.Model.extend({
}.property("trust_level", "hasBeenSeenInTheLastMonth"),
updateMutedCategories: function() {
- this.set("mutedCategories", _.map(this.muted_category_ids, function(id){
- return Discourse.Category.findById(id);
- }));
+ this.set("mutedCategories", Discourse.Category.findByIds(this.muted_category_ids));
}.observes("muted_category_ids"),
updateTrackedCategories: function() {
- this.set("trackedCategories", _.map(this.tracked_category_ids, function(id){
- return Discourse.Category.findById(id);
- }));
+ this.set("trackedCategories", Discourse.Category.findByIds(this.tracked_category_ids));
}.observes("tracked_category_ids"),
updateWatchedCategories: function() {
- this.set("watchedCategories", _.map(this.watched_category_ids, function(id){
- return Discourse.Category.findById(id);
- }));
+ this.set("watchedCategories", Discourse.Category.findByIds(this.watched_category_ids));
}.observes("watched_category_ids")
+
});
Discourse.User.reopenClass(Discourse.Singleton, {
diff --git a/app/models/category_user.rb b/app/models/category_user.rb
index ea59fa3c0b..5c06ad831d 100644
--- a/app/models/category_user.rb
+++ b/app/models/category_user.rb
@@ -21,9 +21,10 @@ class CategoryUser < ActiveRecord::Base
def self.batch_set(user, level, category_ids)
records = CategoryUser.where(user: user, notification_level: notification_levels[level])
-
old_ids = records.pluck(:category_id)
+ category_ids = Category.where('id in (?)', category_ids).pluck(:id)
+
remove = (old_ids - category_ids)
if remove.present?
records.where('category_id in (?)', remove).destroy_all