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}}