forked from jbdemonte/autocomplete
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery-autocomplete.min.js
executable file
·11 lines (10 loc) · 7.47 KB
/
jquery-autocomplete.min.js
1
2
3
4
5
6
7
8
9
10
11
/*
* Autocomplete Plugin for JQuery
* Version :
* Date :
* Licence : GPL v3 : http://www.gnu.org/licenses/gpl.html
* Author : DEMONTE Jean-Baptiste
* Contact : [email protected]
* Web site :
*/
(function(f){var c=["enable","disable","flushCache","trigger","display","close"],b=this,d="autocomplete";var e={ajax:{url:document.URL,type:"POST",dataType:"json",data:{}},cb:{populate:null,cast:null,process:null,preselect:null,select:null,unselect:null},width:"auto",delay:250,name:null,minLength:1,cache:true,once:false,filter:false,source:null,prefix:true,splitChr:null,autohide:false,loop:true,className:d};function g(h){var i;if(f.isArray(h)){i=[];f.each(h,function(j,k){i.push(k)})}else{if(typeof(h)==="object"){i=f.extend(true,{},h)}else{i=h}}return i}function a(q){var r={},j,m,o,i=-1,t=0,s,h={},k=false,n=false,p=this,l={key:function(u){p.key.apply(p,[u])},focusout:function(u){if(!f(this).data(d+"-focus")){p.hide(true)}},dblclick:function(){if(!o){p.updateTOComplete()}}};this.init=function(u){r=f.extend(true,{},e,u);if(typeof(r.source)==="string"){r.source=this.splitData(r.source)}if(u&&(typeof(u)==="object")&&(typeof(u.once)!=="undefined")&&u.once){if(typeof(u.filter)==="undefined"){r.filter=true}}q.attr("autocomplete","off");this.bind()};this.splitData=function(u){if(r.splitChr){return u.split(r.splitChr)}else{return u.split(/\r\n|\r|\n/)}};this.getSource=function(u){if(typeof(u)==="function"){return this.getSource.apply(this,[u.apply(q,[q.val()])])}else{if(typeof(u)==="string"){return this.splitData(u)}}return u};this.flush=function(){h={}};this.bind=function(){if(!k){q[f.browser.opera?"keypress":"keydown"](l.key);q.focusout(l.focusout);q.dblclick(l.dblclick);k=true}};this.unbind=function(){if(k){q.unbind(f.browser.opera?"keypress":"keydown",l.key);q.unbind("focusout",l.focusout);q.unbind("dblclick",l.dblclick);k=false}};this.updateToAutoHide=function(){if(!r.autohide){return}this.stopToAutoHide();m=setTimeout(function(){p.hide(p,[true])},r.autohide)};this.stopToAutoHide=function(){if(m){clearTimeout(m);m=null}};this.updateTOComplete=function(u){var v=this;clearTimeout(j);j=setTimeout(function(){v.complete.apply(v,[])},u?0:r.delay)};this.hover=function(v,u){var w=o?f("li",o).eq(v):null;if(w){w[(u?"add":"remove")+"Class"]("hover");if(u){this.scroll(w)}}};this.scroll=function(u){var x=o.scrollTop(),v=o.innerHeight(),y=u.position().top,w=u.outerHeight();if(y<0){n=true;o.scrollTop(x+y)}else{if(y+w>v){n=true;o.scrollTop(x+y-v+w)}}};this.getPageUpDownItem=function(u){if(!o){return false}var x=o.innerHeight(),v=0,w=i;f("li",o).each(function(A,z){var y=f(z);v+=(y.position().top>=0)&&(y.position().top+y.outerHeight()<=x)?1:0});if(i<0){return(u?t:v)-1}w+=u?-v:v;w=Math.max(0,w);w=Math.min(w,t-1);if(r.loop&&(w==i)){w=w===0?t-1:0}return w};this.key=function(v){var w=v.keyCode,u;if(w===9){}else{if(!o&&(w!==27)&&(w!==13)){this.updateTOComplete()}else{if((w===38)||(w===40)){u=i+(w===38?-1:1);if(r.loop){if(u<0){u=t-1}else{if(u>t-1){u=0}}}u=Math.max(0,u);u=Math.min(u,t-1);this.preselect(u);v.preventDefault()}else{if((w===33)||(w===34)){u=this.getPageUpDownItem(w===33);if(u!==false){this.preselect(u)}v.preventDefault()}else{if(w===13){if(i!==-1){this.select(i,f("li",o).eq(i).text());v.preventDefault();v.stopImmediatePropagation()}else{this.hide(true)}}else{if(w===27){this.preselect(-1);this.hide(true)}else{this.updateTOComplete()}}}}}}};this.data=function(){var v,u="value";if(typeof(r.cb.populate)==="function"){v=f.extend(true,{},r.ajax.data,r.cb.populate.apply(q,[]))}else{v=f.extend(true,{},r.ajax.data);if(r.name&&r.name.length){u=r.name}else{if(q.attr("name")&&q.attr("name").length){u=q.attr("name")}else{if(q.attr("id")&&q.attr("id").length){u=q.attr("id")}}}v[u]=q.val()}return v};this.complete=function(){var u=q.val();if(r.minLength&&(r.minLength>u.length)){if(this.hide(true)){this.preselect(-1)}return}if(r.source){this.completeSource()}else{this.completeAjax()}};this.filterData=function(y,u){var w=new RegExp((r.prefix?"^":"")+q.val().replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),x=[],v;for(v=0;v<y.length;v++){if(w.test(u(y[v]))){x.push(y[v])}}return x};this.completeSource=function(){this.show(this.getSource(r.source),true)};this.completeAjax=function(){var v=this,x=q.val(),u;if(h&&((r.once&&!f.isEmptyObject(h))||(r.cache&&(typeof(h[x])!=="undefined")))){var w=r.once?g(h):g(h[x]);if(typeof(r.cb.process)==="function"){w=r.cb.process.apply(q,[w,r.once?"once":"cache"])}if(typeof(w)==="string"){w=v.splitData(w)}this.show(w,r.filter);return}u=f.extend(true,{},r.ajax);u.success=function(z,A,y){if(r.once){h=g(z)}else{if(r.cache){h[x]=g(z)}}if(typeof(r.cb.process)==="function"){z=r.cb.process.apply(q,[z,A,y])}if(typeof(z)==="string"){z=v.splitData(z)}v.show.apply(v,[z,r.filter])};u.data=this.data();f.ajax(u)};this.preselect=function(u){this.updateToAutoHide();if(i===u){return}this.hover(i,false);i=u;this.hover(i,true);if(typeof(r.cb.preselect)==="function"){r.cb.preselect.apply(q,[i===-1?null:s[i],i])}};this.select=function(u,v){this.stopToAutoHide();if(v===null){v=q.val()}else{q.val(v)}this.hide();if(typeof(r.cb.select)==="function"){r.cb.select.apply(q,[s[u],u])}};this.show=function(z,w){var y=this,v=q.position(),x=f.browser.msie?q.outerWidth():q.width(),u=r.cb.cast||function(A){return A};s=z;this.hide();if(!z||(typeof(z)!=="object")||!z.length){return}if((typeof(w)==="undefined"&&r.filter)||w){z=this.filterData(z,u)}o=f('<ul class="'+r.className+'"></ul>').css("position","absolute").css("left",v.left+"px").css("top",(v.top+q.outerHeight())+"px").scroll(function(){n=false});if(r.width==="auto"){o.css(f.browser.msie?"width":"minWidth",x+"px")}else{if(r.width===false){o.css("width",x+"px").css("overflow","hidden")}else{o.css("width",r.width).css("overflow","hidden")}}i=-1;t=z.length;f.each(z,function(A,C){var D=f("<li></li>"),B=f("<a></a>");B.click(function(){y.select.apply(y,[A,u(C)])});D.hover(function(){if(!n){y.preselect(A)}});o.append(D.append(B.append(u(C))))});o.hover(function(){q.data(d+"-focus",true);y.stopToAutoHide()},function(){q.data(d+"-focus",false);y.updateToAutoHide();if(!q.is(":focus")){q.trigger("focusout")}});q.after(o);if(f.browser.msie){f.each("min max".split(" "),function(B,A){f.each("Width Height".split(" "),function(E,C){var D=parseInt(o.css(A+C));if(!isNaN(D)&&((o[C.toLowerCase()]()<D)^B)){o.css(C.toLowerCase(),D+"px")}})})}this.updateToAutoHide()};this.reverse=function(v){var u=null;f("li",o).each(function(x,w){if((u===null)&&(f(w).text()===v)){u=x}});return u};this.hide=function(v){if(o){if(v){var w=q.val(),u=!w.length||(r.minLength&&(r.minLength>w.length))?null:this.reverse(w);if(u!==null){this.select(u);return}else{if(typeof(r.cb.unselect)==="function"){r.cb.unselect.apply(q,[])}}}this.stopToAutoHide();o.remove();o=null;i=-1;return true}return false};this.isPublic=function(u){for(var v=0;v<c.length;v++){if(c[v]===u){return true}}return false};this.process=function(){var w=[];for(var u=0;u<arguments.length;u++){w.push(arguments[u])}if(w.length&&typeof(w[0])==="string"){var v=w.shift();if(this.isPublic(v)){this[v].apply(this,w)}}else{this.init.apply(this,w)}}}a.prototype.flushCache=function(){this.flush()};a.prototype.enable=function(){this.bind()};a.prototype.disable=function(){this.unbind();this.preselect(-1);this.hide()};a.prototype.trigger=function(){this.updateTOComplete(true)};a.prototype.display=function(h,i){this.show(this.getSource(h),i)};a.prototype.close=function(){this.hide()};f.fn.autocomplete=function(){var h=arguments;f.each(this,function(){var j=f(this),i=j.data(d);if(!i){i=new a(j);j.data(d,i)}i.process.apply(i,h)});return this}}(jQuery));