From 55c2e42fd1bdb09bce1992f06c9beb2c6994e70e Mon Sep 17 00:00:00 2001 From: bjorn Date: Fri, 16 Mar 2018 11:40:31 +0100 Subject: [PATCH] The contextmenu now checks `visible` on items once instead of twice. The menu checked `visible` status twice, once to check if the menu should be opened and once more when the menu was opened. The logic all moved to the `show` method now so the check is only done once. This should fix issue #612 --- CHANGELOG.md | 6 +++ dist/jquery.contextMenu.css | 4 +- dist/jquery.contextMenu.js | 57 +++++++++++++---------- dist/jquery.contextMenu.min.css | 4 +- dist/jquery.contextMenu.min.js | 2 +- dist/jquery.contextMenu.min.js.map | 2 +- src/js/classes/ContextMenuEventHandler.js | 37 ++++++--------- src/js/classes/ContextMenuOperations.js | 23 ++++++++- test/unit/contextmenu.test.js | 20 ++++++-- 9 files changed, 96 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70e38763..f61662b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ ## Changelog ## +### Unreleased + +#### Fixed + +- The contextmenu now checks `visible` on items once instead of twice. Fixes [issue 612](https://github.com/swisnl/jQuery-contextMenu/issues/612). + ### 3.0.0-beta.1 #### Migrating diff --git a/dist/jquery.contextMenu.css b/dist/jquery.contextMenu.css index dcf02e2c..8e21569b 100644 --- a/dist/jquery.contextMenu.css +++ b/dist/jquery.contextMenu.css @@ -13,7 +13,7 @@ * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * - * Date: 2018-02-20T13:33:22.652Z + * Date: 2018-03-16T10:54:38.560Z * * - */@-webkit-keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0deg);transform:translateY(-50%) rotate(0deg)}to{-webkit-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0deg);transform:translateY(-50%) rotate(0deg)}to{-webkit-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@font-face{font-family:context-menu-icons;src:url("font/context-menu-icons.eot?4crg2");src:url("font/context-menu-icons.eot?4crg2#iefix") format("embedded-opentype"),url("font/context-menu-icons.woff2?4crg2") format("woff2"),url("font/context-menu-icons.woff?4crg2") format("woff"),url("font/context-menu-icons.ttf?4crg2") format("truetype");font-weight:400;font-style:normal}.context-menu-icon-add:before{content:"\EA01"}.context-menu-icon-copy:before{content:"\EA02"}.context-menu-icon-cut:before{content:"\EA03"}.context-menu-icon-delete:before{content:"\EA04"}.context-menu-icon-edit:before{content:"\EA05"}.context-menu-icon-loading:before{content:"\EA06"}.context-menu-icon-paste:before{content:"\EA07"}.context-menu-icon-quit:before{content:"\EA08"}.context-menu-icon:before{color:#2980b9;font-family:context-menu-icons;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-disabled:before{color:#bbb}.context-menu-icon.context-menu-icon-loading:before{-webkit-animation:cm-spin 2s infinite;animation:cm-spin 2s infinite}.context-menu-icon.context-menu-icon--fa{display:list-item;font-family:inherit}.context-menu-icon.context-menu-icon--fa:before{color:#2980b9;font-family:FontAwesome;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-icon--fa.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-icon--fa.context-menu-disabled:before{color:#bbb}.context-menu-list{background:#fff;border:1px solid #bebebe;border-radius:.2em;box-shadow:0 2px 5px rgba(0,0,0,.5);display:inline-block;font-family:inherit;font-size:inherit;list-style-type:none;margin:.3em;max-width:26em;min-width:13em;padding:.25em 0;position:absolute}.context-menu-item{background-color:#fff;box-sizing:content-box;color:#2f2f2f;padding:.2em 2em;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.context-menu-separator{border-bottom:1px solid #e6e6e6;margin:.35em 0;padding:0}.context-menu-item>label>input,.context-menu-item>label>textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.context-menu-item.context-menu-hover{background-color:#2980b9;color:#fff;cursor:pointer}.context-menu-item.context-menu-disabled{background-color:#fff;color:#bbb;cursor:default}.context-menu-input.context-menu-hover{cursor:default;color:#2f2f2f}.context-menu-submenu:after{content:"";border-style:solid;border-width:.25em 0 .25em .25em;border-color:transparent transparent transparent #2f2f2f;height:0;position:absolute;right:.5em;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:0;z-index:1}.context-menu-item.context-menu-input{padding:.3em .6em}.context-menu-input>label>*{vertical-align:top}.context-menu-input>label>input[type=checkbox],.context-menu-input>label>input[type=radio]{margin-right:.4em;position:relative;top:.12em}.context-menu-input>label{margin:0}.context-menu-input>label,.context-menu-input>label>input[type=text],.context-menu-input>label>select,.context-menu-input>label>textarea{box-sizing:border-box;display:block;width:100%}.context-menu-input>label>textarea{height:7em}.context-menu-item>.context-menu-list{display:none;right:-.3em;top:.3em}.context-menu-item.context-menu-visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline} \ No newline at end of file + */@keyframes cm-spin{0%{transform:translateY(-50%) rotate(0deg)}to{transform:translateY(-50%) rotate(359deg)}}@font-face{font-family:context-menu-icons;src:url("font/context-menu-icons.eot?4crg2");src:url("font/context-menu-icons.eot?4crg2#iefix") format("embedded-opentype"),url("font/context-menu-icons.woff2?4crg2") format("woff2"),url("font/context-menu-icons.woff?4crg2") format("woff"),url("font/context-menu-icons.ttf?4crg2") format("truetype");font-weight:400;font-style:normal}.context-menu-icon-add:before{content:"\EA01"}.context-menu-icon-copy:before{content:"\EA02"}.context-menu-icon-cut:before{content:"\EA03"}.context-menu-icon-delete:before{content:"\EA04"}.context-menu-icon-edit:before{content:"\EA05"}.context-menu-icon-loading:before{content:"\EA06"}.context-menu-icon-paste:before{content:"\EA07"}.context-menu-icon-quit:before{content:"\EA08"}.context-menu-icon:before{color:#2980b9;font-family:context-menu-icons;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-disabled:before{color:#bbb}.context-menu-icon.context-menu-icon-loading:before{animation:cm-spin 2s infinite}.context-menu-icon.context-menu-icon--fa{display:list-item;font-family:inherit}.context-menu-icon.context-menu-icon--fa:before{color:#2980b9;font-family:FontAwesome;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-icon--fa.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-icon--fa.context-menu-disabled:before{color:#bbb}.context-menu-list{background:#fff;border:1px solid #bebebe;border-radius:.2em;box-shadow:0 2px 5px rgba(0,0,0,.5);display:inline-block;font-family:inherit;font-size:inherit;list-style-type:none;margin:.3em;max-width:26em;min-width:13em;padding:.25em 0;position:absolute}.context-menu-item{background-color:#fff;box-sizing:content-box;color:#2f2f2f;padding:.2em 2em;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.context-menu-separator{border-bottom:1px solid #e6e6e6;margin:.35em 0;padding:0}.context-menu-item>label>input,.context-menu-item>label>textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.context-menu-item.context-menu-hover{background-color:#2980b9;color:#fff;cursor:pointer}.context-menu-item.context-menu-disabled{background-color:#fff;color:#bbb;cursor:default}.context-menu-input.context-menu-hover{cursor:default;color:#2f2f2f}.context-menu-submenu:after{content:"";border-style:solid;border-width:.25em 0 .25em .25em;border-color:transparent transparent transparent #2f2f2f;height:0;position:absolute;right:.5em;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);width:0;z-index:1}.context-menu-item.context-menu-input{padding:.3em .6em}.context-menu-input>label>*{vertical-align:top}.context-menu-input>label>input[type=checkbox],.context-menu-input>label>input[type=radio]{margin-right:.4em;position:relative;top:.12em}.context-menu-input>label{margin:0}.context-menu-input>label,.context-menu-input>label>input[type=text],.context-menu-input>label>select,.context-menu-input>label>textarea{box-sizing:border-box;display:block;width:100%}.context-menu-input>label>textarea{height:7em}.context-menu-item>.context-menu-list{display:none;right:-.3em;top:.3em}.context-menu-item.context-menu-visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline} \ No newline at end of file diff --git a/dist/jquery.contextMenu.js b/dist/jquery.contextMenu.js index 845ed2d0..208553e6 100755 --- a/dist/jquery.contextMenu.js +++ b/dist/jquery.contextMenu.js @@ -13,7 +13,7 @@ * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * - * Date: 2018-02-20T13:33:22.652Z + * Date: 2018-03-16T10:54:38.560Z * * */(function webpackUniversalModuleDefinition(root, factory) { @@ -649,7 +649,12 @@ var ContextMenuOperations = function () { return; } - menuData.manager.operations.update.call($trigger, e, menuData); + var hasVisibleItems = menuData.manager.operations.update.call($trigger, e, menuData); + + if (hasVisibleItems === false) { + menuData.manager.handler.$currentTrigger = null; + return; + } menuData.position.call($trigger, e, menuData, x, y); @@ -1009,6 +1014,8 @@ var ContextMenuOperations = function () { rootMenuData.manager.operations.resize(e, currentMenuData.$menu); } + var hasVisibleItems = false; + currentMenuData.$menu.children().each(function (index, element) { var $item = $(element); var key = $item.data('contextMenuKey'); @@ -1024,6 +1031,11 @@ var ContextMenuOperations = function () { } else { visible = true; } + + if (visible) { + hasVisibleItems = true; + } + $item[visible ? 'show' : 'hide'](); $item[disabled ? 'addClass' : 'removeClass'](rootMenuData.classNames.disabled); @@ -1055,9 +1067,14 @@ var ContextMenuOperations = function () { } if (item.$menu) { - rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData); + var subMenuHasVisibleItems = rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData); + if (subMenuHasVisibleItems) { + hasVisibleItems = true; + } } }); + + return hasVisibleItems; } }, { key: 'layer', @@ -1592,25 +1609,8 @@ var ContextMenuEventHandler = function () { e.data.manager.operations.create(e, e.data); } - var showMenu = false; - - Object.keys(e.data.items).forEach(function (key) { - var visible = void 0; - if (typeof e.data.items[key].visible === 'function') { - visible = e.data.items[key].visible.call($this, e, key, e.data, e.data); - } else if (typeof e.data.items[key].visible !== 'undefined') { - visible = e.data.items[key].visible === true; - } else { - visible = true; - } - if (visible) { - showMenu = true; - } - }); - if (showMenu) { - e.data.manager.operations.show.call($this, e, e.data, e.pageX, e.pageY); - } + e.data.manager.operations.show.call($this, e, e.data, e.pageX, e.pageY); } } }, { @@ -1626,7 +1626,10 @@ var ContextMenuEventHandler = function () { var $this = $(this); if (e.data.manager.handler.$currentTrigger && e.data.manager.handler.$currentTrigger.length && !e.data.manager.handler.$currentTrigger.is($this)) { - e.data.manager.handler.$currentTrigger.data('contextMenu').$menu.trigger($.Event('contextmenu', { data: e.data, originalEvent: e })); + e.data.manager.handler.$currentTrigger.data('contextMenu').$menu.trigger($.Event('contextmenu', { + data: e.data, + originalEvent: e + })); } if (e.button === 2) { @@ -1941,7 +1944,10 @@ var ContextMenuEventHandler = function () { default: var k = String.fromCharCode(e.keyCode).toUpperCase(); if (rootMenuData.accesskeys && rootMenuData.accesskeys[k]) { - rootMenuData.accesskeys[k].$node.trigger(rootMenuData.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup', { data: rootMenuData, originalEvent: e }); + rootMenuData.accesskeys[k].$node.trigger(rootMenuData.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup', { + data: rootMenuData, + originalEvent: e + }); return; } break; @@ -2082,7 +2088,10 @@ var ContextMenuEventHandler = function () { } var targetMenu = currentMenuData.$menu ? currentMenuData : rootMenuData; - targetMenu.$menu.children('.' + rootMenuData.classNames.hover).trigger('contextmenu:blur', { data: targetMenu, originalEvent: e }).children('.hover').trigger('contextmenu:blur', { data: targetMenu, originalEvent: e }); + targetMenu.$menu.children('.' + rootMenuData.classNames.hover).trigger('contextmenu:blur', { + data: targetMenu, + originalEvent: e + }).children('.hover').trigger('contextmenu:blur', { data: targetMenu, originalEvent: e }); if ($this.hasClass(rootMenuData.classNames.disabled) || $this.hasClass(rootMenuData.classNames.notSelectable)) { currentMenuData.$selected = null; diff --git a/dist/jquery.contextMenu.min.css b/dist/jquery.contextMenu.min.css index c3bff1ce..53208dff 100644 --- a/dist/jquery.contextMenu.min.css +++ b/dist/jquery.contextMenu.min.css @@ -13,7 +13,7 @@ * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * - * Date: 2018-02-20T13:33:22.652Z + * Date: 2018-03-16T10:54:38.560Z * * - */@-webkit-keyframes a{0%{-webkit-transform:translateY(-50%) rotate(0deg);transform:translateY(-50%) rotate(0deg)}to{-webkit-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@keyframes a{0%{-webkit-transform:translateY(-50%) rotate(0deg);transform:translateY(-50%) rotate(0deg)}to{-webkit-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@font-face{font-family:context-menu-icons;src:url(font/context-menu-icons.eot?4crg2);src:url(font/context-menu-icons.eot?4crg2#iefix) format("embedded-opentype"),url(font/context-menu-icons.woff2?4crg2) format("woff2"),url(font/context-menu-icons.woff?4crg2) format("woff"),url(font/context-menu-icons.ttf?4crg2) format("truetype");font-weight:400;font-style:normal}.context-menu-icon-add:before{content:"\EA01"}.context-menu-icon-copy:before{content:"\EA02"}.context-menu-icon-cut:before{content:"\EA03"}.context-menu-icon-delete:before{content:"\EA04"}.context-menu-icon-edit:before{content:"\EA05"}.context-menu-icon-loading:before{content:"\EA06"}.context-menu-icon-paste:before{content:"\EA07"}.context-menu-icon-quit:before{content:"\EA08"}.context-menu-icon:before{color:#2980b9;font-family:context-menu-icons;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-disabled:before{color:#bbb}.context-menu-icon.context-menu-icon-loading:before{-webkit-animation:a 2s infinite;animation:a 2s infinite}.context-menu-icon.context-menu-icon--fa{display:list-item;font-family:inherit}.context-menu-icon.context-menu-icon--fa:before{color:#2980b9;font-family:FontAwesome;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-icon--fa.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-icon--fa.context-menu-disabled:before{color:#bbb}.context-menu-list{background:#fff;border:1px solid #bebebe;border-radius:.2em;box-shadow:0 2px 5px rgba(0,0,0,.5);display:inline-block;font-family:inherit;font-size:inherit;list-style-type:none;margin:.3em;max-width:26em;min-width:13em;padding:.25em 0;position:absolute}.context-menu-item{background-color:#fff;box-sizing:content-box;color:#2f2f2f;padding:.2em 2em;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.context-menu-separator{border-bottom:1px solid #e6e6e6;margin:.35em 0;padding:0}.context-menu-item>label>input,.context-menu-item>label>textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.context-menu-item.context-menu-hover{background-color:#2980b9;color:#fff;cursor:pointer}.context-menu-item.context-menu-disabled{background-color:#fff;color:#bbb;cursor:default}.context-menu-input.context-menu-hover{cursor:default;color:#2f2f2f}.context-menu-submenu:after{content:"";border-style:solid;border-width:.25em 0 .25em .25em;border-color:transparent transparent transparent #2f2f2f;height:0;position:absolute;right:.5em;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:0;z-index:1}.context-menu-item.context-menu-input{padding:.3em .6em}.context-menu-input>label>*{vertical-align:top}.context-menu-input>label>input[type=checkbox],.context-menu-input>label>input[type=radio]{margin-right:.4em;position:relative;top:.12em}.context-menu-input>label{margin:0}.context-menu-input>label,.context-menu-input>label>input[type=text],.context-menu-input>label>select,.context-menu-input>label>textarea{box-sizing:border-box;display:block;width:100%}.context-menu-input>label>textarea{height:7em}.context-menu-item>.context-menu-list{display:none;right:-.3em;top:.3em}.context-menu-item.context-menu-visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline} \ No newline at end of file + */@keyframes a{0%{transform:translateY(-50%) rotate(0deg)}to{transform:translateY(-50%) rotate(359deg)}}@font-face{font-family:context-menu-icons;src:url(font/context-menu-icons.eot?4crg2);src:url(font/context-menu-icons.eot?4crg2#iefix) format("embedded-opentype"),url(font/context-menu-icons.woff2?4crg2) format("woff2"),url(font/context-menu-icons.woff?4crg2) format("woff"),url(font/context-menu-icons.ttf?4crg2) format("truetype");font-weight:400;font-style:normal}.context-menu-icon-add:before{content:"\EA01"}.context-menu-icon-copy:before{content:"\EA02"}.context-menu-icon-cut:before{content:"\EA03"}.context-menu-icon-delete:before{content:"\EA04"}.context-menu-icon-edit:before{content:"\EA05"}.context-menu-icon-loading:before{content:"\EA06"}.context-menu-icon-paste:before{content:"\EA07"}.context-menu-icon-quit:before{content:"\EA08"}.context-menu-icon:before{color:#2980b9;font-family:context-menu-icons;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-disabled:before{color:#bbb}.context-menu-icon.context-menu-icon-loading:before{animation:a 2s infinite}.context-menu-icon.context-menu-icon--fa{display:list-item;font-family:inherit}.context-menu-icon.context-menu-icon--fa:before{color:#2980b9;font-family:FontAwesome;font-style:normal;font-weight:400;font-size:1em;left:0;line-height:1;position:absolute;text-align:center;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2em}.context-menu-icon.context-menu-icon--fa.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-icon--fa.context-menu-disabled:before{color:#bbb}.context-menu-list{background:#fff;border:1px solid #bebebe;border-radius:.2em;box-shadow:0 2px 5px rgba(0,0,0,.5);display:inline-block;font-family:inherit;font-size:inherit;list-style-type:none;margin:.3em;max-width:26em;min-width:13em;padding:.25em 0;position:absolute}.context-menu-item{background-color:#fff;box-sizing:content-box;color:#2f2f2f;padding:.2em 2em;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.context-menu-separator{border-bottom:1px solid #e6e6e6;margin:.35em 0;padding:0}.context-menu-item>label>input,.context-menu-item>label>textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.context-menu-item.context-menu-hover{background-color:#2980b9;color:#fff;cursor:pointer}.context-menu-item.context-menu-disabled{background-color:#fff;color:#bbb;cursor:default}.context-menu-input.context-menu-hover{cursor:default;color:#2f2f2f}.context-menu-submenu:after{content:"";border-style:solid;border-width:.25em 0 .25em .25em;border-color:transparent transparent transparent #2f2f2f;height:0;position:absolute;right:.5em;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);width:0;z-index:1}.context-menu-item.context-menu-input{padding:.3em .6em}.context-menu-input>label>*{vertical-align:top}.context-menu-input>label>input[type=checkbox],.context-menu-input>label>input[type=radio]{margin-right:.4em;position:relative;top:.12em}.context-menu-input>label{margin:0}.context-menu-input>label,.context-menu-input>label>input[type=text],.context-menu-input>label>select,.context-menu-input>label>textarea{box-sizing:border-box;display:block;width:100%}.context-menu-input>label>textarea{height:7em}.context-menu-item>.context-menu-list{display:none;right:-.3em;top:.3em}.context-menu-item.context-menu-visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline} \ No newline at end of file diff --git a/dist/jquery.contextMenu.min.js b/dist/jquery.contextMenu.min.js index f4284eb7..2771c2a2 100755 --- a/dist/jquery.contextMenu.min.js +++ b/dist/jquery.contextMenu.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ContextMenu=t():e.ContextMenu=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(a){if(n[a])return n[a].exports;var o=n[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={simple:"",text:"text",textarea:"textarea",checkbox:"checkbox",radio:"radio",select:"select",html:"html",separator:"cm_separator",submenu:"sub"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n(7);t.default={selector:null,appendTo:null,trigger:"right",autoHide:!1,delay:200,reposition:!0,hideOnSecondTrigger:!1,selectableSubMenu:!1,className:"",classNames:{hover:"context-menu-hover",disabled:"context-menu-disabled",visible:"context-menu-visible",notSelectable:"context-menu-not-selectable",icon:"context-menu-icon",iconEdit:"context-menu-icon-edit",iconCut:"context-menu-icon-cut",iconCopy:"context-menu-icon-copy",iconPaste:"context-menu-icon-paste",iconDelete:"context-menu-icon-delete",iconAdd:"context-menu-icon-add",iconQuit:"context-menu-icon-quit",iconLoadingClass:"context-menu-icon-loading"},zIndex:1,animation:{duration:50,show:"slideDown",hide:"slideUp"},events:{show:$.noop,hide:$.noop,activated:$.noop},callback:null,items:{},build:!1,types:{},determinePosition:a.determinePosition,position:a.position,positionSubmenu:a.positionSubmenu}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}n(3);var o=a(n(4)),i=a(n(0)),r=a(n(10)),s=new o.default,c=function(e,t){s.execute(e,t)};c.getInputValues=function(e,t){return s.getInputValues(e,t)},c.setInputValues=function(e,t){return s.getInputValues(e,t)},c.fromMenu=function(e){return s.html5builder.fromMenu(e)},c.defaults=s.defaults,c.types=s.defaults.types,c.manager=s,c.handle=s.handler,c.operations=s.operations,c.menus=s.menus,c.namespaces=s.namespaces,$.fn.contextMenu=r.default,$.contextMenu=c,e.exports={ContextMenu:o.default,ContextMenuItemTypes:i.default}},function(e,t){},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=n.left&&e.pageX<=n.right&&e.pageY>=n.top&&e.pageY<=n.bottom||setTimeout(function(){t.hovering||null===t.$menu||void 0===t.$menu||t.$menu.trigger("contextmenu:hide")},50)})}else t.manager.handler.$currentTrigger=null}},{key:"hide",value:function(e,t,n){var a=$(this);if("object"!==(void 0===t?"undefined":o(t))&&a.data("contextMenu"))t=a.data("contextMenu");else if("object"!==(void 0===t?"undefined":o(t)))return;if(n||!t.events||!1!==t.events.hide.call(a,e,t)){if(a.removeData("contextMenu").removeClass("context-menu-active"),t.$layer){setTimeout((i=t.$layer,function(){i.remove()}),10);try{delete t.$layer}catch(e){t.$layer=null}}var i;t.manager.handler.$currentTrigger=null,t.$menu.find("."+t.classNames.hover).trigger("contextmenu:blur"),t.$selected=null,t.$menu.find("."+t.classNames.visible).removeClass(t.classNames.visible),$(document).off(".contextMenuAutoHide").off("keydown.contextMenu"),t.$menu&&t.$menu[t.animation.hide](t.animation.duration,function(){t.build&&(t.$menu.remove(),Object.keys(t).forEach(function(e){switch(e){case"ns":case"selector":case"build":case"trigger":return!0;default:t[e]=void 0;try{delete t[e]}catch(e){}return!0}})),setTimeout(function(){a.trigger("contextmenu:hidden")},10)})}}},{key:"create",value:function(e,t,n){function a(e){var t=$("");if(e._accesskey)e._beforeAccesskey&&t.append(document.createTextNode(e._beforeAccesskey)),$("").addClass("context-menu-accesskey").text(e._accesskey).appendTo(t),e._afterAccesskey&&t.append(document.createTextNode(e._afterAccesskey));else if(e.isHtmlName){if(void 0!==e.accesskey)throw new Error("accesskeys are not compatible with HTML names and cannot be used together in the same item");t.html(e.name)}else t.text(e.name);return t}var o=this;void 0===n&&(n=t),t.$menu=$('').addClass(t.className||"").data({contextMenu:t,contextMenuRoot:n}),["callbacks","commands","inputs"].forEach(function(e){t[e]={},n[e]||(n[e]={})}),n.accesskeys||(n.accesskeys={}),Object.keys(t.items).forEach(function(i){var c=t.items[i],l=$('
  • ').addClass(c.className||""),u=null,d=null;if(l.on("click",$.noop),"string"!=typeof c&&"cm_seperator"!==c.type||(c={type:s.default.separator}),c.$node=l.data({contextMenu:t,contextMenuRoot:n,contextMenuKey:i}),void 0!==c.accesskey)for(var m,f=r.default.splitAccesskey(c.accesskey),p=0;m=f[p];p++)if(!n.accesskeys[m]){n.accesskeys[m]=c;var h=c.name.match(new RegExp("^(.*?)("+m+")(.*)$","i"));h&&(c._beforeAccesskey=h[1],c._accesskey=h[2],c._afterAccesskey=h[3]);break}if(c.type&&n.types[c.type])n.types[c.type].call(l,e,c,t,n),[t,n].forEach(function(e){e.commands[i]=c,"function"!=typeof c.callback||void 0!==e.callbacks[i]&&void 0!==t.type||(e.callbacks[i]=c.callback)});else{switch(c.type===s.default.separator?l.addClass("context-menu-separator "+n.classNames.notSelectable):c.type===s.default.html?l.addClass("context-menu-html "+n.classNames.notSelectable):c.type&&c.type!==s.default.submenu?(u=$("").appendTo(l),a(c).appendTo(u),l.addClass("context-menu-input"),t.hasTypes=!0,[t,n].forEach(function(e){e.commands[i]=c,e.inputs[i]=c})):c.items&&(c.type=s.default.submenu),c.type){case s.default.separator:break;case s.default.text:d=$('').attr("name","context-menu-input-"+i).val(c.value||"").appendTo(u);break;case s.default.textarea:d=$('').attr("name","context-menu-input-"+i).val(c.value||"").appendTo(u),c.height&&d.height(c.height);break;case s.default.checkbox:d=$('').attr("name","context-menu-input-"+i).val(c.value||"").prop("checked",!!c.selected).prependTo(u);break;case s.default.radio:d=$('').attr("name","context-menu-input-"+c.radio).val(c.value||"").prop("checked",!!c.selected).prependTo(u);break;case s.default.select:d=$('').attr("name","context-menu-input-"+i).appendTo(u),c.options&&(Object.keys(c.options).forEach(function(e){$("").val(e).text(c.options[e]).appendTo(d)}),d.val(c.selected));break;case s.default.submenu:a(c).appendTo(l),c.appendTo=c.$node,l.data("contextMenu",c).addClass("context-menu-submenu"),c.callback=null,"function"==typeof c.items.then?n.manager.operations.processPromises(e,c,n,c.items):n.manager.operations.create(e,c,n);break;case s.default.html:$(c.html).appendTo(l);break;default:[t,n].forEach(function(e){e.commands[i]=c,"function"!=typeof c.callback||void 0!==e.callbacks[i]&&void 0!==t.type||(e.callbacks[i]=c.callback)}),a(c).appendTo(l)}c.type&&c.type!==s.default.submenu&&c.type!==s.default.html&&c.type!==s.default.separator&&(d.on("focus",n.manager.handler.focusInput).on("blur",n.manager.handler.blurInput),c.events&&d.on(c.events,t)),c.icon&&("function"==typeof c.icon?c._icon=c.icon.call(o,e,l,i,c,t,n):"string"==typeof c.icon&&"fa-"===c.icon.substring(0,3)?c._icon=n.classNames.icon+" "+n.classNames.icon+"--fa fa "+c.icon:c._icon=n.classNames.icon+" "+n.classNames.icon+"-"+c.icon,l.addClass(c._icon))}c.$input=d,c.$label=u,l.appendTo(t.$menu),!t.hasTypes&&$.support.eventSelectstart&&l.on("selectstart.disableTextSelect",t.manager.handler.abortevent)}),t.$node||t.$menu.css("display","none").addClass("context-menu-rootMenuData"),t.$menu.appendTo(t.appendTo||document.body)}},{key:"resize",value:function(e,t,n){var a=void 0;t.css({position:"absolute",display:"block"}),t.data("width",(a=t.get(0)).getBoundingClientRect?Math.ceil(a.getBoundingClientRect().width):t.outerWidth()+1),t.css({position:"static",minWidth:"0px",maxWidth:"100000px"}),t.find("> li > ul").each(function(t,n){e.data.manager.operations.resize(e,$(n),!0)}),n||t.find("ul").addBack().css({position:"",display:"",minWidth:"",maxWidth:""}).outerWidth(function(){return $(this).data("width")})}},{key:"update",value:function(e,t,n){var a=this;void 0===n&&(n=t).manager.operations.resize(e,t.$menu),t.$menu.children().each(function(o,i){var r=$(i),c=r.data("contextMenuKey"),l=t.items[c],u="function"==typeof l.disabled&&l.disabled.call(a,e,c,t,n)||!0===l.disabled;if(r[("function"==typeof l.visible?l.visible.call(a,e,c,t,n):void 0===l.visible||!0===l.visible)?"show":"hide"](),r[u?"addClass":"removeClass"](n.classNames.disabled),"function"==typeof l.icon&&(r.removeClass(l._icon),l._icon=l.icon.call(a,e,r,c,l,t,n),r.addClass(l._icon)),l.type)switch(r.find("input, select, textarea").prop("disabled",u),l.type){case s.default.text:case s.default.textarea:l.$input.val(l.value||"");break;case s.default.checkbox:case s.default.radio:l.$input.val(l.value||"").prop("checked",!!l.selected);break;case s.default.select:l.$input.val((0===l.selected?"0":l.selected)||"")}l.$menu&&n.manager.operations.update.call(a,e,l,n)})}},{key:"layer",value:function(e,t,n){var a=$(window),o=t.$layer=$('
    ').css({height:a.height(),width:a.width(),display:"block",position:"fixed","z-index":n,top:0,left:0,opacity:0,filter:"alpha(opacity=0)","background-color":"#000"}).data("contextMenuRoot",t).insertBefore(this).on("contextmenu",t.manager.handler.abortevent).on("mousedown",t.manager.handler.layerClick);return void 0===document.body.style.maxWidth&&o.css({position:"absolute",height:$(document).height()}),o}},{key:"processPromises",value:function(e,t,n,a){function o(t,n,a){void 0!==n.$menu&&n.$menu.is(":visible")&&(t.$node.removeClass(n.classNames.iconLoadingClass),t.items=a,n.manager.operations.create(e,t,n),n.manager.operations.update(e,t,n),n.positionSubmenu.call(t.$node,e,t.$menu))}function i(e,t,n){void 0===n?(n={error:{name:"No items and no error item",icon:"context-menu-icon context-menu-icon-quit"}},window.console&&(console.error||console.log).call(console,'When you reject a promise, provide an "items" object, equal to normal sub-menu items')):"string"==typeof n&&(n={error:{name:n}}),o(e,t,n)}t.$node.addClass(n.classNames.iconLoadingClass),a.then(function(e,t,n){void 0===n&&i(void 0),o(e,t,n)}.bind(this,t,n),i.bind(this,t,n))}},{key:"activated",value:function(e,t){var n=t.$menu,a=n.offset(),o=$(window).height(),i=$(window).scrollTop(),r=n.height();r>o?n.css({height:o+"px","overflow-x":"hidden","overflow-y":"auto",top:i+"px"}):(a.topi+o)&&n.css({top:"0px"})}}]),e}();t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n-1););return t}},{key:"splitAccesskey",value:function(e){for(var t,n=e.split(/\s+/),a=[],o=0;t=n[o];o++)t=t.charAt(0).toUpperCase(),a.push(t);return a}}]),e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.determinePosition=function(e){if($.ui&&$.ui.position)e.css("display","block").position({my:"center top",at:"center bottom",of:this,offset:"0 5",collision:"fit"}).css("display","none");else{var t=this.offset();t.top+=this.outerHeight(),t.left+=this.outerWidth()/2-e.outerWidth()/2,e.css(t)}},t.position=function(e,t,n,a){var o=$(window),i=void 0;if(!n&&!a)return void t.determinePosition.call(this,t.$menu);if("maintain"===n&&"maintain"===a)i=t.$menu.position();else{var r=t.$menu.offsetParent().offset();i={top:a-r.top,left:n-r.left}}var s=o.scrollTop()+o.height(),c=o.scrollLeft()+o.width(),l=t.$menu.outerHeight(),u=t.$menu.outerWidth();i.top+l>s&&(i.top-=l),i.top<0&&(i.top=0),i.left+u>c&&(i.left-=u),i.left<0&&(i.left=0),t.$menu.css(i)},t.positionSubmenu=function(e,t){if(void 0!==t)if($.ui&&$.ui.position)t.css("display","block").position({my:"left top-5",at:"right top",of:this,collision:"flipfit fit"}).css("display","");else{var n={top:-9,left:this.outerWidth()-5};t.css(n)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=e.pageY&&(s.right=s.left+t.$trigger.outerWidth(),s.right>=e.pageX))))return void t.position.call(t.$trigger,e,t,a,o)}r&&l&&t.$trigger.one("contextmenu:hidden",function(){$(r).contextMenu({x:a,y:o,button:n,originalEvent:e})}),null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("contextmenu:hide",{data:t,originalEvent:e})}}},50)}},{key:"keyStop",value:function(e,t){t.isInput||e.preventDefault(),e.stopPropagation()}},{key:"key",value:function(e){var t={};e.data.manager.handler.$currentTrigger&&(t=e.data.manager.handler.$currentTrigger.data("contextMenu")||{}),void 0===t.zIndex&&(t.zIndex=0);var n=function e(t){return""!==t.style.zIndex?t.style.zIndex:null!==t.offsetParent&&void 0!==t.offsetParent?e(t.offsetParent):null!==t.parentElement&&void 0!==t.parentElement?e(t.parentElement):void 0}(e.target);if(!(t.$menu&&parseInt(n,10)>parseInt(t.$menu.css("zIndex"),10))){switch(e.keyCode){case 9:case 38:if(e.data.manager.handler.keyStop(e,t),t.isInput){if(9===e.keyCode&&e.shiftKey)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("prevcommand",{data:t,originalEvent:e}));if(38===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault()}else if(9!==e.keyCode||e.shiftKey)return void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("prevcommand",{data:t,originalEvent:e}));break;case 40:if(e.data.manager.handler.keyStop(e,t),!t.isInput)return void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("nextcommand",{data:t,originalEvent:e}));if(9===e.keyCode)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("nextcommand",{data:t,originalEvent:e}));if(40===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault();break;case 37:if(e.data.manager.handler.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;if(!t.$selected.parent().hasClass("context-menu-root")){var a=t.$selected.parent().parent();return t.$selected.trigger("contextmenu:blur",{data:t,originalEvent:e}),void(t.$selected=a)}break;case 39:if(e.data.manager.handler.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;var o=t.$selected.data("contextMenu")||{};if(o.$menu&&t.$selected.hasClass("context-menu-submenu"))return t.$selected=null,o.$selected=null,void o.$menu.trigger("nextcommand",{data:o,originalEvent:e});break;case 35:case 36:if(t.$selected&&t.$selected.find("input, textarea, select").length)break;(t.$selected&&t.$selected.parent()||t.$menu).children(":not(."+t.classNames.disabled+", ."+t.classNames.notSelectable+")")[36===e.keyCode?"first":"last"]().trigger("contextmenu:focus",{data:t,originalEvent:e}),e.preventDefault();break;case 13:if(e.data.manager.handler.keyStop(e,t),t.isInput){if(t.$selected&&!t.$selected.is("textarea, select"))return void e.preventDefault();break}return void(void 0!==t.$selected&&null!==t.$selected&&t.$selected.trigger("mouseup",{data:t,originalEvent:e}));case 32:case 33:case 34:return void e.data.manager.handler.keyStop(e,t);case 27:return e.data.manager.handler.keyStop(e,t),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("contextmenu:hide",{data:t,originalEvent:e}));default:var i=String.fromCharCode(e.keyCode).toUpperCase();if(t.accesskeys&&t.accesskeys[i])return void t.accesskeys[i].$node.trigger(t.accesskeys[i].$menu?"contextmenu:focus":"mouseup",{data:t,originalEvent:e})}e.stopPropagation(),void 0!==t.$selected&&null!==t.$selected&&t.$selected.trigger(e)}}},{key:"prevItem",value:function(e){e.stopPropagation();var t=$(this).data("contextMenu")||{},n=$(this).data("contextMenuRoot")||{};if(t.$selected){var a=t.$selected;(t=t.$selected.parent().data("contextMenu")||{}).$selected=a}for(var o=t.$menu.children(),i=t.$selected&&t.$selected.prev().length?t.$selected.prev():o.last(),r=i;i.hasClass(n.classNames.disabled)||i.hasClass(n.classNames.notSelectable)||i.is(":hidden");)if((i=i.prev().length?i.prev():o.last()).is(r))return;t.$selected&&n.manager.handler.itemMouseleave.call(t.$selected.get(0),e),n.manager.handler.itemMouseenter.call(i.get(0),e);var s=i.find("input, textarea, select");s.length&&s.focus()}},{key:"nextItem",value:function(e){e.stopPropagation();var t=$(this).data("contextMenu")||{},n=$(this).data("contextMenuRoot")||{};if(t.$selected){var a=t.$selected;(t=t.$selected.parent().data("contextMenu")||{}).$selected=a}for(var o=t.$menu.children(),i=t.$selected&&t.$selected.next().length?t.$selected.next():o.first(),r=i;i.hasClass(n.classNames.disabled)||i.hasClass(n.classNames.notSelectable)||i.is(":hidden");)if((i=i.next().length?i.next():o.first()).is(r))return;t.$selected&&n.manager.handler.itemMouseleave.call(t.$selected.get(0),e),n.manager.handler.itemMouseenter.call(i.get(0),e);var s=i.find("input, textarea, select");s.length&&s.focus()}},{key:"focusInput",value:function(e){var t=$(this).closest(".context-menu-item"),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.$selected=a.$selected=t,o.isInput=a.isInput=!0}},{key:"blurInput",value:function(e){var t=$(this).closest(".context-menu-item").data(),n=t.contextMenu;t.contextMenuRoot.isInput=n.isInput=!1}},{key:"menuMouseenter",value:function(e){$(this).data().contextMenuRoot.hovering=!0}},{key:"menuMouseleave",value:function(e){var t=$(this).data().contextMenuRoot;t.$layer&&t.$layer.is(e.relatedTarget)&&(t.hovering=!1)}},{key:"itemMouseenter",value:function(e){var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.hovering=!0,e&&o.$layer&&o.$layer.is(e.relatedTarget)&&(e.preventDefault(),e.stopImmediatePropagation());var i=a.$menu?a:o;i.$menu.children("."+o.classNames.hover).trigger("contextmenu:blur",{data:i,originalEvent:e}).children(".hover").trigger("contextmenu:blur",{data:i,originalEvent:e}),t.hasClass(o.classNames.disabled)||t.hasClass(o.classNames.notSelectable)?a.$selected=null:t.trigger("contextmenu:focus",{data:a,originalEvent:e})}},{key:"itemMouseleave",value:function(e){var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;if(o!==a&&o.$layer&&o.$layer.is(e.relatedTarget))return void 0!==o.$selected&&null!==o.$selected&&o.$selected.trigger("contextmenu:blur",{data:o,originalEvent:e}),e.preventDefault(),e.stopImmediatePropagation(),void(o.$selected=a.$selected=a.$node);a&&a.$menu&&a.$menu.hasClass(o.classNames.visible)||t.trigger("contextmenu:blur")}},{key:"itemClick",value:function(e){var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot,i=n.contextMenuKey,r=void 0;if(!(!a.items[i]||t.is("."+o.classNames.disabled+", .context-menu-separator, ."+o.classNames.notSelectable)||t.is(".context-menu-submenu")&&!1===o.selectableSubMenu)){if(e.preventDefault(),e.stopImmediatePropagation(),"function"==typeof a.callbacks[i]&&Object.prototype.hasOwnProperty.call(a.callbacks,i))r=a.callbacks[i];else{if("function"!=typeof o.callback)return;r=o.callback}!1!==r.call(o.$trigger,e,i,a,o)?o.$menu.trigger("contextmenu:hide"):o.$menu.parent().length&&o.manager.operations.update.call(o.$trigger,e,o)}}},{key:"inputClick",value:function(e){e.stopImmediatePropagation()}},{key:"hideMenu",value:function(e,t){var n=$(this).data("contextMenuRoot");n.manager.operations.hide.call(n.$trigger,e,n,t&&t.force)}},{key:"focusItem",value:function(e){e.stopPropagation();var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;t.hasClass(o.classNames.disabled)||t.hasClass(o.classNames.notSelectable)||(t.addClass([o.classNames.hover,o.classNames.visible].join(" ")).parent().find(".context-menu-item").not(t).removeClass(o.classNames.visible).filter("."+o.classNames.hover).trigger("contextmenu:blur"),a.$selected=o.$selected=t,a.$node&&a.$node.hasClass("context-menu-submenu")&&a.$node.addClass(o.classNames.hover),a.$node&&o.positionSubmenu.call(a.$node,e,a.$menu))}},{key:"blurItem",value:function(e){e.stopPropagation();var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.autoHide&&t.removeClass(o.classNames.visible),t.removeClass(o.classNames.hover),a.$selected=null}}]),e}();t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=this,n=e;if(t.length>0)if(void 0===e)t.first().trigger("contextmenu");else if(void 0!==e.x&&void 0!==e.y)t.first().trigger($.Event("contextmenu",{pageX:e.x,pageY:e.y,mouseButton:e.button}));else if("hide"===e){var a=this.first().data("contextMenu")?this.first().data("contextMenu").$menu:null;a&&a.trigger("contextmenu:hide")}else"destroy"===e?$.contextMenu("destroy",{context:this}):"update"===e?$.contextMenu("update",{context:this}):$.isPlainObject(e)?(e.context=this,$.contextMenu("create",e)):!0===e?t.removeClass("context-menu-disabled"):!1===e&&t.addClass("context-menu-disabled");else $.each($.contextMenu.menus,function(){this.selector===t.selector&&(n.data=this,$.extend(n.data,{trigger:"demand"}))}),$.contextMenu.handle.contextmenu.call(n.target,n);return this}}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ContextMenu=t():e.ContextMenu=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(a){if(n[a])return n[a].exports;var o=n[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={simple:"",text:"text",textarea:"textarea",checkbox:"checkbox",radio:"radio",select:"select",html:"html",separator:"cm_separator",submenu:"sub"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n(7);t.default={selector:null,appendTo:null,trigger:"right",autoHide:!1,delay:200,reposition:!0,hideOnSecondTrigger:!1,selectableSubMenu:!1,className:"",classNames:{hover:"context-menu-hover",disabled:"context-menu-disabled",visible:"context-menu-visible",notSelectable:"context-menu-not-selectable",icon:"context-menu-icon",iconEdit:"context-menu-icon-edit",iconCut:"context-menu-icon-cut",iconCopy:"context-menu-icon-copy",iconPaste:"context-menu-icon-paste",iconDelete:"context-menu-icon-delete",iconAdd:"context-menu-icon-add",iconQuit:"context-menu-icon-quit",iconLoadingClass:"context-menu-icon-loading"},zIndex:1,animation:{duration:50,show:"slideDown",hide:"slideUp"},events:{show:$.noop,hide:$.noop,activated:$.noop},callback:null,items:{},build:!1,types:{},determinePosition:a.determinePosition,position:a.position,positionSubmenu:a.positionSubmenu}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}n(3);var o=a(n(4)),i=a(n(0)),r=a(n(10)),s=new o.default,c=function(e,t){s.execute(e,t)};c.getInputValues=function(e,t){return s.getInputValues(e,t)},c.setInputValues=function(e,t){return s.getInputValues(e,t)},c.fromMenu=function(e){return s.html5builder.fromMenu(e)},c.defaults=s.defaults,c.types=s.defaults.types,c.manager=s,c.handle=s.handler,c.operations=s.operations,c.menus=s.menus,c.namespaces=s.namespaces,$.fn.contextMenu=r.default,$.contextMenu=c,e.exports={ContextMenu:o.default,ContextMenuItemTypes:i.default}},function(e,t){},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=n.left&&e.pageX<=n.right&&e.pageY>=n.top&&e.pageY<=n.bottom||setTimeout(function(){t.hovering||null===t.$menu||void 0===t.$menu||t.$menu.trigger("contextmenu:hide")},50)})}else t.manager.handler.$currentTrigger=null;else t.manager.handler.$currentTrigger=null}},{key:"hide",value:function(e,t,n){var a=$(this);if("object"!==(void 0===t?"undefined":o(t))&&a.data("contextMenu"))t=a.data("contextMenu");else if("object"!==(void 0===t?"undefined":o(t)))return;if(n||!t.events||!1!==t.events.hide.call(a,e,t)){if(a.removeData("contextMenu").removeClass("context-menu-active"),t.$layer){setTimeout((i=t.$layer,function(){i.remove()}),10);try{delete t.$layer}catch(e){t.$layer=null}}var i;t.manager.handler.$currentTrigger=null,t.$menu.find("."+t.classNames.hover).trigger("contextmenu:blur"),t.$selected=null,t.$menu.find("."+t.classNames.visible).removeClass(t.classNames.visible),$(document).off(".contextMenuAutoHide").off("keydown.contextMenu"),t.$menu&&t.$menu[t.animation.hide](t.animation.duration,function(){t.build&&(t.$menu.remove(),Object.keys(t).forEach(function(e){switch(e){case"ns":case"selector":case"build":case"trigger":return!0;default:t[e]=void 0;try{delete t[e]}catch(e){}return!0}})),setTimeout(function(){a.trigger("contextmenu:hidden")},10)})}}},{key:"create",value:function(e,t,n){function a(e){var t=$("");if(e._accesskey)e._beforeAccesskey&&t.append(document.createTextNode(e._beforeAccesskey)),$("").addClass("context-menu-accesskey").text(e._accesskey).appendTo(t),e._afterAccesskey&&t.append(document.createTextNode(e._afterAccesskey));else if(e.isHtmlName){if(void 0!==e.accesskey)throw new Error("accesskeys are not compatible with HTML names and cannot be used together in the same item");t.html(e.name)}else t.text(e.name);return t}var o=this;void 0===n&&(n=t),t.$menu=$('
      ').addClass(t.className||"").data({contextMenu:t,contextMenuRoot:n}),["callbacks","commands","inputs"].forEach(function(e){t[e]={},n[e]||(n[e]={})}),n.accesskeys||(n.accesskeys={}),Object.keys(t.items).forEach(function(i){var c=t.items[i],l=$('
    • ').addClass(c.className||""),u=null,d=null;if(l.on("click",$.noop),"string"!=typeof c&&"cm_seperator"!==c.type||(c={type:s.default.separator}),c.$node=l.data({contextMenu:t,contextMenuRoot:n,contextMenuKey:i}),void 0!==c.accesskey)for(var m,f=r.default.splitAccesskey(c.accesskey),p=0;m=f[p];p++)if(!n.accesskeys[m]){n.accesskeys[m]=c;var h=c.name.match(new RegExp("^(.*?)("+m+")(.*)$","i"));h&&(c._beforeAccesskey=h[1],c._accesskey=h[2],c._afterAccesskey=h[3]);break}if(c.type&&n.types[c.type])n.types[c.type].call(l,e,c,t,n),[t,n].forEach(function(e){e.commands[i]=c,"function"!=typeof c.callback||void 0!==e.callbacks[i]&&void 0!==t.type||(e.callbacks[i]=c.callback)});else{switch(c.type===s.default.separator?l.addClass("context-menu-separator "+n.classNames.notSelectable):c.type===s.default.html?l.addClass("context-menu-html "+n.classNames.notSelectable):c.type&&c.type!==s.default.submenu?(u=$("").appendTo(l),a(c).appendTo(u),l.addClass("context-menu-input"),t.hasTypes=!0,[t,n].forEach(function(e){e.commands[i]=c,e.inputs[i]=c})):c.items&&(c.type=s.default.submenu),c.type){case s.default.separator:break;case s.default.text:d=$('').attr("name","context-menu-input-"+i).val(c.value||"").appendTo(u);break;case s.default.textarea:d=$('').attr("name","context-menu-input-"+i).val(c.value||"").appendTo(u),c.height&&d.height(c.height);break;case s.default.checkbox:d=$('').attr("name","context-menu-input-"+i).val(c.value||"").prop("checked",!!c.selected).prependTo(u);break;case s.default.radio:d=$('').attr("name","context-menu-input-"+c.radio).val(c.value||"").prop("checked",!!c.selected).prependTo(u);break;case s.default.select:d=$('').attr("name","context-menu-input-"+i).appendTo(u),c.options&&(Object.keys(c.options).forEach(function(e){$("").val(e).text(c.options[e]).appendTo(d)}),d.val(c.selected));break;case s.default.submenu:a(c).appendTo(l),c.appendTo=c.$node,l.data("contextMenu",c).addClass("context-menu-submenu"),c.callback=null,"function"==typeof c.items.then?n.manager.operations.processPromises(e,c,n,c.items):n.manager.operations.create(e,c,n);break;case s.default.html:$(c.html).appendTo(l);break;default:[t,n].forEach(function(e){e.commands[i]=c,"function"!=typeof c.callback||void 0!==e.callbacks[i]&&void 0!==t.type||(e.callbacks[i]=c.callback)}),a(c).appendTo(l)}c.type&&c.type!==s.default.submenu&&c.type!==s.default.html&&c.type!==s.default.separator&&(d.on("focus",n.manager.handler.focusInput).on("blur",n.manager.handler.blurInput),c.events&&d.on(c.events,t)),c.icon&&("function"==typeof c.icon?c._icon=c.icon.call(o,e,l,i,c,t,n):"string"==typeof c.icon&&"fa-"===c.icon.substring(0,3)?c._icon=n.classNames.icon+" "+n.classNames.icon+"--fa fa "+c.icon:c._icon=n.classNames.icon+" "+n.classNames.icon+"-"+c.icon,l.addClass(c._icon))}c.$input=d,c.$label=u,l.appendTo(t.$menu),!t.hasTypes&&$.support.eventSelectstart&&l.on("selectstart.disableTextSelect",t.manager.handler.abortevent)}),t.$node||t.$menu.css("display","none").addClass("context-menu-rootMenuData"),t.$menu.appendTo(t.appendTo||document.body)}},{key:"resize",value:function(e,t,n){var a=void 0;t.css({position:"absolute",display:"block"}),t.data("width",(a=t.get(0)).getBoundingClientRect?Math.ceil(a.getBoundingClientRect().width):t.outerWidth()+1),t.css({position:"static",minWidth:"0px",maxWidth:"100000px"}),t.find("> li > ul").each(function(t,n){e.data.manager.operations.resize(e,$(n),!0)}),n||t.find("ul").addBack().css({position:"",display:"",minWidth:"",maxWidth:""}).outerWidth(function(){return $(this).data("width")})}},{key:"update",value:function(e,t,n){var a=this;void 0===n&&(n=t).manager.operations.resize(e,t.$menu);var o=!1;return t.$menu.children().each(function(i,r){var c=$(r),l=c.data("contextMenuKey"),u=t.items[l],d="function"==typeof u.disabled&&u.disabled.call(a,e,l,t,n)||!0===u.disabled,m=void 0;if((m="function"==typeof u.visible?u.visible.call(a,e,l,t,n):void 0===u.visible||!0===u.visible)&&(o=!0),c[m?"show":"hide"](),c[d?"addClass":"removeClass"](n.classNames.disabled),"function"==typeof u.icon&&(c.removeClass(u._icon),u._icon=u.icon.call(a,e,c,l,u,t,n),c.addClass(u._icon)),u.type)switch(c.find("input, select, textarea").prop("disabled",d),u.type){case s.default.text:case s.default.textarea:u.$input.val(u.value||"");break;case s.default.checkbox:case s.default.radio:u.$input.val(u.value||"").prop("checked",!!u.selected);break;case s.default.select:u.$input.val((0===u.selected?"0":u.selected)||"")}u.$menu&&n.manager.operations.update.call(a,e,u,n)&&(o=!0)}),o}},{key:"layer",value:function(e,t,n){var a=$(window),o=t.$layer=$('
      ').css({height:a.height(),width:a.width(),display:"block",position:"fixed","z-index":n,top:0,left:0,opacity:0,filter:"alpha(opacity=0)","background-color":"#000"}).data("contextMenuRoot",t).insertBefore(this).on("contextmenu",t.manager.handler.abortevent).on("mousedown",t.manager.handler.layerClick);return void 0===document.body.style.maxWidth&&o.css({position:"absolute",height:$(document).height()}),o}},{key:"processPromises",value:function(e,t,n,a){function o(t,n,a){void 0!==n.$menu&&n.$menu.is(":visible")&&(t.$node.removeClass(n.classNames.iconLoadingClass),t.items=a,n.manager.operations.create(e,t,n),n.manager.operations.update(e,t,n),n.positionSubmenu.call(t.$node,e,t.$menu))}function i(e,t,n){void 0===n?(n={error:{name:"No items and no error item",icon:"context-menu-icon context-menu-icon-quit"}},window.console&&(console.error||console.log).call(console,'When you reject a promise, provide an "items" object, equal to normal sub-menu items')):"string"==typeof n&&(n={error:{name:n}}),o(e,t,n)}t.$node.addClass(n.classNames.iconLoadingClass),a.then(function(e,t,n){void 0===n&&i(void 0),o(e,t,n)}.bind(this,t,n),i.bind(this,t,n))}},{key:"activated",value:function(e,t){var n=t.$menu,a=n.offset(),o=$(window).height(),i=$(window).scrollTop(),r=n.height();r>o?n.css({height:o+"px","overflow-x":"hidden","overflow-y":"auto",top:i+"px"}):(a.topi+o)&&n.css({top:"0px"})}}]),e}();t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n-1););return t}},{key:"splitAccesskey",value:function(e){for(var t,n=e.split(/\s+/),a=[],o=0;t=n[o];o++)t=t.charAt(0).toUpperCase(),a.push(t);return a}}]),e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.determinePosition=function(e){if($.ui&&$.ui.position)e.css("display","block").position({my:"center top",at:"center bottom",of:this,offset:"0 5",collision:"fit"}).css("display","none");else{var t=this.offset();t.top+=this.outerHeight(),t.left+=this.outerWidth()/2-e.outerWidth()/2,e.css(t)}},t.position=function(e,t,n,a){var o=$(window),i=void 0;if(!n&&!a)return void t.determinePosition.call(this,t.$menu);if("maintain"===n&&"maintain"===a)i=t.$menu.position();else{var r=t.$menu.offsetParent().offset();i={top:a-r.top,left:n-r.left}}var s=o.scrollTop()+o.height(),c=o.scrollLeft()+o.width(),l=t.$menu.outerHeight(),u=t.$menu.outerWidth();i.top+l>s&&(i.top-=l),i.top<0&&(i.top=0),i.left+u>c&&(i.left-=u),i.left<0&&(i.left=0),t.$menu.css(i)},t.positionSubmenu=function(e,t){if(void 0!==t)if($.ui&&$.ui.position)t.css("display","block").position({my:"left top-5",at:"right top",of:this,collision:"flipfit fit"}).css("display","");else{var n={top:-9,left:this.outerWidth()-5};t.css(n)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=e.pageY&&(s.right=s.left+t.$trigger.outerWidth(),s.right>=e.pageX))))return void t.position.call(t.$trigger,e,t,a,o)}r&&l&&t.$trigger.one("contextmenu:hidden",function(){$(r).contextMenu({x:a,y:o,button:n,originalEvent:e})}),null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("contextmenu:hide",{data:t,originalEvent:e})}}},50)}},{key:"keyStop",value:function(e,t){t.isInput||e.preventDefault(),e.stopPropagation()}},{key:"key",value:function(e){var t={};e.data.manager.handler.$currentTrigger&&(t=e.data.manager.handler.$currentTrigger.data("contextMenu")||{}),void 0===t.zIndex&&(t.zIndex=0);var n=function e(t){return""!==t.style.zIndex?t.style.zIndex:null!==t.offsetParent&&void 0!==t.offsetParent?e(t.offsetParent):null!==t.parentElement&&void 0!==t.parentElement?e(t.parentElement):void 0}(e.target);if(!(t.$menu&&parseInt(n,10)>parseInt(t.$menu.css("zIndex"),10))){switch(e.keyCode){case 9:case 38:if(e.data.manager.handler.keyStop(e,t),t.isInput){if(9===e.keyCode&&e.shiftKey)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("prevcommand",{data:t,originalEvent:e}));if(38===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault()}else if(9!==e.keyCode||e.shiftKey)return void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("prevcommand",{data:t,originalEvent:e}));break;case 40:if(e.data.manager.handler.keyStop(e,t),!t.isInput)return void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("nextcommand",{data:t,originalEvent:e}));if(9===e.keyCode)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("nextcommand",{data:t,originalEvent:e}));if(40===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault();break;case 37:if(e.data.manager.handler.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;if(!t.$selected.parent().hasClass("context-menu-root")){var a=t.$selected.parent().parent();return t.$selected.trigger("contextmenu:blur",{data:t,originalEvent:e}),void(t.$selected=a)}break;case 39:if(e.data.manager.handler.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;var o=t.$selected.data("contextMenu")||{};if(o.$menu&&t.$selected.hasClass("context-menu-submenu"))return t.$selected=null,o.$selected=null,void o.$menu.trigger("nextcommand",{data:o,originalEvent:e});break;case 35:case 36:if(t.$selected&&t.$selected.find("input, textarea, select").length)break;(t.$selected&&t.$selected.parent()||t.$menu).children(":not(."+t.classNames.disabled+", ."+t.classNames.notSelectable+")")[36===e.keyCode?"first":"last"]().trigger("contextmenu:focus",{data:t,originalEvent:e}),e.preventDefault();break;case 13:if(e.data.manager.handler.keyStop(e,t),t.isInput){if(t.$selected&&!t.$selected.is("textarea, select"))return void e.preventDefault();break}return void(void 0!==t.$selected&&null!==t.$selected&&t.$selected.trigger("mouseup",{data:t,originalEvent:e}));case 32:case 33:case 34:return void e.data.manager.handler.keyStop(e,t);case 27:return e.data.manager.handler.keyStop(e,t),void(null!==t.$menu&&void 0!==t.$menu&&t.$menu.trigger("contextmenu:hide",{data:t,originalEvent:e}));default:var i=String.fromCharCode(e.keyCode).toUpperCase();if(t.accesskeys&&t.accesskeys[i])return void t.accesskeys[i].$node.trigger(t.accesskeys[i].$menu?"contextmenu:focus":"mouseup",{data:t,originalEvent:e})}e.stopPropagation(),void 0!==t.$selected&&null!==t.$selected&&t.$selected.trigger(e)}}},{key:"prevItem",value:function(e){e.stopPropagation();var t=$(this).data("contextMenu")||{},n=$(this).data("contextMenuRoot")||{};if(t.$selected){var a=t.$selected;(t=t.$selected.parent().data("contextMenu")||{}).$selected=a}for(var o=t.$menu.children(),i=t.$selected&&t.$selected.prev().length?t.$selected.prev():o.last(),r=i;i.hasClass(n.classNames.disabled)||i.hasClass(n.classNames.notSelectable)||i.is(":hidden");)if((i=i.prev().length?i.prev():o.last()).is(r))return;t.$selected&&n.manager.handler.itemMouseleave.call(t.$selected.get(0),e),n.manager.handler.itemMouseenter.call(i.get(0),e);var s=i.find("input, textarea, select");s.length&&s.focus()}},{key:"nextItem",value:function(e){e.stopPropagation();var t=$(this).data("contextMenu")||{},n=$(this).data("contextMenuRoot")||{};if(t.$selected){var a=t.$selected;(t=t.$selected.parent().data("contextMenu")||{}).$selected=a}for(var o=t.$menu.children(),i=t.$selected&&t.$selected.next().length?t.$selected.next():o.first(),r=i;i.hasClass(n.classNames.disabled)||i.hasClass(n.classNames.notSelectable)||i.is(":hidden");)if((i=i.next().length?i.next():o.first()).is(r))return;t.$selected&&n.manager.handler.itemMouseleave.call(t.$selected.get(0),e),n.manager.handler.itemMouseenter.call(i.get(0),e);var s=i.find("input, textarea, select");s.length&&s.focus()}},{key:"focusInput",value:function(e){var t=$(this).closest(".context-menu-item"),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.$selected=a.$selected=t,o.isInput=a.isInput=!0}},{key:"blurInput",value:function(e){var t=$(this).closest(".context-menu-item").data(),n=t.contextMenu;t.contextMenuRoot.isInput=n.isInput=!1}},{key:"menuMouseenter",value:function(e){$(this).data().contextMenuRoot.hovering=!0}},{key:"menuMouseleave",value:function(e){var t=$(this).data().contextMenuRoot;t.$layer&&t.$layer.is(e.relatedTarget)&&(t.hovering=!1)}},{key:"itemMouseenter",value:function(e){var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.hovering=!0,e&&o.$layer&&o.$layer.is(e.relatedTarget)&&(e.preventDefault(),e.stopImmediatePropagation());var i=a.$menu?a:o;i.$menu.children("."+o.classNames.hover).trigger("contextmenu:blur",{data:i,originalEvent:e}).children(".hover").trigger("contextmenu:blur",{data:i,originalEvent:e}),t.hasClass(o.classNames.disabled)||t.hasClass(o.classNames.notSelectable)?a.$selected=null:t.trigger("contextmenu:focus",{data:a,originalEvent:e})}},{key:"itemMouseleave",value:function(e){var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;if(o!==a&&o.$layer&&o.$layer.is(e.relatedTarget))return void 0!==o.$selected&&null!==o.$selected&&o.$selected.trigger("contextmenu:blur",{data:o,originalEvent:e}),e.preventDefault(),e.stopImmediatePropagation(),void(o.$selected=a.$selected=a.$node);a&&a.$menu&&a.$menu.hasClass(o.classNames.visible)||t.trigger("contextmenu:blur")}},{key:"itemClick",value:function(e){var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot,i=n.contextMenuKey,r=void 0;if(!(!a.items[i]||t.is("."+o.classNames.disabled+", .context-menu-separator, ."+o.classNames.notSelectable)||t.is(".context-menu-submenu")&&!1===o.selectableSubMenu)){if(e.preventDefault(),e.stopImmediatePropagation(),"function"==typeof a.callbacks[i]&&Object.prototype.hasOwnProperty.call(a.callbacks,i))r=a.callbacks[i];else{if("function"!=typeof o.callback)return;r=o.callback}!1!==r.call(o.$trigger,e,i,a,o)?o.$menu.trigger("contextmenu:hide"):o.$menu.parent().length&&o.manager.operations.update.call(o.$trigger,e,o)}}},{key:"inputClick",value:function(e){e.stopImmediatePropagation()}},{key:"hideMenu",value:function(e,t){var n=$(this).data("contextMenuRoot");n.manager.operations.hide.call(n.$trigger,e,n,t&&t.force)}},{key:"focusItem",value:function(e){e.stopPropagation();var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;t.hasClass(o.classNames.disabled)||t.hasClass(o.classNames.notSelectable)||(t.addClass([o.classNames.hover,o.classNames.visible].join(" ")).parent().find(".context-menu-item").not(t).removeClass(o.classNames.visible).filter("."+o.classNames.hover).trigger("contextmenu:blur"),a.$selected=o.$selected=t,a.$node&&a.$node.hasClass("context-menu-submenu")&&a.$node.addClass(o.classNames.hover),a.$node&&o.positionSubmenu.call(a.$node,e,a.$menu))}},{key:"blurItem",value:function(e){e.stopPropagation();var t=$(this),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.autoHide&&t.removeClass(o.classNames.visible),t.removeClass(o.classNames.hover),a.$selected=null}}]),e}();t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=this,n=e;if(t.length>0)if(void 0===e)t.first().trigger("contextmenu");else if(void 0!==e.x&&void 0!==e.y)t.first().trigger($.Event("contextmenu",{pageX:e.x,pageY:e.y,mouseButton:e.button}));else if("hide"===e){var a=this.first().data("contextMenu")?this.first().data("contextMenu").$menu:null;a&&a.trigger("contextmenu:hide")}else"destroy"===e?$.contextMenu("destroy",{context:this}):"update"===e?$.contextMenu("update",{context:this}):$.isPlainObject(e)?(e.context=this,$.contextMenu("create",e)):!0===e?t.removeClass("context-menu-disabled"):!1===e&&t.addClass("context-menu-disabled");else $.each($.contextMenu.menus,function(){this.selector===t.selector&&(n.data=this,$.extend(n.data,{trigger:"demand"}))}),$.contextMenu.handle.contextmenu.call(n.target,n);return this}}])}); //# sourceMappingURL=jquery.contextMenu.min.js.map \ No newline at end of file diff --git a/dist/jquery.contextMenu.min.js.map b/dist/jquery.contextMenu.min.js.map index 26bf8379..2bfbbdaa 100644 --- a/dist/jquery.contextMenu.min.js.map +++ b/dist/jquery.contextMenu.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap af7c317981dd1873df70","webpack:///./src/js/classes/ContextMenuItemTypes.js","webpack:///./src/js/defaults/index.js","webpack:///./src/js/contextmenu.js","webpack:///./src/js/classes/ContextMenu.js","webpack:///./src/js/classes/ContextMenuOperations.js","webpack:///./src/js/classes/ContextMenuHelper.js","webpack:///./src/js/defaults/position.js","webpack:///./src/js/classes/ContextMenuHtml5Builder.js","webpack:///./src/js/classes/ContextMenuEventHandler.js","webpack:///./src/js/jquery/contextMenuFunction.js"],"names":["root","factory","exports","module","define","amd","ContextMenu","self","this","e","__webpack_require__","moduleId","installedModules","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","default","object","property","prototype","hasOwnProperty","p","s","t","value","simple","text","textarea","checkbox","radio","select","html","separator","submenu","_position","selector","appendTo","trigger","autoHide","delay","reposition","hideOnSecondTrigger","selectableSubMenu","className","classNames","hover","disabled","visible","notSelectable","icon","iconEdit","iconCut","iconCopy","iconPaste","iconDelete","iconAdd","iconQuit","iconLoadingClass","zIndex","animation","duration","show","hide","events","$","noop","activated","callback","items","build","types","determinePosition","position","positionSubmenu","r","a","manager","_ContextMenu2","contextMenu","operation","options","execute","getInputValues","currentMenuData","data","setInputValues","fromMenu","element","html5builder","defaults","handle","handler","operations","menus","namespaces","fn","_contextMenuFunction2","ContextMenuItemTypes","_ContextMenuHtml5Builder2","_defaults2","_ContextMenuEventHandler2","_ContextMenuOperations2","initialized","counter","key","normalizedArguments","normalizeArguments","update","create","destroy","html5","Error","buildOptions","document","body","window","each","id","css","_this","$visibleMenu","_hasContext","context","keys","forEach","ns","is","filter","length","contextMenuRoot","$trigger","find","force","$menu","remove","off","$currentTrigger","match","isEmptyObject","itemClick","itemClickEvent","contextMenuItemObj","contextmenu:focus.contextMenu","focusItem","contextmenu:blur.contextMenu","blurItem","contextmenu.contextMenu","abortevent","mouseenter.contextMenu","itemMouseenter","mouseleave.contextMenu","itemMouseleave","on","contextmenu:hide.contextMenu","hideMenu","prevcommand.contextMenu","prevItem","nextcommand.contextMenu","nextItem","menuMouseenter","menuMouseleave","inputClick","contextmenu","mouseenter","mouseleave","click","_this2","menu","userOptions","extend","first","contextMenuData","inputs","item","type","selected","$input","val","prop","ContextMenuOperations","TypeError","menuData","x","y","additionalZValue","_ContextMenuHelper2","zindex","layer","addClass","pos","offset","right","left","outerWidth","bottom","top","outerHeight","$layer","hovering","pageX","pageY","setTimeout","_typeof","removeData","removeClass","$selected","rootMenuData","createNameNode","$name","_accesskey","_beforeAccesskey","append","createTextNode","_afterAccesskey","isHtmlName","accesskey","k","accesskeys","$t","$label","_ContextMenuItemTypes2","$node","contextMenuKey","ak","aks","splitAccesskey","matched","RegExp","commands","callbacks","hasTypes","attr","height","prependTo","then","processPromises","focusInput","blurInput","_icon","substring","support","eventSelectstart","nested","domMenu","display","getBoundingClientRect","Math","ceil","width","minWidth","maxWidth","index","resize","addBack","children","$item","$window","z-index","opacity","background-color","insertBefore","layerClick","style","promise","finishPromiseProcess","errorPromise","errorItem","error","console","log","bind","$menuOffset","winHeight","winScrollTop","scrollTop","menuHeight","overflow-x","overflow-y","ContextMenuHelper","zin","$tt","max","parseInt","parent","indexOf","toLowerCase","split","charAt","toUpperCase","push","ui","my","at","of","collision","offsetParentOffset","offsetParent","scrollLeft","ContextMenuHtml5Builder","node","$this","$children","builder","nodeName","label","inputLabel","clone","_defaults","ContextMenuEventHandler","hoveract","preventDefault","stopImmediatePropagation","currentTarget","originalEvent","mouseButton","hasClass","built","showMenu","Event","button","$related","relatedTarget","$document","closest","mousemove","timer","clearTimeout","fakeClick","target","triggerAction","elementFromPoint","isContentEditable","range","createRange","sel","getSelection","selectNode","collapse","removeAllRanges","addRange","one","isInput","stopPropagation","targetZIndex","getZIndexOfTriggerTarget","parentElement","keyCode","keyStop","shiftKey","blur","$parent","itemdata","String","fromCharCode","$s","$prev","prev","last","$round","focus","$next","next","targetMenu","join","not","$o","isPlainObject"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,UAAAH,GACA,gBAAAC,SACAA,QAAAI,YAAAL,IAEAD,EAAAM,YAAAL,KACC,mBAAAM,WAAAC,KAAA,WACD,gBAAAC,GCNA,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAT,OAGA,IAAAC,GAAAS,EAAAD,IACAE,EAAAF,EACAG,KACAZ,WAUA,OANAa,GAAAJ,GAAAK,KAAAb,EAAAD,QAAAC,IAAAD,QAAAQ,GAGAP,EAAAW,KAGAX,EAAAD,QAvBA,GAAAU,KA4DA,OAhCAF,GAAAO,EAAAF,EAGAL,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAjB,EAAAkB,EAAAC,GACAX,EAAAY,EAAApB,EAAAkB,IACAG,OAAAC,eAAAtB,EAAAkB,GACAK,gBACAC,cACAC,IAAAN,KAMAX,EAAAkB,EAAA,SAAAzB,GACA,GAAAkB,GAAAlB,KAAA0B,WACA,WAA2B,MAAA1B,GAAA2B,SAC3B,WAAiC,MAAA3B,GAEjC,OADAO,GAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAS,EAAAC,GAAsD,MAAAT,QAAAU,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDtB,EAAAyB,EAAA,GAGAzB,IAAA0B,EAAA,cAAA3B,EAAA4B,EAAAT,GAAA,YAAAL,QAAAC,eAAAa,EAAA,cAAAC,OAAA,IAAAD,EAAAP,SCJIS,OAAQ,GAKRC,KAAM,OAKNC,SAAU,WAKVC,SAAU,WAKVC,MAAO,QAKPC,OAAQ,SAKRC,KAAM,OAKNC,UAAW,eAKXC,QAAS,iBAAAtC,EAAA4B,EAAAT,GAAA,YAAAL,QAAAC,eAAAa,EAAA,cAAAC,OAAA,GCjGb,IAAAU,GAAAtC,EAAA,EAAA2B,GAAAP,SAkGImB,SAAU,KAGVC,SAAU,KAGVC,QAAS,QAGTC,YAGAC,MAAO,IAIPC,cAKAC,uBAGAC,qBAEAC,UAAW,GAGXC,YACIC,MAAO,qBACPC,SAAU,wBACVC,QAAS,uBACTC,cAAe,8BAEfC,KAAM,oBACNC,SAAU,yBACVC,QAAS,wBACTC,SAAU,yBACVC,UAAW,0BACXC,WAAY,2BACZC,QAAS,wBACTC,SAAU,yBACVC,iBAAkB,6BAItBC,OAAQ,EAGRC,WACIC,SAAU,GACVC,KAAM,YACNC,KAAM,WAIVC,QACIF,KAAMG,EAAEC,KACRH,KAAME,EAAEC,KACRC,UAAWF,EAAEC,MAIjBE,SAAU,KAGVC,SAGAC,SAEAC,SAGAC,sCAGAC,oBAGAC,gEC/KJ,SAAAC,GAAA/E,GAAA,MAAAA,MAAAoB,WAAApB,GAAAqB,QAAArB,GAHAC,EAAA,EACA,IAAA+E,GAAAD,EAAA9E,EAAA,IAAAY,EAAAkE,EACA9E,EAAA,IAAAG,EAAA2E,EACA9E,EAAA,KAyBMgF,EAAU,GAAAC,GAAA7D,QAGZ8D,EAAc,SAAUC,EAAWC,GACnCJ,EAAQK,QAAQF,EAAWC,GAG/BF,GAAYI,eAAiB,SAAUC,EAAiBC,GACpD,MAAOR,GAAQM,eAAeC,EAAiBC,IAEnDN,EAAYO,eAAiB,SAAUF,EAAiBC,GACpD,MAAOR,GAAQM,eAAeC,EAAiBC,IAEnDN,EAAYQ,SAAW,SAAUC,GAC7B,MAAOX,GAAQY,aAAaF,SAASC,IAIzCT,EAAYW,SAAWb,EAAQa,SAC/BX,EAAYR,MAAQM,EAAQa,SAASnB,MACrCQ,EAAYF,QAAUA,EAGtBE,EAAYY,OAASd,EAAQe,QAC7Bb,EAAYc,WAAahB,EAAQgB,WACjCd,EAAYe,MAAQjB,EAAQiB,MAC5Bf,EAAYgB,WAAalB,EAAQkB,WAEjC9B,EAAE+B,GAAGjB,YAALkB,EAAAhF,QACAgD,EAAEc,YAAcA,EAEhBzF,EAAOD,SAAWI,sBAAayG,6ECzD/B,SAAA7F,GAAAT,GAAA,MAAAA,MAAAoB,WAAApB,GAAAqB,QAAArB,GDyD+BsG,8SC5D/BrG,EAAA,IAAAG,EAAAK,EACAR,EAAA,IAAA8E,EAAAtE,EACAR,EAAA,IAAA0B,EAAAlB,EACAR,EAAA,IAEqBJ,aAmBjB,QAAAA,mGAAcE,KAAAF,GACVE,KAAK8F,aAAe,GAAAU,GAAAlF,QACpBtB,KAAK+F,SAALU,EAAAnF,QACAtB,KAAKiG,QAAU,GAAAS,GAAApF,QACftB,KAAKkG,WAAa,GAAAS,GAAArF,QAClBtB,KAAKoG,cACLpG,KAAK4G,eACL5G,KAAKmG,SACLnG,KAAK6G,QAAU,QAAA5B,GAAAhF,IAAA6G,IAAA,UAAAhF,MAAA,SAYXuD,EAAWC,GACf,GAAMyB,GAAsB/G,KAAKgH,mBAAmB3B,EAAWC,EAI/D,QAHAD,EAAY0B,EAAoB1B,UAChCC,EAAUyB,EAAoBzB,QAEtBD,GACJ,IAAK,SAEDrF,KAAKiH,OAAO3B,EACZ,MAEJ,KAAK,SAEDtF,KAAKkH,OAAO5B,EACZ,MAEJ,KAAK,UACDtF,KAAKmH,QAAQ7B,EACb,MAEJ,KAAK,QACDtF,KAAKoH,MAAM9B,EACX,MAEJ,SACI,KAAM,IAAI+B,OAAM,sBAAwBhC,EAAY,KAG5D,MAAOrF,oCAULsF,GACFA,EAAUtF,KAAKsH,aAAahC,MAEH,eAAiBiC,UAASC,MAAQ,uBAAyBC,UAExC,iBAAZnC,SAAyBA,IACrDhB,EAAE,wBAAwBoD,KAAK,WACvB1H,KAAK2H,IACLrD,EAAEc,aACE3C,SAAU,gBAAkBzC,KAAK2H,GAAK,IACtCjD,MAAOJ,EAAEc,YAAYQ,SAAS5F,UAGvC4H,IAAI,UAAW,WAAAd,IAAA,UAAAhF,MAAA,SAWlBwD,GAAS,GAAAuC,GAAA7H,KAGT8H,QACJ,KAHAxC,EAAUtF,KAAKsH,aAAahC,IAGhByC,YAAa,CAErB,GAAMC,GAAU1C,EAAQ0C,OAExBjH,QAAOkH,KAAKjI,KAAKmG,OAAO+B,QAAQ,SAACC,GAC7B,GAAIrH,GAAI+G,EAAK1B,MAAMgC,EAEnB,QAAKrH,IAKAwD,EAAE0D,GAASI,GAAGtH,EAAE2B,aAIrBqF,EAAexD,EAAE,sBAAsB+D,OAAO,aAC7BC,QAAUR,EAAapC,OAAO6C,gBAAgBC,SAASJ,GAAG9D,EAAExD,EAAEkH,SAASS,KAAK3H,EAAE2B,YAC3FqF,EAAanF,QAAQ,oBAAqB+F,WAG1Cb,EAAK1B,MAAMrF,EAAEqH,IAAIQ,OACjBd,EAAK1B,MAAMrF,EAAEqH,IAAIQ,MAAMC,eAEpBf,GAAK1B,MAAMrF,EAAEqH,IAEpB7D,EAAExD,EAAEkH,SAASa,IAAI/H,EAAEqH,cAGf7C,GAAQ7C,SAcTzC,KAAKoG,WAAWd,EAAQ7C,aAC/BqF,EAAexD,EAAE,sBAAsB+D,OAAO,aAC7BC,QAAUR,EAAapC,OAAO6C,gBAAgBC,SAASJ,GAAG9C,EAAQ7C,WAC/EqF,EAAanF,QAAQ,oBAAqB+F,WAG1C1I,KAAKmG,MAAMnG,KAAKoG,WAAWd,EAAQ7C,WAAWkG,OAC9C3I,KAAKmG,MAAMnG,KAAKoG,WAAWd,EAAQ7C,WAAWkG,MAAMC,eAEjD5I,MAAKmG,MAAMnG,KAAKoG,WAAWd,EAAQ7C,WAE1C6B,EAAEiD,UAAUsB,IAAI7I,KAAKoG,WAAWd,EAAQ7C,aAxBxC6B,EAAEiD,UAAUsB,IAAI,qCAEhB9H,OAAOkH,KAAKjI,KAAKmG,OAAO+B,QAAQ,SAACC,GAC7B,GAAIrH,GAAI+G,EAAK1B,MAAMgC,EACnB7D,GAAExD,EAAEkH,SAASa,IAAI/H,EAAEqH,MAGvBnI,KAAKoG,cACLpG,KAAKmG,SACLnG,KAAK6G,QAAU,EACf7G,KAAK4G,eAELtC,EAAE,2CAA2CsE,SAcjD5I,MAAKiG,QAAQ6C,gBAAkB,QAAAhC,IAAA,SAAAhF,MAAA,SAU5BwD,GAGH,KAFAA,EAAUtF,KAAKsH,aAAahC,IAEf7C,SACT,KAAM,IAAI4E,OAAM,wBAGpB,IAAI/B,EAAQ7C,SAASsG,MAAM,yCACvB,KAAM,IAAI1B,OAAM,4BAA8B/B,EAAQ7C,SAAW,wCAErE,KAAK6C,EAAQX,SAAWW,EAAQZ,OAASJ,EAAE0E,cAAc1D,EAAQZ,QAC7D,KAAM,IAAI2C,OAAM,qBAcpB,IAZArH,KAAK6G,UACLvB,EAAQ6C,GAAK,eAAiBnI,KAAK6G,QAC9BvB,EAAQyC,cACT/H,KAAKoG,WAAWd,EAAQ7C,UAAY6C,EAAQ6C,IAEhDnI,KAAKmG,MAAMb,EAAQ6C,IAAM7C,EAGpBA,EAAQ3C,UACT2C,EAAQ3C,QAAU,UAGjB3C,KAAK4G,YAAa,CACnB,GAAMqC,GAAuC,UAA3B3D,EAAQ4D,eAA6B,oBAAsB,sBACvEC,GAGFC,gCAAiCpJ,KAAKiG,QAAQoD,UAC9CC,+BAAgCtJ,KAAKiG,QAAQsD,SAC7CC,0BAA2BxJ,KAAKiG,QAAQwD,WACxCC,yBAA0B1J,KAAKiG,QAAQ0D,eACvCC,yBAA0B5J,KAAKiG,QAAQ4D,eAE3CV,GAAmBF,GAAajJ,KAAKiG,QAAQgD,UAG7C3E,EAAEiD,UACGuC,IACGC,+BAAgC/J,KAAKiG,QAAQ+D,SAC7CC,0BAA2BjK,KAAKiG,QAAQiE,SACxCC,0BAA2BnK,KAAKiG,QAAQmE,SACxCZ,0BAA2BxJ,KAAKiG,QAAQwD,WACxCC,yBAA0B1J,KAAKiG,QAAQoE,eACvCT,yBAA0B5J,KAAKiG,QAAQqE,gBACxC,sBACFR,GAAG,sBAAuB,sBAAuB9J,KAAKiG,QAAQsE,YAC9DT,GAAGX,EAAoB,sBAE5BnJ,KAAK4G,eAOT,OAHAtB,EAAQ0C,QACH8B,GAAG,cAAgBxE,EAAQ6C,GAAI7C,EAAQ7C,SAAU6C,EAAStF,KAAKiG,QAAQuE,aAEpElF,EAAQ3C,SACZ,IAAK,QACD2C,EAAQ0C,QACH8B,GAAG,aAAexE,EAAQ6C,GAAI7C,EAAQ7C,SAAU6C,EAAStF,KAAKiG,QAAQwE,YACtEX,GAAG,aAAexE,EAAQ6C,GAAI7C,EAAQ7C,SAAU6C,EAAStF,KAAKiG,QAAQyE,WAC3E,MAEJ,KAAK,OACDpF,EAAQ0C,QAAQ8B,GAAG,QAAUxE,EAAQ6C,GAAI7C,EAAQ7C,SAAU6C,EAAStF,KAAKiG,QAAQ0E,MACjF,MACJ,KAAK,aACDrF,EAAQ0C,QAAQ8B,GAAG,aAAexE,EAAQ6C,GAAI7C,EAAQ7C,SAAU6C,EAAStF,KAAKiG,QAAQ0E,OAazFrF,EAAQX,OACT3E,KAAKkG,WAAWgB,OAAO,KAAM5B,kCAW9BA,GAAS,GAAAsF,GAAA5K,MACZsF,EAAUtF,KAAKsH,aAAahC,IAEhByC,YACR/H,KAAKkG,WAAWe,OAAO,KAAM3C,EAAEgB,EAAQ0C,SAAStC,KAAK,eAAgBpB,EAAEgB,EAAQ0C,SAAStC,KAAK,oBAE7F3E,OAAOkH,KAAKjI,KAAKmG,OAAO+B,QAAQ,SAAC2C,GAC7BD,EAAK1E,WAAWe,OAAO,KAAM2D,EAAKzE,MAAM0E,2CAavCC,GACkB,gBAAhBA,KACPA,GAAerI,SAAUqI,GAG7B,IAAMxF,GAAUhB,EAAEyG,WAAc7F,QAASlF,MAAOA,KAAK+F,SAAU+E,EAU/D,OARKxF,GAAQ0C,SAAY1C,EAAQ0C,QAAQM,QAKrChD,EAAQ0C,QAAU1D,EAAEgB,EAAQ0C,SAASgD,QACrC1F,EAAQyC,aAAezD,EAAEgB,EAAQ0C,SAASI,GAAG9D,EAAEiD,aAL/CjC,EAAQ0C,QAAU1D,EAAEiD,UACpBjC,EAAQyC,gBAMLzC,6CAWQD,EAAWC,GAW1B,MAVyB,gBAAdD,KACPC,EAAUD,EACVA,EAAY,UAGO,gBAAZC,GACPA,GAAW7C,SAAU6C,YACPA,IACdA,OAEID,YAAWC,kDAcR2F,EAAiBvF,YACjBA,IACPA,MAGJpB,EAAEoD,KAAKuD,EAAgBC,OAAQ,SAAUpE,EAAKqE,GAC1C,OAAQA,EAAKC,MACT,IAAK,OACL,IAAK,WACDD,EAAKrJ,MAAQ4D,EAAKoB,IAAQ,EAC1B,MAEJ,KAAK,WACDqE,EAAKE,WAAa3F,EAAKoB,EACvB,MAEJ,KAAK,QACDqE,EAAKE,UAAY3F,EAAKyF,EAAKhJ,QAAU,MAAQgJ,EAAKrJ,KAClD,MAEJ,KAAK,SACDqJ,EAAKE,SAAW3F,EAAKoB,IAAQ,SAAAA,IAAA,iBAAAhF,MAAA,SAiB9BmJ,EAAiBvF,GAyB5B,gBAxBWA,IACPA,MAGJpB,EAAEoD,KAAKuD,EAAgBC,OAAQ,SAAUpE,EAAKqE,GAC1C,OAAQA,EAAKC,MACT,IAAK,OACL,IAAK,WACL,IAAK,SACD1F,EAAKoB,GAAOqE,EAAKG,OAAOC,KACxB,MAEJ,KAAK,WACD7F,EAAKoB,GAAOqE,EAAKG,OAAOE,KAAK,UAC7B,MAEJ,KAAK,QACGL,EAAKG,OAAOE,KAAK,aACjB9F,EAAKyF,EAAKhJ,OAASgJ,EAAKrJ,UAMjC4D,qBA/YM5F,+BCJrB,SAAA8B,GAAA3B,GAAA,MAAAA,MAAAoB,WAAApB,GAAAqB,QAAArB,GDIqBH,0fCLrBI,EAAA,IAAA8E,EAAApD,EACA1B,EAAA,IAEqBuL,aAKjB,QAAAA,KACI,gBAAAxL,EAAA4B,GAAA,KAAA5B,YAAA4B,IAAA,SAAA6J,WAAA,sCADU1L,KAAAyL,GACHzL,4CAeNC,EAAG0L,EAAUC,EAAGC,GACjB,GAAMrD,GAAWlE,EAAEtE,MACb4H,IASN,IANAtD,EAAE,uBAAuB3B,QAAQ,aAGjCgJ,EAASnD,SAAWA,OAGhBmD,EAAStH,OAAOF,KAAK3D,KAAKgI,EAAUvI,EAAG0L,GAA3C,CAYA,GANAA,EAASzG,QAAQgB,WAAWe,OAAOzG,KAAKgI,EAAUvI,EAAG0L,GAGrDA,EAAS7G,SAAStE,KAAKgI,EAAUvI,EAAG0L,EAAUC,EAAGC,GAG7CF,EAAS3H,OAAQ,CACjB,GAAI8H,GAAmBH,EAAS3H,MAED,mBAApB2H,GAAS3H,SAChB8H,EAAmBH,EAAS3H,OAAOxD,KAAKgI,EAAUmD,IAEtD/D,EAAI5D,OAAS+H,EAAAzK,QAAkB0K,OAAOxD,GAAYsD,EAItDH,EAASzG,QAAQgB,WAAW+F,MAAMzL,KAAKmL,EAAShD,MAAO1I,EAAG0L,EAAU/D,EAAI5D,QAGxE2H,EAAShD,MAAMF,KAAK,MAAMb,IAAI,SAAUA,EAAI5D,OAAS,GAGrD2H,EAAShD,MAAMf,IAAIA,GAAK+D,EAAS1H,UAAUE,MAAMwH,EAAS1H,UAAUC,SAAU,WAC1EsE,EAAS7F,QAAQ,uBAEjBgJ,EAASzG,QAAQgB,WAAW1B,UAAUvE,EAAG0L,GACzCA,EAAStH,OAAOG,UAAUgE,EAAUvI,EAAG0L,KAG3CnD,EACK9C,KAAK,cAAeiG,GACpBO,SAAS,uBAGd5H,EAAEiD,UAAUsB,IAAI,uBAAuBiB,GAAG,sBAAuB6B,EAAUA,EAASzG,QAAQe,QAAQa,KAEhG6E,EAAS/I,UAET0B,EAAEiD,UAAUuC,GAAG,gCAAiC,SAAC7J,GAG7C,GAAMkM,GAAM3D,EAAS4D,QACrBD,GAAIE,MAAQF,EAAIG,KAAO9D,EAAS+D,aAChCJ,EAAIK,OAASL,EAAIM,IAAMjE,EAASkE,eAE5Bf,EAASgB,QAAWhB,EAASiB,UAAe3M,EAAE4M,OAASV,EAAIG,MAAQrM,EAAE4M,OAASV,EAAIE,OAAYpM,EAAE6M,OAASX,EAAIM,KAAOxM,EAAE6M,OAASX,EAAIK,QAEnIO,WAAW,WACFpB,EAASiB,UAA+B,OAAnBjB,EAAShD,gBAAyBgD,EAAShD,OACjEgD,EAAShD,MAAMhG,QAAQ,qBAE5B,UAxDXgJ,GAASzG,QAAQe,QAAQ6C,gBAAkB,QAAAhC,IAAA,OAAAhF,MAAA,SAyE9C7B,EAAG0L,EAAUjD,GACd,GAAMF,GAAWlE,EAAEtE,KACnB,IAAwB,qBAAb2L,EAAP,YAAAqB,EAAOrB,KAAyBnD,EAAS9C,KAAK,eAC9CiG,EAAWnD,EAAS9C,KAAK,mBACtB,IAAwB,qBAAbiG,EAAP,YAAAqB,EAAOrB,IACd,MAIJ,IAAKjD,IAASiD,EAAStH,aAAUsH,EAAStH,OAAOD,KAAK5D,KAAKgI,EAAUvI,EAAG0L,GAAxE,CASA,GAJAnD,EACKyE,WAAW,eACXC,YAAY,uBAEbvB,EAASgB,OAAQ,CAEjBI,YAAsBJ,EAInBhB,EAASgB,OAHD,WACHA,EAAO/D,WAEM,GAErB,WACW+C,GAASgB,OAClB,MAAO1M,GACL0L,EAASgB,OAAS,MATV,GAAUA,EAc1BhB,GAASzG,QAAQe,QAAQ6C,gBAAkB,KAE3C6C,EAAShD,MAAMF,KAAK,IAAMkD,EAASzI,WAAWC,OAAOR,QAAQ,oBAC7DgJ,EAASwB,UAAY,KAErBxB,EAAShD,MAAMF,KAAK,IAAMkD,EAASzI,WAAWG,SAAS6J,YAAYvB,EAASzI,WAAWG,SAEvFiB,EAAEiD,UAAUsB,IAAI,wBAAwBA,IAAI,uBAExC8C,EAAShD,OACTgD,EAAShD,MAAMgD,EAAS1H,UAAUG,MAAMuH,EAAS1H,UAAUC,SAAU,WAE7DyH,EAAShH,QACTgH,EAAShD,MAAMC,SACf7H,OAAOkH,KAAK0D,GAAUzD,QAAQ,SAACpB,GAC3B,OAAQA,GACJ,IAAK,KACL,IAAK,WACL,IAAK,QACL,IAAK,UACD,QAEJ,SACI6E,EAAS7E,SACT,WACW6E,GAAS7E,GAClB,MAAO7G,IAET,aAKhB8M,WAAW,WACPvE,EAAS7F,QAAQ,uBAClB,UAAAmE,IAAA,SAAAhF,MAAA,SAgBR7B,EAAGwF,EAAiB2H,GAsBvB,QAASC,GAAelC,GACpB,GAAMmC,GAAQhJ,EAAE,gBAChB,IAAI6G,EAAKoC,WACDpC,EAAKqC,kBACLF,EAAMG,OAAOlG,SAASmG,eAAevC,EAAKqC,mBAE9ClJ,EAAE,iBACG4H,SAAS,0BACTlK,KAAKmJ,EAAKoC,YACV7K,SAAS4K,GACVnC,EAAKwC,iBACLL,EAAMG,OAAOlG,SAASmG,eAAevC,EAAKwC,sBAG9C,IAAIxC,EAAKyC,WAAY,CAEjB,YAAWzC,EAAK0C,UACZ,KAAM,IAAIxG,OAAM,6FAEpBiG,GAAMjL,KAAK8I,EAAKvK,UAEhB0M,GAAMtL,KAAKmJ,EAAKvK,KAGxB,OAAO0M,GA9C0B,GAAAzF,GAAA7H,cAC1BoN,IACPA,EAAe3H,GAInBA,EAAgBkD,MAAQrE,EAAE,uCAAuC4H,SAASzG,EAAgBxC,WAAa,IAAIyC,MACvGN,YAAeK,EACf8C,gBAAmB6E,KAGtB,YAAa,WAAY,UAAUlF,QAAQ,SAAC4F,GACzCrI,EAAgBqI,MACXV,EAAaU,KACdV,EAAaU,SAIhBV,EAAaW,aACdX,EAAaW,eA+BjBhN,OAAOkH,KAAKxC,EAAgBf,OAAOwD,QAAQ,SAACpB,GACxC,GAAIqE,GAAO1F,EAAgBf,MAAMoC,GAC7BkH,EAAK1J,EAAE,uCAAuC4H,SAASf,EAAKlI,WAAa,IACzEgL,EAAS,KACT3C,EAAS,IAqBb,IAjBA0C,EAAGlE,GAAG,QAASxF,EAAEC,MAKG,gBAAT4G,IAAmC,iBAAdA,EAAKC,OACjCD,GAAQC,KAAM8C,EAAA5M,QAAqBgB,YAGvC6I,EAAKgD,MAAQH,EAAGtI,MACZN,YAAeK,EACf8C,gBAAmB6E,EACnBgB,eAAkBtH,aAKXqE,EAAK0C,UAEZ,IAAK,GAAWQ,GADVC,EAAMvC,EAAAzK,QAAkBiN,eAAepD,EAAK0C,WACzCxN,EAAI,EAAOgO,EAAKC,EAAIjO,GAAIA,IAC7B,IAAK+M,EAAaW,WAAWM,GAAK,CAC9BjB,EAAaW,WAAWM,GAAMlD,CAC9B,IAAMqD,GAAUrD,EAAKvK,KAAKmI,MAAM,GAAI0F,QAAO,UAAYJ,EAAK,SAAU,KAClEG,KACArD,EAAKqC,iBAAmBgB,EAAQ,GAChCrD,EAAKoC,WAAaiB,EAAQ,GAC1BrD,EAAKwC,gBAAkBa,EAAQ,GAEnC,OAKZ,GAAIrD,EAAKC,MAAQgC,EAAaxI,MAAMuG,EAAKC,MAErCgC,EAAaxI,MAAMuG,EAAKC,MAAM5K,KAAKwN,EAAI/N,EAAGkL,EAAM1F,EAAiB2H,IAEhE3H,EAAiB2H,GAAclF,QAAQ,SAAC4F,GACrCA,EAAEY,SAAS5H,GAAOqE,EAGW,kBAAlBA,GAAK1G,mBAAmCqJ,EAAEa,UAAU7H,aAA+BrB,EAAgB2F,OAC1G0C,EAAEa,UAAU7H,GAAOqE,EAAK1G,gBAG7B,CAoBH,OAlBI0G,EAAKC,OAAS8C,EAAA5M,QAAqBgB,UACnC0L,EAAG9B,SAAS,0BAA4BkB,EAAalK,WAAWI,eACzD6H,EAAKC,OAAS8C,EAAA5M,QAAqBe,KAC1C2L,EAAG9B,SAAS,qBAAuBkB,EAAalK,WAAWI,eACpD6H,EAAKC,MAAQD,EAAKC,OAAS8C,EAAA5M,QAAqBiB,SACvD0L,EAAS3J,EAAE,mBAAmB5B,SAASsL,GACvCX,EAAelC,GAAMzI,SAASuL,GAE9BD,EAAG9B,SAAS,sBACZzG,EAAgBmJ,aACfnJ,EAAiB2H,GAAclF,QAAQ,SAAC4F,GACrCA,EAAEY,SAAS5H,GAAOqE,EAClB2C,EAAE5C,OAAOpE,GAAOqE,KAEbA,EAAKzG,QACZyG,EAAKC,KAAO8C,EAAA5M,QAAqBiB,SAG7B4I,EAAKC,MACT,IAAK8C,GAAA5M,QAAqBgB,UACtB,KAEJ,KAAK4L,GAAA5M,QAAqBU,KACtBsJ,EAAShH,EAAE,2CACNuK,KAAK,OAAQ,sBAAwB/H,GACrCyE,IAAIJ,EAAKrJ,OAAS,IAClBY,SAASuL,EACd,MAEJ,KAAKC,GAAA5M,QAAqBW,SACtBqJ,EAAShH,EAAE,iCACNuK,KAAK,OAAQ,sBAAwB/H,GACrCyE,IAAIJ,EAAKrJ,OAAS,IAClBY,SAASuL,GAEV9C,EAAK2D,QACLxD,EAAOwD,OAAO3D,EAAK2D,OAEvB,MAEJ,KAAKZ,GAAA5M,QAAqBY,SACtBoJ,EAAShH,EAAE,+CACNuK,KAAK,OAAQ,sBAAwB/H,GACrCyE,IAAIJ,EAAKrJ,OAAS,IAClB0J,KAAK,YAAaL,EAAKE,UACvB0D,UAAUd,EACf,MAEJ,KAAKC,GAAA5M,QAAqBa,MACtBmJ,EAAShH,EAAE,4CACNuK,KAAK,OAAQ,sBAAwB1D,EAAKhJ,OAC1CoJ,IAAIJ,EAAKrJ,OAAS,IAClB0J,KAAK,YAAaL,EAAKE,UACvB0D,UAAUd,EACf,MAEJ,KAAKC,GAAA5M,QAAqBc,OACtBkJ,EAAShH,EAAE,6BACNuK,KAAK,OAAQ,sBAAwB/H,GACrCpE,SAASuL,GACV9C,EAAK7F,UACLvE,OAAOkH,KAAKkD,EAAK7F,SAAS4C,QAAQ,SAACpG,GAC/BwC,EAAE,qBAAqBiH,IAAIzJ,GAAOE,KAAKmJ,EAAK7F,QAAQxD,IAAQY,SAAS4I,KAEzEA,EAAOC,IAAIJ,EAAKE,UAEpB,MAEJ,KAAK6C,GAAA5M,QAAqBiB,QACtB8K,EAAelC,GAAMzI,SAASsL,GAC9B7C,EAAKzI,SAAWyI,EAAKgD,MACrBH,EAAGtI,KAAK,cAAeyF,GAAMe,SAAS,wBACtCf,EAAK1G,SAAW,KAKe,kBAApB0G,GAAKzG,MAAMsK,KAElB5B,EAAalI,QAAQgB,WAAW+I,gBAAgBhP,EAAGkL,EAAMiC,EAAcjC,EAAKzG,OAG5E0I,EAAalI,QAAQgB,WAAWgB,OAAOjH,EAAGkL,EAAMiC,EAEpD,MAEJ,KAAKc,GAAA5M,QAAqBe,KACtBiC,EAAE6G,EAAK9I,MAAMK,SAASsL,EACtB,MAEJ,UACKvI,EAAiB2H,GAAclF,QAAQ,SAAC4F,GACrCA,EAAEY,SAAS5H,GAAOqE,EAGW,kBAAlBA,GAAK1G,mBAAmCqJ,EAAEa,UAAU7H,aAA+BrB,EAAgB2F,OAC1G0C,EAAEa,UAAU7H,GAAOqE,EAAK1G,YAGhC4I,EAAelC,GAAMzI,SAASsL,GAKlC7C,EAAKC,MAAQD,EAAKC,OAAS8C,EAAA5M,QAAqBiB,SAAW4I,EAAKC,OAAS8C,EAAA5M,QAAqBe,MAAQ8I,EAAKC,OAAS8C,EAAA5M,QAAqBgB,YACzIgJ,EACKxB,GAAG,QAASsD,EAAalI,QAAQe,QAAQiJ,YACzCpF,GAAG,OAAQsD,EAAalI,QAAQe,QAAQkJ,WAEzChE,EAAK9G,QACLiH,EAAOxB,GAAGqB,EAAK9G,OAAQoB,IAK3B0F,EAAK5H,OACoB,kBAAd4H,GAAK5H,KACZ4H,EAAKiE,MAAQjE,EAAK5H,KAAK/C,KAAVqH,EAAqB5H,EAAG+N,EAAIlH,EAAKqE,EAAM1F,EAAiB2H,GAE5C,gBAAdjC,GAAK5H,MAAmD,QAA9B4H,EAAK5H,KAAK8L,UAAU,EAAG,GAExDlE,EAAKiE,MAAQhC,EAAalK,WAAWK,KAAO,IAAM6J,EAAalK,WAAWK,KAAO,WAAa4H,EAAK5H,KAEnG4H,EAAKiE,MAAQhC,EAAalK,WAAWK,KAAO,IAAM6J,EAAalK,WAAWK,KAAO,IAAM4H,EAAK5H,KAGpGyK,EAAG9B,SAASf,EAAKiE,QAKzBjE,EAAKG,OAASA,EACdH,EAAK8C,OAASA,EAGdD,EAAGtL,SAAS+C,EAAgBkD,QAGvBlD,EAAgBmJ,UAAYtK,EAAEgL,QAAQC,kBAIvCvB,EAAGlE,GAAG,gCAAiCrE,EAAgBP,QAAQe,QAAQwD,cAI1EhE,EAAgB0I,OACjB1I,EAAgBkD,MAAMf,IAAI,UAAW,QAAQsE,SAAS,6BAE1DzG,EAAgBkD,MAAMjG,SAAS+C,EAAgB/C,UAAY6E,SAASC,qCAcjEvH,EAAG0I,EAAO6G,GACb,GAAIC,SAMJ9G,GAAMf,KAAK9C,SAAU,WAAY4K,QAAS,UAE1C/G,EAAMjD,KAAK,SACN+J,EAAU9G,EAAMxH,IAAI,IAAIwO,sBACnBC,KAAKC,KAAKJ,EAAQE,wBAAwBG,OAC1CnH,EAAM4D,aAAe,GAE/B5D,EAAMf,KACF9C,SAAU,SACViL,SAAU,MACVC,SAAU,aAGdrH,EAAMF,KAAK,aAAaf,KAAK,SAACuI,EAAOpK,GACjC5F,EAAEyF,KAAKR,QAAQgB,WAAWgK,OAAOjQ,EAAGqE,EAAEuB,SAIrC2J,GACD7G,EAAMF,KAAK,MAAM0H,UAAUvI,KACvB9C,SAAU,GACV4K,QAAS,GACTK,SAAU,GACVC,SAAU,KACXzD,WAAW,WACV,MAAOjI,GAAEtE,MAAM0F,KAAK,cAAAoB,IAAA,SAAAhF,MAAA,SAgBzB7B,EAAGwF,EAAiB2H,GACvB,GAAM5E,GAAWxI,cACNoN,IACPA,EAAe3H,GACFP,QAAQgB,WAAWgK,OAAOjQ,EAAGwF,EAAgBkD,OAG9DlD,EAAgBkD,MAAMyH,WAAW1I,KAAK,SAAUuI,EAAOpK,GACnD,GAAIwK,GAAQ/L,EAAEuB,GACViB,EAAMuJ,EAAM3K,KAAK,kBACjByF,EAAO1F,EAAgBf,MAAMoC,GAE7B1D,EAAqC,kBAAlB+H,GAAK/H,UAA2B+H,EAAK/H,SAAS5C,KAAKgI,EAAUvI,EAAG6G,EAAKrB,EAAiB2H,SAAkBjC,EAAK/H,QAqBpI,IAXAiN,GAP4B,kBAAjBlF,GAAK9H,QACF8H,EAAK9H,QAAQ7C,KAAKgI,EAAUvI,EAAG6G,EAAKrB,EAAiB2H,YACjDjC,EAAK9H,cACT8H,EAAK9H,SAIH,OAAS,UAGzBgN,EAAMjN,EAAW,WAAa,eAAegK,EAAalK,WAAWE,UAE5C,kBAAd+H,GAAK5H,OACZ8M,EAAMnD,YAAY/B,EAAKiE,OACvBjE,EAAKiE,MAAQjE,EAAK5H,KAAK/C,KAAKgI,EAAUvI,EAAGoQ,EAAOvJ,EAAKqE,EAAM1F,EAAiB2H,GAC5EiD,EAAMnE,SAASf,EAAKiE,QAGpBjE,EAAKC,KAKL,OAHAiF,EAAM5H,KAAK,2BAA2B+C,KAAK,WAAYpI,GAG/C+H,EAAKC,MACT,IAAK8C,GAAA5M,QAAqBU,KAC1B,IAAKkM,GAAA5M,QAAqBW,SACtBkJ,EAAKG,OAAOC,IAAIJ,EAAKrJ,OAAS,GAC9B,MAEJ,KAAKoM,GAAA5M,QAAqBY,SAC1B,IAAKgM,GAAA5M,QAAqBa,MACtBgJ,EAAKG,OAAOC,IAAIJ,EAAKrJ,OAAS,IAAI0J,KAAK,YAAaL,EAAKE,SACzD,MAEJ,KAAK6C,GAAA5M,QAAqBc,OACtB+I,EAAKG,OAAOC,KAAuB,IAAlBJ,EAAKE,SAAiB,IAAMF,EAAKE,WAAa,IAKvEF,EAAKxC,OAELyE,EAAalI,QAAQgB,WAAWe,OAAOzG,KAAKgI,EAAUvI,EAAGkL,EAAMiC,mCAiBrEnN,EAAG0L,EAAU3H,GACf,GAAMsM,GAAUhM,EAAEmD,QAIZkF,EAAShB,EAASgB,OAASrI,EAAE,uCAC9BsD,KACGkH,OAAQwB,EAAQxB,SAChBgB,MAAOQ,EAAQR,QACfJ,QAAS,QACT5K,SAAU,QACVyL,UAAWvM,EACXyI,IAAK,EACLH,KAAM,EACNkE,QAAS,EACTnI,OAAQ,mBACRoI,mBAAoB,SAEvB/K,KAAK,kBAAmBiG,GACxB+E,aAAa1Q,MACb8J,GAAG,cAAe6B,EAASzG,QAAQe,QAAQwD,YAC3CK,GAAG,YAAa6B,EAASzG,QAAQe,QAAQ0K,WAU9C,iBAPWpJ,SAASC,KAAKoJ,MAAMZ,UAC3BrD,EAAO/E,KACH9C,SAAY,WACZgK,OAAUxK,EAAEiD,UAAUuH,WAIvBnC,0CAeK1M,EAAGwF,EAAiB2H,EAAcyD,GAI9C,QAASC,GAAqBrL,EAAiB2H,EAAc1I,YAC9C0I,EAAazE,OAA0ByE,EAAazE,MAAMP,GAAG,cAGxE3C,EAAgB0I,MAAMjB,YAAYE,EAAalK,WAAWa,kBAC1D0B,EAAgBf,MAAQA,EACxB0I,EAAalI,QAAQgB,WAAWgB,OAAOjH,EAAGwF,EAAiB2H,GAC3DA,EAAalI,QAAQgB,WAAWe,OAAOhH,EAAGwF,EAAiB2H,GAC3DA,EAAarI,gBAAgBvE,KAAKiF,EAAgB0I,MAAOlO,EAAGwF,EAAgBkD,QAGhF,QAASoI,GAAatL,EAAiB2H,EAAc4D,YAEtCA,GACPA,GACIC,OACIrQ,KAAM,6BACN2C,KAAM,6CAGVkE,OAAOyJ,UACNA,QAAQD,OAASC,QAAQC,KAAK3Q,KAAK0Q,QAAS,yFAErB,gBAAdF,KACdA,GAAaC,OAAUrQ,KAAMoQ,KAEjCF,EAAqBrL,EAAiB2H,EAAc4D,GA5BxDvL,EAAgB0I,MAAMjC,SAASkB,EAAalK,WAAWa,kBA2CvD8M,EAAQ7B,KAZR,SAA0BvJ,EAAiB2H,EAAc1I,YAG1CA,GAEPqM,UAEJD,EAAqBrL,EAAiB2H,EAAc1I,IAK1B0M,KAAKpR,KAAMyF,EAAiB2H,GAAe2D,EAAaK,KAAKpR,KAAMyF,EAAiB2H,sCAc5GnN,EAAG0L,GACT,GAAMhD,GAAQgD,EAAShD,MACjB0I,EAAc1I,EAAMyD,SACpBkF,EAAYhN,EAAEmD,QAAQqH,SACtByC,EAAejN,EAAEmD,QAAQ+J,YACzBC,EAAa9I,EAAMmG,QACrB2C,GAAaH,EACb3I,EAAMf,KACFkH,OAAUwC,EAAY,KACtBI,aAAc,SACdC,aAAc,OACdlF,IAAO8E,EAAe,QAElBF,EAAY5E,IAAM8E,GAAkBF,EAAY5E,IAAMgF,EAAaF,EAAeD,IAC1F3I,EAAMf,KACF6E,IAAO,YAAAxM,IAAA4B,GAAAP,QA7rBFmK,0UCCAmG,8KASH5D,GAIV,IAHA,GAAI6D,GAAM,EACNC,EAAM9D,EAGN6D,EAAMjC,KAAKmC,IAAIF,EAAKG,SAASF,EAAIlK,IAAI,WAAY,KAAO,IACxDkK,EAAMA,EAAIG,WACGH,EAAIxJ,UAAU,YAAY4J,QAAQJ,EAAItG,KAAK,YAAY2G,gBAAkB,KAI1F,MAAON,0CAWWtG,GAIlB,IAAK,GAAWuC,GAHZjM,EAAI0J,EAAI6G,MAAM,OACdnK,KAEK5H,EAAI,EAAMyN,EAAIjM,EAAExB,GAAIA,IACzByN,EAAIA,EAAEuE,OAAO,GAAGC,cAGhBrK,EAAKsK,KAAKzE,EAGd,OAAO7F,sBA1CM2J,mFCEL/M,kBAAT,SAA2B8D,GAE9B,GAAIrE,EAAEkO,IAAMlO,EAAEkO,GAAG1N,SAGb6D,EAAMf,IAAI,UAAW,SAAS9C,UAC1B2N,GAAI,aACJC,GAAI,gBACJC,GAAI3S,KACJoM,OAAQ,MACRwG,UAAW,QACZhL,IAAI,UAAW,YACf,CAEH,GAAMwE,GAASpM,KAAKoM,QACpBA,GAAOK,KAAOzM,KAAK0M,cACnBN,EAAOE,MAAQtM,KAAKuM,aAAe,EAAI5D,EAAM4D,aAAe,EAC5D5D,EAAMf,IAAIwE,OAaFtH,SAAT,SAAkB7E,EAAGwF,EAAiBmG,EAAGC,GAC5C,GAAMyE,GAAUhM,EAAEmD,QACd2E,QAEJ,KAAKR,IAAMC,EAEP,WADApG,GAAgBZ,kBAAkBrE,KAAKR,KAAMyF,EAAgBkD,MAE1D,IAAU,aAANiD,GAA0B,aAANC,EAE3BO,EAAS3G,EAAgBkD,MAAM7D,eAC5B,CAEH,GAAM+N,GAAqBpN,EAAgBkD,MAAMmK,eAAe1G,QAChEA,IAAUK,IAAKZ,EAAIgH,EAAmBpG,IAAKH,KAAMV,EAAIiH,EAAmBvG,MAI5E,GAAME,GAAS8D,EAAQkB,YAAclB,EAAQxB,SACvCzC,EAAQiE,EAAQyC,aAAezC,EAAQR,QACvChB,EAASrJ,EAAgBkD,MAAM+D,cAC/BoD,EAAQrK,EAAgBkD,MAAM4D,YAEhCH,GAAOK,IAAMqC,EAAStC,IACtBJ,EAAOK,KAAOqC,GAGd1C,EAAOK,IAAM,IACbL,EAAOK,IAAM,GAGbL,EAAOE,KAAOwD,EAAQzD,IACtBD,EAAOE,MAAQwD,GAGf1D,EAAOE,KAAO,IACdF,EAAOE,KAAO,GAGlB7G,EAAgBkD,MAAMf,IAAIwE,MAWdrH,gBAAT,SAAyB9E,EAAG0I,GAC/B,YAAWA,EAMX,GAAIrE,EAAEkO,IAAMlO,EAAEkO,GAAG1N,SAGb6D,EAAMf,IAAI,UAAW,SAAS9C,UAC1B2N,GAAI,aACJC,GAAI,YACJC,GAAI3S,KACJ4S,UAAW,gBACZhL,IAAI,UAAW,QACf,CAEH,GAAMwE,IACFK,KAAM,EACNH,KAAMtM,KAAKuM,aAAe,EAE9B5D,GAAMf,IAAIwE,6UCrDG4G,6KAWNC,GACP,MAAQA,GAAKtL,IAAMrD,EAAE,cAAgB2O,EAAKtL,GAAK,MAAM4D,OAAU0H,EAAKrS,sCAa/DiF,GACL,GAAMqN,GAAQ5O,EAAEuB,GACVnB,IAIN,OAFA1E,MAAK2E,MAAMD,EAAOwO,EAAM9C,YAEjB1L,gCAeLA,EAAOyO,EAAWtM,GACfA,IACDA,EAAU,EAGd,IAAIuM,GAAUpT,IAuKd,OArKAmT,GAAUzL,KAAK,WACX,GAAIyG,GAAQ7J,EAAEtE,MACViT,EAAOjT,KACPqT,EAAWrT,KAAKqT,SAASlB,cACzBmB,SACAnI,QAkBJ,QAfiB,UAAbkI,GAAwBlF,EAAM1F,KAAK,2BAA2BH,SAC9DgL,EAAQnF,EAAMnM,OAGdqR,GADAJ,GADA9E,EAAQA,EAAMiC,WAAWpF,SACZ7J,IAAI,IACDkS,SAASlB,eAWrBkB,GAEJ,IAAK,OACDlI,GAAQvK,KAAMuN,EAAMU,KAAK,SAAUnK,UACnCmC,EAAUuM,EAAQzO,MAAMwG,EAAKzG,MAAOyJ,EAAMiC,WAAYvJ,EACtD,MAIJ,KAAK,IACL,IAAK,SACDsE,GACIvK,KAAMuN,EAAMnM,OACZoB,WAAY+K,EAAMU,KAAK,YACvBpK,SACW,WACH0J,EAAMhN,IAAI,GAAGwJ,SAIzB,MAGJ,KAAK,WACL,IAAK,UACD,OAAQwD,EAAMU,KAAK,SACf,YACA,IAAK,UACL,IAAK,WACD1D,GACIvK,KAAMuN,EAAMU,KAAK,SACjBzL,WAAY+K,EAAMU,KAAK,YACvBtL,KAAM4K,EAAMU,KAAK,QACjBpK,SACW,WACH0J,EAAMhN,IAAI,GAAGwJ,SAIzB,MAEJ,KAAK,WACDQ,GACIC,KAAM,WACNhI,WAAY+K,EAAMU,KAAK,YACvBjO,KAAMuN,EAAMU,KAAK,SACjBxD,WAAY8C,EAAMU,KAAK,WAE3B,MACJ,KAAK,QACD1D,GACIC,KAAM,QACNhI,WAAY+K,EAAMU,KAAK,YACvBjO,KAAMuN,EAAMU,KAAK,SACjB1M,MAAOgM,EAAMU,KAAK,cAClB/M,MAAOqM,EAAMU,KAAK,MAClBxD,WAAY8C,EAAMU,KAAK,WAE3B,MAEJ,SACI1D,SAER,KAEJ,KAAK,KACDA,EAAO,SACP,MAEJ,KAAK,QACD,OAAQgD,EAAMU,KAAK,SACf,IAAK,OACD1D,GACIC,KAAM,OACNxK,KAAM0S,GAASF,EAAQG,WAAWN,GAClC7P,WAAY+K,EAAMU,KAAK,YACvB/M,MAAOqM,EAAM5C,MAEjB,MAEJ,KAAK,WACDJ,GACIC,KAAM,WACNxK,KAAM0S,GAASF,EAAQG,WAAWN,GAClC7P,WAAY+K,EAAMU,KAAK,YACvBxD,WAAY8C,EAAMU,KAAK,WAE3B,MAEJ,KAAK,QACD1D,GACIC,KAAM,QACNxK,KAAM0S,GAASF,EAAQG,WAAWN,GAClC7P,WAAY+K,EAAMU,KAAK,YACvB1M,QAASgM,EAAMU,KAAK,QACpB/M,MAAOqM,EAAM5C,MACbF,WAAY8C,EAAMU,KAAK,WAE3B,MAEJ,SACI1D,SAGR,KAEJ,KAAK,SACDA,GACIC,KAAM,SACNxK,KAAM0S,GAASF,EAAQG,WAAWN,GAClC7P,WAAY+K,EAAMU,KAAK,YACvBxD,SAAU8C,EAAM5C,MAChBjG,YAEJ6I,EAAMiC,WAAW1I,KAAK,WAClByD,EAAK7F,QAAQtF,KAAK8B,OAASwC,EAAEtE,MAAMgC,QAEvC,MAEJ,KAAK,WACDmJ,GACIC,KAAM,WACNxK,KAAM0S,GAASF,EAAQG,WAAWN,GAClC7P,WAAY+K,EAAMU,KAAK,YACvB/M,MAAOqM,EAAM5C,MAEjB,MAEJ,KAAK,QACD,KAEJ,SACIJ,GAAQC,KAAM,OAAQ/I,KAAM8L,EAAMqF,WAItCrI,IAEAzG,EAAM,SADNmC,GACyBsE,KAI1BtE,qBA1NMmM,4UCtDrBS,EAAAvT,EAAA,GAAA8E,GAAAC,EAAA5E,EAAA4E,KAAA5D,WAAA4D,GAAA3D,QAAA2D,IAEqByO,aAOjB,QAAAA,mGAAc1T,KAAA0T,GACV1T,KAAK8I,gBAAkB,KACvB9I,KAAK2T,yDAYE1T,GACPA,EAAE2T,iBACF3T,EAAE4T,+DAUM5T,GACR,GAAMiT,GAAQ5O,EAAErE,EAAE6T,cAElB,KAAK7T,EAAEyF,KACH,KAAM,IAAI2B,OAAM,mBAUpB,IANuB,UAAnBpH,EAAEyF,KAAK/C,UACP1C,EAAE2T,iBACF3T,EAAE4T,8BAIkB,UAAnB5T,EAAEyF,KAAK/C,SAA0C,WAAnB1C,EAAEyF,KAAK/C,SAAyB1C,EAAE8T,0BAK1D9T,EAAE+T,aACgB,SAAnB/T,EAAEyF,KAAK/C,SAAwC,IAAlB1C,EAAE+T,aAA2C,UAAnB/T,EAAEyF,KAAK/C,SAAyC,IAAlB1C,EAAE+T,cAO7Fd,EAAMe,SAAS,wBAIdf,EAAMe,SAAS,0BAA0B,CAO1C,GADAhU,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAkBoK,EACrCjT,EAAEyF,KAAKf,MAAO,CACd,GAAMuP,GAAQjU,EAAEyF,KAAKf,MAAM1E,EAAGiT,EAE9B,SAAIgB,EACA,MAOJ,IAHAjU,EAAEyF,KAAOpB,EAAEyG,aAAFtE,EAAAnF,QAA6BrB,EAAEyF,KAAMwO,QAGzCjU,EAAEyF,KAAKhB,OAASJ,EAAE0E,cAAc/I,EAAEyF,KAAKhB,OAMxC,KAJI+C,QAAOyJ,UACNA,QAAQD,OAASC,QAAQC,KAAK3Q,KAAK0Q,QAAS,6CAG3C,GAAI7J,OAAM,qBAIpBpH,GAAEyF,KAAK8C,SAAWvI,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAEzC7I,EAAEyF,KAAKR,QAAQgB,WAAWgB,OAAOjH,EAAGA,EAAEyF,MAE1C,GAAIyO,KAEJpT,QAAOkH,KAAKhI,EAAEyF,KAAKhB,OAAOwD,QAAQ,SAACpB,IAEU,kBAA9B7G,GAAEyF,KAAKhB,MAAMoC,GAAKzD,QACfpD,EAAEyF,KAAKhB,MAAMoC,GAAKzD,QAAQ7C,KAAK0S,EAAOjT,EAAG6G,EAAK7G,EAAEyF,KAAMzF,EAAEyF,eACpDzF,EAAEyF,KAAKhB,MAAMoC,GAAKzD,cACtBpD,EAAEyF,KAAKhB,MAAMoC,GAAKzD,WAK5B8Q,QAIJA,GAEAlU,EAAEyF,KAAKR,QAAQgB,WAAW/B,KAAK3D,KAAK0S,EAAOjT,EAAGA,EAAEyF,KAAMzF,EAAE4M,MAAO5M,EAAE6M,sCAYvE7M,GACFA,EAAE2T,iBACF3T,EAAE4T,2BACFvP,EAAEtE,MAAM2C,QAAQ2B,EAAE8P,MAAM,eAAgB1O,KAAMzF,EAAEyF,KAAMmH,MAAO5M,EAAE4M,MAAOC,MAAO7M,EAAE6M,MAAOiH,cAAe9T,uCAU/FA,GAEN,GAAMiT,GAAQ5O,EAAEtE,KAGZC,GAAEyF,KAAKR,QAAQe,QAAQ6C,iBAAmB7I,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAgBR,SAAWrI,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAgBV,GAAG8K,IACtIjT,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAgBpD,KAAK,eAAeiD,MAAMhG,QAAQ2B,EAAE8P,MAAM,eAAgB1O,KAAMzF,EAAEyF,KAAMqO,cAAe9T,KAIjH,IAAbA,EAAEoU,SACFpU,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAkBoK,EAAMxN,KAAK,4BAAqBoB,IAAA,UAAAhF,MAAA,SAWzE7B,GAEJ,GAAMiT,GAAQ5O,EAAEtE,KACZkT,GAAMxN,KAAK,sBAAwBzF,EAAEyF,KAAKR,QAAQe,QAAQ6C,iBAAmB7I,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAgBR,QAAUrI,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAgBV,GAAG8K,KAAWA,EAAMe,SAAS,2BAClMhU,EAAE2T,iBACF3T,EAAE4T,2BACF5T,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAkBoK,EACzCA,EAAMvQ,QAAQ2B,EAAE8P,MAAM,eAAgB1O,KAAMzF,EAAEyF,KAAMmH,MAAO5M,EAAE4M,MAAOC,MAAO7M,EAAE6M,MAAOiH,cAAe9T,MAGvGiT,EAAMjG,WAAW,wBAAAnG,IAAA,aAAAhF,MAAA,SAUV7B,GACP,GAAMiT,GAAQ5O,EAAEtE,MACVsU,EAAWhQ,EAAErE,EAAEsU,eACfC,EAAYlQ,EAAEiD,SAGhB+M,GAASlM,GAAG,uBAAyBkM,EAASG,QAAQ,sBAAsBnM,QAK5ErI,EAAEyF,KAAKR,QAAQe,QAAQ6C,iBAAmB7I,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAgBR,SAIrFrI,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAAS9G,MAAQ5M,EAAE4M,MAC1C5M,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAAS7G,MAAQ7M,EAAE6M,MAC1C7M,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAASjO,KAAOzF,EAAEyF,KACzC8O,EAAU1K,GAAG,4BAA6B7J,EAAEyF,KAAKR,QAAQe,QAAQyO,WACjEzU,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAASgB,MAAQ5H,WAAW,WAC/C9M,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAASgB,MAAQ,KACxCH,EAAU3L,IAAI,6BACd5I,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAkBoK,EACzCA,EAAMvQ,QAAQ2B,EAAE8P,MAAM,eAClB1O,KAAMzF,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAASjO,KACtCmH,MAAO5M,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAAS9G,MACvCC,MAAO7M,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAAS7G,UAE5C7M,EAAEyF,KAAK7C,0CAUJ5C,GACNA,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAAS9G,MAAQ5M,EAAE4M,MAC1C5M,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAAS7G,MAAQ7M,EAAE6M,yCAUnC7M,GAEP,GAAMqU,GAAWhQ,EAAErE,EAAEsU,cACrB,KAAID,EAASlM,GAAG,wBAAyBkM,EAASG,QAAQ,sBAAsBnM,OAAhF,CAIA,IACIsM,aAAa3U,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAASgB,OAC/C,MAAO1U,IAITA,EAAEyF,KAAKR,QAAQe,QAAQ0N,SAASgB,MAAQ,SAAA7N,IAAA,aAAAhF,MAAA,SAUjC7B,GACP,GAEIT,GAFQ8E,EAAEtE,MAEG0F,KAAK,kBAEtB,IAAa,OAATlG,YAAwBA,EACxB,KAAM,IAAI6H,OAAM,2BAGpB,IAAIgN,GAASpU,EAAEoU,OACXzI,EAAI3L,EAAE4M,MACNhB,EAAI5L,EAAE6M,MACN+H,WAAYjJ,EACZkJ,SACA1I,QAEJnM,GAAE2T,iBAEF7G,WAAW,WACP,GAAI8H,EACmB,OAAfrV,EAAKmJ,gBAAyBnJ,EAAKmJ,OACnCnJ,EAAKmJ,MAAMhG,QAAQ,oBAAqB+C,KAAMlG,EAAMuU,cAAe9T,QAF3E,CAOA,GAAIqQ,GAAUhM,EAAEmD,QACZsN,EAAmC,SAAjBvV,EAAKmD,SAAiC,IAAX0R,GAAmC,UAAjB7U,EAAKmD,SAAkC,IAAX0R,CAG/F,IAAI9M,SAASyN,kBAAoBxV,EAAKmN,OAAQ,CAM1C,GALAnN,EAAKmN,OAAOvI,QACZ0Q,EAASvN,SAASyN,iBAAiBpJ,EAAI0E,EAAQyC,aAAclH,EAAIyE,EAAQkB,cAI9DyD,kBAAmB,CAC1B,GAAMC,GAAQ3N,SAAS4N,cACjBC,EAAM3N,OAAO4N,cACnBH,GAAMI,WAAWR,GACjBI,EAAMK,aACNH,EAAII,kBACJJ,EAAIK,SAASP,GAEjB5Q,EAAEwQ,GAAQnS,QAAQ1C,GAClBT,EAAKmN,OAAOxI,OAGhB,GAAI3E,EAAKuD,qBAAuBgS,GAAgC,OAAfvV,EAAKmJ,gBAAyBnJ,EAAKmJ,MAChFnJ,EAAKmJ,MAAMhG,QAAQ,oBAAqB+C,KAAMlG,EAAMuU,cAAe9T,QADvE,CAKA,GAAIT,EAAKsD,YAAciS,EACnB,GAAIxN,SAASyN,kBACT,GAAIxV,EAAKgJ,SAASJ,GAAG0M,GAEjB,WADAtV,GAAKsF,SAAStE,KAAKhB,EAAKgJ,SAAUvI,EAAGT,EAAMoM,EAAGC,OAG/C,CACHO,EAAS5M,EAAKgJ,SAAS4D,QACvB,IAAMkE,GAAUhM,EAAEmD,OAIlB,IADA2E,EAAOK,KAAO6D,EAAQkB,YAClBpF,EAAOK,KAAOxM,EAAE6M,QAChBV,EAAOE,MAAQgE,EAAQyC,aACnB3G,EAAOE,MAAQrM,EAAE4M,QACjBT,EAAOI,OAASJ,EAAOK,IAAMjN,EAAKgJ,SAASkE,cACvCN,EAAOI,QAAUvM,EAAE6M,QACnBV,EAAOC,MAAQD,EAAOE,KAAO9M,EAAKgJ,SAAS+D,aACvCH,EAAOC,OAASpM,EAAE4M,SAGlB,WADArN,GAAKsF,SAAStE,KAAKhB,EAAKgJ,SAAUvI,EAAGT,EAAMoM,EAAGC,GASlEiJ,GAAUC,GACVvV,EAAKgJ,SAASkN,IAAI,qBAAsB,WACpCpR,EAAEwQ,GAAQ1P,aAAawG,EAAGA,EAAGC,EAAGA,EAAGwI,OAAQA,EAAQN,cAAe9T,MAIvD,OAAfT,EAAKmJ,gBAAyBnJ,EAAKmJ,OACnCnJ,EAAKmJ,MAAMhG,QAAQ,oBAAqB+C,KAAMlG,EAAMuU,cAAe9T,OAExE,OAAA6G,IAAA,UAAAhF,MAAA,SAWC7B,EAAGwF,GACFA,EAAgBkQ,SACjB1V,EAAE2T,iBAGN3T,EAAE2V,8CAUF3V,GACA,GAAImN,KAGAnN,GAAEyF,KAAKR,QAAQe,QAAQ6C,kBACvBsE,EAAenN,EAAEyF,KAAKR,QAAQe,QAAQ6C,gBAAgBpD,KAAK,6BAGpD0H,EAAapJ,SACpBoJ,EAAapJ,OAAS,EAE1B,IAWI6R,GAX6B,QAA3BC,GAA4BhB,GAC9B,MAA4B,KAAxBA,EAAOlE,MAAM5M,OACN8Q,EAAOlE,MAAM5M,OAEQ,OAAxB8Q,EAAOhC,uBAAgCgC,EAAOhC,aACvCgD,EAAyBhB,EAAOhC,cACP,OAAzBgC,EAAOiB,wBAAiCjB,EAAOiB,cAC/CD,EAAyBhB,EAAOiB,uBAIP9V,EAAE6U,OAK9C,MAAI1H,EAAazE,OAASqJ,SAAS6D,EAAc,IAAM7D,SAAS5E,EAAazE,MAAMf,IAAI,UAAW,KAAlG,CAGA,OAAQ3H,EAAE+V,SACN,IAAK,GACL,IAAK,IAGD,GAFA/V,EAAEyF,KAAKR,QAAQe,QAAQgQ,QAAQhW,EAAGmN,GAE9BA,EAAauI,QAAS,CACtB,GAAkB,IAAd1V,EAAE+V,SAAiB/V,EAAEiW,SAQrB,MAPAjW,GAAE2T,iBACExG,EAAaD,WACbC,EAAaD,UAAU1E,KAAK,2BAA2B0N,YAEhC,OAAvB/I,EAAazE,gBAAyByE,EAAazE,OACnDyE,EAAazE,MAAMhG,QAAQ,eAAgB+C,KAAM0H,EAAc2G,cAAe9T,IAG/E,IAAkB,KAAdA,EAAE+V,SAA0F,aAAxE5I,EAAaD,UAAU1E,KAAK,2BAA2B+C,KAAK,QAGvF,WADAvL,GAAE2T,qBAGH,IAAkB,IAAd3T,EAAE+V,SAAiB/V,EAAEiW,SAI5B,YAH2B,OAAvB9I,EAAazE,gBAAyByE,EAAazE,OACnDyE,EAAazE,MAAMhG,QAAQ,eAAgB+C,KAAM0H,EAAc2G,cAAe9T,IAItF,MAGJ,KAAK,IAED,GADAA,EAAEyF,KAAKR,QAAQe,QAAQgQ,QAAQhW,EAAGmN,IAC9BA,EAAauI,QAmBb,YAH2B,OAAvBvI,EAAazE,gBAAyByE,EAAazE,OACnDyE,EAAazE,MAAMhG,QAAQ,eAAgB+C,KAAM0H,EAAc2G,cAAe9T,IAhBlF,IAAkB,IAAdA,EAAE+V,QAQF,MAPA/V,GAAE2T,iBACExG,EAAaD,WACbC,EAAaD,UAAU1E,KAAK,2BAA2B0N,YAEhC,OAAvB/I,EAAazE,gBAAyByE,EAAazE,OACnDyE,EAAazE,MAAMhG,QAAQ,eAAgB+C,KAAM0H,EAAc2G,cAAe9T,IAG/E,IAAkB,KAAdA,EAAE+V,SAA0F,aAAxE5I,EAAaD,UAAU1E,KAAK,2BAA2B+C,KAAK,QAGvF,WADAvL,GAAE2T,gBASV,MAEJ,KAAK,IAED,GADA3T,EAAEyF,KAAKR,QAAQe,QAAQgQ,QAAQhW,EAAGmN,GAC9BA,EAAauI,UAAYvI,EAAaD,YAAcC,EAAaD,UAAU7E,OAC3E,KAGJ,KAAK8E,EAAaD,UAAU8E,SAASgC,SAAS,qBAAsB,CAChE,GAAMmC,GAAUhJ,EAAaD,UAAU8E,SAASA,QAGhD,OAFA7E,GAAaD,UAAUxK,QAAQ,oBAAqB+C,KAAM0H,EAAc2G,cAAe9T,SACvFmN,EAAaD,UAAYiJ,GAG7B,KAEJ,KAAK,IAED,GADAnW,EAAEyF,KAAKR,QAAQe,QAAQgQ,QAAQhW,EAAGmN,GAC9BA,EAAauI,UAAYvI,EAAaD,YAAcC,EAAaD,UAAU7E,OAC3E,KAGJ,IAAM+N,GAAWjJ,EAAaD,UAAUzH,KAAK,kBAC7C,IAAI2Q,EAAS1N,OAASyE,EAAaD,UAAU8G,SAAS,wBAIlD,MAHA7G,GAAaD,UAAY,KACzBkJ,EAASlJ,UAAY,SACrBkJ,GAAS1N,MAAMhG,QAAQ,eAAgB+C,KAAM2Q,EAAUtC,cAAe9T,GAG1E,MAEJ,KAAK,IACL,IAAK,IACD,GAAImN,EAAaD,WAAaC,EAAaD,UAAU1E,KAAK,2BAA2BH,OACjF,OAEE8E,EAAaD,WAAaC,EAAaD,UAAU8E,UAAa7E,EAAazE,OACxEyH,SAAS,SAAWhD,EAAalK,WAAWE,SAAW,MAAQgK,EAAalK,WAAWI,cAAgB,KAAmB,KAAdrD,EAAE+V,QAAiB,QAAU,UACzIrT,QAAQ,qBAAsB+C,KAAM0H,EAAc2G,cAAe9T,IACtEA,EAAE2T,gBACF,MAER,KAAK,IAED,GADA3T,EAAEyF,KAAKR,QAAQe,QAAQgQ,QAAQhW,EAAGmN,GAC9BA,EAAauI,QAAS,CACtB,GAAIvI,EAAaD,YAAcC,EAAaD,UAAU/E,GAAG,oBAErD,WADAnI,GAAE2T,gBAGN,OAKJ,qBAHWxG,EAAaD,WAAwD,OAA3BC,EAAaD,WAC9DC,EAAaD,UAAUxK,QAAQ,WAAY+C,KAAM0H,EAAc2G,cAAe9T,IAGtF,KAAK,IACL,IAAK,IACL,IAAK,IAGD,WADAA,GAAEyF,KAAKR,QAAQe,QAAQgQ,QAAQhW,EAAGmN,EAGtC,KAAK,IAKD,MAJAnN,GAAEyF,KAAKR,QAAQe,QAAQgQ,QAAQhW,EAAGmN,QACP,OAAvBA,EAAazE,gBAAyByE,EAAazE,OACnDyE,EAAazE,MAAMhG,QAAQ,oBAAqB+C,KAAM0H,EAAc2G,cAAe9T,IAI3F,SACI,GAAM6N,GAAKwI,OAAOC,aAAatW,EAAE+V,SAAU1D,aAC3C,IAAIlF,EAAaW,YAAcX,EAAaW,WAAWD,GAGnD,WADAV,GAAaW,WAAWD,GAAGK,MAAMxL,QAAQyK,EAAaW,WAAWD,GAAGnF,MAAQ,oBAAsB,WAAYjD,KAAM0H,EAAc2G,cAAe9T,IAO7JA,EAAE2V,2BACSxI,EAAaD,WAAwD,OAA3BC,EAAaD,WAC9DC,EAAaD,UAAUxK,QAAQ1C,qCAW9BA,GACLA,EAAE2V,iBACF,IAAInQ,GAAkBnB,EAAEtE,MAAM0F,KAAK,mBAC7B0H,EAAe9I,EAAEtE,MAAM0F,KAAK,sBAGlC,IAAID,EAAgB0H,UAAW,CAC3B,GAAMqJ,GAAK/Q,EAAgB0H,WAC3B1H,EAAkBA,EAAgB0H,UAAU8E,SAASvM,KAAK,oBAC1CyH,UAAYqJ,EAQhC,IALA,GAAMrD,GAAY1N,EAAgBkD,MAAMyH,WACpCqG,EAAShR,EAAgB0H,WAAc1H,EAAgB0H,UAAUuJ,OAAOpO,OAA4B7C,EAAgB0H,UAAUuJ,OAA7CvD,EAAUwD,OACzFC,EAASH,EAGRA,EAAMxC,SAAS7G,EAAalK,WAAWE,WAAaqT,EAAMxC,SAAS7G,EAAalK,WAAWI,gBAAkBmT,EAAMrO,GAAG,YAOzH,IALIqO,EADAA,EAAMC,OAAOpO,OACLmO,EAAMC,OAENvD,EAAUwD,QAGZvO,GAAGwO,GAET,MAKJnR,GAAgB0H,WAChBC,EAAalI,QAAQe,QAAQ4D,eAAerJ,KAAKiF,EAAgB0H,UAAUhM,IAAI,GAAIlB,GAIvFmN,EAAalI,QAAQe,QAAQ0D,eAAenJ,KAAKiW,EAAMtV,IAAI,GAAIlB,EAG/D,IAAMqL,GAASmL,EAAMhO,KAAK,0BACtB6C,GAAOhD,QACPgD,EAAOuL,yCAWN5W,GACLA,EAAE2V,iBACF,IAAInQ,GAAkBnB,EAAEtE,MAAM0F,KAAK,mBAC/B0H,EAAe9I,EAAEtE,MAAM0F,KAAK,sBAGhC,IAAID,EAAgB0H,UAAW,CAC3B,GAAMqJ,GAAK/Q,EAAgB0H,WAC3B1H,EAAkBA,EAAgB0H,UAAU8E,SAASvM,KAAK,oBAC1CyH,UAAYqJ,EAQhC,IALA,GAAMrD,GAAY1N,EAAgBkD,MAAMyH,WACpC0G,EAASrR,EAAgB0H,WAAc1H,EAAgB0H,UAAU4J,OAAOzO,OAA6B7C,EAAgB0H,UAAU4J,OAA9C5D,EAAUnI,QACzF4L,EAASE,EAGRA,EAAM7C,SAAS7G,EAAalK,WAAWE,WAAa0T,EAAM7C,SAAS7G,EAAalK,WAAWI,gBAAkBwT,EAAM1O,GAAG,YAMzH,IAJI0O,EADAA,EAAMC,OAAOzO,OACLwO,EAAMC,OAEN5D,EAAUnI,SAEZ5C,GAAGwO,GAET,MAKJnR,GAAgB0H,WAChBC,EAAalI,QAAQe,QAAQ4D,eAAerJ,KAAKiF,EAAgB0H,UAAUhM,IAAI,GAAIlB,GAIvFmN,EAAalI,QAAQe,QAAQ0D,eAAenJ,KAAKsW,EAAM3V,IAAI,GAAIlB,EAG/D,IAAMqL,GAASwL,EAAMrO,KAAK,0BACtB6C,GAAOhD,QACPgD,EAAOuL,2CAWJ5W,GACP,GAAIiT,GAAQ5O,EAAEtE,MAAMyU,QAAQ,sBACxB/O,EAAOwN,EAAMxN,OACbD,EAAkBC,EAAKN,YACvBgI,EAAe1H,EAAK6C,eAExB6E,GAAaD,UAAY1H,EAAgB0H,UAAY+F,EACrD9F,EAAauI,QAAUlQ,EAAgBkQ,cAAU7O,IAAA,YAAAhF,MAAA,SAU3C7B,GACN,GACIyF,GADQpB,EAAEtE,MAAMyU,QAAQ,sBACX/O,OACbD,EAAkBC,EAAKN,WACRM,GAAK6C,gBAEXoN,QAAUlQ,EAAgBkQ,cAAU7O,IAAA,iBAAAhF,MAAA,SAUtC7B,GACAqE,EAAEtE,MAAM0F,OAAO6C,gBACrBqE,eAAW9F,IAAA,iBAAAhF,MAAA,SAUL7B,GACX,GAAIT,GAAO8E,EAAEtE,MAAM0F,OAAO6C,eACtB/I,GAAKmN,QAAUnN,EAAKmN,OAAOvE,GAAGnI,EAAEsU,iBAChC/U,EAAKoN,gBAAW9F,IAAA,iBAAAhF,MAAA,SAWT7B,GACX,GAAIiT,GAAQ5O,EAAEtE,MACV0F,EAAOwN,EAAMxN,OACbD,EAAkBC,EAAKN,YACvBgI,EAAe1H,EAAK6C,eAExB6E,GAAaR,YAGT3M,GAAKmN,EAAaT,QAAUS,EAAaT,OAAOvE,GAAGnI,EAAEsU,iBACrDtU,EAAE2T,iBACF3T,EAAE4T,2BAIN,IAAImD,GAAcvR,EAAgBkD,MAAQlD,EAAkB2H,CAC5D4J,GAAWrO,MACNyH,SAAS,IAAMhD,EAAalK,WAAWC,OAAOR,QAAQ,oBAAqB+C,KAAMsR,EAAYjD,cAAe9T,IAC5GmQ,SAAS,UAAUzN,QAAQ,oBAAqB+C,KAAMsR,EAAYjD,cAAe9T,IAElFiT,EAAMe,SAAS7G,EAAalK,WAAWE,WAAa8P,EAAMe,SAAS7G,EAAalK,WAAWI,eAC3FmC,EAAgB0H,UAAY,KAIhC+F,EAAMvQ,QAAQ,qBAAsB+C,KAAMD,EAAiBsO,cAAe9T,2CAU/DA,GACX,GAAIiT,GAAQ5O,EAAEtE,MACV0F,EAAOwN,EAAMxN,OACbD,EAAkBC,EAAKN,YACvBgI,EAAe1H,EAAK6C,eAExB,IAAI6E,IAAiB3H,GAAmB2H,EAAaT,QAAUS,EAAaT,OAAOvE,GAAGnI,EAAEsU,eAOpF,gBANWnH,EAAaD,WAAwD,OAA3BC,EAAaD,WAC9DC,EAAaD,UAAUxK,QAAQ,oBAAqB+C,KAAM0H,EAAc2G,cAAe9T,IAE3FA,EAAE2T,iBACF3T,EAAE4T,gCACFzG,EAAaD,UAAY1H,EAAgB0H,UAAY1H,EAAgB0I,MAIrE1I,IAAmBA,EAAgBkD,OAASlD,EAAgBkD,MAAMsL,SAAS7G,EAAalK,WAAWG,UAIvG6P,EAAMvQ,QAAQ,uBAAAmE,IAAA,YAAAhF,MAAA,SAUR7B,GACN,GAAIiT,GAAQ5O,EAAEtE,MACV0F,EAAOwN,EAAMxN,OACbD,EAAkBC,EAAKN,YACvBgI,EAAe1H,EAAK6C,gBACpBzB,EAAMpB,EAAK0I,eACX3J,QAGJ,OAAKgB,EAAgBf,MAAMoC,IAAQoM,EAAM9K,GAAG,IAAMgF,EAAalK,WAAWE,SAAW,+BAAiCgK,EAAalK,WAAWI,gBAAmB4P,EAAM9K,GAAG,+BAA4BgF,EAAapK,mBAAnN,CAOA,GAHA/C,EAAE2T,iBACF3T,EAAE4T,2BAE4C,kBAAnCpO,GAAgBkJ,UAAU7H,IAAuB/F,OAAOU,UAAUC,eAAelB,KAAKiF,EAAgBkJ,UAAW7H,GAExHrC,EAAWgB,EAAgBkJ,UAAU7H,OAClC,IAAqC,kBAA1BsG,GAAa3I,SAK3B,MAHAA,GAAW2I,EAAa3I,cAOxBA,EAASjE,KAAK4M,EAAa5E,SAAUvI,EAAG6G,EAAKrB,EAAiB2H,GAC9DA,EAAazE,MAAMhG,QAAQ,oBACpByK,EAAazE,MAAMsJ,SAAS3J,QACnC8E,EAAalI,QAAQgB,WAAWe,OAAOzG,KAAK4M,EAAa5E,SAAUvI,EAAGmN,uCAWnEnN,GACPA,EAAE4T,4DAWG5T,EAAGyF,GACR,GAAMlG,GAAO8E,EAAEtE,MAAM0F,KAAK,kBAC1BlG,GAAK0F,QAAQgB,WAAW9B,KAAK5D,KAAKhB,EAAKgJ,SAAUvI,EAAGT,EAAMkG,GAAQA,EAAKgD,yCAUjEzI,GACNA,EAAE2V,iBACF,IAAM1C,GAAQ5O,EAAEtE,MACV0F,EAAOwN,EAAMxN,OACbD,EAAkBC,EAAKN,YACvBgI,EAAe1H,EAAK6C,eAEtB2K,GAAMe,SAAS7G,EAAalK,WAAWE,WAAa8P,EAAMe,SAAS7G,EAAalK,WAAWI,iBAI/F4P,EACKhH,UAAUkB,EAAalK,WAAWC,MAAOiK,EAAalK,WAAWG,SAAS4T,KAAK,MAE/EhF,SAASxJ,KAAK,sBAAsByO,IAAIhE,GACxChG,YAAYE,EAAalK,WAAWG,SACpCgF,OAAO,IAAM+E,EAAalK,WAAWC,OACrCR,QAAQ,oBAGb8C,EAAgB0H,UAAYC,EAAaD,UAAY+F,EAEjDzN,EAAgB0I,OAAS1I,EAAgB0I,MAAM8F,SAAS,yBACxDxO,EAAgB0I,MAAMjC,SAASkB,EAAalK,WAAWC,OAIvDsC,EAAgB0I,OAChBf,EAAarI,gBAAgBvE,KAAKiF,EAAgB0I,MAAOlO,EAAGwF,EAAgBkD,yCAW3E1I,GACLA,EAAE2V,iBACF,IAAM1C,GAAQ5O,EAAEtE,MACV0F,EAAOwN,EAAMxN,OACbD,EAAkBC,EAAKN,YACvBgI,EAAe1H,EAAK6C,eAEtB6E,GAAaxK,UACbsQ,EAAMhG,YAAYE,EAAalK,WAAWG,SAE9C6P,EAAMhG,YAAYE,EAAalK,WAAWC,OAC1CsC,EAAgB0H,UAAY,SAAAlN,IAAA4B,GAAAP,QAz3BfoS,2FCaN,SAAUrO,GACrB,GAAM2I,GAAKhO,KACLmX,EAAK9R,CACX,IAAI2I,EAAG1F,OAAS,EACZ,YAAWjD,EACP2I,EAAGhD,QAAQrI,QAAQ,mBAChB,aAAW0C,EAAUuG,YAA4BvG,EAAUwG,EAC9DmC,EAAGhD,QAAQrI,QAAQ2B,EAAE8P,MAAM,eACvBvH,MAAOxH,EAAUuG,EACjBkB,MAAOzH,EAAUwG,EACjBmI,YAAa3O,EAAUgP,cAExB,IAAkB,SAAdhP,EAAsB,CAC7B,GAAMsD,GAAQ3I,KAAKgL,QAAQtF,KAAK,eAAiB1F,KAAKgL,QAAQtF,KAAK,eAAeiD,MAAQ,IACtFA,IACAA,EAAMhG,QAAQ,wBAEG,YAAd0C,EACPf,EAAEc,YAAY,WAAY4C,QAAShI,OACd,WAAdqF,EACPf,EAAEc,YAAY,UAAW4C,QAAShI,OAC3BsE,EAAE8S,cAAc/R,IACvBA,EAAU2C,QAAUhI,KACpBsE,EAAEc,YAAY,SAAUC,SACjBA,EACP2I,EAAGd,YAAY,8BACR7H,GACP2I,EAAG9B,SAAS,6BAIhB5H,GAAEoD,KAAKpD,EAAEc,YAAYe,MAAO,WACpBnG,KAAKyC,WAAauL,EAAGvL,WACrB0U,EAAGzR,KAAO1F,KAEVsE,EAAEyG,OAAOoM,EAAGzR,MAAO/C,QAAS,cAIpC2B,EAAEc,YAAYY,OAAOwE,YAAYhK,KAAK2W,EAAGrC,OAAQqC,EAGrD,OAAOnX","file":"jquery.contextMenu.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ContextMenu\"] = factory();\n\telse\n\t\troot[\"ContextMenu\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap af7c317981dd1873df70","/**\n * @class ContextMenuItem\n * @instance\n * @interface\n * @classdesc The items map contains the commands to list in the menu. Each command has a unique key identifying an item object. The value may either be an item (properties explained below), or a string (which will insert a separator, disregarding the string's content). It is also possible to define a seperator the same as an item, and use the `type`:`cm_separator` to define it.\n\n ```javascript\n var items = {\n firstCommand: itemOptions,\n separator1: \"-----\",\n separator2: { \"type\": \"cm_separator\" },\n command2: itemOptions,\n submenu: {\n type: \"submenu\"\n submenuItem1: itemOptions,\n submenuItem2: itemOptions,\n }\n}\n ```\n\n Since 2.3 it is also possible to use a promise as item, so you can build submenu's based on a snynchronous promis.\n\n Check out the [demo using a promise](demo/async-promise.md) for an example how to use this. The example uses jQuery deferred, but any promise should do. Promised can only be used in combination with the [build option](docs#build).\n\n *\n * @property {ContextMenuItemTypes|string} type - Specifies the type of the command. See {@link ContextMenuItemTypes}.\n * @property {string} name - Specify the human readable name of the command in the menu. This is used as the label for the option.\n * @property {boolean} isHtmlName - Should this item be called with .html() instead of .text(). Cannot be used with the accesskey option in the same item.\n * @property {Object.} items Object containing the menu items for creating a submenu.\n * @property {string} className - Specifies additional classNames to add to the menu item. Seperate multiple classes by using spaces.\n * @property {ContextMenuItemCallback} callback - Specifies the callback to execute if the item is clicked.\n * @property {ContextMenuIconCallback|string} icon - Specifies the icon class to set for the item. When using a string icons must be defined in CSS with selectors like `.context-menu-item.context-menu-icon-edit`, where edit is the icon class specified. When using a callback you can return a class string to use that as the class on the item. You can also modify the element by using the $itemElement argument.\n * @property {ContextMenuItemCallback|boolean} disabled - Specifies if the command is disabled (`true`) or enabled (`false`). May be a callback returning a `boolean`.\n * @property {ContextMenuItemCallback|boolean} visible - Specifies if the command is visible (`true`) or hidden (`false`). May be a callback returning a `boolean`.\n * @property {string} accesskey - Character(s) to be used as accesskey.\n\n Considering `a b c` $.contextMenu will first try to use »a« as the accesskey, if already taken, it'll fall through to `b`. Words are reduced to the first character, so `hello world` is treated as `h w`.\n\n Note: Accesskeys are treated unique throughout one menu. This means an item in a sub-menu can't occupy the same accesskey as an item in the main menu.\n *\n * @property {?JQuery} $input - The input element if it was build for this item.\n * @property {Object} events - Events to register on a {@link ContextMenuItem}. The contents of the options object are passed as jQuery `e.data`.\n * @property {string} value - The value of the `` element.\n * @property {boolean|string} selected - The selected option of a `select` element and the checked property for `checkbox` and `radio` {@link ContextMenuItemTypes}.\n * @property {string} radio - Specifies the group of the `radio` element.\n * @property {string} options - Specifies the options of the `select` element.\n * @property {Number} height - The height in pixels `')\n .attr('name', 'context-menu-input-' + key)\n .val(item.value || '')\n .appendTo($label);\n\n if (item.height) {\n $input.height(item.height);\n }\n break;\n\n case ContextMenuItemTypes.checkbox:\n $input = $('')\n .attr('name', 'context-menu-input-' + key)\n .val(item.value || '')\n .prop('checked', !!item.selected)\n .prependTo($label);\n break;\n\n case ContextMenuItemTypes.radio:\n $input = $('')\n .attr('name', 'context-menu-input-' + item.radio)\n .val(item.value || '')\n .prop('checked', !!item.selected)\n .prependTo($label);\n break;\n\n case ContextMenuItemTypes.select:\n $input = $('')\n .attr('name', 'context-menu-input-' + key)\n .appendTo($label);\n if (item.options) {\n Object.keys(item.options).forEach((value) => {\n $('').val(value).text(item.options[value]).appendTo($input);\n });\n $input.val(item.selected);\n }\n break;\n\n case ContextMenuItemTypes.submenu:\n createNameNode(item).appendTo($t);\n item.appendTo = item.$node;\n $t.data('contextMenu', item).addClass('context-menu-submenu');\n item.callback = null;\n\n // If item contains items, and this is a promise, we should create it later\n // check if subitems is of type promise. If it is a promise we need to create\n // it later, after promise has been resolved.\n if (typeof item.items.then === 'function') {\n // probably a promise, process it, when completed it will create the sub menu's.\n rootMenuData.manager.operations.processPromises(e, item, rootMenuData, item.items);\n } else {\n // normal submenu.\n rootMenuData.manager.operations.create(e, item, rootMenuData);\n }\n break;\n\n case ContextMenuItemTypes.html:\n $(item.html).appendTo($t);\n break;\n\n default:\n [currentMenuData, rootMenuData].forEach((k) => {\n k.commands[key] = item;\n // Overwrite only if undefined or the item is appended to the rootMenuData. This so it\n // doesn't overwrite callbacks of rootMenuData elements if the name is the same.\n if (typeof item.callback === 'function' && (typeof k.callbacks[key] === 'undefined' || typeof currentMenuData.type === 'undefined')) {\n k.callbacks[key] = item.callback;\n }\n });\n createNameNode(item).appendTo($t);\n break;\n }\n\n // disable key listener in \n if (item.type && item.type !== ContextMenuItemTypes.submenu && item.type !== ContextMenuItemTypes.html && item.type !== ContextMenuItemTypes.separator) {\n $input\n .on('focus', rootMenuData.manager.handler.focusInput)\n .on('blur', rootMenuData.manager.handler.blurInput);\n\n if (item.events) {\n $input.on(item.events, currentMenuData);\n }\n }\n\n // add icons\n if (item.icon) {\n if (typeof item.icon === 'function') {\n item._icon = item.icon.call(this, e, $t, key, item, currentMenuData, rootMenuData);\n } else {\n if (typeof item.icon === 'string' && item.icon.substring(0, 3) === 'fa-') {\n // to enable font awesome\n item._icon = rootMenuData.classNames.icon + ' ' + rootMenuData.classNames.icon + '--fa fa ' + item.icon;\n } else {\n item._icon = rootMenuData.classNames.icon + ' ' + rootMenuData.classNames.icon + '-' + item.icon;\n }\n }\n $t.addClass(item._icon);\n }\n }\n\n // cache contained elements\n item.$input = $input;\n item.$label = $label;\n\n // attach item to menu\n $t.appendTo(currentMenuData.$menu);\n\n // Disable text selection\n if (!currentMenuData.hasTypes && $.support.eventSelectstart) {\n // browsers support user-select: none,\n // IE has a special event for text-selection\n // browsers supporting neither will not be preventing text-selection\n $t.on('selectstart.disableTextSelect', currentMenuData.manager.handler.abortevent);\n }\n });\n // attach contextMenu to (to bypass any possible overflow:hidden issues on parents of the trigger element)\n if (!currentMenuData.$node) {\n currentMenuData.$menu.css('display', 'none').addClass('context-menu-rootMenuData');\n }\n currentMenuData.$menu.appendTo(currentMenuData.appendTo || document.body);\n }\n\n /**\n * Resize the menu to its content.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {ContextMenuEvent} e\n * @param {JQuery} $menu\n * @param {boolean?} nested\n */\n resize(e, $menu, nested) {\n let domMenu;\n // determine widths of submenus, as CSS won't grow them automatically\n // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100;\n // kinda sucks hard...\n\n // determine width of absolutely positioned element\n $menu.css({position: 'absolute', display: 'block'});\n // don't apply yet, because that would break nested elements' widths\n $menu.data('width',\n (domMenu = $menu.get(0)).getBoundingClientRect\n ? Math.ceil(domMenu.getBoundingClientRect().width)\n : $menu.outerWidth() + 1); // outerWidth() returns rounded pixels\n // reset styles so they allow nested elements to grow/shrink naturally\n $menu.css({\n position: 'static',\n minWidth: '0px',\n maxWidth: '100000px'\n });\n // identify width of nested menus\n $menu.find('> li > ul').each((index, element) => {\n e.data.manager.operations.resize(e, $(element), true);\n });\n // reset and apply changes in the end because nested\n // elements' widths wouldn't be calculatable otherwise\n if (!nested) {\n $menu.find('ul').addBack().css({\n position: '',\n display: '',\n minWidth: '',\n maxWidth: ''\n }).outerWidth(function () {\n return $(this).data('width');\n });\n }\n }\n\n /**\n * Update the contextmenu, re-evaluates the whole menu (including disabled/visible callbacks)\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData?} currentMenuData\n * @param {ContextMenuData?} rootMenuData\n */\n update(e, currentMenuData, rootMenuData) {\n const $trigger = this;\n if (typeof rootMenuData === 'undefined') {\n rootMenuData = currentMenuData;\n rootMenuData.manager.operations.resize(e, currentMenuData.$menu);\n }\n // re-check disabled for each item\n currentMenuData.$menu.children().each(function (index, element) {\n let $item = $(element);\n let key = $item.data('contextMenuKey');\n let item = currentMenuData.items[key];\n\n let disabled = (typeof item.disabled === 'function' && item.disabled.call($trigger, e, key, currentMenuData, rootMenuData)) || item.disabled === true;\n let visible;\n\n if (typeof item.visible === 'function') {\n visible = item.visible.call($trigger, e, key, currentMenuData, rootMenuData);\n } else if (typeof item.visible !== 'undefined') {\n visible = item.visible === true;\n } else {\n visible = true;\n }\n $item[visible ? 'show' : 'hide']();\n\n // dis- / enable item\n $item[disabled ? 'addClass' : 'removeClass'](rootMenuData.classNames.disabled);\n\n if (typeof item.icon === 'function') {\n $item.removeClass(item._icon);\n item._icon = item.icon.call($trigger, e, $item, key, item, currentMenuData, rootMenuData);\n $item.addClass(item._icon);\n }\n\n if (item.type) {\n // dis- / enable input elements\n $item.find('input, select, textarea').prop('disabled', disabled);\n\n // update input states\n switch (item.type) {\n case ContextMenuItemTypes.text:\n case ContextMenuItemTypes.textarea:\n item.$input.val(item.value || '');\n break;\n\n case ContextMenuItemTypes.checkbox:\n case ContextMenuItemTypes.radio:\n item.$input.val(item.value || '').prop('checked', !!item.selected);\n break;\n\n case ContextMenuItemTypes.select:\n item.$input.val((item.selected === 0 ? '0' : item.selected) || '');\n break;\n }\n }\n\n if (item.$menu) {\n // update sub-menu\n rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData);\n }\n });\n }\n\n /**\n * Create the overlay layer so we can capture the click outside the menu and close it.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData} menuData\n * @param {number} zIndex\n * @returns {jQuery}\n */\n layer(e, menuData, zIndex) {\n const $window = $(window);\n\n // add transparent layer for click area\n // filter and background for Internet Explorer, Issue #23\n const $layer = menuData.$layer = $('
      ')\n .css({\n height: $window.height(),\n width: $window.width(),\n display: 'block',\n position: 'fixed',\n 'z-index': zIndex,\n top: 0,\n left: 0,\n opacity: 0,\n filter: 'alpha(opacity=0)',\n 'background-color': '#000'\n })\n .data('contextMenuRoot', menuData)\n .insertBefore(this)\n .on('contextmenu', menuData.manager.handler.abortevent)\n .on('mousedown', menuData.manager.handler.layerClick);\n\n // IE6 doesn't know position:fixed;\n if (typeof document.body.style.maxWidth === 'undefined') { // IE6 doesn't support maxWidth\n $layer.css({\n 'position': 'absolute',\n 'height': $(document).height()\n });\n }\n\n return $layer;\n }\n\n /**\n * Process submenu promise.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData} currentMenuData\n * @param {ContextMenuData} rootMenuData\n * @param {Promise} promise\n */\n processPromises(e, currentMenuData, rootMenuData, promise) {\n // Start\n currentMenuData.$node.addClass(rootMenuData.classNames.iconLoadingClass);\n\n function finishPromiseProcess(currentMenuData, rootMenuData, items) {\n if (typeof rootMenuData.$menu === 'undefined' || !rootMenuData.$menu.is(':visible')) {\n return;\n }\n currentMenuData.$node.removeClass(rootMenuData.classNames.iconLoadingClass);\n currentMenuData.items = items;\n rootMenuData.manager.operations.create(e, currentMenuData, rootMenuData); // Create submenu\n rootMenuData.manager.operations.update(e, currentMenuData, rootMenuData); // Correctly update position if user is already hovered over menu item\n rootMenuData.positionSubmenu.call(currentMenuData.$node, e, currentMenuData.$menu); // positionSubmenu, will only do anything if user already hovered over menu item that just got new subitems.\n }\n\n function errorPromise(currentMenuData, rootMenuData, errorItem) {\n // User called promise.reject() with an error item, if not, provide own error item.\n if (typeof errorItem === 'undefined') {\n errorItem = {\n 'error': {\n name: 'No items and no error item',\n icon: 'context-menu-icon context-menu-icon-quit'\n }\n };\n if (window.console) {\n (console.error || console.log).call(console, 'When you reject a promise, provide an \"items\" object, equal to normal sub-menu items');\n }\n } else if (typeof errorItem === 'string') {\n errorItem = {'error': {name: errorItem}};\n }\n finishPromiseProcess(currentMenuData, rootMenuData, errorItem);\n }\n\n function completedPromise(currentMenuData, rootMenuData, items) {\n // Completed promise (dev called promise.resolve). We now have a list of items which can\n // be used to create the rest of the context menu.\n if (typeof items === 'undefined') {\n // Null result, dev should have checked\n errorPromise(undefined); // own error object\n }\n finishPromiseProcess(currentMenuData, rootMenuData, items);\n }\n\n // Wait for promise completion. .then(success, error, notify) (we don't track notify). Bind the currentMenuData\n // and rootMenuData to avoid scope problems\n promise.then(completedPromise.bind(this, currentMenuData, rootMenuData), errorPromise.bind(this, currentMenuData, rootMenuData));\n }\n\n /**\n * Operation that will run after contextMenu showed on screen.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData} menuData\n * @return {undefined}\n */\n activated(e, menuData) {\n const $menu = menuData.$menu;\n const $menuOffset = $menu.offset();\n const winHeight = $(window).height();\n const winScrollTop = $(window).scrollTop();\n const menuHeight = $menu.height();\n if (menuHeight > winHeight) {\n $menu.css({\n 'height': winHeight + 'px',\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto',\n 'top': winScrollTop + 'px'\n });\n } else if (($menuOffset.top < winScrollTop) || ($menuOffset.top + menuHeight > winScrollTop + winHeight)) {\n $menu.css({\n 'top': '0px'\n });\n }\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/classes/ContextMenuOperations.js","/**\n * @class ContextMenuHelper\n * @classdesc Few helper static functions\n */\nexport default class ContextMenuHelper {\n /**\n * Calculates zIndex of an element\n * @memberOf ContextMenuHelper\n * @method zindex\n * @static\n * @param {JQuery} $t - Element to calculate z-index of.\n * @return {number} - Elements zIndex\n */\n static zindex($t) {\n let zin = 0;\n let $tt = $t;\n\n while (true) {\n zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0);\n $tt = $tt.parent();\n if (!$tt || !$tt.length || 'html body'.indexOf($tt.prop('nodeName').toLowerCase()) > -1) {\n break;\n }\n }\n return zin;\n }\n\n /**\n * Split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key\n * @memberOf ContextMenuHelper\n * @method splitAccesskey\n * @static\n * @param {string} val - Accesskey value\n * @return {Array} - Seperate keys to handle as accesskey\n */\n static splitAccesskey(val) {\n let t = val.split(/\\s+/);\n let keys = [];\n\n for (let i = 0, k; k = t[i]; i++) {\n k = k.charAt(0).toUpperCase(); // first character only\n // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it.\n // a map to look up already used access keys would be nice\n keys.push(k);\n }\n\n return keys;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/classes/ContextMenuHelper.js","/**\n * Determine the position for a root menu.\n * @memberOf ContextMenuOptions\n * @function ContextMenuOptions#determinePosition\n * @param {(JQuery)} $menu\n */\nexport function determinePosition($menu) {\n // position to the lower middle of the trigger element\n if ($.ui && $.ui.position) {\n // .position() is provided as a jQuery UI utility\n // (...and it won't work on hidden elements)\n $menu.css('display', 'block').position({\n my: 'center top',\n at: 'center bottom',\n of: this,\n offset: '0 5',\n collision: 'fit'\n }).css('display', 'none');\n } else {\n // determine contextMenu position\n const offset = this.offset();\n offset.top += this.outerHeight();\n offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2;\n $menu.css(offset);\n }\n}\n\n/**\n * Position the root menu.\n * @memberOf ContextMenuOptions\n * @function ContextMenuOptions#position\n * @param {JQuery.Event} e\n * @param {ContextMenuData} currentMenuData\n * @param {(number|string)} x\n * @param {(number|string)} y\n */\nexport function position(e, currentMenuData, x, y) {\n const $window = $(window);\n let offset;\n // determine contextMenu position\n if (!x && !y) {\n currentMenuData.determinePosition.call(this, currentMenuData.$menu);\n return;\n } else if (x === 'maintain' && y === 'maintain') {\n // x and y must not be changed (after re-show on command click)\n offset = currentMenuData.$menu.position();\n } else {\n // x and y are given (by mouse event)\n const offsetParentOffset = currentMenuData.$menu.offsetParent().offset();\n offset = {top: y - offsetParentOffset.top, left: x - offsetParentOffset.left};\n }\n\n // correct offset if viewport demands it\n const bottom = $window.scrollTop() + $window.height();\n const right = $window.scrollLeft() + $window.width();\n const height = currentMenuData.$menu.outerHeight();\n const width = currentMenuData.$menu.outerWidth();\n\n if (offset.top + height > bottom) {\n offset.top -= height;\n }\n\n if (offset.top < 0) {\n offset.top = 0;\n }\n\n if (offset.left + width > right) {\n offset.left -= width;\n }\n\n if (offset.left < 0) {\n offset.left = 0;\n }\n\n currentMenuData.$menu.css(offset);\n}\n\n/**\n * Position a submenu.\n * @memberOf ContextMenuOptions\n * @function ContextMenuOptions#positionSubmenu\n * @param {JQuery.Event} e\n * @param {JQuery} $menu\n */\n// position the sub-menu\nexport function positionSubmenu(e, $menu) {\n if (typeof $menu === 'undefined') {\n // When user hovers over item (which has sub items) handle.focusItem will call this.\n // but the submenu does not exist yet if ContextMenuData.items is a promise. just return, will\n // call positionSubmenu after promise is completed.\n return;\n }\n if ($.ui && $.ui.position) {\n // .position() is provided as a jQuery UI utility\n // (...and it won't work on hidden elements)\n $menu.css('display', 'block').position({\n my: 'left top-5',\n at: 'right top',\n of: this,\n collision: 'flipfit fit'\n }).css('display', '');\n } else {\n // determine contextMenu position\n const offset = {\n top: -9,\n left: this.outerWidth() - 5\n };\n $menu.css(offset);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/defaults/position.js","/**\n * @class ContextMenuHtml5Builder\n * @classdesc considering the following HTML `$.contextMenu.fromMenu($('#html5menu'))` will return a proper items object.\n\n ```\n \n \n \n \n \n
      \n \n
      \n
      \n ```\n\n `$.contextMenu.fromMenu()` will properly import (and thus handle) the following elements. Everything else is imported as `{type: \"html\"}`\n\n ```\n \n
      \n \n (W3C Specification)\n (Firefox)\n \n ')\n .attr('name', 'context-menu-input-' + key)\n .val(item.value || '')\n .appendTo($label);\n\n if (item.height) {\n $input.height(item.height);\n }\n break;\n\n case ContextMenuItemTypes.checkbox:\n $input = $('')\n .attr('name', 'context-menu-input-' + key)\n .val(item.value || '')\n .prop('checked', !!item.selected)\n .prependTo($label);\n break;\n\n case ContextMenuItemTypes.radio:\n $input = $('')\n .attr('name', 'context-menu-input-' + item.radio)\n .val(item.value || '')\n .prop('checked', !!item.selected)\n .prependTo($label);\n break;\n\n case ContextMenuItemTypes.select:\n $input = $('')\n .attr('name', 'context-menu-input-' + key)\n .appendTo($label);\n if (item.options) {\n Object.keys(item.options).forEach((value) => {\n $('').val(value).text(item.options[value]).appendTo($input);\n });\n $input.val(item.selected);\n }\n break;\n\n case ContextMenuItemTypes.submenu:\n createNameNode(item).appendTo($t);\n item.appendTo = item.$node;\n $t.data('contextMenu', item).addClass('context-menu-submenu');\n item.callback = null;\n\n // If item contains items, and this is a promise, we should create it later\n // check if subitems is of type promise. If it is a promise we need to create\n // it later, after promise has been resolved.\n if (typeof item.items.then === 'function') {\n // probably a promise, process it, when completed it will create the sub menu's.\n rootMenuData.manager.operations.processPromises(e, item, rootMenuData, item.items);\n } else {\n // normal submenu.\n rootMenuData.manager.operations.create(e, item, rootMenuData);\n }\n break;\n\n case ContextMenuItemTypes.html:\n $(item.html).appendTo($t);\n break;\n\n default:\n [currentMenuData, rootMenuData].forEach((k) => {\n k.commands[key] = item;\n // Overwrite only if undefined or the item is appended to the rootMenuData. This so it\n // doesn't overwrite callbacks of rootMenuData elements if the name is the same.\n if (typeof item.callback === 'function' && (typeof k.callbacks[key] === 'undefined' || typeof currentMenuData.type === 'undefined')) {\n k.callbacks[key] = item.callback;\n }\n });\n createNameNode(item).appendTo($t);\n break;\n }\n\n // disable key listener in \n if (item.type && item.type !== ContextMenuItemTypes.submenu && item.type !== ContextMenuItemTypes.html && item.type !== ContextMenuItemTypes.separator) {\n $input\n .on('focus', rootMenuData.manager.handler.focusInput)\n .on('blur', rootMenuData.manager.handler.blurInput);\n\n if (item.events) {\n $input.on(item.events, currentMenuData);\n }\n }\n\n // add icons\n if (item.icon) {\n if (typeof item.icon === 'function') {\n item._icon = item.icon.call(this, e, $t, key, item, currentMenuData, rootMenuData);\n } else {\n if (typeof item.icon === 'string' && item.icon.substring(0, 3) === 'fa-') {\n // to enable font awesome\n item._icon = rootMenuData.classNames.icon + ' ' + rootMenuData.classNames.icon + '--fa fa ' + item.icon;\n } else {\n item._icon = rootMenuData.classNames.icon + ' ' + rootMenuData.classNames.icon + '-' + item.icon;\n }\n }\n $t.addClass(item._icon);\n }\n }\n\n // cache contained elements\n item.$input = $input;\n item.$label = $label;\n\n // attach item to menu\n $t.appendTo(currentMenuData.$menu);\n\n // Disable text selection\n if (!currentMenuData.hasTypes && $.support.eventSelectstart) {\n // browsers support user-select: none,\n // IE has a special event for text-selection\n // browsers supporting neither will not be preventing text-selection\n $t.on('selectstart.disableTextSelect', currentMenuData.manager.handler.abortevent);\n }\n });\n // attach contextMenu to (to bypass any possible overflow:hidden issues on parents of the trigger element)\n if (!currentMenuData.$node) {\n currentMenuData.$menu.css('display', 'none').addClass('context-menu-rootMenuData');\n }\n currentMenuData.$menu.appendTo(currentMenuData.appendTo || document.body);\n }\n\n /**\n * Resize the menu to its content.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {ContextMenuEvent} e\n * @param {JQuery} $menu\n * @param {boolean?} nested\n */\n resize(e, $menu, nested) {\n let domMenu;\n // determine widths of submenus, as CSS won't grow them automatically\n // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100;\n // kinda sucks hard...\n\n // determine width of absolutely positioned element\n $menu.css({position: 'absolute', display: 'block'});\n // don't apply yet, because that would break nested elements' widths\n $menu.data('width',\n (domMenu = $menu.get(0)).getBoundingClientRect\n ? Math.ceil(domMenu.getBoundingClientRect().width)\n : $menu.outerWidth() + 1); // outerWidth() returns rounded pixels\n // reset styles so they allow nested elements to grow/shrink naturally\n $menu.css({\n position: 'static',\n minWidth: '0px',\n maxWidth: '100000px'\n });\n // identify width of nested menus\n $menu.find('> li > ul').each((index, element) => {\n e.data.manager.operations.resize(e, $(element), true);\n });\n // reset and apply changes in the end because nested\n // elements' widths wouldn't be calculatable otherwise\n if (!nested) {\n $menu.find('ul').addBack().css({\n position: '',\n display: '',\n minWidth: '',\n maxWidth: ''\n }).outerWidth(function () {\n return $(this).data('width');\n });\n }\n }\n\n /**\n * Update the contextmenu, re-evaluates the whole menu (including disabled/visible callbacks)\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData?} currentMenuData\n * @param {ContextMenuData?} rootMenuData\n *\n * @return {boolean} hasVisibleItems\n */\n update(e, currentMenuData, rootMenuData) {\n const $trigger = this;\n if (typeof rootMenuData === 'undefined') {\n rootMenuData = currentMenuData;\n rootMenuData.manager.operations.resize(e, currentMenuData.$menu);\n }\n\n let hasVisibleItems = false;\n\n // re-check disabled for each item\n currentMenuData.$menu.children().each(function (index, element) {\n let $item = $(element);\n let key = $item.data('contextMenuKey');\n let item = currentMenuData.items[key];\n\n let disabled = (typeof item.disabled === 'function' && item.disabled.call($trigger, e, key, currentMenuData, rootMenuData)) || item.disabled === true;\n let visible;\n\n if (typeof item.visible === 'function') {\n visible = item.visible.call($trigger, e, key, currentMenuData, rootMenuData);\n } else if (typeof item.visible !== 'undefined') {\n visible = item.visible === true;\n } else {\n visible = true;\n }\n\n if (visible) {\n hasVisibleItems = true;\n }\n\n $item[visible ? 'show' : 'hide']();\n\n // dis- / enable item\n $item[disabled ? 'addClass' : 'removeClass'](rootMenuData.classNames.disabled);\n\n if (typeof item.icon === 'function') {\n $item.removeClass(item._icon);\n item._icon = item.icon.call($trigger, e, $item, key, item, currentMenuData, rootMenuData);\n $item.addClass(item._icon);\n }\n\n if (item.type) {\n // dis- / enable input elements\n $item.find('input, select, textarea').prop('disabled', disabled);\n\n // update input states\n switch (item.type) {\n case ContextMenuItemTypes.text:\n case ContextMenuItemTypes.textarea:\n item.$input.val(item.value || '');\n break;\n\n case ContextMenuItemTypes.checkbox:\n case ContextMenuItemTypes.radio:\n item.$input.val(item.value || '').prop('checked', !!item.selected);\n break;\n\n case ContextMenuItemTypes.select:\n item.$input.val((item.selected === 0 ? '0' : item.selected) || '');\n break;\n }\n }\n\n if (item.$menu) {\n // update sub-menu\n let subMenuHasVisibleItems = rootMenuData.manager.operations.update.call($trigger, e, item, rootMenuData);\n if (subMenuHasVisibleItems) {\n hasVisibleItems = true;\n }\n }\n });\n\n return hasVisibleItems;\n }\n\n /**\n * Create the overlay layer so we can capture the click outside the menu and close it.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData} menuData\n * @param {number} zIndex\n * @returns {jQuery}\n */\n layer(e, menuData, zIndex) {\n const $window = $(window);\n\n // add transparent layer for click area\n // filter and background for Internet Explorer, Issue #23\n const $layer = menuData.$layer = $('
      ')\n .css({\n height: $window.height(),\n width: $window.width(),\n display: 'block',\n position: 'fixed',\n 'z-index': zIndex,\n top: 0,\n left: 0,\n opacity: 0,\n filter: 'alpha(opacity=0)',\n 'background-color': '#000'\n })\n .data('contextMenuRoot', menuData)\n .insertBefore(this)\n .on('contextmenu', menuData.manager.handler.abortevent)\n .on('mousedown', menuData.manager.handler.layerClick);\n\n // IE6 doesn't know position:fixed;\n if (typeof document.body.style.maxWidth === 'undefined') { // IE6 doesn't support maxWidth\n $layer.css({\n 'position': 'absolute',\n 'height': $(document).height()\n });\n }\n\n return $layer;\n }\n\n /**\n * Process submenu promise.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData} currentMenuData\n * @param {ContextMenuData} rootMenuData\n * @param {Promise} promise\n */\n processPromises(e, currentMenuData, rootMenuData, promise) {\n // Start\n currentMenuData.$node.addClass(rootMenuData.classNames.iconLoadingClass);\n\n function finishPromiseProcess(currentMenuData, rootMenuData, items) {\n if (typeof rootMenuData.$menu === 'undefined' || !rootMenuData.$menu.is(':visible')) {\n return;\n }\n currentMenuData.$node.removeClass(rootMenuData.classNames.iconLoadingClass);\n currentMenuData.items = items;\n rootMenuData.manager.operations.create(e, currentMenuData, rootMenuData); // Create submenu\n rootMenuData.manager.operations.update(e, currentMenuData, rootMenuData); // Correctly update position if user is already hovered over menu item\n rootMenuData.positionSubmenu.call(currentMenuData.$node, e, currentMenuData.$menu); // positionSubmenu, will only do anything if user already hovered over menu item that just got new subitems.\n }\n\n function errorPromise(currentMenuData, rootMenuData, errorItem) {\n // User called promise.reject() with an error item, if not, provide own error item.\n if (typeof errorItem === 'undefined') {\n errorItem = {\n 'error': {\n name: 'No items and no error item',\n icon: 'context-menu-icon context-menu-icon-quit'\n }\n };\n if (window.console) {\n (console.error || console.log).call(console, 'When you reject a promise, provide an \"items\" object, equal to normal sub-menu items');\n }\n } else if (typeof errorItem === 'string') {\n errorItem = {'error': {name: errorItem}};\n }\n finishPromiseProcess(currentMenuData, rootMenuData, errorItem);\n }\n\n function completedPromise(currentMenuData, rootMenuData, items) {\n // Completed promise (dev called promise.resolve). We now have a list of items which can\n // be used to create the rest of the context menu.\n if (typeof items === 'undefined') {\n // Null result, dev should have checked\n errorPromise(undefined); // own error object\n }\n finishPromiseProcess(currentMenuData, rootMenuData, items);\n }\n\n // Wait for promise completion. .then(success, error, notify) (we don't track notify). Bind the currentMenuData\n // and rootMenuData to avoid scope problems\n promise.then(completedPromise.bind(this, currentMenuData, rootMenuData), errorPromise.bind(this, currentMenuData, rootMenuData));\n }\n\n /**\n * Operation that will run after contextMenu showed on screen.\n *\n * @method\n * @memberOf ContextMenuOperations\n * @instance\n *\n * @param {JQuery.Event} e\n * @param {ContextMenuData} menuData\n * @return {undefined}\n */\n activated(e, menuData) {\n const $menu = menuData.$menu;\n const $menuOffset = $menu.offset();\n const winHeight = $(window).height();\n const winScrollTop = $(window).scrollTop();\n const menuHeight = $menu.height();\n if (menuHeight > winHeight) {\n $menu.css({\n 'height': winHeight + 'px',\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto',\n 'top': winScrollTop + 'px'\n });\n } else if (($menuOffset.top < winScrollTop) || ($menuOffset.top + menuHeight > winScrollTop + winHeight)) {\n $menu.css({\n 'top': '0px'\n });\n }\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/classes/ContextMenuOperations.js","/**\n * @class ContextMenuHelper\n * @classdesc Few helper static functions\n */\nexport default class ContextMenuHelper {\n /**\n * Calculates zIndex of an element\n * @memberOf ContextMenuHelper\n * @method zindex\n * @static\n * @param {JQuery} $t - Element to calculate z-index of.\n * @return {number} - Elements zIndex\n */\n static zindex($t) {\n let zin = 0;\n let $tt = $t;\n\n while (true) {\n zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0);\n $tt = $tt.parent();\n if (!$tt || !$tt.length || 'html body'.indexOf($tt.prop('nodeName').toLowerCase()) > -1) {\n break;\n }\n }\n return zin;\n }\n\n /**\n * Split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key\n * @memberOf ContextMenuHelper\n * @method splitAccesskey\n * @static\n * @param {string} val - Accesskey value\n * @return {Array} - Seperate keys to handle as accesskey\n */\n static splitAccesskey(val) {\n let t = val.split(/\\s+/);\n let keys = [];\n\n for (let i = 0, k; k = t[i]; i++) {\n k = k.charAt(0).toUpperCase(); // first character only\n // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it.\n // a map to look up already used access keys would be nice\n keys.push(k);\n }\n\n return keys;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/classes/ContextMenuHelper.js","/**\n * Determine the position for a root menu.\n * @memberOf ContextMenuOptions\n * @function ContextMenuOptions#determinePosition\n * @param {(JQuery)} $menu\n */\nexport function determinePosition($menu) {\n // position to the lower middle of the trigger element\n if ($.ui && $.ui.position) {\n // .position() is provided as a jQuery UI utility\n // (...and it won't work on hidden elements)\n $menu.css('display', 'block').position({\n my: 'center top',\n at: 'center bottom',\n of: this,\n offset: '0 5',\n collision: 'fit'\n }).css('display', 'none');\n } else {\n // determine contextMenu position\n const offset = this.offset();\n offset.top += this.outerHeight();\n offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2;\n $menu.css(offset);\n }\n}\n\n/**\n * Position the root menu.\n * @memberOf ContextMenuOptions\n * @function ContextMenuOptions#position\n * @param {JQuery.Event} e\n * @param {ContextMenuData} currentMenuData\n * @param {(number|string)} x\n * @param {(number|string)} y\n */\nexport function position(e, currentMenuData, x, y) {\n const $window = $(window);\n let offset;\n // determine contextMenu position\n if (!x && !y) {\n currentMenuData.determinePosition.call(this, currentMenuData.$menu);\n return;\n } else if (x === 'maintain' && y === 'maintain') {\n // x and y must not be changed (after re-show on command click)\n offset = currentMenuData.$menu.position();\n } else {\n // x and y are given (by mouse event)\n const offsetParentOffset = currentMenuData.$menu.offsetParent().offset();\n offset = {top: y - offsetParentOffset.top, left: x - offsetParentOffset.left};\n }\n\n // correct offset if viewport demands it\n const bottom = $window.scrollTop() + $window.height();\n const right = $window.scrollLeft() + $window.width();\n const height = currentMenuData.$menu.outerHeight();\n const width = currentMenuData.$menu.outerWidth();\n\n if (offset.top + height > bottom) {\n offset.top -= height;\n }\n\n if (offset.top < 0) {\n offset.top = 0;\n }\n\n if (offset.left + width > right) {\n offset.left -= width;\n }\n\n if (offset.left < 0) {\n offset.left = 0;\n }\n\n currentMenuData.$menu.css(offset);\n}\n\n/**\n * Position a submenu.\n * @memberOf ContextMenuOptions\n * @function ContextMenuOptions#positionSubmenu\n * @param {JQuery.Event} e\n * @param {JQuery} $menu\n */\n// position the sub-menu\nexport function positionSubmenu(e, $menu) {\n if (typeof $menu === 'undefined') {\n // When user hovers over item (which has sub items) handle.focusItem will call this.\n // but the submenu does not exist yet if ContextMenuData.items is a promise. just return, will\n // call positionSubmenu after promise is completed.\n return;\n }\n if ($.ui && $.ui.position) {\n // .position() is provided as a jQuery UI utility\n // (...and it won't work on hidden elements)\n $menu.css('display', 'block').position({\n my: 'left top-5',\n at: 'right top',\n of: this,\n collision: 'flipfit fit'\n }).css('display', '');\n } else {\n // determine contextMenu position\n const offset = {\n top: -9,\n left: this.outerWidth() - 5\n };\n $menu.css(offset);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/defaults/position.js","/**\n * @class ContextMenuHtml5Builder\n * @classdesc considering the following HTML `$.contextMenu.fromMenu($('#html5menu'))` will return a proper items object.\n\n ```\n \n \n \n \n \n
      \n \n
      \n
      \n ```\n\n `$.contextMenu.fromMenu()` will properly import (and thus handle) the following elements. Everything else is imported as `{type: \"html\"}`\n\n ```\n
      \n
      \n
      \n (W3C Specification)\n (Firefox)\n \n