7 lines
4.9 KiB
JavaScript
Executable File
7 lines
4.9 KiB
JavaScript
Executable File
/*
|
|
jQuery autoComplete v1.0.7-tizra.5
|
|
Copyright (c) 2014 Simon Steinberger / Pixabay
|
|
License: http://www.opensource.org/licenses/mit-license.php
|
|
@preserve (for uglifyjs)
|
|
*/
|
|
(function($){$.fn.autoComplete=function(options){var o=$.extend({},$.fn.autoComplete.defaults,options);if(typeof options=="string"){this.each(function(){var that=$(this);if(options=="destroy"){$(window).off("resize.autocomplete",that.updateSC);that.off("blur.autocomplete focus.autocomplete keydown.autocomplete keyup.autocomplete");if(that.data("autocomplete"))that.attr("autocomplete",that.data("autocomplete"));else that.removeAttr("autocomplete");$(that.data("sc")).remove();that.removeData("sc").removeData("autocomplete")}});return this}return this.each(function(){var that=$(this);that.sc=$('<div class="autocomplete-suggestions '+o.menuClass+'"></div>');that.data("sc",that.sc).data("autocomplete",that.attr("autocomplete"));that.attr("autocomplete","off");that.cache={};that.last_val="";that.submitting=false;that.updateSC=function(resize,next){that.sc.css({top:that.offset().top+that.outerHeight(),left:that.offset().left,width:that.outerWidth()});if(!resize){that.sc.show();if(!that.sc.maxHeight)that.sc.maxHeight=parseInt(that.sc.css("max-height"));if(!that.sc.suggestionHeight)that.sc.suggestionHeight=$(".autocomplete-suggestion",that.sc).first().outerHeight();if(that.sc.suggestionHeight)if(!next)that.sc.scrollTop(0);else{var scrTop=that.sc.scrollTop(),selTop=next.offset().top-that.sc.offset().top;if(selTop+that.sc.suggestionHeight-that.sc.maxHeight>0)that.sc.scrollTop(selTop+that.sc.suggestionHeight+scrTop-that.sc.maxHeight);else if(selTop<0)that.sc.scrollTop(selTop+scrTop)}}};$(window).on("resize.autocomplete",that.updateSC);that.sc.appendTo("body");that.sc.on("mouseleave",".autocomplete-suggestion",function(){$(".autocomplete-suggestion.selected").removeClass("selected")});that.sc.on("mouseenter",".autocomplete-suggestion",function(){$(".autocomplete-suggestion.selected").removeClass("selected");$(this).addClass("selected")});that.sc.on("mousedown click",".autocomplete-suggestion",function(e){var item=$(this),v=item.attr("data-val");if(v||item.hasClass("autocomplete-suggestion")){that.val(v);o.onSelect(e,v,item);that.sc.hide()}return false});that.on("blur.autocomplete",function(){try{over_sb=$(".autocomplete-suggestions:hover").length}catch(e){over_sb=0}if(!over_sb){that.last_val=that.val();that.sc.hide();setTimeout(function(){that.sc.hide()},350)}else if(!that.is(":focus"))setTimeout(function(){that.focus()},20)});if(!o.minChars)that.on("focus.autocomplete",function(){that.last_val="\n";that.trigger("keyup.autocomplete")});function suggest(data,val){that.cache[val]=data;if(!data.length){that.sc.hide()}else if(val===that.val()&&that.is(":focus")&&!that.submitting){var s="";for(var i=0;i<data.length;i++)s+=o.renderItem(data[i],val);that.sc.html(s);that.updateSC(0)}}that.on("keydown.autocomplete",function(e){that.submitting=false;if((e.which==40||e.which==38)&&that.sc.html()){var next,sel=$(".autocomplete-suggestion.selected",that.sc);if(!sel.length){next=e.which==40?$(".autocomplete-suggestion",that.sc).first():$(".autocomplete-suggestion",that.sc).last();next.addClass("selected")}else{next=e.which==40?sel.next(".autocomplete-suggestion"):sel.prev(".autocomplete-suggestion");if(next.length){sel.removeClass("selected");next.addClass("selected")}else{sel.removeClass("selected");next=0}}if(o.liveValue){that.val(next?next.attr("data-val"):that.last_val)}that.updateSC(0,next);return false}else if(e.which==27){var sel=$(".autocomplete-suggestion.selected",that.sc);if(that.sc.is(":visible")){if(sel.length)that.val(that.last_val);that.sc.hide();return false}}else if(e.which==13||e.which==9){var sel=$(".autocomplete-suggestion.selected",that.sc),v=sel.attr("data-val");if(that.sc.is(":visible")){if(sel.length){that.val(v);o.onSelect(e,v,sel)}that.sc.hide();if(sel.length){if(e.which==13&&!o.propagateEnter)return false;if(e.which==9&&!o.propagateTab)return false}}if(e.which==13){that.submitting=true}}});that.on("keyup.autocomplete",function(e){if(!~$.inArray(e.which,[13,27,35,36,37,38,39,40])){var val=that.val();if(val.length>=o.minChars){if(val!=that.last_val){that.last_val=val;clearTimeout(that.timer);if(o.cache){if(val in that.cache){suggest(that.cache[val],val);return}for(var i=1;i<val.length-o.minChars;i++){var part=val.slice(0,val.length-i);if(part in that.cache&&!that.cache[part].length){suggest([],val);return}}}that.timer=setTimeout(function(){o.source(val,function(data){suggest(data,val)},o.delay)})}}else{that.last_val=val;that.sc.hide()}}})})};$.fn.autoComplete.defaults={source:0,minChars:3,delay:150,cache:1,liveValue:1,propagateTab:1,propagateEnter:1,menuClass:"",renderItem:function(item,search){search=search.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");var re=new RegExp("("+search.split(" ").join("|")+")","gi");return'<div class="autocomplete-suggestion" data-val="'+item+'">'+item.replace(re,"<b>$1</b>")+"</div>"},onSelect:function(e,term,item){}}})(jQuery); |