easycontext
Version:
Simple context menu for the web.
3 lines (2 loc) • 1.17 kB
JavaScript
var e=function(e,t){return t.nodeType===Node.ELEMENT_NODE&&e.push(t),e};const t=(e,{className:t}={})=>{const n=document.createElement("ul");return n.className=t,e.appendChild(n),{show(e,{x:t,y:s}){n.innerHTML="",n.style.top=s+"px",n.style.left=t+"px",e.forEach(({text:e="",className:t="",onClick:s=null})=>{const a=document.createElement("li");a.innerHTML=e,a.className=t,s&&(a.classList.add("menu-item-clickable"),a.addEventListener("click",s),a.addEventListener("click",()=>this.hide())),n.appendChild(a)}),n.classList.add("menu-visible")},hide(){n.classList.remove("menu-visible")}}},n=(n,s,{parentElement:a=document.body,root:c=document,className:r="context-menu"}={})=>{const l="string"==typeof(o=n)?Array.from(document.querySelectorAll(o)):Array.isArray(o)?o:"length"in o?Array.from(o).reduce(e,[]):[o],i=t(a,{className:r});var o;l.forEach(e=>{e.addEventListener("contextmenu",e=>{const t="function"==typeof s?s(e.target):s;t&&(i.show(t,{x:e.clientX,y:e.clientY}),e.preventDefault())})}),c.addEventListener("click",e=>{e.target.parentElement&&e.target.parentElement.classList.contains(r)||i.hide()})};export{n as contextmenu};
//# sourceMappingURL=index.modern.js.map