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