From c8faf0972b6dc91c88f668572b760d24dd7d007e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Tue, 12 May 2015 14:07:42 +0200 Subject: [PATCH] SONAR-6520 Refactor WS to select2 format conversion function to utilities --- .../issues/facets/assignee-facet.coffee | 7 +--- .../issues/facets/reporter-facet.coffee | 7 +--- server/sonar-web/src/main/js/application.js | 25 +++++++++++ .../navigator/filters/ajax-select-filters.js | 10 ++--- .../WEB-INF/app/helpers/application_helper.rb | 42 +++++++------------ 5 files changed, 44 insertions(+), 47 deletions(-) diff --git a/server/sonar-web/src/main/coffee/issues/facets/assignee-facet.coffee b/server/sonar-web/src/main/coffee/issues/facets/assignee-facet.coffee index dfeb669741c..b1b91c7e207 100644 --- a/server/sonar-web/src/main/coffee/issues/facets/assignee-facet.coffee +++ b/server/sonar-web/src/main/coffee/issues/facets/assignee-facet.coffee @@ -39,12 +39,7 @@ define [ quietMillis: 300 url: @getUrl() data: (term, page) -> { q: term, p: page } - results: (data) -> - more: false, - results: _.map(data.users, (user) -> - id: user.login, - text: "#{user.name} (#{user.login})" - ) + results: window.usersToSelect2 onRender: -> super diff --git a/server/sonar-web/src/main/coffee/issues/facets/reporter-facet.coffee b/server/sonar-web/src/main/coffee/issues/facets/reporter-facet.coffee index af5be0934e7..aa2c9dcd659 100644 --- a/server/sonar-web/src/main/coffee/issues/facets/reporter-facet.coffee +++ b/server/sonar-web/src/main/coffee/issues/facets/reporter-facet.coffee @@ -34,12 +34,7 @@ define [ quietMillis: 300 url: @getUrl() data: (term, page) -> { q: term, p: page } - results: (data) -> - more: false, - results: _.map(data.users, (user) -> - id: user.login, - text: "#{user.name} (#{user.login})" - ) + results: window.usersToSelect2 getValuesWithLabels: -> values = @model.getValues() diff --git a/server/sonar-web/src/main/js/application.js b/server/sonar-web/src/main/js/application.js index 0e33e7b2d71..2d16dd4ff5d 100644 --- a/server/sonar-web/src/main/js/application.js +++ b/server/sonar-web/src/main/js/application.js @@ -473,6 +473,31 @@ function closeModalWindow () { +/* + * Users + */ + +(function() { + + /** + * Convert the result of api/users/search to select2 format + */ + window.usersToSelect2 = function (response) { + return { + more: false, + results: _.map(response.users, function(user) { + return { + id: user.login, + text: user.name + ' (' + user.login + ')' + }; + }) + }; + }; + +})(); + + + /* * Misc */ diff --git a/server/sonar-web/src/main/js/navigator/filters/ajax-select-filters.js b/server/sonar-web/src/main/js/navigator/filters/ajax-select-filters.js index 3f240b0c33e..fecdcada306 100644 --- a/server/sonar-web/src/main/js/navigator/filters/ajax-select-filters.js +++ b/server/sonar-web/src/main/js/navigator/filters/ajax-select-filters.js @@ -72,13 +72,9 @@ define([ }, parse: function(response) { - this.more = false; - this.results = _.map(response.users, function(user) { - return { - id: user.login, - text: user.name + ' (' + user.login + ')' - }; - }); + var parsedResponse = window.usersToSelect2(response); + this.more = parsedResponse.more; + this.results = parsedResponse.results; } }); diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/helpers/application_helper.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/helpers/application_helper.rb index 0c156479c54..780779064ce 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/helpers/application_helper.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/helpers/application_helper.rb @@ -594,6 +594,14 @@ module ApplicationHelper js_options['placeholder']= "'#{options[:placeholder]}'" if options.has_key?(:placeholder) js_options['width']= "'#{width}'" if width + ajax_options={ + 'quietMillis' => 300, + 'url' => "'#{ws_url}'", + 'data' => 'function (term, page) {return {s:term, p:page}}', + 'results' => 'function (data, page) {return {more: data.more, results: data.results}}' + } + ajax_options.merge!(options[:select2_ajax_options]) if options[:select2_ajax_options] + choices = options[:include_choices] if choices && !choices.empty? js_options['minimumInputLength']=0 @@ -602,22 +610,16 @@ module ApplicationHelper if (query.term.length == 0) { query.callback({results: [{#{ choices.map { |id, text| "id:'#{id}',text:'#{text}'" }.join('}, {')}}]}); } else if (query.term.length >= #{min_length}) { + var dataFormatter = #{ajax_options['data']}; + var resultFormatter = #{ajax_options['results']}; $j.ajax('#{ws_url}', { - data: {s: query.term}, - dataType: 'jsonp' + data: dataFormatter(query.term) }).done(function(data) { - query.callback(data); + query.callback(resultFormatter(data)); }); } }" else - ajax_options={ - 'quietMillis' => 300, - 'url' => "'#{ws_url}'", - 'data' => 'function (term, page) {return {s:term, p:page}}', - 'results' => 'function (data, page) {return {more: data.more, results: data.results}}' - } - ajax_options.merge!(options[:select2_ajax_options]) if options[:select2_ajax_options] js_options['ajax']='{' + ajax_options.map { |k, v| "#{k}:#{v}" }.join(',') + '}' end @@ -726,24 +728,8 @@ module ApplicationHelper ws_url="#{ApplicationController::root_context}/api/users/search2" options[:min_length]=2 options[:select2_ajax_options]={ - 'data' => %{ - function (term, page) { - return { q: term, p: page }; - } - }, - 'results' => %{ - function (data, page) { - return { - more: false, - results: _.map(data.users, function(user) { - return { - id: user.login, - text: '' + user.name + ' (' + user.login + ')' - }; - }) - }; - } - } + 'data' => 'function (term, page) { return { q: term, p: page } }', + 'results' => 'window.usersToSelect2' } user = options[:selected_user] -- 2.39.5