mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 22:43:33 +08:00
Filter on site settings across all categories
This commit is contained in:
@ -0,0 +1,19 @@
|
|||||||
|
Discourse.AdminSiteSettingsCategoryController = Ember.ObjectController.extend({
|
||||||
|
categoryNameKey: null,
|
||||||
|
needs: ['adminSiteSettings'],
|
||||||
|
|
||||||
|
filteredContent: function() {
|
||||||
|
if (!this.get('categoryNameKey')) { return Em.A(); }
|
||||||
|
|
||||||
|
var category = this.get('controllers.adminSiteSettings.content').find(function(siteSettingCategory) {
|
||||||
|
return siteSettingCategory.nameKey === this.get('categoryNameKey');
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
if (category) {
|
||||||
|
return category.siteSettings;
|
||||||
|
} else {
|
||||||
|
return Em.A();
|
||||||
|
}
|
||||||
|
}.property('controllers.adminSiteSettings.content', 'categoryNameKey')
|
||||||
|
|
||||||
|
});
|
@ -15,31 +15,47 @@ Discourse.AdminSiteSettingsController = Ember.ArrayController.extend(Discourse.P
|
|||||||
|
|
||||||
@property filteredContent
|
@property filteredContent
|
||||||
**/
|
**/
|
||||||
filteredContent: function() {
|
filterContent: function() {
|
||||||
|
|
||||||
// If we have no content, don't bother filtering anything
|
// If we have no content, don't bother filtering anything
|
||||||
if (!this.present('content')) return null;
|
if (!this.present('allSiteSettings')) return;
|
||||||
|
|
||||||
var filter;
|
var filter;
|
||||||
if (this.get('filter')) {
|
if (this.get('filter')) {
|
||||||
filter = this.get('filter').toLowerCase();
|
filter = this.get('filter').toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
var adminSettingsController = this;
|
if ((filter === undefined || filter.length < 1) && !this.get('onlyOverridden')) {
|
||||||
|
this.set('model', this.get('allSiteSettings'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var maxResults = Em.isNone(filter) ? this.get('content.length') : 20;
|
var self = this,
|
||||||
return _.first(this.get('content').filter(function(item, index, enumerable) {
|
matches,
|
||||||
if (adminSettingsController.get('onlyOverridden') && !item.get('overridden')) return false;
|
matchesGroupedByCategory = Em.A();
|
||||||
|
|
||||||
|
_.each(this.get('allSiteSettings'), function(settingsCategory) {
|
||||||
|
matches = settingsCategory.siteSettings.filter(function(item) {
|
||||||
|
if (self.get('onlyOverridden') && !item.get('overridden')) return false;
|
||||||
if (filter) {
|
if (filter) {
|
||||||
if (item.get('setting').toLowerCase().indexOf(filter) > -1) return true;
|
if (item.get('setting').toLowerCase().indexOf(filter) > -1) return true;
|
||||||
if (item.get('description').toLowerCase().indexOf(filter) > -1) return true;
|
if (item.get('description').toLowerCase().indexOf(filter) > -1) return true;
|
||||||
if (item.get('value').toLowerCase().indexOf(filter) > -1) return true;
|
if (item.get('value').toLowerCase().indexOf(filter) > -1) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
} else {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}), maxResults);
|
}
|
||||||
}.property('filter', 'content.@each', 'onlyOverridden'),
|
});
|
||||||
|
if (matches.length > 0) {
|
||||||
|
matchesGroupedByCategory.pushObject({
|
||||||
|
nameKey: settingsCategory.nameKey,
|
||||||
|
name: settingsCategory.name,
|
||||||
|
siteSettings: matches});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.set('model', matchesGroupedByCategory);
|
||||||
|
}.observes('filter', 'onlyOverridden'),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
|
||||||
|
@ -8,11 +8,6 @@
|
|||||||
**/
|
**/
|
||||||
Discourse.AdminSiteSettingsCategoryRoute = Discourse.Route.extend({
|
Discourse.AdminSiteSettingsCategoryRoute = Discourse.Route.extend({
|
||||||
model: function(params) {
|
model: function(params) {
|
||||||
var category = this.modelFor('adminSiteSettings').find(function(siteSettingCategory) {
|
this.controllerFor('adminSiteSettingsCategory').set('categoryNameKey', params.category_id);
|
||||||
return siteSettingCategory.nameKey === params.category_id;
|
|
||||||
});
|
|
||||||
if (category) {
|
|
||||||
return category.siteSettings;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -9,6 +9,10 @@
|
|||||||
Discourse.AdminSiteSettingsRoute = Discourse.Route.extend({
|
Discourse.AdminSiteSettingsRoute = Discourse.Route.extend({
|
||||||
model: function() {
|
model: function() {
|
||||||
return Discourse.SiteSetting.findAll();
|
return Discourse.SiteSetting.findAll();
|
||||||
|
},
|
||||||
|
|
||||||
|
afterModel: function(siteSettings) {
|
||||||
|
this.controllerFor('adminSiteSettings').set('allSiteSettings', siteSettings);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<ul class="nav nav-pills">
|
<ul class="nav nav-pills">
|
||||||
{{#each category in controller}}
|
{{#each category in controller}}
|
||||||
<li>{{#link-to 'adminSiteSettingsCategory' category.nameKey}}{{category.name}}{{/link-to}}</a></li>
|
<li>{{#link-to 'adminSiteSettingsCategory' category.nameKey}}{{category.name}}{{/link-to}}</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
{{collection contentBinding="content" classNames="form-horizontal settings" itemViewClass="Discourse.SiteSettingView"}}
|
{{collection contentBinding="filteredContent" classNames="form-horizontal settings" itemViewClass="Discourse.SiteSettingView"}}
|
||||||
|
@ -1418,7 +1418,7 @@ en:
|
|||||||
reset: 'reset to default'
|
reset: 'reset to default'
|
||||||
none: 'none'
|
none: 'none'
|
||||||
categories:
|
categories:
|
||||||
mandatory: 'Mandatory'
|
required: 'Required'
|
||||||
users: 'Users'
|
users: 'Users'
|
||||||
posting: 'Posting'
|
posting: 'Posting'
|
||||||
email: 'Email'
|
email: 'Email'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
mandatory:
|
required:
|
||||||
title:
|
title:
|
||||||
client: true
|
client: true
|
||||||
default: 'Discourse'
|
default: 'Discourse'
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
module("Discourse.AdminSiteSettingsController");
|
||||||
|
|
||||||
|
test("filter", function() {
|
||||||
|
var allSettings = Em.A([Ember.Object.create({
|
||||||
|
nameKey: 'users', name: 'users',
|
||||||
|
siteSettings: [Discourse.SiteSetting.create({"setting":"username_change_period","description":"x","default":3,"type":"fixnum","value":"3","category":"users"})]
|
||||||
|
}), Ember.Object.create({
|
||||||
|
nameKey: 'posting', name: 'posting',
|
||||||
|
siteSettings: [Discourse.SiteSetting.create({"setting":"display_name_on_posts","description":"x","default":false,"type":"bool","value":"true","category":"posting"})]
|
||||||
|
})]);
|
||||||
|
var adminSiteSettingsController = testController(Discourse.AdminSiteSettingsController, allSettings);
|
||||||
|
adminSiteSettingsController.set('allSiteSettings', allSettings);
|
||||||
|
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].nameKey, 'users', "Can get first site setting category's name key.");
|
||||||
|
|
||||||
|
adminSiteSettingsController.set('filter', 'username_change');
|
||||||
|
equal(adminSiteSettingsController.get('content').length, 1, "a. Filter with one match for username_change");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].nameKey, "users", "b. Filter with one match for username_change");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].siteSettings[0].setting, "username_change_period", "c. Filter with one match for username_change");
|
||||||
|
|
||||||
|
adminSiteSettingsController.set('filter', 'name_on');
|
||||||
|
equal(adminSiteSettingsController.get('content').length, 1, "a. Filter with one match for name_on");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].nameKey, "posting", "b. Filter with one match for name_on");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].siteSettings[0].setting, "display_name_on_posts", "c. Filter with one match for name_on");
|
||||||
|
|
||||||
|
adminSiteSettingsController.set('filter', 'name');
|
||||||
|
equal(adminSiteSettingsController.get('content').length, 2, "a. Filter with one match for name");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].nameKey, "users", "b. Filter with one match for name");
|
||||||
|
equal(adminSiteSettingsController.get('content')[1].nameKey, "posting", "c. Filter with one match for name");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].siteSettings[0].setting, "username_change_period", "d. Filter with one match for name");
|
||||||
|
equal(adminSiteSettingsController.get('content')[1].siteSettings[0].setting, "display_name_on_posts", "d. Filter with one match for name");
|
||||||
|
|
||||||
|
adminSiteSettingsController.set('filter', '');
|
||||||
|
adminSiteSettingsController.set('onlyOverridden', true);
|
||||||
|
equal(adminSiteSettingsController.get('content').length, 1, "a. onlyOverridden with one match");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].nameKey, "posting", "b. onlyOverridden with one match");
|
||||||
|
equal(adminSiteSettingsController.get('content')[0].siteSettings[0].setting, "display_name_on_posts", "c. onlyOverridden with one match");
|
||||||
|
|
||||||
|
});
|
Reference in New Issue
Block a user