prestation/Bootstrap_save/js/fstdropdown.min.js
2025-12-01 18:54:33 +00:00

2 lines
5.0 KiB
JavaScript

function setFstDropdown(){var e=document.querySelectorAll(".fstdropdown-select:not(.fstcreated)");for(var t in e)e.hasOwnProperty(t)&&s(e[t]);function s(e){var t=e.dataset.searchdisable,s=e.dataset.placeholder,a=e.dataset.opened,r=d("div","fstdiv",e.parentNode,null),i=d("div","fstdropdown"+(null!=a&&"true"==a?" open":""),r,null==a||"true"!=a?{click:l,blur:l}:null);if(i.select=e,i.setAttribute("tabindex","0"),null!=a&&"true"==a||d("div","fstselected",i,null),null==t||"true"!=t){var u=d("div","fstsearch",i,null),p={keyup:o,paste:o};null!=a&&"true"==a||(p.blur=l),d("input","fstsearchinput",u,p).placeholder=null!=s?s:""}if(e.multiple){var f=d("button","fstAll",i,{click:c});f.textContent="Select All",f.type="button",f.selected=!1}d("div","fstlist",i,null),e.fstdropdown={dd:i,rebind:function(){n(e)}},n(e),e.classList.add("fstcreated")}function l(e,t,s){var l=e.target.classList.contains("fstdropdown")?e.target.select:e.target.closest(".fstdropdown").select;t=null==t?"blur"!=e.type:t;var a=l.fstdropdown.dd;if(!function(e,t){return null!=e.relatedTarget&&("INPUT"==e.relatedTarget.tagName||"BUTTON"==e.relatedTarget.tagName&&null==t)||"INPUT"==e.target.tagName&&"blur"!=e.type||"INPUT"==e.target.tagName&&null!=e.relatedTarget&&"fstdropdown open"==e.relatedTarget.className||e.target.classList.contains("fstselected")&&"blur"==e.type&&document.activeElement.classList.contains("fstsearchinput")||"blur"==e.type&&("fstlist"==document.activeElement.className||"fstAll"==document.activeElement.className)||"BUTTON"==e.target.tagName&&null==t}(e,s)){if(!t||a.classList.contains("open"))return a.classList.remove("open"),void a.parentNode.classList.remove("open");a.classList.add("open"),a.parentNode.classList.add("open"),null==l.dataset.searchdisable&&"true"!=l.dataset.searchdisable&&a.querySelector(".fstsearchinput").focus()}}function a(e){var t=e.target.closest(".fstdropdown").select,s=t.fstdropdown.dd,a=s.querySelector(".fstAll"),n=null==t.dataset.opened||"true"!=t.dataset.opened;t.value==e.target.dataset.value||t.multiple||(t.value=e.target.dataset.value,null!=s.querySelector(".fstlist>.selected")&&s.querySelector(".fstlist>.selected").classList.remove("selected"),e.target.classList.add("selected"),n&&(s.querySelector(".fstselected").textContent=e.target.textContent),r("change",t)),t.multiple&&function(e,t,s,l,a){e.querySelector("[value='"+t.target.dataset.value+"']").selected=!t.target.classList.contains("selected"),t.target.classList.contains("selected")?t.target.classList.remove("selected"):t.target.classList.add("selected");r("change",e);var n=s.querySelectorAll(".fstlist>.selected").length;l.selected=n>0,a&&(s.querySelector(".fstselected").textContent=1==n?t.target.textContent:n+" options selected");l.textContent=l.selected?"Deselect All":"Select All"}(t,e,s,a,n),n&&l(e,!1)}function n(e){for(var t=e.querySelectorAll("option"),s=e.fstdropdown.dd.querySelector(".fstlist");s.lastChild;)s.removeChild(s.lastChild);for(var l in t)if(t.hasOwnProperty(l)){var n=document.createElement("div");n.textContent=t[l].text,n.dataset.value=t[l].value,t[l].selected&&n.classList.add("selected"),n.addEventListener("click",a),s.appendChild(n)}i(e,null)}function r(e,t){var s;"function"==typeof Event?s=new Event(e,{bubbles:!0}):(s=document.createEvent("Event")).initEvent(e,!0,!0),t.dispatchEvent(s)}function o(e){var t="paste"!=e.type?"":void 0===e.clipboardData?window.clipboardData.getData("Text"):e.clipboardData.getData("text/plain"),s="paste"!=e.type?e.target.value:t,l=e.target.closest(".fstdropdown").querySelectorAll(".fstlist>div");for(var a in l)l.hasOwnProperty(a)&&(-1!=l[a].textContent.trim().toLowerCase().indexOf(s.trim().toLowerCase())?l[a].classList.remove("hideFst"):l[a].classList.add("hideFst"))}function d(e,t,s,l){var a=document.createElement(e);if(null!=t)for(var n in t.split(" "))if (!isNaN(n))a.classList.add(t.split(" ")[n]);if(null!=l)for(var r in l)l.hasOwnProperty(r)&&a.addEventListener(r,l[r],!0);return s.appendChild(a),a}function c(e){var t=e.target.closest(".fstdropdown").select,s=t.fstdropdown.dd,l=!e.target.selected;e.target.selected=l;var a=l?s.querySelectorAll(".fstlist>div:not(.hideFst)"):s.querySelectorAll(".selected");for(var n in a)a.hasOwnProperty(n)&&(t.querySelector("[value='"+a[n].dataset.value+"']").selected=l,l?a[n].classList.add("selected"):a[n].classList.remove("selected"));r("change",t),e.target.textContent=l?"Deselect All":"Select All",i(t,e)}function i(e,t){if(null==e.dataset.opened||"true"!=e.dataset.opened){var s="",a=e.options[e.selectedIndex];if(e.multiple){var n=0;for(var r in e.options)e.options.hasOwnProperty(r)&&1==e.options[r].selected&&n++;s=1==n?a.text:n+" options selected"}e.fstdropdown.dd.querySelector(".fstselected").textContent=e.multiple?s:null!=a?a.text:"",null!=t&&l(t,!1,!0)}}}!function(e){e.matches=e.matches||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector,e.closest=e.closest||function(e){return this&&(this.parentElement||this.matches(e))?this.matches(e)?this:this.parentElement.closest(e):null}}(Element.prototype),document.addEventListener("DOMContentLoaded",setFstDropdown);