Files
ave-cms/adminx/assets/js/command-palette.js
2026-07-30 11:56:32 +03:00

2 lines
3.5 KiB
JavaScript

(()=>{(function(C,l){"use strict";var i=l.querySelector("[data-command-palette]");if(!i)return;var c=i.querySelector("[data-command-palette-input]"),u=i.querySelector("[data-command-palette-results]"),L=i.getAttribute("data-base")||"",v=[],m=[],a=0,s=null,d=0;try{v=JSON.parse(i.querySelector("[data-command-palette-items]").textContent||"[]")}catch(t){v=[]}function S(t){return String(t||"").toLocaleLowerCase()}function E(t){return t=S(t),v.filter(function(e){return!t||S(e.title+" "+e.subtitle).indexOf(t)!==-1}).slice(0,t?10:18).map(function(e){return{group:"\u0420\u0430\u0437\u0434\u0435\u043B\u044B",title:e.title,subtitle:e.subtitle,url:e.url,icon:e.icon}})}function h(){return E(c.value).concat(m)}function T(t){u.innerHTML="";var e=l.createElement("div");e.className="command-palette-empty",e.innerHTML='<i class="ti ti-search-off"></i><span></span>',e.querySelector("span").textContent=t,u.appendChild(e)}function p(){var t=h();if(!t.length){T(c.value.trim().length<2?"\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u0432\u0432\u043E\u0434\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435":"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E");return}a=Math.max(0,Math.min(a,t.length-1)),u.innerHTML="";var e="";t.forEach(function(r,b){if(r.group!==e){var g=l.createElement("div");g.className="command-palette-group",g.textContent=r.group,u.appendChild(g),e=r.group}var n=l.createElement("button");n.className="command-palette-item"+(b===a?" is-active":""),n.type="button",n.setAttribute("role","option"),n.setAttribute("aria-selected",b===a?"true":"false"),n.dataset.index=b,n.innerHTML='<span class="icon-tile" style="--tile-bg:var(--blue-50);--tile-fg:var(--blue-700)"><i class="ti"></i></span><span class="command-palette-copy"><b></b><small></small></span><i class="ti ti-arrow-right"></i>';var f=String(r.icon||"ti-arrow-right").trim();/(^|\s)ti(\s|$)/.test(f)||(f="ti "+f),n.querySelector(".icon-tile .ti").className=f,n.querySelector("b").textContent=r.title||"",n.querySelector("small").textContent=r.subtitle||"",u.appendChild(n)});var o=u.querySelector(".command-palette-item.is-active");o&&o.scrollIntoView({block:"nearest"})}function q(){var t=c.value.trim();m=[],a=0,p(),clearTimeout(s),s=null;var e=++d;t.length<2||(s=setTimeout(function(){fetch(L+"/search?q="+encodeURIComponent(t),{credentials:"same-origin",headers:{Accept:"application/json"}}).then(function(o){return o.json()}).then(function(o){e===d&&(m=o.data&&o.data.items?o.data.items.map(function(r){return r.url=L+r.url,r}):[],p())}).catch(function(){})},180))}function k(){clearTimeout(s),s=null,d++,i.hidden=!1,l.body.classList.add("command-palette-open"),c.value="",m=[],a=0,p(),C.setTimeout(function(){c.focus()},0)}function y(){clearTimeout(s),s=null,d++,i.hidden=!0,l.body.classList.remove("command-palette-open")}function w(t){var e=h()[t];e&&e.url&&C.location.assign(e.url)}l.addEventListener("click",function(t){if(t.target.closest("[data-command-palette-open]")){k();return}if(t.target.closest("[data-command-palette-close]")){y();return}var e=t.target.closest(".command-palette-item");e&&w(parseInt(e.dataset.index,10)||0)}),l.addEventListener("keydown",function(t){if((t.ctrlKey||t.metaKey)&&t.key.toLowerCase()==="k"){t.preventDefault(),i.hidden?k():y();return}i.hidden||(t.key==="Escape"&&(t.preventDefault(),y()),t.key==="ArrowDown"&&(t.preventDefault(),a=Math.min(h().length-1,a+1),p()),t.key==="ArrowUp"&&(t.preventDefault(),a=Math.max(0,a-1),p()),t.key==="Enter"&&(t.preventDefault(),w(a)))}),c.addEventListener("input",q)})(window,document);})();