Commit 55ae4eb8eac8818390cb57d890de9c2cbb106f51
1 parent
8b432927
Exists in
master
and in
5 other branches
Refactory autocomplete javascript and ajax request
Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com>
Showing
2 changed files
with
24 additions
and
47 deletions
Show diff stats
controllers/mpog_software_plugin_controller.rb
| ... | ... | @@ -125,29 +125,23 @@ class MpogSoftwarePluginController < ApplicationController |
| 125 | 125 | render :json=>state_list.collect {|state| state.name }.to_json |
| 126 | 126 | end |
| 127 | 127 | |
| 128 | - def get_databases | |
| 129 | - return render :json=>{} unless request.xhr? and params[:query] | |
| 130 | - | |
| 131 | - data = DatabaseDescription.where("name ILIKE ?", "%#{params[:query]}%").select("id, name").collect {|db| | |
| 132 | - {:id=>db.id, :label=>db.name} | |
| 133 | - } | |
| 134 | - other = [DatabaseDescription.select("id, name").last].collect { |db| | |
| 135 | - {:id=>db.id, :label=>db.name} | |
| 136 | - } | |
| 137 | - | |
| 138 | - # Always has other in the list | |
| 139 | - data |= other | |
| 140 | - | |
| 141 | - render :json=> data | |
| 142 | - end | |
| 143 | - | |
| 144 | - def get_languages | |
| 145 | - return render :json=>{} unless request.xhr? and params[:query] | |
| 128 | + def get_field_data | |
| 129 | + return render :json=>{} if !request.xhr? or params[:query].nil? or params[:field].nil? | |
| 130 | + | |
| 131 | + model = nil | |
| 132 | + case params[:field] | |
| 133 | + when "database" | |
| 134 | + model = DatabaseDescription | |
| 135 | + when "software_language" | |
| 136 | + model = ProgrammingLanguage | |
| 137 | + else | |
| 138 | + model = DatabaseDescription | |
| 139 | + end | |
| 146 | 140 | |
| 147 | - data = ProgrammingLanguage.where("name ILIKE ?", "%#{params[:query]}%").select("id, name").collect {|db| | |
| 141 | + data = model.where("name ILIKE ?", "%#{params[:query]}%").select("id, name").collect {|db| | |
| 148 | 142 | {:id=>db.id, :label=>db.name} |
| 149 | 143 | } |
| 150 | - other = [ProgrammingLanguage.select("id, name").last].collect { |db| | |
| 144 | + other = [model.select("id, name").last].collect { |db| | |
| 151 | 145 | {:id=>db.id, :label=>db.name} |
| 152 | 146 | } |
| 153 | 147 | ... | ... |
public/mpog-software-validations.js
| ... | ... | @@ -22,38 +22,21 @@ |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | 24 | function database_autocomplete() { |
| 25 | - jQuery(".database_autocomplete").autocomplete({ | |
| 26 | - source : function(request, response){ | |
| 27 | - jQuery.ajax({ | |
| 28 | - type: "GET", | |
| 29 | - url: "/plugin/mpog_software/get_databases", | |
| 30 | - data: {query: request.term}, | |
| 31 | - success: function(result){ | |
| 32 | - response(result); | |
| 33 | - } | |
| 34 | - }); | |
| 35 | - }, | |
| 36 | - | |
| 37 | - minLength: 1, | |
| 38 | - | |
| 39 | - select : function (event, selected) { | |
| 40 | - var description = get_hidden_description_field(this, ".database_description_id"); | |
| 41 | - description.val(selected.item.id); | |
| 42 | - description.attr("data-label", selected.item.label); | |
| 43 | - } | |
| 44 | - }).blur(function(){ | |
| 45 | - verify_autocomplete(this, ".database_description_id"); | |
| 46 | - }); | |
| 25 | + enable_autocomplete("database", ".database_description_id", ".database_autocomplete"); | |
| 47 | 26 | } |
| 48 | 27 | |
| 49 | 28 | |
| 50 | 29 | function language_autocomplete() { |
| 51 | - jQuery(".language_autocomplete").autocomplete({ | |
| 30 | + enable_autocomplete("software_language", ".programming_language_id", ".language_autocomplete"); | |
| 31 | + } | |
| 32 | + | |
| 33 | + function enable_autocomplete(field_name, field_value_class, autocomplete_class) { | |
| 34 | + jQuery(autocomplete_class).autocomplete({ | |
| 52 | 35 | source : function(request, response){ |
| 53 | 36 | jQuery.ajax({ |
| 54 | 37 | type: "GET", |
| 55 | - url: "/plugin/mpog_software/get_languages", | |
| 56 | - data: {query: request.term}, | |
| 38 | + url: "/plugin/mpog_software/get_field_data", | |
| 39 | + data: {query: request.term, field: field_name}, | |
| 57 | 40 | success: function(result){ |
| 58 | 41 | response(result); |
| 59 | 42 | } |
| ... | ... | @@ -63,12 +46,12 @@ |
| 63 | 46 | minLength: 0, |
| 64 | 47 | |
| 65 | 48 | select : function (event, selected) { |
| 66 | - var description = get_hidden_description_field(this, ".programming_language_id"); | |
| 49 | + var description = get_hidden_description_field(this, field_value_class); | |
| 67 | 50 | description.val(selected.item.id); |
| 68 | 51 | description.attr("data-label", selected.item.label); |
| 69 | 52 | } |
| 70 | 53 | }).blur(function(){ |
| 71 | - verify_autocomplete(this, ".programming_language_id"); | |
| 54 | + verify_autocomplete(this, field_value_class); | |
| 72 | 55 | }); |
| 73 | 56 | } |
| 74 | 57 | ... | ... |