From 8511e492b5f73fd6428573aa714c9fd43ac02cbf Mon Sep 17 00:00:00 2001 From: Luciano Prestes Cavalcanti Date: Wed, 29 Oct 2014 17:15:47 -0200 Subject: [PATCH] Change software language select field to autocomplete --- controllers/mpog_software_plugin_controller.rb | 16 ++++++++++++++++ lib/database_helper.rb | 4 ++-- lib/software_language_helper.rb | 15 +++++++++++---- public/mpog-software-validations.js | 30 +++++++++++++++++++++++++++--- 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/controllers/mpog_software_plugin_controller.rb b/controllers/mpog_software_plugin_controller.rb index 73b993c..ee58348 100644 --- a/controllers/mpog_software_plugin_controller.rb +++ b/controllers/mpog_software_plugin_controller.rb @@ -141,6 +141,22 @@ class MpogSoftwarePluginController < ApplicationController render :json=> data end + def get_languages + return render :json=>{} unless request.xhr? and params[:query] + + data = ProgrammingLanguage.where("name ILIKE ?", "%#{params[:query]}%").select("id, name").collect {|db| + {:id=>db.id, :label=>db.name} + } + other = [ProgrammingLanguage.select("id, name").last].collect { |db| + {:id=>db.id, :label=>db.name} + } + + # Always has other in the list + data |= other + + render :json=> data + end + protected def private_create_institution diff --git a/lib/database_helper.rb b/lib/database_helper.rb index b637ad6..020ecf4 100644 --- a/lib/database_helper.rb +++ b/lib/database_helper.rb @@ -1,6 +1,6 @@ module DatabaseHelper - def self.isValidDatabase? database + def self.valid_database? database return false if SoftwareHelper.all_table_is_empty?(database) database_description_id_list = DatabaseDescription.select(:id).collect {|dd| dd.id } @@ -15,7 +15,7 @@ module DatabaseHelper list_databases = [] new_databases.each do |new_database| - if isValidDatabase? new_database + if valid_database? new_database database = SoftwareDatabase.new database.database_description_id = new_database[:database_description_id] database.version = new_database[:version] diff --git a/lib/software_language_helper.rb b/lib/software_language_helper.rb index a98a2a8..55e7904 100644 --- a/lib/software_language_helper.rb +++ b/lib/software_language_helper.rb @@ -39,7 +39,7 @@ module SoftwareLanguageHelper lambdas_list = [] if not show_information - return language_html_structure({:programming_language_id => 1, :version => "", :operating_system => ""}) if list_languages.nil? + return language_html_structure({:programming_language_id => "", :version => "", :operating_system => ""}) if list_languages.nil? list_languages.each do |language| lambdas_list << language_html_structure(language) @@ -52,17 +52,24 @@ module SoftwareLanguageHelper end - lambdas_list end def self.language_html_structure(language_data) + language_name = if language_data[:programming_language_id].blank? + "" + else + ProgrammingLanguage.find(language_data[:programming_language_id], :select=>"name").name + end + Proc::new do content_tag('table', content_tag('tr', content_tag('td', label_tag(_("Language Name: ")))+ - content_tag('td', select_tag("language[][programming_language_id]", SoftwareHelper.select_options(ProgrammingLanguage.all, language_data[:programming_language_id]) ))+ - content_tag('td') + content_tag('td', + text_field_tag("language_autocomplete", language_name, :class=>"language_autocomplete") + + content_tag('div', _("Pick an item on the list"), :class=>"autocomplete_validation_message hide-field") ) + + content_tag('td', hidden_field_tag("language[][programming_language_id]", language_data[:programming_language_id], :class=>"programming_language_id", data:{label:language_name})) )+ content_tag('tr', diff --git a/public/mpog-software-validations.js b/public/mpog-software-validations.js index 4d50d17..0d255d0 100644 --- a/public/mpog-software-validations.js +++ b/public/mpog-software-validations.js @@ -30,9 +30,6 @@ data: {query: request.term}, success: function(result){ response(result); - }, - error: function(ajax, stat, errorThrown) { - console.log('Link not found : ' + errorThrown); } }); }, @@ -50,6 +47,31 @@ } + function language_autocomplete() { + jQuery(".language_autocomplete").autocomplete({ + source : function(request, response){ + jQuery.ajax({ + type: "GET", + url: "/plugin/mpog_software/get_languages", + data: {query: request.term}, + success: function(result){ + response(result); + } + }); + }, + + minLength: 0, + + select : function (event, selected) { + var description = get_hidden_description_field(this, ".programming_language_id"); + description.val(selected.item.id); + description.attr("data-label", selected.item.label); + } + }).blur(function(){ + verify_autocomplete(this, ".programming_language_id"); + }); + } + function delete_dynamic_table() { var button = jQuery(".delete-dynamic-table"); @@ -101,6 +123,7 @@ delete_dynamic_table(); database_autocomplete(); + language_autocomplete(); jQuery(".new-dynamic-table").click(function(){ var link = jQuery(this); @@ -116,6 +139,7 @@ delete_dynamic_table(); database_autocomplete(); + language_autocomplete(); return false; }); -- libgit2 0.21.2