From 95649362ad8e30bdd174d0d9075107a900fcdbdd Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Fri, 9 Jan 2015 13:13:10 +0100 Subject: [PATCH] Create the admin email select box which queries through both projects and groups. --- .../javascripts/admin_email_select.js.coffee | 46 +++++++++++++++++++ app/assets/javascripts/dispatcher.js.coffee | 2 + app/helpers/admin_email_helper.rb | 2 +- app/helpers/selects_helper.rb | 9 ++++ app/views/admin/emails/show.html.haml | 2 +- app/workers/admin_emails_worker.rb | 2 +- 6 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 app/assets/javascripts/admin_email_select.js.coffee diff --git a/app/assets/javascripts/admin_email_select.js.coffee b/app/assets/javascripts/admin_email_select.js.coffee new file mode 100644 index 0000000000..83b28ed086 --- /dev/null +++ b/app/assets/javascripts/admin_email_select.js.coffee @@ -0,0 +1,46 @@ +class @AdminEmailSelect + constructor: -> + $('.ajax-admin-email-select').each (i, select) => + skip_ldap = $(select).hasClass('skip_ldap') + + $(select).select2 + placeholder: "Select group or project" + multiple: $(select).hasClass('multiselect') + minimumInputLength: 0 + query: (query) -> + group_result = Api.groups query.term, skip_ldap, (groups) -> + groups + + project_result = Api.projects query.term, (projects) -> + projects + + $.when(project_result, group_result).done (projects, groups) -> + data = $.merge(groups[0], projects[0]) + query.callback({ results: data}) + + formatResult: (args...) => + @formatResult(args...) + formatSelection: (args...) => + @formatSelection(args...) + dropdownCssClass: "ajax-admin-email-dropdown" + escapeMarkup: (m) -> # we do not want to escape markup since we are displaying html in results + m + + formatResult: (object) -> + if object.path_with_namespace + "
+
#{object.name}
+
#{object.path_with_namespace}
+
" + else + "
+
#{object.name}
+
#{object.path}
+
" + + formatSelection: (object) -> + if object.path_with_namespace + "Project: #{object.name}" + else + "Group: #{object.name}" + diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index 39710a7982..ef0d1236b5 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -81,6 +81,8 @@ class Dispatcher new User() when 'projects:group_links:index' new GroupsSelect() + when 'admin:emails:show' + new AdminEmailSelect() switch path.first() when 'admin' diff --git a/app/helpers/admin_email_helper.rb b/app/helpers/admin_email_helper.rb index 28dfe3f601..f4f42ab061 100644 --- a/app/helpers/admin_email_helper.rb +++ b/app/helpers/admin_email_helper.rb @@ -16,4 +16,4 @@ module AdminEmailHelper end end end -end \ No newline at end of file +end diff --git a/app/helpers/selects_helper.rb b/app/helpers/selects_helper.rb index 475450781f..81871761f4 100644 --- a/app/helpers/selects_helper.rb +++ b/app/helpers/selects_helper.rb @@ -35,4 +35,13 @@ module SelectsHelper hidden_field_tag(id, value, class: css_class) end + + def admin_email_select_tag(id, opts = {}) + css_class = "ajax-admin-email-select " + css_class << "multiselect " if opts[:multiple] + css_class << (opts[:class] || '') + value = opts[:selected] || '' + + hidden_field_tag(id, value, class: css_class) + end end diff --git a/app/views/admin/emails/show.html.haml b/app/views/admin/emails/show.html.haml index 58bd208409..90e4e3aa2f 100644 --- a/app/views/admin/emails/show.html.haml +++ b/app/views/admin/emails/show.html.haml @@ -17,6 +17,6 @@ .form-group %label.control-label{for: :recipients} Recipient group .col-sm-10 - = select_tag :recipients, admin_email_grouped_recipient_options, class: :select2, required: true + = admin_email_select_tag(:recipients) .form-actions = submit_tag 'Send message', class: 'btn btn-create' diff --git a/app/workers/admin_emails_worker.rb b/app/workers/admin_emails_worker.rb index 56d83d7ebe..0f13d092d2 100644 --- a/app/workers/admin_emails_worker.rb +++ b/app/workers/admin_emails_worker.rb @@ -18,4 +18,4 @@ class AdminEmailsWorker Project.find($1).team.users.subscribed_for_admin_email end end -end \ No newline at end of file +end