From 6aab8cb331ac3349dcf02cab0ec9a449b87f185c Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Thu, 2 Mar 2017 10:56:04 -0500 Subject: [PATCH] FEATURE: new category setting for whether to show latest topics or top topics by default --- .../components/edit-category-settings.js.es6 | 8 +++++++ .../discourse/models/category.js.es6 | 3 ++- .../dynamic-route-builders.js.es6 | 6 ++--- .../routes/build-category-route.js.es6 | 17 ++++++++----- .../components/edit-category-settings.hbs | 7 ++++++ app/controllers/categories_controller.rb | 1 + app/controllers/list_controller.rb | 10 ++++++++ app/serializers/basic_category_serializer.rb | 3 ++- config/locales/client.en.yml | 1 + config/routes.rb | 2 +- ...01215150_add_default_view_to_categories.rb | 5 ++++ spec/controllers/list_controller_spec.rb | 24 ++++++++++++++++++- 12 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 db/migrate/20170301215150_add_default_view_to_categories.rb diff --git a/app/assets/javascripts/discourse/components/edit-category-settings.js.es6 b/app/assets/javascripts/discourse/components/edit-category-settings.js.es6 index 41a4d2b20f5..f1b089ac1ae 100644 --- a/app/assets/javascripts/discourse/components/edit-category-settings.js.es6 +++ b/app/assets/javascripts/discourse/components/edit-category-settings.js.es6 @@ -21,5 +21,13 @@ export default buildCategoryPanel('settings', { {name: I18n.t('category.sort_ascending'), value: 'true'}, {name: I18n.t('category.sort_descending'), value: 'false'} ]; + }, + + @computed + availableViews() { + return [ + {name: I18n.t('filters.latest.title'), value: 'latest'}, + {name: I18n.t('filters.top.title'), value: 'top'} + ]; } }); diff --git a/app/assets/javascripts/discourse/models/category.js.es6 b/app/assets/javascripts/discourse/models/category.js.es6 index 8839be9bc8d..1ac1a9ca0c4 100644 --- a/app/assets/javascripts/discourse/models/category.js.es6 +++ b/app/assets/javascripts/discourse/models/category.js.es6 @@ -104,7 +104,8 @@ const Category = RestModel.extend({ sort_ascending: this.get('sort_ascending'), topic_featured_link_allowed: this.get('topic_featured_link_allowed'), show_subcategory_list: this.get('show_subcategory_list'), - num_featured_topics: this.get('num_featured_topics') + num_featured_topics: this.get('num_featured_topics'), + default_view: this.get('default_view') }, type: id ? 'PUT' : 'POST' }); diff --git a/app/assets/javascripts/discourse/pre-initializers/dynamic-route-builders.js.es6 b/app/assets/javascripts/discourse/pre-initializers/dynamic-route-builders.js.es6 index 93eddde83cf..6fef97d3454 100644 --- a/app/assets/javascripts/discourse/pre-initializers/dynamic-route-builders.js.es6 +++ b/app/assets/javascripts/discourse/pre-initializers/dynamic-route-builders.js.es6 @@ -13,9 +13,9 @@ export default { app.DiscoveryCategoryNoneController = DiscoverySortableController.extend(); app.DiscoveryCategoryWithIDController = DiscoverySortableController.extend(); - app.DiscoveryCategoryRoute = buildCategoryRoute('latest'); - app.DiscoveryParentCategoryRoute = buildCategoryRoute('latest'); - app.DiscoveryCategoryNoneRoute = buildCategoryRoute('latest', {no_subcategories: true}); + app.DiscoveryCategoryRoute = buildCategoryRoute('default'); + app.DiscoveryParentCategoryRoute = buildCategoryRoute('default'); + app.DiscoveryCategoryNoneRoute = buildCategoryRoute('default', {no_subcategories: true}); const site = Discourse.Site.current(); site.get('filters').forEach(filter => { diff --git a/app/assets/javascripts/discourse/routes/build-category-route.js.es6 b/app/assets/javascripts/discourse/routes/build-category-route.js.es6 index b7b41676325..0f8fb98d398 100644 --- a/app/assets/javascripts/discourse/routes/build-category-route.js.es6 +++ b/app/assets/javascripts/discourse/routes/build-category-route.js.es6 @@ -6,7 +6,7 @@ import CategoryList from 'discourse/models/category-list'; import Category from 'discourse/models/category'; // A helper function to create a category route with parameters -export default (filter, params) => { +export default (filterArg, params) => { return Discourse.Route.extend({ queryParams, @@ -37,9 +37,13 @@ export default (filter, params) => { this._retrieveTopicList(model.category, transition)]); }, + filter(category) { + return filterArg === 'default' ? (category.get('default_view') || 'latest') : filterArg; + }, + _setupNavigation(category) { const noSubcategories = params && !!params.no_subcategories, - filterMode = `c/${Discourse.Category.slugFor(category)}${noSubcategories ? "/none" : ""}/l/${filter}`; + filterMode = `c/${Discourse.Category.slugFor(category)}${noSubcategories ? "/none" : ""}/l/${this.filter(category)}`; this.controllerFor('navigation/category').setProperties({ category, @@ -60,7 +64,7 @@ export default (filter, params) => { }, _retrieveTopicList(category, transition) { - const listFilter = `c/${Discourse.Category.slugFor(category)}/l/${filter}`, + const listFilter = `c/${Discourse.Category.slugFor(category)}/l/${this.filter(category)}`, findOpts = filterQueryParams(transition.queryParams, params), extras = { cached: this.isPoppedState(transition) }; @@ -72,8 +76,8 @@ export default (filter, params) => { }, titleToken() { - const filterText = I18n.t('filters.' + filter.replace('/', '.') + '.title'), - category = this.currentModel.category; + const category = this.currentModel.category, + filterText = I18n.t('filters.' + this.filter(category).replace('/', '.') + '.title'); return I18n.t('filters.with_category', { filter: filterText, category: category.get('name') }); }, @@ -82,7 +86,8 @@ export default (filter, params) => { const topics = this.get('topics'), category = model.category, canCreateTopic = topics.get('can_create_topic'), - canCreateTopicOnCategory = category.get('permission') === PermissionType.FULL; + canCreateTopicOnCategory = category.get('permission') === PermissionType.FULL, + filter = this.filter(category); this.controllerFor('navigation/category').setProperties({ canCreateTopicOnCategory: canCreateTopicOnCategory, diff --git a/app/assets/javascripts/discourse/templates/components/edit-category-settings.hbs b/app/assets/javascripts/discourse/templates/components/edit-category-settings.hbs index 77862d06f3e..d3e6a73d3a4 100644 --- a/app/assets/javascripts/discourse/templates/components/edit-category-settings.hbs +++ b/app/assets/javascripts/discourse/templates/components/edit-category-settings.hbs @@ -56,6 +56,13 @@ +
+ +
+ {{#if emailInEnabled}}