mirror of
https://github.com/McShelby/hugo-theme-relearn.git
synced 2025-02-28 14:30:13 +00:00
2 lines
No EOL
5.8 KiB
JavaScript
2 lines
No EOL
5.8 KiB
JavaScript
var autoComplete=function(){function e(e){if(!document.querySelector)return;function u(e,t){return e.classList?e.classList.contains(t):new RegExp("\\b"+t+"\\b").test(e.className)}function s(e,t,n){e.attachEvent?e.attachEvent("on"+t,n):e.addEventListener(t,n)}function o(e,t,n){e.detachEvent?e.detachEvent("on"+t,n):e.removeEventListener(t,n)}function l(e,t,n,o){s(o||document,t,function(t){for(var o,s=t.target||t.srcElement;s&&!(o=u(s,e));)s=s.parentElement;o&&n.call(s,t)})}var t,i,a,r,c,d,n={selector:0,source:0,minChars:3,delay:150,offsetLeft:0,offsetTop:1,cache:1,menuClass:"",selectorToInsert:0,renderItem:function(e,t){t=t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");var n=new RegExp("("+t.split(" ").join("|")+")","gi");return'<div class="autocomplete-suggestion" data-val="'+e+'">'+e.replace(n,"<b>$1</b>")+"</div>"},onSelect:function(){}};for(d in e)e.hasOwnProperty(d)&&(n[d]=e[d]);for(i=typeof n.selector=="object"?[n.selector]:document.querySelectorAll(n.selector),a=0;a<i.length;a++)t=i[a],t.sc=document.createElement("div"),t.sc.className="autocomplete-suggestions "+n.menuClass,t.autocompleteAttr=t.getAttribute("autocomplete"),t.setAttribute("autocomplete","off"),t.cache={},t.last_val="",typeof n.selectorToInsert=="string"&&document.querySelector(n.selectorToInsert)instanceof HTMLElement&&(r=document.querySelector(n.selectorToInsert)),t.updateSC=function(e,n){if(d=t.getBoundingClientRect(),o=0,i=0,a=0,c=0,r!=!1?(o=r.getBoundingClientRect().left,i=r.getBoundingClientRect().top):(a=window.pageXOffset||document.documentElement.scrollLeft,c=window.pageYOffset||document.documentElement.scrollTop),!e&&(t.sc.style.display="block",t.sc.maxHeight||(t.sc.maxHeight=parseInt((window.getComputedStyle?getComputedStyle(t.sc,null):t.sc.currentStyle).maxHeight)),t.sc.suggestionHeight||(t.sc.suggestionHeight=t.sc.querySelector(".autocomplete-suggestion").offsetHeight),t.sc.suggestionHeight))if(n){var o,i,a,c,d,l=t.sc.scrollTop,s=n.getBoundingClientRect().top-t.sc.getBoundingClientRect().top;s+t.sc.suggestionHeight-t.sc.maxHeight>0?t.sc.scrollTop=s+t.sc.suggestionHeight+l-t.sc.maxHeight:s<0&&(t.sc.scrollTop=s+l)}else t.sc.scrollTop=0},s(window,"resize",t.updateSC),typeof n.selectorToInsert=="string"&&document.querySelector(n.selectorToInsert)instanceof HTMLElement?document.querySelector(n.selectorToInsert).appendChild(t.sc):document.body.appendChild(t.sc),l("autocomplete-suggestion","mouseleave",function(){var n=t.sc.querySelector(".autocomplete-suggestion.selected");n&&setTimeout(function(){n.className=n.className.replace("selected","")},20)},t.sc),l("autocomplete-suggestion","mouseover",function(){var n=t.sc.querySelector(".autocomplete-suggestion.selected");n&&(n.className=n.className.replace("selected","")),this.className+=" selected"},t.sc),l("autocomplete-suggestion","mousedown",function(e){if(u(this,"autocomplete-suggestion")){var s=this.getAttribute("data-val");t.value=s,n.onSelect(e,s,this),t.sc.style.display="none"}},t.sc),t.blurHandler=function(){try{var e=document.querySelector(".autocomplete-suggestions:hover")}catch{e=0}e?t!==document.activeElement&&setTimeout(function(){t.focus()},20):(t.last_val=t.value,t.sc.style.display="none",setTimeout(function(){t.sc.style.display="none"},350))},s(t,"blur",t.blurHandler),c=function(e){var s,i,o=t.value;if(t.cache[o]=e,e.length&&o.length>=n.minChars){for(i="",s=0;s<e.length;s++)i+=n.renderItem(e[s],o);t.sc.innerHTML=i,t.updateSC(0)}else t.sc.style.display="none"},t.keydownHandler=function(e){var s,o,i=window.event?e.keyCode:e.which;if((i==40||i==38)&&t.sc.innerHTML)return e.preventDefault(),s=t.sc.querySelector(".autocomplete-suggestion.selected"),s?(o=i==40?s.nextSibling:s.previousSibling,o?(s.className=s.className.replace("selected",""),o.className+=" selected",o.getAttribute("data-val")&&(t.value=o.getAttribute("data-val"))):(s.className=s.className.replace("selected",""),t.value=t.last_val,o=0)):(o=i==40?t.sc.querySelector(".autocomplete-suggestion"):t.sc.childNodes[t.sc.childNodes.length-1],o.className+=" selected",o.getAttribute("data-val")&&(t.value=o.getAttribute("data-val"))),t.updateSC(0,o),!1;i==27?t.sc.style.display!="none"?(e.preventDefault(),e.stopImmediatePropagation(),t.sc.style.display="none",s=t.sc.querySelector(".autocomplete-suggestion.selected"),s&&t.focus()):t.value="":(i==13||i==9)&&(s=t.sc.querySelector(".autocomplete-suggestion.selected"),s&&t.sc.style.display!="none"&&(n.onSelect(e,s.getAttribute("data-val"),s),setTimeout(function(){t.sc.style.display="none"},20)))},s(t,"keydown",t.keydownHandler),t.keyupHandler=function(e){var s,i,a,o=window.event?e.keyCode:e.which;if(!o||(o<35||o>40)&&o!=13&&o!=27)if(s=t.value,s.length>=n.minChars){if(s!=t.last_val){if(t.last_val=s,clearTimeout(t.timer),n.cache){if(s in t.cache){c(t.cache[s]);return}for(i=1;i<s.length-n.minChars;i++)if(a=s.slice(0,s.length-i),a in t.cache&&!t.cache[a].length){c([]);return}}t.timer=setTimeout(function(){n.source(s,c)},n.delay)}}else t.last_val=s,t.sc.style.display="none"},s(t,"keyup",t.keyupHandler),t.focusHandler=function(e){t.last_val=`
|
|
`,t.keyupHandler(e)},s(t,"focus",t.focusHandler);this.destroy=function(){for(var e,t=0;t<i.length;t++){e=i[t],o(window,"resize",e.updateSC),o(e,"blur",e.blurHandler),o(e,"focus",e.focusHandler),o(e,"keydown",e.keydownHandler),o(e,"keyup",e.keyupHandler),e.autocompleteAttr?e.setAttribute("autocomplete",e.autocompleteAttr):e.removeAttribute("autocomplete");try{n.selectorToInsert&&document.querySelector(n.selectorToInsert).contains(e.sc)?document.querySelector(n.selectorToInsert).removeChild(e.sc):document.body.removeChild(e.sc)}catch(e){throw console.log("Destroying error: can't find target selector",e),e}e=null}}}return e}();(function(){typeof define=="function"&&define.amd?define("autoComplete",function(){return autoComplete}):typeof module!="undefined"&&module.exports?module.exports=autoComplete:window.autoComplete=autoComplete})() |