Commit 8511e492b5f73fd6428573aa714c9fd43ac02cbf
1 parent
66411419
Exists in
master
and in
5 other branches
Change software language select field to autocomplete
Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com>
Showing
4 changed files
with
56 additions
and
9 deletions
Show diff stats
controllers/mpog_software_plugin_controller.rb
| @@ -141,6 +141,22 @@ class MpogSoftwarePluginController < ApplicationController | @@ -141,6 +141,22 @@ class MpogSoftwarePluginController < ApplicationController | ||
| 141 | render :json=> data | 141 | render :json=> data |
| 142 | end | 142 | end |
| 143 | 143 | ||
| 144 | + def get_languages | ||
| 145 | + return render :json=>{} unless request.xhr? and params[:query] | ||
| 146 | + | ||
| 147 | + data = ProgrammingLanguage.where("name ILIKE ?", "%#{params[:query]}%").select("id, name").collect {|db| | ||
| 148 | + {:id=>db.id, :label=>db.name} | ||
| 149 | + } | ||
| 150 | + other = [ProgrammingLanguage.select("id, name").last].collect { |db| | ||
| 151 | + {:id=>db.id, :label=>db.name} | ||
| 152 | + } | ||
| 153 | + | ||
| 154 | + # Always has other in the list | ||
| 155 | + data |= other | ||
| 156 | + | ||
| 157 | + render :json=> data | ||
| 158 | + end | ||
| 159 | + | ||
| 144 | protected | 160 | protected |
| 145 | 161 | ||
| 146 | def private_create_institution | 162 | def private_create_institution |
lib/database_helper.rb
| 1 | module DatabaseHelper | 1 | module DatabaseHelper |
| 2 | 2 | ||
| 3 | - def self.isValidDatabase? database | 3 | + def self.valid_database? database |
| 4 | return false if SoftwareHelper.all_table_is_empty?(database) | 4 | return false if SoftwareHelper.all_table_is_empty?(database) |
| 5 | 5 | ||
| 6 | database_description_id_list = DatabaseDescription.select(:id).collect {|dd| dd.id } | 6 | database_description_id_list = DatabaseDescription.select(:id).collect {|dd| dd.id } |
| @@ -15,7 +15,7 @@ module DatabaseHelper | @@ -15,7 +15,7 @@ module DatabaseHelper | ||
| 15 | list_databases = [] | 15 | list_databases = [] |
| 16 | 16 | ||
| 17 | new_databases.each do |new_database| | 17 | new_databases.each do |new_database| |
| 18 | - if isValidDatabase? new_database | 18 | + if valid_database? new_database |
| 19 | database = SoftwareDatabase.new | 19 | database = SoftwareDatabase.new |
| 20 | database.database_description_id = new_database[:database_description_id] | 20 | database.database_description_id = new_database[:database_description_id] |
| 21 | database.version = new_database[:version] | 21 | database.version = new_database[:version] |
lib/software_language_helper.rb
| @@ -39,7 +39,7 @@ module SoftwareLanguageHelper | @@ -39,7 +39,7 @@ module SoftwareLanguageHelper | ||
| 39 | lambdas_list = [] | 39 | lambdas_list = [] |
| 40 | 40 | ||
| 41 | if not show_information | 41 | if not show_information |
| 42 | - return language_html_structure({:programming_language_id => 1, :version => "", :operating_system => ""}) if list_languages.nil? | 42 | + return language_html_structure({:programming_language_id => "", :version => "", :operating_system => ""}) if list_languages.nil? |
| 43 | 43 | ||
| 44 | list_languages.each do |language| | 44 | list_languages.each do |language| |
| 45 | lambdas_list << language_html_structure(language) | 45 | lambdas_list << language_html_structure(language) |
| @@ -52,17 +52,24 @@ module SoftwareLanguageHelper | @@ -52,17 +52,24 @@ module SoftwareLanguageHelper | ||
| 52 | 52 | ||
| 53 | end | 53 | end |
| 54 | 54 | ||
| 55 | - | ||
| 56 | lambdas_list | 55 | lambdas_list |
| 57 | end | 56 | end |
| 58 | 57 | ||
| 59 | def self.language_html_structure(language_data) | 58 | def self.language_html_structure(language_data) |
| 59 | + language_name = if language_data[:programming_language_id].blank? | ||
| 60 | + "" | ||
| 61 | + else | ||
| 62 | + ProgrammingLanguage.find(language_data[:programming_language_id], :select=>"name").name | ||
| 63 | + end | ||
| 64 | + | ||
| 60 | Proc::new do | 65 | Proc::new do |
| 61 | content_tag('table', | 66 | content_tag('table', |
| 62 | content_tag('tr', | 67 | content_tag('tr', |
| 63 | content_tag('td', label_tag(_("Language Name: ")))+ | 68 | content_tag('td', label_tag(_("Language Name: ")))+ |
| 64 | - content_tag('td', select_tag("language[][programming_language_id]", SoftwareHelper.select_options(ProgrammingLanguage.all, language_data[:programming_language_id]) ))+ | ||
| 65 | - content_tag('td') | 69 | + content_tag('td', |
| 70 | + text_field_tag("language_autocomplete", language_name, :class=>"language_autocomplete") + | ||
| 71 | + content_tag('div', _("Pick an item on the list"), :class=>"autocomplete_validation_message hide-field") ) + | ||
| 72 | + content_tag('td', hidden_field_tag("language[][programming_language_id]", language_data[:programming_language_id], :class=>"programming_language_id", data:{label:language_name})) | ||
| 66 | )+ | 73 | )+ |
| 67 | 74 | ||
| 68 | content_tag('tr', | 75 | content_tag('tr', |
public/mpog-software-validations.js
| @@ -30,9 +30,6 @@ | @@ -30,9 +30,6 @@ | ||
| 30 | data: {query: request.term}, | 30 | data: {query: request.term}, |
| 31 | success: function(result){ | 31 | success: function(result){ |
| 32 | response(result); | 32 | response(result); |
| 33 | - }, | ||
| 34 | - error: function(ajax, stat, errorThrown) { | ||
| 35 | - console.log('Link not found : ' + errorThrown); | ||
| 36 | } | 33 | } |
| 37 | }); | 34 | }); |
| 38 | }, | 35 | }, |
| @@ -50,6 +47,31 @@ | @@ -50,6 +47,31 @@ | ||
| 50 | } | 47 | } |
| 51 | 48 | ||
| 52 | 49 | ||
| 50 | + function language_autocomplete() { | ||
| 51 | + jQuery(".language_autocomplete").autocomplete({ | ||
| 52 | + source : function(request, response){ | ||
| 53 | + jQuery.ajax({ | ||
| 54 | + type: "GET", | ||
| 55 | + url: "/plugin/mpog_software/get_languages", | ||
| 56 | + data: {query: request.term}, | ||
| 57 | + success: function(result){ | ||
| 58 | + response(result); | ||
| 59 | + } | ||
| 60 | + }); | ||
| 61 | + }, | ||
| 62 | + | ||
| 63 | + minLength: 0, | ||
| 64 | + | ||
| 65 | + select : function (event, selected) { | ||
| 66 | + var description = get_hidden_description_field(this, ".programming_language_id"); | ||
| 67 | + description.val(selected.item.id); | ||
| 68 | + description.attr("data-label", selected.item.label); | ||
| 69 | + } | ||
| 70 | + }).blur(function(){ | ||
| 71 | + verify_autocomplete(this, ".programming_language_id"); | ||
| 72 | + }); | ||
| 73 | + } | ||
| 74 | + | ||
| 53 | function delete_dynamic_table() { | 75 | function delete_dynamic_table() { |
| 54 | var button = jQuery(".delete-dynamic-table"); | 76 | var button = jQuery(".delete-dynamic-table"); |
| 55 | 77 | ||
| @@ -101,6 +123,7 @@ | @@ -101,6 +123,7 @@ | ||
| 101 | 123 | ||
| 102 | delete_dynamic_table(); | 124 | delete_dynamic_table(); |
| 103 | database_autocomplete(); | 125 | database_autocomplete(); |
| 126 | + language_autocomplete(); | ||
| 104 | 127 | ||
| 105 | jQuery(".new-dynamic-table").click(function(){ | 128 | jQuery(".new-dynamic-table").click(function(){ |
| 106 | var link = jQuery(this); | 129 | var link = jQuery(this); |
| @@ -116,6 +139,7 @@ | @@ -116,6 +139,7 @@ | ||
| 116 | 139 | ||
| 117 | delete_dynamic_table(); | 140 | delete_dynamic_table(); |
| 118 | database_autocomplete(); | 141 | database_autocomplete(); |
| 142 | + language_autocomplete(); | ||
| 119 | return false; | 143 | return false; |
| 120 | }); | 144 | }); |
| 121 | 145 |