From 0e67990a036adffb87b3519844ec0b576628ccfd Mon Sep 17 00:00:00 2001 From: Nikolaj Kappler Date: Fri, 3 Jan 2025 20:02:06 +0100 Subject: [PATCH] 2.0.0 --- index.d.ts | 2 +- index.js | 2 +- index.min.js | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- src/ctxmenu.ts | 2 +- standalone/ctxmenu.js | 2 +- standalone/ctxmenu.min.js | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/index.d.ts b/index.d.ts index 70242c6..b35196a 100644 --- a/index.d.ts +++ b/index.d.ts @@ -134,7 +134,7 @@ interface CTXMenuSingleton { hide(): void; } -/*! ctxMenu v1.7.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ +/*! ctxMenu v2.0.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ declare const ctxmenu: CTXMenuSingleton; diff --git a/index.js b/index.js index b680be7..3579416 100644 --- a/index.js +++ b/index.js @@ -254,7 +254,7 @@ function getScale() { var styles = 'html{min-height:100%}.ctxmenu{position:fixed;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;box-sizing:border-box}.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:solid #000;border-width:1px 1px 0 0;transform:rotate(45deg);width:.3rem;height:.3rem}.ctxmenu li.submenu.disabled::after{border-color:#ccc}'; -/*! ctxMenu v1.7.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ var ContextMenu = function() { +/*! ctxMenu v2.0.0 | (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 58f5e08..466d451 100644 --- a/index.min.js +++ b/index.min.js @@ -1,2 +1,2 @@ "use strict";function n(n){return"function"==typeof n?n():n}function t(n){return!r(n)&&(e(n)||i(n)||u(n))}function e(n){return n.hasOwnProperty("action")}function i(n){return n.hasOwnProperty("href")}function o(n){return n.hasOwnProperty("isDivider")}function u(n){return n.hasOwnProperty("subMenu")}function r(n){return n.hasOwnProperty("html")||n.hasOwnProperty("element")}function c(n){return!t(n)&&!o(n)&&!r(n)}function a(e){return t(e)&&n(e.disabled)||u(e)&&0===n(e.subMenu).length}function d(n,t){var e;n.addEventListener("mouseenter",(function(n){e=setTimeout((function(){return t(n)}),150)})),n.addEventListener("mouseleave",(function(){return clearTimeout(e)}))}function s(n){var e=document.createElement("li");return function(n,t,e){n.filter((function(n){return(0,n[0])(t)})).every((function(n){n[0];var t=n[1],i=n[2];return!void e.classList.add(t)&&i}))}([[o,"divider",!1],[function(n){return n.icon},"icon",!0],[c,"heading",!1],[u,"submenu",!0],[a,"disabled",!1],[t,"interactive",!0]],n,e),o(n)||[l,f,v,m,h].forEach((function(t){return t.call(null,n,e)})),e}function l(t,e){var i,o=t.html,u=t.text,r=n(t.element);r?e.append(r):e.innerHTML=null!==(i=n(o))&&void 0!==i?i:"".concat(n(u),"")}function f(t,e){var i=t.tooltip,o=t.style,u=t.attributes;e.title=n(i)||"",o&&e.setAttribute("style",n(o)),u&&Object.entries(n(u)).forEach((function(n){var t=n[0],i=n[1];e.setAttribute(t,i)}))}function v(t,e){var i=t.icon;i&&(e.innerHTML+=''))}function m(i,o){for(var r=0,c=Object.entries(n(i.events)||{});rl?l-n.width:t.x:t.xf?f-n.height:t.y:t.yf?f-n.height:t.y}}function w(n){var t=n.offsetLeft,e=n.offsetTop,i=n.offsetHeight,o=n.offsetWidth;if(n.offsetParent instanceof HTMLElement){var u=w(n.offsetParent);return{x:t+u.x,y:e+u.y,width:o,height:i}}return{x:t,y:e,width:o,height:i}}function y(){var n=document.body,t=n.getBoundingClientRect();return{x:t.width/n.offsetWidth,y:t.height/n.offsetHeight}}var k=function(){function t(){var n=this;this.cache={},this.o=!1,window.addEventListener("click",(function(){n.hide()})),window.addEventListener("resize",(function(){n.hide()}));var e=0;window.addEventListener("wheel",(function(){clearTimeout(e),e=setTimeout((function(){n.o?n.o=!1:n.hide()}))}),{passive:!0}),window.addEventListener("keydown",(function(t){"Escape"===t.key&&n.hide()})),t.u()}return t.i=function(){t.l||(t.l=new t);var n=t.l;return{attach:n.v.bind(n),delete:n.delete.bind(n),hide:n.hide.bind(n),show:n.show.bind(n),update:n.update.bind(n)}},t.prototype.v=function(n,t,e){var i=this;void 0===e&&(e={});var o=document.querySelector(n);if(void 0===this.cache[n])if(o){var u=function(n){i.show(t,n,e)};this.cache[n]={m:t,h:u,p:e},o.addEventListener("contextmenu",u)}else console.error("target element ".concat(n," not found"));else console.error("target element ".concat(n," already has a context menu assigned. Use ContextMenu.update() intstead."))},t.prototype.update=function(n,t,e){void 0===e&&(e={});var i=this.cache[n],o=Object.assign({},null==i?void 0:i.p,e),u=document.querySelector(n);i&&(null==u||u.removeEventListener("contextmenu",i.h)),delete this.cache[n],this.v(n,t||(null==i?void 0:i.m)||[],o)},t.prototype.delete=function(n){var t=this.cache[n];if(!t)return console.error("no context menu for target element ".concat(n," found"));delete this.cache[n];var e=document.querySelector(n);if(!e)return console.error("target element ".concat(n," does not exist (anymore)"));e.removeEventListener("contextmenu",t.h)},t.prototype.show=function(n,t,e){var i,o,u,r=this;void 0===e&&(e={}),t instanceof MouseEvent&&(t.stopImmediatePropagation(),t.preventDefault()),this.hide(),this.onHide=e.onHide,this.onBeforeHide=e.onBeforeHide;var c=null!==(o=null===(i=e.onBeforeShow)||void 0===i?void 0:i.call(e,n.slice(),t instanceof MouseEvent?t:void 0))&&void 0!==o?o:n;this.g=this.k(c,t,e.attributes),document.body.appendChild(this.g),null===(u=e.onShow)||void 0===u||u.call(e,this.g),this.g.addEventListener("wheel",(function(){r.o=!0}),{passive:!0})},t.prototype.hide=function(){this.M(this.g)},t.prototype.M=function(n){var t,e;null===(t=this.onBeforeHide)||void 0===t||t.call(this,n),x="r",p="d",n&&(n.remove(),null===(e=this.onHide)||void 0===e||e.call(this,n),n===this.g&&(delete this.g,this.onBeforeHide=void 0,this.onHide=void 0))},t.prototype.k=function(t,e,i){var o=this;void 0===i&&(i={});var r=function(n){var t=document.createElement("ul");t.className="ctxmenu",t.append.apply(t,n.map(s)),n.length||(t.style.display="none");var e=function(n){n.stopPropagation(),n.preventDefault()};return t.addEventListener("contextmenu",e),t.addEventListener("click",e),t}(t);return b(r,e),t.forEach((function(t,e){var i=r.children[e];d(i,(function(){var n,t=null===(n=i.parentElement)||void 0===n?void 0:n.querySelector("ul");t&&t.parentElement!==i&&o.M(t)})),a(t)||u(t)&&d(i,(function(){i.querySelector("ul")||i.appendChild(o.k(n(t.subMenu),i,n(t.subMenuAttributes)))}))})),Object.entries(i).forEach((function(n){var t=n[0],e=n[1];return r.setAttribute(t,e)})),r},t.u=function(){if("loading"===document.readyState)return document.addEventListener("readystatechange",this.u,{once:!0});var n=document.createElement("style");n.innerHTML='html{min-height:100%}.ctxmenu{position:fixed;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;box-sizing:border-box}.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:solid #000;border-width:1px 1px 0 0;transform:rotate(45deg);width:.3rem;height:.3rem}.ctxmenu li.submenu.disabled::after{border-color:#ccc}',document.head.insertBefore(n,document.head.childNodes[0])},t}().i(); -/*! ctxMenu v1.7.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/exports.ctxmenu=k; +/*! ctxMenu v2.0.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/exports.ctxmenu=k; diff --git a/package-lock.json b/package-lock.json index e0c9190..507e8bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ctxmenu", - "version": "1.7.0", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ctxmenu", - "version": "1.7.0", + "version": "2.0.0", "license": "MIT", "devDependencies": { "@rollup/plugin-typescript": "^11.1.3", diff --git a/package.json b/package.json index 8b5d5d3..270300c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ctxmenu", - "version": "1.7.0", + "version": "2.0.0", "description": "Tiny and Customizable Context Menu Generator", "main": "index.js", "types": "index.d.ts", @@ -55,4 +55,4 @@ "menu", "rightclick" ] -} \ No newline at end of file +} diff --git a/src/ctxmenu.ts b/src/ctxmenu.ts index 23bd92d..1ed6f1d 100644 --- a/src/ctxmenu.ts +++ b/src/ctxmenu.ts @@ -1,4 +1,4 @@ -/*! ctxMenu v1.7.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ +/*! ctxMenu v2.0.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ import { generateMenu, onHoverDebounced } from "./elementFactory"; import type { CTXConfig, CTXMenu, CTXMenuSingleton } from "./interfaces"; diff --git a/standalone/ctxmenu.js b/standalone/ctxmenu.js index 7b079cf..d2df628 100644 --- a/standalone/ctxmenu.js +++ b/standalone/ctxmenu.js @@ -223,7 +223,7 @@ }; } var styles = 'html{min-height:100%}.ctxmenu{position:fixed;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;box-sizing:border-box}.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:solid #000;border-width:1px 1px 0 0;transform:rotate(45deg);width:.3rem;height:.3rem}.ctxmenu li.submenu.disabled::after{border-color:#ccc}'; - /*! ctxMenu v1.7.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ var ContextMenu = function() { + /*! ctxMenu v2.0.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/ var ContextMenu = function() { function ContextMenu() { var _this = this; this.cache = {}; diff --git a/standalone/ctxmenu.min.js b/standalone/ctxmenu.min.js index f927aa1..722c178 100644 --- a/standalone/ctxmenu.min.js +++ b/standalone/ctxmenu.min.js @@ -1,2 +1,2 @@ !function(){"use strict";function n(n){return"function"==typeof n?n():n}function t(n){return!r(n)&&(e(n)||i(n)||u(n))}function e(n){return n.hasOwnProperty("action")}function i(n){return n.hasOwnProperty("href")}function o(n){return n.hasOwnProperty("isDivider")}function u(n){return n.hasOwnProperty("subMenu")}function r(n){return n.hasOwnProperty("html")||n.hasOwnProperty("element")}function c(n){return!t(n)&&!o(n)&&!r(n)}function a(e){return t(e)&&n(e.disabled)||u(e)&&0===n(e.subMenu).length}function d(n,t){var e;n.addEventListener("mouseenter",(function(n){e=setTimeout((function(){return t(n)}),150)})),n.addEventListener("mouseleave",(function(){return clearTimeout(e)}))}function s(n){var e=document.createElement("li");return function(n,t,e){n.filter((function(n){return(0,n[0])(t)})).every((function(n){n[0];var t=n[1],i=n[2];return!void e.classList.add(t)&&i}))}([[o,"divider",!1],[function(n){return n.icon},"icon",!0],[c,"heading",!1],[u,"submenu",!0],[a,"disabled",!1],[t,"interactive",!0]],n,e),o(n)||[l,f,v,m,h].forEach((function(t){return t.call(null,n,e)})),e}function l(t,e){var i,o=t.html,u=t.text,r=n(t.element);r?e.append(r):e.innerHTML=null!==(i=n(o))&&void 0!==i?i:"".concat(n(u),"")}function f(t,e){var i=t.tooltip,o=t.style,u=t.attributes;e.title=n(i)||"",o&&e.setAttribute("style",n(o)),u&&Object.entries(n(u)).forEach((function(n){var t=n[0],i=n[1];e.setAttribute(t,i)}))}function v(t,e){var i=t.icon;i&&(e.innerHTML+=''))}function m(i,o){for(var r=0,c=Object.entries(n(i.events)||{});rl?l-n.width:t.x:t.xf?f-n.height:t.y:t.yf?f-n.height:t.y}}function w(n){var t=n.offsetLeft,e=n.offsetTop,i=n.offsetHeight,o=n.offsetWidth;if(n.offsetParent instanceof HTMLElement){var u=w(n.offsetParent);return{x:t+u.x,y:e+u.y,width:o,height:i}}return{x:t,y:e,width:o,height:i}}function y(){var n=document.body,t=n.getBoundingClientRect();return{x:t.width/n.offsetWidth,y:t.height/n.offsetHeight}}var k=function(){function t(){var n=this;this.cache={},this.i=!1,window.addEventListener("click",(function(){n.hide()})),window.addEventListener("resize",(function(){n.hide()}));var e=0;window.addEventListener("wheel",(function(){clearTimeout(e),e=setTimeout((function(){n.i?n.i=!1:n.hide()}))}),{passive:!0}),window.addEventListener("keydown",(function(t){"Escape"===t.key&&n.hide()})),t.o()}return t.t=function(){t.u||(t.u=new t);var n=t.u;return{attach:n.l.bind(n),delete:n.delete.bind(n),hide:n.hide.bind(n),show:n.show.bind(n),update:n.update.bind(n)}},t.prototype.l=function(n,t,e){var i=this;void 0===e&&(e={});var o=document.querySelector(n);if(void 0===this.cache[n])if(o){var u=function(n){i.show(t,n,e)};this.cache[n]={v:t,m:u,h:e},o.addEventListener("contextmenu",u)}else console.error("target element ".concat(n," not found"));else console.error("target element ".concat(n," already has a context menu assigned. Use ContextMenu.update() intstead."))},t.prototype.update=function(n,t,e){void 0===e&&(e={});var i=this.cache[n],o=Object.assign({},null==i?void 0:i.h,e),u=document.querySelector(n);i&&(null==u||u.removeEventListener("contextmenu",i.m)),delete this.cache[n],this.l(n,t||(null==i?void 0:i.v)||[],o)},t.prototype.delete=function(n){var t=this.cache[n];if(!t)return console.error("no context menu for target element ".concat(n," found"));delete this.cache[n];var e=document.querySelector(n);if(!e)return console.error("target element ".concat(n," does not exist (anymore)"));e.removeEventListener("contextmenu",t.m)},t.prototype.show=function(n,t,e){var i,o,u,r=this;void 0===e&&(e={}),t instanceof MouseEvent&&(t.stopImmediatePropagation(),t.preventDefault()),this.hide(),this.onHide=e.onHide,this.onBeforeHide=e.onBeforeHide;var c=null!==(o=null===(i=e.onBeforeShow)||void 0===i?void 0:i.call(e,n.slice(),t instanceof MouseEvent?t:void 0))&&void 0!==o?o:n;this.p=this.g(c,t,e.attributes),document.body.appendChild(this.p),null===(u=e.onShow)||void 0===u||u.call(e,this.p),this.p.addEventListener("wheel",(function(){r.i=!0}),{passive:!0})},t.prototype.hide=function(){this.k(this.p)},t.prototype.k=function(n){var t,e;null===(t=this.onBeforeHide)||void 0===t||t.call(this,n),x="r",p="d",n&&(n.remove(),null===(e=this.onHide)||void 0===e||e.call(this,n),n===this.p&&(delete this.p,this.onBeforeHide=void 0,this.onHide=void 0))},t.prototype.g=function(t,e,i){var o=this;void 0===i&&(i={});var r=function(n){var t=document.createElement("ul");t.className="ctxmenu",t.append.apply(t,n.map(s)),n.length||(t.style.display="none");var e=function(n){n.stopPropagation(),n.preventDefault()};return t.addEventListener("contextmenu",e),t.addEventListener("click",e),t}(t);return b(r,e),t.forEach((function(t,e){var i=r.children[e];d(i,(function(){var n,t=null===(n=i.parentElement)||void 0===n?void 0:n.querySelector("ul");t&&t.parentElement!==i&&o.k(t)})),a(t)||u(t)&&d(i,(function(){i.querySelector("ul")||i.appendChild(o.g(n(t.subMenu),i,n(t.subMenuAttributes)))}))})),Object.entries(i).forEach((function(n){var t=n[0],e=n[1];return r.setAttribute(t,e)})),r},t.o=function(){if("loading"===document.readyState)return document.addEventListener("readystatechange",this.o,{once:!0});var n=document.createElement("style");n.innerHTML='html{min-height:100%}.ctxmenu{position:fixed;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;box-sizing:border-box}.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:solid #000;border-width:1px 1px 0 0;transform:rotate(45deg);width:.3rem;height:.3rem}.ctxmenu li.submenu.disabled::after{border-color:#ccc}',document.head.insertBefore(n,document.head.childNodes[0])},t}().t(); -/*! ctxMenu v1.7.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/window.ctxmenu=k}(); +/*! ctxMenu v2.0.0 | (c) Nikolaj Kappler | https://github.com/nkappler/ctxmenu/blob/master/LICENSE !*/window.ctxmenu=k}();