diff --git a/lib/assets/javascripts/autocomplete-rails-uncompressed.js b/lib/assets/javascripts/autocomplete-rails-uncompressed.js index 1a4d0837..1153e1d8 100644 --- a/lib/assets/javascripts/autocomplete-rails-uncompressed.js +++ b/lib/assets/javascripts/autocomplete-rails-uncompressed.js @@ -44,6 +44,7 @@ jQuery.railsAutocomplete.fn.extend({ init: function(e) { e.delimiter = jQuery(e).attr('data-delimiter') || null; + e.noMatchesLabel = jQuery(e).attr('data-no-matches-label') || 'no existing match'; function split( val ) { return val.split( e.delimiter ); } @@ -58,7 +59,7 @@ }, function() { if(arguments[0].length == 0) { arguments[0] = [] - arguments[0][0] = { id: "", label: "no existing match" } + arguments[0][0] = { id: "", label: e.noMatchesLabel } } jQuery(arguments[0]).each(function(i, el) { var obj = {}; @@ -94,36 +95,38 @@ return false; }, select: function( event, ui ) { - var terms = split( this.value ); - // remove the current input - terms.pop(); - // add the selected item - terms.push( ui.item.value ); - // add placeholder to get the comma-and-space at the end - if (e.delimiter != null) { - terms.push( "" ); - this.value = terms.join( e.delimiter ); - } else { - this.value = terms.join(""); - if (jQuery(this).attr('data-id-element')) { - jQuery(jQuery(this).attr('data-id-element')).val(ui.item.id); - } - if (jQuery(this).attr('data-update-elements')) { - var data = jQuery(this).data(ui.item.id.toString()); - var update_elements = jQuery.parseJSON(jQuery(this).attr("data-update-elements")); - for (var key in update_elements) { - jQuery(update_elements[key]).val(data[key]); + if (ui.item.value != e.noMatchesLabel) { + var terms = split( this.value ); + // remove the current input + terms.pop(); + // add the selected item + terms.push( ui.item.value ); + // add placeholder to get the comma-and-space at the end + if (e.delimiter != null) { + terms.push( "" ); + this.value = terms.join( e.delimiter ); + } else { + this.value = terms.join(""); + if (jQuery(this).attr('data-id-element')) { + jQuery(jQuery(this).attr('data-id-element')).val(ui.item.id); + } + if (jQuery(this).attr('data-update-elements')) { + var data = jQuery(this).data(ui.item.id.toString()); + var update_elements = jQuery.parseJSON(jQuery(this).attr("data-update-elements")); + for (var key in update_elements) { + jQuery(update_elements[key]).val(data[key]); + } } } - } - var remember_string = this.value; - jQuery(this).bind('keyup.clearId', function(){ - if(jQuery(this).val().trim() != remember_string.trim()){ - jQuery(jQuery(this).attr('data-id-element')).val(""); - jQuery(this).unbind('keyup.clearId'); - } - }); - jQuery(e).trigger('railsAutocomplete.select', ui); + var remember_string = this.value; + jQuery(this).bind('keyup.clearId', function(){ + if(jQuery(this).val().trim() != remember_string.trim()){ + jQuery(jQuery(this).attr('data-id-element')).val(""); + jQuery(this).unbind('keyup.clearId'); + } + }); + jQuery(e).trigger('railsAutocomplete.select', ui); + } return false; } }); diff --git a/lib/assets/javascripts/autocomplete-rails.js b/lib/assets/javascripts/autocomplete-rails.js index 6e173e74..34e29f17 100644 --- a/lib/assets/javascripts/autocomplete-rails.js +++ b/lib/assets/javascripts/autocomplete-rails.js @@ -13,4 +13,4 @@ * Example: * */ -(function(e){var t=null;e.fn.railsAutocomplete=function(){var t=function(){this.railsAutoCompleter||(this.railsAutoCompleter=new e.railsAutocomplete(this))};return e.fn.on!==undefined?$(document).on("focus",this.selector,t):this.live("focus",t)},e.railsAutocomplete=function(e){_e=e,this.init(_e)},e.railsAutocomplete.fn=e.railsAutocomplete.prototype={railsAutocomplete:"0.0.1"},e.railsAutocomplete.fn.extend=e.railsAutocomplete.extend=e.extend,e.railsAutocomplete.fn.extend({init:function(t){function n(e){return e.split(t.delimiter)}function r(e){return n(e).pop().replace(/^\s+/,"")}t.delimiter=e(t).attr("data-delimiter")||null,e(t).autocomplete({source:function(n,i){e.getJSON(e(t).attr("data-autocomplete"),{term:r(n.term)},function(){arguments[0].length==0&&(arguments[0]=[],arguments[0][0]={id:"",label:"no existing match"}),e(arguments[0]).each(function(n,r){var i={};i[r.id]=r,e(t).data(i)}),i.apply(null,arguments)})},change:function(t,n){if(e(e(this).attr("data-id-element")).val()=="")return;e(e(this).attr("data-id-element")).val(n.item?n.item.id:"");var r=e.parseJSON(e(this).attr("data-update-elements")),i=n.item?e(this).data(n.item.id.toString()):{};if(r&&e(r["id"]).val()=="")return;for(var s in r)e(r[s]).val(n.item?i[s]:"")},search:function(){var e=r(this.value);if(e.length<2)return!1},focus:function(){return!1},select:function(r,i){var s=n(this.value);s.pop(),s.push(i.item.value);if(t.delimiter!=null)s.push(""),this.value=s.join(t.delimiter);else{this.value=s.join(""),e(this).attr("data-id-element")&&e(e(this).attr("data-id-element")).val(i.item.id);if(e(this).attr("data-update-elements")){var o=e(this).data(i.item.id.toString()),u=e.parseJSON(e(this).attr("data-update-elements"));for(var a in u)e(u[a]).val(o[a])}}var f=this.value;return e(this).bind("keyup.clearId",function(){e(this).val().trim()!=f.trim()&&(e(e(this).attr("data-id-element")).val(""),e(this).unbind("keyup.clearId"))}),e(t).trigger("railsAutocomplete.select",i),!1}})}}),e(document).ready(function(){e("input[data-autocomplete]").railsAutocomplete()})})(jQuery); \ No newline at end of file +(function(e){var t=null;e.fn.railsAutocomplete=function(){var t=function(){if(!this.railsAutoCompleter){this.railsAutoCompleter=new e.railsAutocomplete(this)}};if(e.fn.on!==undefined){return $(document).on("focus",this.selector,t)}else{return this.live("focus",t)}};e.railsAutocomplete=function(e){_e=e;this.init(_e)};e.railsAutocomplete.fn=e.railsAutocomplete.prototype={railsAutocomplete:"0.0.1"};e.railsAutocomplete.fn.extend=e.railsAutocomplete.extend=e.extend;e.railsAutocomplete.fn.extend({init:function(t){function n(e){return e.split(t.delimiter)}function r(e){return n(e).pop().replace(/^\s+/,"")}t.delimiter=e(t).attr("data-delimiter")||null;t.noMatchesLabel=e(t).attr("data-no-matches-label")||"no existing match";e(t).autocomplete({source:function(n,i){e.getJSON(e(t).attr("data-autocomplete"),{term:r(n.term)},function(){if(arguments[0].length==0){arguments[0]=[];arguments[0][0]={id:"",label:t.noMatchesLabel}}e(arguments[0]).each(function(n,r){var i={};i[r.id]=r;e(t).data(i)});i.apply(null,arguments)})},change:function(t,n){if(e(e(this).attr("data-id-element")).val()==""){return}e(e(this).attr("data-id-element")).val(n.item?n.item.id:"");var r=e.parseJSON(e(this).attr("data-update-elements"));var i=n.item?e(this).data(n.item.id.toString()):{};if(r&&e(r["id"]).val()==""){return}for(var s in r){e(r[s]).val(n.item?i[s]:"")}},search:function(){var e=r(this.value);if(e.length<2){return false}},focus:function(){return false},select:function(r,i){if(i.item.value!=t.noMatchesLabel){var s=n(this.value);s.pop();s.push(i.item.value);if(t.delimiter!=null){s.push("");this.value=s.join(t.delimiter)}else{this.value=s.join("");if(e(this).attr("data-id-element")){e(e(this).attr("data-id-element")).val(i.item.id)}if(e(this).attr("data-update-elements")){var o=e(this).data(i.item.id.toString());var u=e.parseJSON(e(this).attr("data-update-elements"));for(var a in u){e(u[a]).val(o[a])}}}var f=this.value;e(this).bind("keyup.clearId",function(){if(e(this).val().trim()!=f.trim()){e(e(this).attr("data-id-element")).val("");e(this).unbind("keyup.clearId")}});e(t).trigger("railsAutocomplete.select",i)}return false}})}});e(document).ready(function(){e("input[data-autocomplete]").railsAutocomplete()})})(jQuery);