forked from androiddevelop/autosuggest.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathautosuggest.min.js
More file actions
1 lines (1 loc) · 3.74 KB
/
autosuggest.min.js
File metadata and controls
1 lines (1 loc) · 3.74 KB
1
!function(a){a.fn.autosuggest=function(b){function j(){var b=a(f).val();if(!i&&b!=h){if(h=b,null==b)return void l(a(f).next("."+d.menuClass));if(b.length<d.minLength)return void l(a(f).next("."+d.menuClass));null!=d.split&&b.charAt(b.length-1)==d.split&&(a(f).next("."+d.menuClass).html(""),l(a(f).next("."+d.menuClass))),k()}}function k(){var b=a(f).val(),c=d.queryParamName;b=p(b);var j={};j[c]=b,a.each(d.extra,function(a,b){j[a]=b}),b||(a(f).next("."+d.menuClass).html(""),l(a(f).next("."+d.menuClass))),b.length>=d.minLength&&(e&&4!=e.readyState&&e.abort(),e=a.ajax({type:d.method,url:d.url,data:j,dataType:d.dataType,success:function(c){d.dataCallback&&(c=d.data=d.dataCallback(c));var j="",k=-1,r=0;a.each(c,function(a,c){if(d.maxNum>a){if(d.highlight){var e=p(b);j+='<span href="javascript:void(0)" class="list-group-item '+g+'" data-id="'+c.id+'" data-value="'+c.value+'" data-label="'+c.label+'">'+q(c.label,e)+"</span>"}else j+='<span href="javascript:void(0)" class="list-group-item '+g+'" data-id="'+c.id+'" data-value="'+c.value+'" data-label="'+c.label+'">'+c.label+"</span>";r++}}),a(f).next("."+d.menuClass).html(j),a(f).next("."+d.menuClass).children().on("click",n),a(f).is(":focus")&&m(a(f).next("."+d.menuClass)),0==r&&a(f).next("."+d.menuClass).is(":visible")&&null!=d.close&&l(a(f).next("."+d.menuClass)),a(f).unbind("keydown"),a(".as-selected").removeClass("as-selected");var s=!1;a(f).keydown(function(b){var c=b.keyCode;if("none"!=a(f).next("."+d.menuClass).css("display")||13==c)return 38==c?(a(".as-selected").removeClass("as-selected"),k=(k+r-1)%r,a(f).next("."+d.menuClass).children().eq(k).addClass("as-selected"),s=!0,void b.preventDefault()):40==c?(a(".as-selected").removeClass("as-selected"),k=(k+1)%r,a(f).next("."+d.menuClass).children().eq(k).addClass("as-selected"),void(s=!0)):void(13==c&&(s?(i=!0,h=o(a(".as-selected").data("value")),a(f).val(h),i=!1,l(a(f).next("."+d.menuClass)),d.immediate&&null!=d.nextStep?d.nextStep():s=!1,d.onSelect&&d.onSelect(a(".as-selected"))):null!=d.nextStep&&a(f).val().length>0&&(l(a(f).next("."+d.menuClass)),d.nextStep(),e.abort())))}),a(f).next("."+d.menuClass).children().each(function(b){a(this).on("mouseenter",function(){a(".as-selected").removeClass("as-selected"),a(this).addClass("as-selected"),k=b})})}}))}function l(a){a.is(":visible")&&(a.hide(),null!=d.close&&d.close())}function m(a){a.is(":visible")||(a.show(),null!=d.open&&d.open())}function n(){return i=!0,h=o(a(this).data("value")),a(f).val(h),i=!1,l(a(f).next("."+d.menuClass)),a(f).focus(),d.immediate&&null!=d.nextStep&&d.nextStep(),d.onSelect&&d.onSelect(a(this)),!1}function o(b){if(null==d.split)return b;var c=a(f).val(),e=b,g=c.lastIndexOf(d.split);return-1!=g&&(e=c.substring(0,g)+d.split+b),e}function p(a){if(null!=d.split){var b=a.lastIndexOf(d.split);-1!=b&&(a=a.substring(b+d.split.length))}return a}function q(a,b){var c=0,d=a,e="",f=b.length;a=a.toLowerCase(),b=b.toLowerCase();for(var g=a.indexOf(b,c);-1!=g;)e=e+d.substring(c,g)+"<strong>"+d.substr(g,f)+"</strong>",c=g+f,g=d.indexOf(b,c);return e+=d.substring(c)}var c={url:"/search",method:"get",wrapperClass:"as-wrapper",menuClass:"as-menu",minLength:2,maxNum:10,align:"left",queryParamName:"query",split:null,highlight:!0,extra:{},nextStep:null,open:null,close:null,immediate:!1,data:null,dataCallback:null,dataType:"json",onSelect:null},d=a.extend({},c,b);a(this).attr("autocomplete","off"),a(this).wrap('<div class="'+d.wrapperClass+'"></div>'),a('<div class="'+d.menuClass+' list-group"></div>').insertAfter(a(this));var e,f=a(this),g=" as-align-left";"center"==d.align?g=" as-align-center":"right"==d.align&&(g=" as-align-right"),a(".as-menu").css("top",a(f).outerHeight());var h="",i=!1;return setInterval(j,200),a(this).blur(function(){setTimeout(function(){l(a(f).next("."+d.menuClass))},200)}),this}}(jQuery);