From 572ee3b94d31481d06d5a5bd94f963fb1f4b58c1 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Sun, 1 Jun 2014 16:37:51 +0200 Subject: [PATCH] add site_setting choices - add site_setting choices lists to list entries - allows for handy autocompletion using the new select2.js UI - automatically merges plugin choices into existing list, allowing for easy extension --- config/site_settings.yml | 23 +++++++++++++++++++++++ lib/site_setting_extension.rb | 17 +++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/config/site_settings.yml b/config/site_settings.yml index 098af131036..b42756001ae 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -55,14 +55,37 @@ basic: refresh: true list: true default: 'latest|new|unread|starred|top|categories' + choices: + - latest + - new + - unread + - starred + - top + - categories + - read + - posted post_menu: client: true list: true default: 'like|edit|flag|delete|share|bookmark|admin|reply' + choices: + - like + - edit + - flag + - delete + - share + - bookmark + - admin + - reply share_links: client: true list: true default: 'twitter|facebook|google+|email' + choices: + - twitter + - facebook + - google+ + - email category_colors: client: true list: true diff --git a/lib/site_setting_extension.rb b/lib/site_setting_extension.rb index 1975c5513d9..3a723a5efa7 100644 --- a/lib/site_setting_extension.rb +++ b/lib/site_setting_extension.rb @@ -42,6 +42,10 @@ module SiteSettingExtension @lists ||= [] end + def choices + @choices ||= {} + end + def hidden_settings @hidden_settings ||= [] end @@ -60,6 +64,11 @@ module SiteSettingExtension enum = opts[:enum] enums[name] = enum.is_a?(String) ? enum.constantize : enum end + if opts[:choices] + choices.has_key?(name) ? + choices[name].concat(opts[:choices]) : + choices[name] = opts[:choices] + end if opts[:list] lists << name end @@ -111,12 +120,16 @@ module SiteSettingExtension .map do |s, v| value = send(s) type = types[get_data_type(s, value)] - {setting: s, + opts = {setting: s, description: description(s), default: v, type: type.to_s, value: value.to_s, - category: categories[s]}.merge( type == :enum ? {valid_values: enum_class(s).values, translate_names: enum_class(s).translate_names?} : {}) + category: categories[s] + } + opts.merge({valid_values: enum_class(s).values, translate_names: enum_class(s).translate_names?}) if type == :enum + opts[:choices] = choices[s] if choices.has_key? s + opts end end