forked from Pixabay/JavaScript-autoComplete
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathauto-complete.min.js
More file actions
6 lines (6 loc) · 5.38 KB
/
Copy pathauto-complete.min.js
File metadata and controls
6 lines (6 loc) · 5.38 KB
1
2
3
4
5
6
/*!
* JavaScript autoComplete v1.0.3
* https://github.com/Pixabay/JavaScript-autoComplete
*/
var autoComplete=function(){"use strict";function a(a){function b(a,b){return a.classList?a.classList.contains(b):new RegExp("\\b"+b+"\\b").test(a.className)}function c(a,b,c){a.attachEvent?a.attachEvent("on"+b,c):a.addEventListener(b,c)}function d(a,b,c){a.detachEvent?a.detachEvent("on"+b,c):a.removeEventListener(b,c)}function e(a,d,e,g){g=g||document;var h=function(c){for(var d,f=c.target||c.srcElement;f&&!(d=b(f,a));)f=f.parentElement;d&&e.call(f,c)};c(g,d,h),f.push({context:g,event:d,listener:h})}if(document.querySelector){var f=[],g={selector:0,source:0,minChars:3,delay:150,cache:1,menuClass:"",renderItem:function(a,b){b=b.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");var c=new RegExp("("+b.split(" ").join("|")+")","gi");return'<div class="autocomplete-suggestion" data-val="'+a+'">'+a.replace(c,"<b>$1</b>")+"</div>"},onSelect:function(a,b,c){},popupContainer:document.body};for(var h in a)a.hasOwnProperty(h)&&(g[h]=a[h]);for(var i="object"==typeof g.selector?[g.selector]:document.querySelectorAll(g.selector),j=0;j<i.length;j++){var k=i[j];k.sc=document.createElement("div"),k.sc.className="autocomplete-suggestions "+g.menuClass,k.autocompleteAttr=k.getAttribute("autocomplete"),k.setAttribute("autocomplete","off"),k.cache={},k.last_val="",k.updateSC=function(a,b){var c=k.getBoundingClientRect();if(k.sc.style.left=c.left+(window.pageXOffset||document.documentElement.scrollLeft)+"px",k.sc.style.top=c.bottom+(window.pageYOffset||document.documentElement.scrollTop)+1+"px",k.sc.style.width=c.right-c.left+"px",!a&&(k.sc.style.display="block",k.sc.maxHeight||(k.sc.maxHeight=parseInt((window.getComputedStyle?getComputedStyle(k.sc,null):k.sc.currentStyle).maxHeight)),k.sc.suggestionHeight||(k.sc.suggestionHeight=k.sc.querySelector(".autocomplete-suggestion").offsetHeight),k.sc.suggestionHeight))if(b){var d=k.sc.scrollTop,e=b.getBoundingClientRect().top-k.sc.getBoundingClientRect().top;e+k.sc.suggestionHeight-k.sc.maxHeight>0?k.sc.scrollTop=e+k.sc.suggestionHeight+d-k.sc.maxHeight:0>e&&(k.sc.scrollTop=e+d)}else k.sc.scrollTop=0},c(window,"resize",k.updateSC),g.popupContainer.appendChild(k.sc),e("autocomplete-suggestion","mouseleave",function(a){var b=k.sc.querySelector(".autocomplete-suggestion.selected");b&&setTimeout(function(){b.className=b.className.replace(/\s*selected/,"")},20)},k.sc),e("autocomplete-suggestion","mouseover",function(a){var b=k.sc.querySelector(".autocomplete-suggestion.selected");b&&(b.className=b.className.replace(/\s*selected/,"")),this.className+=" selected"},k.sc),e("autocomplete-suggestion","mousedown",function(a){if(b(this,"autocomplete-suggestion")){var c=this.getAttribute("data-val");k.value=c,g.onSelect(a,c,this),k.sc.style.display="none"}},k.sc),k.blurHandler=function(){try{var a=document.querySelector(".autocomplete-suggestions:hover")}catch(b){var a=0}a?k!==document.activeElement&&setTimeout(function(){k.focus()},20):(k.last_val=k.value,k.sc.style.display="none",setTimeout(function(){k.sc.style.display="none"},350))},c(k,"blur",k.blurHandler);var l=function(a,b){if(k.cache[a]=b,b.length&&a.length>=g.minChars){for(var c="",d=0;d<b.length;d++)c+=g.renderItem(b[d],a);k.sc.innerHTML=c,k.updateSC(0)}else k.sc.style.display="none"};k.keydownHandler=function(a){var b=window.event?a.keyCode:a.which;if((40===b||38===b)&&k.sc.innerHTML){var c,d=k.sc.querySelector(".autocomplete-suggestion.selected");return d?(c=40===b?d.nextSibling:d.previousSibling,c?(d.className=d.className.replace(/\s*selected/,""),c.className+=" selected",k.value=c.getAttribute("data-val")):(d.className=d.className.replace(/\s*selected/,""),k.value=k.last_val,c=0)):(c=40===b?k.sc.querySelector(".autocomplete-suggestion"):k.sc.childNodes[k.sc.childNodes.length-1],c.className+=" selected",k.value=c.getAttribute("data-val")),k.updateSC(0,c),!1}if(27===b)k.value=k.last_val,k.sc.style.display="none";else if(13===b||9===b){var d=k.sc.querySelector(".autocomplete-suggestion.selected");d&&"none"!==k.sc.style.display&&(g.onSelect(a,d.getAttribute("data-val"),d),setTimeout(function(){k.sc.style.display="none"},20))}},c(k,"keydown",k.keydownHandler),k.keyupHandler=function(a){var b=window.event?a.keyCode:a.which;if(!b||(35>b||b>40)&&13!==b&&27!==b){var c=k.value;if(c.length>=g.minChars){if(c!==k.last_val){if(k.last_val=c,clearTimeout(k.timer),g.cache){if(c in k.cache)return void l(c,k.cache[c]);for(var d=1;d<c.length-g.minChars;d++){var e=c.slice(0,c.length-d);if(e in k.cache&&!k.cache[e].length)return void l(c,[])}}k.timer=setTimeout(function(){g.source(c,function(a){l(c,a)})},g.delay)}}else k.last_val=c,k.sc.style.display="none"}},c(k,"keyup",k.keyupHandler),k.focusHandler=function(a){k.last_val="\n",k.keyupHandler(a)},g.minChars||c(k,"focus",k.focusHandler)}this.destroy=function(){for(var a=0;a<i.length;a++){var b=i[a];d(window,"resize",b.updateSC),d(b,"blur",b.blurHandler),d(b,"focus",b.focusHandler),d(b,"keydown",b.keydownHandler),d(b,"keyup",b.keyupHandler);for(var a=0;a<f.length;a++){var c=f[a];d(c.context,c.event,c.listener)}b.autocompleteAttr?b.setAttribute("autocomplete",b.autocompleteAttr):b.removeAttribute("autocomplete"),b.sc.parentNode.removeChild(b.sc),b=null}}}}return a}();!function(){"function"==typeof define&&define.amd?define("autoComplete",function(){return autoComplete}):"undefined"!=typeof module&&module.exports?module.exports=autoComplete:window.autoComplete=autoComplete}();
//# sourceMappingURL=auto-complete.min.js.map