diff --git a/lib/ajax-chosen.js b/lib/ajax-chosen.js
index 96f0f91..c9e3123 100644
--- a/lib/ajax-chosen.js
+++ b/lib/ajax-chosen.js
@@ -6,11 +6,8 @@
if (settings == null) {
settings = {};
}
- if (callback == null) {
- callback = {};
- }
if (chosenOptions == null) {
- chosenOptions = function() {};
+ chosenOptions = {};
}
defaultOptions = {
minTermLength: 3,
@@ -41,7 +38,7 @@
return false;
}
field = $(this);
- if (!(options.data != null)) {
+ if (options.data == null) {
options.data = {};
}
options.data[options.jsonTermKey] = val;
@@ -51,7 +48,7 @@
success = options.success;
options.success = function(data) {
var items, nbItems, selected_values;
- if (!(data != null)) {
+ if (data == null) {
return;
}
selected_values = [];
@@ -65,7 +62,7 @@
select.find('optgroup:empty').each(function() {
return $(this).remove();
});
- items = callback(data);
+ items = callback != null ? callback(data, field) : data;
nbItems = 0;
$.each(items, function(i, element) {
var group, text, value;
@@ -108,8 +105,8 @@
select.data().chosen.no_results_clear();
select.data().chosen.no_results(field.val());
}
- if (success != null) {
- success(data);
+ if (settings.success != null) {
+ settings.success(data);
}
return field.val(untrimmed_val);
};
diff --git a/lib/ajax-chosen.min.js b/lib/ajax-chosen.min.js
index 46861d4..108fa0d 100644
--- a/lib/ajax-chosen.min.js
+++ b/lib/ajax-chosen.min.js
@@ -1,17 +1,16 @@
(function($){return $.fn.ajaxChosen=function(settings,callback,chosenOptions){var chosenXhr,defaultOptions,options,select;if(settings==null){settings={};}
-if(callback==null){callback={};}
-if(chosenOptions==null){chosenOptions=function(){};}
+if(chosenOptions==null){chosenOptions={};}
defaultOptions={minTermLength:3,afterTypeDelay:500,jsonTermKey:"term",keepTypingMsg:"Keep typing...",lookingForMsg:"Looking for"};select=this;chosenXhr=null;options=$.extend({},defaultOptions,$(select).data(),settings);this.chosen(chosenOptions?chosenOptions:{});return this.each(function(){return $(this).next('.chzn-container').find(".search-field > input, .chzn-search > input").bind('keyup',function(){var field,msg,success,untrimmed_val,val;untrimmed_val=$(this).val();val=$.trim($(this).val());msg=val.length");}
+success=options.success;options.success=function(data){var items,nbItems,selected_values;if(data==null){return;}
+selected_values=[];select.find('option').each(function(){if(!$(this).is(":selected")){return $(this).remove();}else{return selected_values.push($(this).val()+"-"+$(this).text());}});select.find('optgroup:empty').each(function(){return $(this).remove();});items=callback!=null?callback(data,field):data;nbItems=0;$.each(items,function(i,element){var group,text,value;nbItems++;if(element.group){group=select.find("optgroup[label='"+element.text+"']");if(!group.size()){group=$("");}
group.attr('label',element.text).appendTo(select);return $.each(element.items,function(i,element){var text,value;if(typeof element==="string"){value=i;text=element;}else{value=element.value;text=element.text;}
if($.inArray(value+"-"+text,selected_values)===-1){return $("").attr('value',value).html(text).appendTo(group);}});}else{if(typeof element==="string"){value=i;text=element;}else{value=element.value;text=element.text;}
if($.inArray(value+"-"+text,selected_values)===-1){return $("").attr('value',value).html(text).appendTo(select);}}});if(nbItems){select.trigger("liszt:updated");}else{select.data().chosen.no_results_clear();select.data().chosen.no_results(field.val());}
-if(success!=null){success(data);}
+if(settings.success!=null){settings.success(data);}
return field.val(untrimmed_val);};return this.timer=setTimeout(function(){if(chosenXhr){chosenXhr.abort();}
return chosenXhr=$.ajax(options);},options.afterTypeDelay);});});};})(jQuery);
\ No newline at end of file
diff --git a/src/ajax-chosen.coffee b/src/ajax-chosen.coffee
index 1fcd512..74a4fb6 100644
--- a/src/ajax-chosen.coffee
+++ b/src/ajax-chosen.coffee
@@ -1,6 +1,6 @@
do ($ = jQuery) ->
- $.fn.ajaxChosen = (settings = {}, callback = {}, chosenOptions = ->) ->
+ $.fn.ajaxChosen = (settings = {}, callback, chosenOptions = {}) ->
defaultOptions =
minTermLength: 3
afterTypeDelay: 500
@@ -10,9 +10,9 @@ do ($ = jQuery) ->
# This will come in handy later.
select = @
-
+
chosenXhr = null
-
+
# Merge options with defaults
options = $.extend {}, defaultOptions, $(select).data(), settings
@@ -20,7 +20,7 @@ do ($ = jQuery) ->
# of using the .chzn-autoselect class to specify input elements
# we want to use with ajax autocomplete.
@chosen(if chosenOptions then chosenOptions else {})
-
+
@each ->
# Now that chosen is loaded normally, we can bootstrap it with
# our ajax autocomplete code.
@@ -29,7 +29,7 @@ do ($ = jQuery) ->
.bind 'keyup', ->
# This code will be executed every time the user types a letter
# into the input form that chosen has created
-
+
# Retrieve the current value of the input form
untrimmed_val = $(@).val()
val = $.trim $(@).val()
@@ -38,49 +38,49 @@ do ($ = jQuery) ->
# if they need to keep typing or if we are looking for their data
msg = if val.length < options.minTermLength then options.keepTypingMsg else options.lookingForMsg + " '#{val}'"
select.next('.chzn-container').find('.no-results').text(msg)
-
+
# If input text has not changed ... do nothing
return false if val is $(@).data('prevVal')
# Set the current search term so we don't execute the ajax call if
# the user hits a key that isn't an input letter/number/symbol
$(@).data('prevVal', val)
-
+
# At this point, we have a new term/query ... the old timer
# is no longer valid. Clear it.
# We delay searches by a small amount so that we don't flood the
# server with ajax requests.
clearTimeout(@timer) if @timer
-
+
# Some simple validation so we don't make excess ajax calls. I am
# assuming you don't want to perform a search with less than 3
# characters.
return false if val.length < options.minTermLength
-
+
# This is a useful reference for later
field = $(@)
-
+
# Default term key is `term`. Specify alternative in options.options.jsonTermKey
- options.data = {} if not options.data?
+ options.data = {} unless options.data?
options.data[options.jsonTermKey] = val
- options.data = options.dataCallback(options.data) if options.dataCallback?
-
+ options.data = options.dataCallback(options.data) if options.dataCallback?
+
# If the user provided an ajax success callback, store it so we can
# call it after our bootstrapping is finished.
success = options.success
-
+
# Create our own callback that will be executed when the ajax call is
# finished.
options.success = (data) ->
# Exit if the data we're given is invalid
- return if not data?
-
+ return unless data?
+
# Go through all of the