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