14 lines
6.6 KiB
JavaScript
14 lines
6.6 KiB
JavaScript
jQuery.autocomplete=function(j,b){function p(){i={};i.data={};i.length=0}function N(){if(s==46||s>8&&s<32)z();var a=f.val();if(a!=t){t=a;if(a.length>=b.minChars){f.addClass(b.loadingClass);O(a)}else{f.removeClass(b.loadingClass);z()}}}function G(a){var c=$("li",m);if(c){n+=a;if(n<0)n=0;else if(n>=c.size())n=c.size()-1;c.removeClass("ac_over");$(c[n]).addClass("ac_over")}}function P(){var a=$("li.ac_over",m)[0];if(!a){var c=$("li",m);if(b.selectOnly){if(c.length==1)a=c[0]}else if(b.selectFirst)a=c[0]}if(a){A(a);
|
|
return true}else return false}function A(a){if(!a){a=document.createElement("li");a.extra=[];a.selectValue=""}var c=$.trim(a.selectValue?a.selectValue:a.innerHTML);t=j.lastSelected=c;k.html("");f.val(c);u();b.onItemSelect&&setTimeout(function(){b.onItemSelect(a)},1)}function Q(a,c){var d=f.get(0);if(d.createTextRange){var e=d.createTextRange();e.collapse(true);e.moveStart("character",a);e.moveEnd("character",c);e.select()}else if(d.setSelectionRange)d.setSelectionRange(a,c);else if(d.selectionStart){d.selectionStart=
|
|
a;d.selectionEnd=c}d.focus()}function R(a){if(s!=8){f.val(f.val()+a.substring(t.length));Q(t.length,a.length)}}function S(){var a=T(b.popupParent||f),c;c=b.width>0?b.width:b.popupParent?b.popupParent.innerWidth():f.innerWidth();var d;d=b.popupParent?b.popupParent.innerHeight():f.outerHeight();k.css({width:parseInt(c)+"px",top:a.y+d+"px",left:a.x+"px","z-index":a.zIndex});U()}function V(){o&&clearTimeout(o);o=setTimeout(u,200)}function u(){if(!B){B=true;o&&clearTimeout(o);var a=f.removeClass(b.loadingClass).val();
|
|
k.is(":visible")&&z();if(b.mustMatch)if(!j.lastSelected||j.lastSelected!=a)A(null);B=false}}function U(){b.resultsId&&k.attr("id",b.resultsId);k.show();typeof b.onResultsShow==="function"&&b.onResultsShow(k[0])}function z(){k.hide();typeof b.onResultsHide==="function"&&b.onResultsHide(k[0]);b.resultsId&&k.removeAttr("id")}function H(a,c){if(c){f.removeClass(b.loadingClass);m.innerHTML="";if(!C||c.length==0)return u();$.browser.msie&&k.append(document.createElement("iframe"));m.appendChild(W(c));if(b.autoFill&&
|
|
f.val().toLowerCase()==a.toLowerCase())R(c[0][0]);else b.selectFirst&&$("li:first",m).addClass("ac_over");S()}else u()}function I(a){if(!a)return null;var c=[];a=a.split(b.lineSeparator);for(var d=0;d<a.length;d++){var e=$.trim(a[d]);if(e)c[c.length]=e.split(b.cellSeparator)}return c}function W(a){var c=document.createElement("ul"),d=a.length;if(b.maxItemsToShow>0&&b.maxItemsToShow<d)d=b.maxItemsToShow;for(var e=0;e<d;e++){var g=a[e];if(g){var h=document.createElement("li");h.innerHTML=b.formatItem?
|
|
b.formatItem(g,e,d):g[0];h.selectValue=g[0];var l=null;if(g.length>1){l=[];for(var q=1;q<g.length;q++)l[l.length]=g[q]}h.extra=l;c.appendChild(h);$(h).hover(function(){$("li",c).removeClass("ac_over");$(this).addClass("ac_over");n=$("li",c).indexOf($(this).get(0))},function(){$(this).removeClass("ac_over")}).click(function(J){J.preventDefault();J.stopPropagation();A(this)})}}$(c).mousedown(function(){D=true}).mouseup(function(){D=false});return c}function O(a){b.matchCase||(a=a.toLowerCase());var c=
|
|
b.cacheLength?K(a):null;if(c)H(a,c);else if(typeof b.url=="string"&&b.url.length>0){v+=1;if(v>=X)v=0;var d=v;$.get(L(a),function(e){Y(a,e,d)})}else f.removeClass(b.loadingClass)}function Y(a,c,d){c=I(c);E(a,c);d==v&&H(a,c)}function L(a){var c=b.url.indexOf("?")==-1?"?":"&";a=b.url+c+b.queryParam+"="+encodeURI(a);for(var d in b.extraParams)a+="&"+d+"="+encodeURI(b.extraParams[d]);return a}function K(a){if(!a)return null;if(i.data[a])return i.data[a];if(b.matchSubset)for(var c=a.length-1;c>=b.minChars;c--){var d=
|
|
a.substr(0,c);if(d=i.data[d]){c=[];for(var e=0;e<d.length;e++){var g=d[e];if(Z(g[0],a))c[c.length]=g}return c}}return null}function Z(a,c){b.matchCase||(a=a.toLowerCase());a=a.indexOf(c);if(a==-1)return false;return a==0||b.matchContains}function F(a,c){c&&f.removeClass(b.loadingClass);for(var d=c?c.length:0,e=null,g=0;g<d;g++){var h=c[g];if(h[0].toLowerCase()==a.toLowerCase()){e=document.createElement("li");e.innerHTML=b.formatItem?b.formatItem(h,g,d):h[0];e.selectValue=h[0];var l=null;if(h.length>
|
|
1){l=[];for(var q=1;q<h.length;q++)l[l.length]=h[q]}e.extra=l}}b.onFindValue&&setTimeout(function(){b.onFindValue(e)},1)}function E(a,c){if(!(!c||!a||!b.cacheLength)){if(!i.length||i.length>b.cacheLength){p();i.length++}else i[a]||i.length++;i.data[a]=c}}function T(a){var c=a.offset(),d=0;for(a=a;a.length&&!a.is("body");){var e=a.css("z-index");if((e=parseInt(e))||!isNaN(e))d=Math.max(e,d);a=a.offsetParent()}return{x:Math.ceil(c.left),y:Math.ceil(c.top),zIndex:d+10}}var r=this,f=$(j).attr("autocomplete",
|
|
"off"),v=1,X=65E3;b.inputClass&&f.addClass(b.inputClass);var m=document.createElement("div"),k=$(m).hide().addClass(b.resultsClass).css("position","absolute");b.width>0&&k.css("width",b.width);$("body").append(m);j.autocompleter=r;var o=null,t="",n=-1,i={},C=false,s=null,D=false,B=false;p();if(b.data!=null){r="";var w={},y=[];if(typeof b.url!="string")b.cacheLength=1;for(var x=0;x<b.data.length;x++){y=typeof b.data[x]=="string"?[b.data[x]]:b.data[x];if(y[0].length>0){r=y[0].substring(0,1).toLowerCase();
|
|
w[r]||(w[r]=[]);w[r].push(y)}}for(var M in w){b.cacheLength++;E(M,w[M])}}f.keydown(function(a){s=a.keyCode;switch(a.keyCode){case 38:a.preventDefault();G(-1);break;case 40:a.preventDefault();G(1);break;case 9:case 13:if(P()){f.get(0).blur();a.preventDefault()}break;case 16:case 17:case 18:break;default:n=-1;o&&clearTimeout(o);o=setTimeout(function(){N()},b.delay);break}}).focus(function(){C=true}).blur(function(){C=false;D||V()});u();b.focus&&f.focus();this.flushCache=function(){p()};this.setExtraParams=
|
|
function(a){b.extraParams=a};this.findValue=function(){var a=f.val();b.matchCase||(a=a.toLowerCase());var c=b.cacheLength?K(a):null;if(c)F(a,c);else typeof b.url=="string"&&b.url.length>0?$.get(L(a),function(d){d=I(d);E(a,d);F(a,d)}):F(a,null)}};
|
|
jQuery.fn.autocomplete=function(j,b,p){b=b||{};b.url=j;b.data=typeof p=="object"&&p.constructor==Array?p:null;b=$.extend({autoFill:false,cacheLength:1,cellSeparator:"|",delay:400,extraParams:{},focus:false,inputClass:"ac_input",lineSeparator:"\n",loadingClass:"ac_loading",matchCase:0,matchSubset:1,matchContains:0,maxItemsToShow:-1,minChars:1,mustMatch:0,onResultsShow:null,onResultsHide:null,popupParent:null,queryParam:"q",resultsClass:"ac_results",resultsId:null,selectFirst:false,selectOnly:false,
|
|
width:0},b);b.width=parseInt(b.width,10);if(b.popupParent){b.popupParent=$(b.popupParent);if(b.popupParent.length==0)b.popupParent=null}this.each(function(){new jQuery.autocomplete(this,b)});return this};jQuery.fn.autocompleteArray=function(j,b){return this.autocomplete(null,b,j)};jQuery.fn.indexOf=function(j){for(var b=0;b<this.length;b++)if(this[b]==j)return b;return-1}; |