Merge with @h5bp
[ReadingsJQM.git] / js / jqm.autoComplete.min-1.3.js
1 /*
2         Name: autoComplete
3         Author: Raymond Camden & Andy Matthews
4         Contributors: Jim Pease (@jmpease)
5         Website: http://raymondcamden.com/
6                          http://andyMatthews.net
7         Packed With: http://jsutility.pjoneil.net/
8         Version: 1.3
9  */
10 (function($){"use strict";var defaults={target:$(),source:null,callback:null,link:null,minLength:0,transition:'fade'},buildItems=function($this,data,settings){var str=[];$.each(data,function(index,value){if($.isPlainObject(value)){str.push('<li><a href="'+settings.link+encodeURIComponent(value.value)+'" data-transition="'+settings.transition+'">'+value.label+'</a></li>')}else{str.push('<li><a href="'+settings.link+encodeURIComponent(value)+'" data-transition="'+settings.transition+'">'+value+'</a></li>')}});$(settings.target).html(str.join('')).listview("refresh");if(settings.callback!=null&&$.isFunction(settings.callback)){attachCallback(settings)}if(str.length>0){$this.trigger("targetUpdated.autocomplete")}else{$this.trigger("targetCleared.autocomplete")}},attachCallback=function(settings){$('li a',$(settings.target)).bind('click.autocomplete',function(e){e.stopPropagation();e.preventDefault();settings.callback(e)})},clearTarget=function($this,$target){$target.html('').listview('refresh');$this.trigger("targetCleared.autocomplete")},handleInput=function(e){var $this=$(this),text,data,settings=$this.jqmData("autocomplete");if(settings){text=$this.val();if(text.length<settings.minLength){clearTarget($this,$(settings.target))}else{if($.isArray(settings.source)){data=settings.source.sort().filter(function(element){var element_text,re=new RegExp('^'+text,'i');if($.isPlainObject(element)){element_text=element.label}else{element_text=element}return re.test(element_text)});buildItems($this,data,settings)}else{$.get(settings.source,{term:text},function(data){buildItems($this,data,settings)},"json")}}}},methods={init:function(options){this.jqmData("autocomplete",$.extend({},defaults,options));return this.unbind("input.autocomplete").bind("input.autocomplete",handleInput)},update:function(options){var settings=this.jqmData("autocomplete");if(settings){this.jqmData("autocomplete",$.extend(settings,options))}return this},clear:function(){var settings=this.jqmData("autocomplete");if(settings){clearTarget(this,$(settings.target))}return this},destroy:function(){var settings=this.jqmData("autocomplete");if(settings){clearTarget(this,$(settings.target));this.jqmRemoveData("autocomplete");this.unbind(".autocomplete")}return this}};$.fn.autocomplete=function(method){if(methods[method]){return methods[method].apply(this,Array.prototype.slice.call(arguments,1))}else if(typeof method==='object'||!method){return methods.init.apply(this,arguments)}}})(jQuery);