From ec8e8700c8bde5606fe2f6b1c8a608b525a8f857 Mon Sep 17 00:00:00 2001 From: Nikolaj Kappler Date: Tue, 14 Jun 2022 17:27:38 +0200 Subject: [PATCH] 1.4.4 --- index.d.ts | 2 +- index.js | 2 +- index.min.js | 2 +- package-lock.json | 2 +- package.json | 2 +- src/ctxmenu.ts | 2 +- standalone/ctxmenu.js | 2 +- standalone/ctxmenu.min.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/index.d.ts b/index.d.ts index b4013e0..2d479cd 100644 --- a/index.d.ts +++ b/index.d.ts @@ -101,7 +101,7 @@ interface CTXMenuSingleton { hide(): void; } -/*! ctxMenu v1.4.3 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ +/*! ctxMenu v1.4.4 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ declare const ctxmenu: CTXMenuSingleton; diff --git a/index.js b/index.js index 2f569bf..56eefb4 100644 --- a/index.js +++ b/index.js @@ -113,7 +113,7 @@ function generateBaseItemContent(item, li) { var styles = 'html{min-height:100%}.ctxmenu{position:fixed;max-height:100vh;border:1px solid #999;padding:2px 0;box-shadow:#aaa 3px 3px 3px;background:#fff;margin:0;z-index:9999;overflow-y:auto;font:15px Verdana, sans-serif}.ctxmenu li{margin:1px 0;display:block;position:relative;user-select:none}.ctxmenu li.heading{font-weight:bold;margin-left:-5px}.ctxmenu li span{display:block;padding:2px 20px;cursor:default}.ctxmenu li a{color:inherit;text-decoration:none}.ctxmenu li.icon{padding-left:15px}.ctxmenu img.icon{position:absolute;width:18px;left:10px;top:2px}.ctxmenu li.disabled{color:#ccc}.ctxmenu li.divider{border-bottom:1px solid #aaa;margin:5px 0}.ctxmenu li.interactive:hover{background:rgba(0, 0, 0, .1)}.ctxmenu li.submenu::after{content:"";position:absolute;display:block;top:0;bottom:0;right:.4em;margin:auto .1rem auto auto;border-right:1px solid #000;border-top:1px solid #000;transform:rotate(45deg);width:.3rem;height:.3rem}.ctxmenu li.submenu.disabled::after{border-color:#ccc}'; -/*! ctxMenu v1.4.3 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ var ContextMenu = function() { +/*! ctxMenu v1.4.4 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ var ContextMenu = function() { function ContextMenu() { var _this = this; this.cache = {}; diff --git a/index.min.js b/index.min.js index bb4fcb8..c42fdf2 100644 --- a/index.min.js +++ b/index.min.js @@ -1,2 +1,2 @@ "use strict";function e(){for(var e=0,t=0,n=arguments.length;t"+t(e.text)+"",o=t(e.element);o?n.append(o):n.innerHTML=i||r,n.title=t(e.tooltip)||"",e.style&&n.setAttribute("style",t(e.style));e.icon&&(n.classList.add("icon"),n.innerHTML+='')}(e,a),!n(e))return a.classList.add("heading"),a;if(d(e))return a.classList.add("disabled"),o(e)&&a.classList.add("submenu"),a;if(a.classList.add("interactive"),r(e)){var s=document.createElement("a");return s.append.apply(s,Array.from(a.childNodes)),s.href=t(e.href),e.hasOwnProperty("download")&&(s.download=t(e.download)),e.hasOwnProperty("target")&&(s.target=t(e.target)),a.append(s),a}return i(e)?(a.addEventListener("click",e.action),a):(a.classList.add("submenu"),a)}Object.defineProperty(exports,"__esModule",{value:!0});var c=function(){function i(){var e=this;this.cache={},this.hdir="r",this.vdir="d",this.preventCloseOnScroll=!1,window.addEventListener("click",(function(t){var n=t.target instanceof Element&&t.target.parentElement;n&&"interactive"===n.className||e.hide()})),window.addEventListener("resize",(function(){return e.hide()}));var t=0;window.addEventListener("wheel",(function(){clearTimeout(t),t=setTimeout((function(){e.preventCloseOnScroll?e.preventCloseOnScroll=!1:e.hide()}))}),{passive:!0}),window.addEventListener("keydown",(function(t){"Escape"===t.key&&e.hide()})),i.addStylesToDom()}return i.getInstance=function(){i.instance||(i.instance=new i);var e=i.instance;return{attach:e.attach.bind(e),delete:e.delete.bind(e),hide:e.hide.bind(e),show:e.show.bind(e),update:e.update.bind(e)}},i.prototype.attach=function(t,n,i){var r=this;void 0===i&&(i=function(e){return e});var o=document.querySelector(t);if(void 0===this.cache[t])if(o){var a=function(t){var o=i(e(n),t);r.show(o,t)};this.cache[t]={ctxMenu:n,handler:a,beforeRender:i},o.addEventListener("contextmenu",a)}else console.error("target element "+t+" not found");else console.error("target element "+t+" already has a context menu assigned. Use ContextMenu.update() intstead.")},i.prototype.update=function(e,t,n){var i=this.cache[e],r=document.querySelector(e);i&&(null==r||r.removeEventListener("contextmenu",i.handler)),delete this.cache[e],this.attach(e,t||(null==i?void 0:i.ctxMenu)||[],n||(null==i?void 0:i.beforeRender))},i.prototype.delete=function(e){var t=this.cache[e];if(t){var n=document.querySelector(e);n?(n.removeEventListener("contextmenu",t.handler),delete this.cache[e]):console.error("target element "+e+" does not exist (anymore)")}else console.error("no context menu for target element "+e+" found")},i.prototype.show=function(t,n){var i=this;n instanceof MouseEvent&&n.stopImmediatePropagation(),this.hide(),this.menu=this.generateDOM(e(t),n),document.body.appendChild(this.menu),this.menu.addEventListener("wheel",(function(){return i.preventCloseOnScroll=!0}),{passive:!0}),n instanceof MouseEvent&&n.preventDefault()},i.prototype.hide=function(e){var t;void 0===e&&(e=this.menu),this.hdir="r",this.vdir="d",e&&(e===this.menu&&delete this.menu,null===(t=e.parentElement)||void 0===t||t.removeChild(e))},i.prototype.generateDOM=function(e,i){var r=this,c=document.createElement("ul");0===e.length&&(c.style.display="none"),e.forEach((function(e){var i=s(e);a(i,(function(){var e,t=null===(e=i.parentElement)||void 0===e?void 0:e.querySelector("ul");t&&t.parentElement!==i&&r.hide(t)})),n(e)&&!d(e)&&(o(e)?a(i,(function(n){i.querySelector("ul")||r.openSubMenu(n,t(e.subMenu),i)})):i.addEventListener("click",(function(){return r.hide()}))),c.appendChild(i)})),c.className="ctxmenu";var l=function(e){var t=e.cloneNode(!0);t.style.visibility="hidden",document.body.appendChild(t);var n=t.getBoundingClientRect();return document.body.removeChild(t),n}(c),u={x:0,y:0};if(i instanceof Element){var h=i.getBoundingClientRect(),p=h.left,m=h.width,f=h.top;u={x:"r"===this.hdir?p+m:p-l.width,y:f},i.className.includes("submenu")&&(u.y+="d"===this.vdir?4:-12);var v=this.getPosition(l,u);u.x!==v.x&&(this.hdir="r"===this.hdir?"l":"r",u.x="r"===this.hdir?p+m:p-l.width),u.y!==v.y&&(this.vdir="u"===this.vdir?"d":"u",u.y=v.y),u=this.getPosition(l,u,!1)}else u=this.getPosition(l,{x:i.clientX,y:i.clientY});return c.style.left=u.x+"px",c.style.top=u.y+"px",c.addEventListener("contextmenu",(function(e){e.stopPropagation(),e.preventDefault()})),c.addEventListener("click",(function(e){var t=e.target instanceof Element&&e.target.parentElement;t&&"interactive"!==t.className&&e.stopPropagation()})),c},i.prototype.openSubMenu=function(e,t,n){var i,r=null===(i=n.parentElement)||void 0===i?void 0:i.querySelector("li > ul");r&&r.parentElement!==n&&this.hide(r),n.appendChild(this.generateDOM(t,n))},i.prototype.getPosition=function(e,t,n){void 0===n&&(n=!0);var i=document.documentElement,r=i.clientWidth,o=i.clientHeight,a=""!==document.body.style.transform,d=a?window.scrollX:0,s=a?window.scrollY:0,c=a?r+window.scrollX:r,l=a?o+window.scrollY:o;return a&&n&&(t.x+=window.scrollX,t.y+=window.scrollY),{x:"r"===this.hdir?t.x+e.width>c?c-e.width:t.x:t.xl?l-e.height:t.y:t.y"+t(e.text)+"",o=t(e.element);o?n.append(o):n.innerHTML=i||r,n.title=t(e.tooltip)||"",e.style&&n.setAttribute("style",t(e.style));e.icon&&(n.classList.add("icon"),n.innerHTML+='')}(e,a),!n(e))return a.classList.add("heading"),a;if(d(e))return a.classList.add("disabled"),o(e)&&a.classList.add("submenu"),a;if(a.classList.add("interactive"),r(e)){var s=document.createElement("a");return s.append.apply(s,Array.from(a.childNodes)),s.href=t(e.href),e.hasOwnProperty("download")&&(s.download=t(e.download)),e.hasOwnProperty("target")&&(s.target=t(e.target)),a.append(s),a}return i(e)?(a.addEventListener("click",e.action),a):(a.classList.add("submenu"),a)}var c=function(){function i(){var e=this;this.cache={},this.hdir="r",this.vdir="d",this.preventCloseOnScroll=!1,window.addEventListener("click",(function(t){var n=t.target instanceof Element&&t.target.parentElement;n&&"interactive"===n.className||e.hide()})),window.addEventListener("resize",(function(){return e.hide()}));var t=0;window.addEventListener("wheel",(function(){clearTimeout(t),t=setTimeout((function(){e.preventCloseOnScroll?e.preventCloseOnScroll=!1:e.hide()}))}),{passive:!0}),window.addEventListener("keydown",(function(t){"Escape"===t.key&&e.hide()})),i.addStylesToDom()}return i.getInstance=function(){i.instance||(i.instance=new i);var e=i.instance;return{attach:e.attach.bind(e),delete:e.delete.bind(e),hide:e.hide.bind(e),show:e.show.bind(e),update:e.update.bind(e)}},i.prototype.attach=function(t,n,i){var r=this;void 0===i&&(i=function(e){return e});var o=document.querySelector(t);if(void 0===this.cache[t])if(o){var a=function(t){var o=i(e(n),t);r.show(o,t)};this.cache[t]={ctxMenu:n,handler:a,beforeRender:i},o.addEventListener("contextmenu",a)}else console.error("target element "+t+" not found");else console.error("target element "+t+" already has a context menu assigned. Use ContextMenu.update() intstead.")},i.prototype.update=function(e,t,n){var i=this.cache[e],r=document.querySelector(e);i&&(null==r||r.removeEventListener("contextmenu",i.handler)),delete this.cache[e],this.attach(e,t||(null==i?void 0:i.ctxMenu)||[],n||(null==i?void 0:i.beforeRender))},i.prototype.delete=function(e){var t=this.cache[e];if(t){var n=document.querySelector(e);n?(n.removeEventListener("contextmenu",t.handler),delete this.cache[e]):console.error("target element "+e+" does not exist (anymore)")}else console.error("no context menu for target element "+e+" found")},i.prototype.show=function(t,n){var i=this;n instanceof MouseEvent&&n.stopImmediatePropagation(),this.hide(),this.menu=this.generateDOM(e(t),n),document.body.appendChild(this.menu),this.menu.addEventListener("wheel",(function(){return i.preventCloseOnScroll=!0}),{passive:!0}),n instanceof MouseEvent&&n.preventDefault()},i.prototype.hide=function(e){var t;void 0===e&&(e=this.menu),this.hdir="r",this.vdir="d",e&&(e===this.menu&&delete this.menu,null===(t=e.parentElement)||void 0===t||t.removeChild(e))},i.prototype.generateDOM=function(e,i){var r=this,c=document.createElement("ul");0===e.length&&(c.style.display="none"),e.forEach((function(e){var i=s(e);a(i,(function(){var e,t=null===(e=i.parentElement)||void 0===e?void 0:e.querySelector("ul");t&&t.parentElement!==i&&r.hide(t)})),n(e)&&!d(e)&&(o(e)?a(i,(function(n){i.querySelector("ul")||r.openSubMenu(n,t(e.subMenu),i)})):i.addEventListener("click",(function(){return r.hide()}))),c.appendChild(i)})),c.className="ctxmenu";var l=function(e){var t=e.cloneNode(!0);t.style.visibility="hidden",document.body.appendChild(t);var n=t.getBoundingClientRect();return document.body.removeChild(t),n}(c),u={x:0,y:0};if(i instanceof Element){var h=i.getBoundingClientRect(),m=h.left,p=h.width,f=h.top;u={x:"r"===this.hdir?m+p:m-l.width,y:f},i.className.includes("submenu")&&(u.y+="d"===this.vdir?4:-12);var v=this.getPosition(l,u);u.x!==v.x&&(this.hdir="r"===this.hdir?"l":"r",u.x="r"===this.hdir?m+p:m-l.width),u.y!==v.y&&(this.vdir="u"===this.vdir?"d":"u",u.y=v.y),u=this.getPosition(l,u,!1)}else u=this.getPosition(l,{x:i.clientX,y:i.clientY});return c.style.left=u.x+"px",c.style.top=u.y+"px",c.addEventListener("contextmenu",(function(e){e.stopPropagation(),e.preventDefault()})),c.addEventListener("click",(function(e){var t=e.target instanceof Element&&e.target.parentElement;t&&"interactive"!==t.className&&e.stopPropagation()})),c},i.prototype.openSubMenu=function(e,t,n){var i,r=null===(i=n.parentElement)||void 0===i?void 0:i.querySelector("li > ul");r&&r.parentElement!==n&&this.hide(r),n.appendChild(this.generateDOM(t,n))},i.prototype.getPosition=function(e,t,n){void 0===n&&(n=!0);var i=document.documentElement,r=i.clientWidth,o=i.clientHeight,a=""!==document.body.style.transform,d=a?window.scrollX:0,s=a?window.scrollY:0,c=a?r+window.scrollX:r,l=a?o+window.scrollY:o;return a&&n&&(t.x+=window.scrollX,t.y+=window.scrollY),{x:"r"===this.hdir?t.x+e.width>c?c-e.width:t.x:t.xl?l-e.height:t.y:t.y