From 62a20f5655b4fec2b0f965cc7a8bad73523f5d7a Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Mon, 27 May 2013 14:15:20 -0400 Subject: [PATCH] FIX: Couldn't access "Uncategorized" category from category list. --- .../javascripts/discourse/models/category.js | 19 ++++++++---- .../discourse/models/category_list.js | 19 +++++++++--- .../javascripts/discourse/models/site.js | 1 + .../discourse/routes/list_categories_route.js | 30 +++++++++---------- .../discourse/routes/list_category_route.js | 4 +++ .../modal/edit_category.js.handlebars | 6 ++-- .../views/modal/edit_category_view.js | 20 ++++++++----- app/models/category_list.rb | 8 ++--- .../category_detailed_serializer.rb | 11 ++++++- app/serializers/site_serializer.rb | 7 ++++- 10 files changed, 82 insertions(+), 43 deletions(-) diff --git a/app/assets/javascripts/discourse/models/category.js b/app/assets/javascripts/discourse/models/category.js index 46bc8af49..af90a532f 100644 --- a/app/assets/javascripts/discourse/models/category.js +++ b/app/assets/javascripts/discourse/models/category.js @@ -10,12 +10,6 @@ Discourse.Category = Discourse.Model.extend({ init: function() { this._super(); - if (!this.get('id') && this.get('name')) { - this.set('is_uncategorized', true); - if (!this.get('color')) this.set('color', Discourse.SiteSettings.uncategorized_color); - if (!this.get('text_color')) this.set('text_color', Discourse.SiteSettings.uncategorized_text_color); - } - this.set("availableGroups", Em.A(this.get("available_groups"))); this.set("groups", Em.A(this.groups)); }, @@ -75,6 +69,19 @@ Discourse.Category = Discourse.Model.extend({ Discourse.Category.reopenClass({ + uncategorizedInstance: function() { + if (this.uncategorized) return this.uncategorized; + + this.uncategorized = this.create({ + slug: 'uncategorized', + name: Discourse.SiteSettings.uncategorized_name, + isUncategorized: true, + color: Discourse.SiteSettings.uncategorized_color, + text_color: Discourse.SiteSettings.uncategorized_text_color + }); + return this.uncategorized; + }, + list: function() { return Discourse.Site.instance().get('categories'); }, diff --git a/app/assets/javascripts/discourse/models/category_list.js b/app/assets/javascripts/discourse/models/category_list.js index 0093f7b54..668a85cb7 100644 --- a/app/assets/javascripts/discourse/models/category_list.js +++ b/app/assets/javascripts/discourse/models/category_list.js @@ -11,9 +11,10 @@ Discourse.CategoryList = Discourse.Model.extend({}); Discourse.CategoryList.reopenClass({ categoriesFrom: function(result) { - var categories, users; - categories = Em.A(); - users = this.extractByKey(result.featured_users, Discourse.User); + var categories = Em.A(); + var users = this.extractByKey(result.featured_users, Discourse.User); + + result.category_list.categories.each(function(c) { if (c.featured_user_ids) { c.featured_users = c.featured_user_ids.map(function(u) { @@ -25,7 +26,17 @@ Discourse.CategoryList.reopenClass({ return Discourse.Topic.create(t); }); } - return categories.pushObject(Discourse.Category.create(c)); + + if (c.is_uncategorized) { + var uncategorized = Discourse.Category.uncategorizedInstance(); + uncategorized.setProperties({ + topics: c.topics, + featured_users: c.featured_users + }); + categories.pushObject(uncategorized); + } else { + categories.pushObject(Discourse.Category.create(c)); + } }); return categories; }, diff --git a/app/assets/javascripts/discourse/models/site.js b/app/assets/javascripts/discourse/models/site.js index 4ad9877cf..861fbf32f 100644 --- a/app/assets/javascripts/discourse/models/site.js +++ b/app/assets/javascripts/discourse/models/site.js @@ -41,6 +41,7 @@ Discourse.Site.reopenClass({ create: function(obj) { var _this = this; return Object.tap(this._super(obj), function(result) { + if (result.categories) { result.categories = result.categories.map(function(c) { return Discourse.Category.create(c); diff --git a/app/assets/javascripts/discourse/routes/list_categories_route.js b/app/assets/javascripts/discourse/routes/list_categories_route.js index 99bba9dc3..8774774ac 100644 --- a/app/assets/javascripts/discourse/routes/list_categories_route.js +++ b/app/assets/javascripts/discourse/routes/list_categories_route.js @@ -8,26 +8,24 @@ **/ Discourse.ListCategoriesRoute = Discourse.Route.extend({ - exit: function() { + model: function() { + var listTopicsController = this.controllerFor('listTopics'); + if (listTopicsController) listTopicsController.set('content', null); + + return this.controllerFor('list').load('categories'); + }, + + deactivate: function() { this._super(); this.controllerFor('list').set('canCreateCategory', false); }, - setupController: function(controller) { - var listController, - _this = this; - listController = this.controllerFor('list'); - listController.set('filterMode', 'categories'); - listController.load('categories').then(function(categoryList) { - _this.render('listCategories', { - into: 'list', - outlet: 'listView', - controller: 'listCategories' - }); - listController.set('canCreateCategory', categoryList.get('can_create_category')); - listController.set('canCreateTopic', categoryList.get('can_create_topic')); - listController.set('category', null); - _this.controllerFor('listCategories').set('content', categoryList); + setupController: function(controller, categoryList) { + this.render('listCategories', { into: 'list', outlet: 'listView' }); + this.controllerFor('list').setProperties({ + canCreateCategory: categoryList.get('can_create_category'), + canCreateTopic: categoryList.get('can_create_topic'), + category: null }); } diff --git a/app/assets/javascripts/discourse/routes/list_category_route.js b/app/assets/javascripts/discourse/routes/list_category_route.js index a3fc1f599..bd491dcab 100644 --- a/app/assets/javascripts/discourse/routes/list_category_route.js +++ b/app/assets/javascripts/discourse/routes/list_category_route.js @@ -12,6 +12,10 @@ Discourse.ListCategoryRoute = Discourse.FilteredListRoute.extend({ var categories = Discourse.Category.list(); var slug = Em.get(params, 'slug'); + + var uncategorized = Discourse.Category.uncategorizedInstance(); + if (slug === uncategorized.get('slug')) return uncategorized; + var category = categories.findProperty('slug', Em.get(params, 'slug')) // In case the slug didn't work, try to find it by id instead. diff --git a/app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars b/app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars index b63548fbd..ee47b3407 100644 --- a/app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars +++ b/app/assets/javascripts/discourse/templates/modal/edit_category.js.handlebars @@ -5,7 +5,7 @@
  • {{i18n category.general}}
  • - {{#unless is_uncategorized}} + {{#unless isUncategorized}}
  • {{i18n category.security}}
  • @@ -23,7 +23,7 @@ {{textField value=name placeholderKey="category.name_placeholder" maxlength="50"}} - {{#unless is_uncategorized}} + {{#unless isUncategorized}}
    @@ -59,7 +59,7 @@
    - {{#unless is_uncategorized}} + {{#unless isUncategorized}}