From 8cf0f51eb2c9ef5c6155d77aab1d0d9c7b104af0 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 8 May 2018 10:30:33 +0800 Subject: [PATCH] UX: Display site settings shortcut for `poll` and `discourse-nginx-performance-report`. https://meta.discourse.org/t/improving-admin-plugins/84585/29?u=tgxworld --- .../admin/routes/admin-plugins.js.es6 | 8 +++++--- app/serializers/admin_plugin_serializer.rb | 17 +++++++++++++---- lib/plugin/instance.rb | 8 ++++++++ .../plugin.rb | 3 +++ plugins/poll/plugin.rb | 2 ++ spec/components/plugin/instance_spec.rb | 15 +++++++++++++++ 6 files changed, 46 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/admin/routes/admin-plugins.js.es6 b/app/assets/javascripts/admin/routes/admin-plugins.js.es6 index 820c5207d44..8c5886f4a43 100644 --- a/app/assets/javascripts/admin/routes/admin-plugins.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-plugins.js.es6 @@ -8,12 +8,15 @@ export default Ember.Route.extend({ const controller = this.controllerFor('adminSiteSettings'); this.transitionTo('adminSiteSettingsCategory', 'plugins').then(() => { if (plugin) { + const siteSettingFilter = plugin.get('enabled_setting_filter'); const match = /^(.*)_enabled/.exec(plugin.get('enabled_setting')); - if (match[1]) { + const filter = siteSettingFilter || match[1]; + + if (filter) { // filterContent() is normally on a debounce from typing. // Because we don't want the default of "All Results", we tell it // to skip the next debounce. - controller.set('filter', match[1]); + controller.set('filter', filter); controller.set('_skipBounce', true); controller.filterContentNow('plugins'); } @@ -22,4 +25,3 @@ export default Ember.Route.extend({ } } }); - diff --git a/app/serializers/admin_plugin_serializer.rb b/app/serializers/admin_plugin_serializer.rb index b104d69adbc..2ac11f34134 100644 --- a/app/serializers/admin_plugin_serializer.rb +++ b/app/serializers/admin_plugin_serializer.rb @@ -6,7 +6,8 @@ class AdminPluginSerializer < ApplicationSerializer :admin_route, :enabled, :enabled_setting, - :is_official + :is_official, + :enabled_setting_filter def id object.metadata.name @@ -28,12 +29,20 @@ class AdminPluginSerializer < ApplicationSerializer object.enabled? end - def enabled_setting + def include_enabled_setting? object.enabled_site_setting end - def include_enabled_setting? - enabled_setting.present? + def enabled_setting + true + end + + def include_enabled_setting_filter? + object.enabled_site_setting_filter.present? + end + + def enabled_setting_filter + object.enabled_site_setting_filter end def include_url? diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb index 0bc54a09c84..3a12e02df4f 100644 --- a/lib/plugin/instance.rb +++ b/lib/plugin/instance.rb @@ -493,6 +493,14 @@ JS PluginGem.load(path, name, version, opts) end + def enabled_site_setting_filter(filter = nil) + if filter + @enabled_setting_filter = filter + else + @enabled_setting_filter + end + end + def enabled_site_setting(setting = nil) if setting @enabled_site_setting = setting diff --git a/plugins/discourse-nginx-performance-report/plugin.rb b/plugins/discourse-nginx-performance-report/plugin.rb index 4b139778def..c0f1159a6ad 100644 --- a/plugins/discourse-nginx-performance-report/plugin.rb +++ b/plugins/discourse-nginx-performance-report/plugin.rb @@ -3,6 +3,9 @@ # version: 0.1 # url: https://github.com/discourse/discourse/tree/master/plugins/discourse-nginx-performance-report +enabled_site_setting :daily_performance_report +enabled_site_setting_filter "daily_performance_report" + after_initialize do load File.expand_path("../app/jobs/scheduled/daily_performance_report.rb", __FILE__) end diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb index ec13cc87498..f4f2c41d8de 100644 --- a/plugins/poll/plugin.rb +++ b/plugins/poll/plugin.rb @@ -9,6 +9,8 @@ register_asset "stylesheets/common/poll-ui-builder.scss" register_asset "stylesheets/desktop/poll.scss", :desktop register_asset "stylesheets/mobile/poll.scss", :mobile +enabled_site_setting :poll_enabled + PLUGIN_NAME ||= "discourse_poll".freeze DATA_PREFIX ||= "data-poll-".freeze diff --git a/spec/components/plugin/instance_spec.rb b/spec/components/plugin/instance_spec.rb index de6641218ac..b791a7d8f83 100644 --- a/spec/components/plugin/instance_spec.rb +++ b/spec/components/plugin/instance_spec.rb @@ -381,4 +381,19 @@ describe Plugin::Instance do end end + describe '#enabled_site_setting_filter' do + describe 'when filter is blank' do + it 'should return the right value' do + expect(Plugin::Instance.new.enabled_site_setting_filter).to eq(nil) + end + end + + it 'should set the right value' do + instance = Plugin::Instance.new + instance.enabled_site_setting_filter('test') + + expect(instance.enabled_site_setting_filter).to eq('test') + end + end + end