1 line
28 KiB
JavaScript
1 line
28 KiB
JavaScript
(e=>{"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(jQuery)})(function(d){d.support.htmlMenuitem="HTMLMenuItemElement"in window,d.support.htmlCommand="HTMLCommandElement"in window,d.support.eventSelectstart="onselectstart"in document.documentElement,d.ui&&d.widget||(d.cleanData=(a=d.cleanData,function(e){for(var t,n,o=0;null!=e[o];o++){n=e[o];try{(t=d._data(n,"events"))&&t.remove&&d(n).triggerHandler("remove")}catch(e){}}a(e)}));var a,s=null,m=!1,p=d(window),h=0,f={},g={},x={},v={selector:null,appendTo:null,trigger:"right",shadow:!0,async:!0,autoHide:!1,delay:200,reposition:!0,hideOnSecondTrigger:!1,selectableSubMenu:!1,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"},determinePosition:function(e){var t;d.ui&&d.ui.position?e.css("display","block").position({my:"center top",at:"center bottom",of:this,offset:"0 5",collision:"fit"}).css("display","none"):((t=this.offset()).top+=this.outerHeight(),t.left+=this.outerWidth()/2-e.outerWidth()/2,e.css(t))},position:function(e,t,n){var o,a,s;t||n?(t="maintain"===t&&"maintain"===n?e.$menu.position():{top:n-(n=e.$menu.offsetParent().offset()).top,left:t-n.left},n=p.scrollTop()+p.height(),o=p.scrollLeft()+p.width(),a=e.$menu.outerHeight(),s=e.$menu.outerWidth(),t.top+a>n&&(t.top-=a),t.top<0&&(t.top=0),t.left+s>o&&(t.left-=s),t.left<0&&(t.left=0),e.$menu.css(t)):e.determinePosition.call(this,e.$menu)},positionSubmenu:function(e){var t;void 0!==e&&(d.ui&&d.ui.position?e.css("display","block").position({my:"left top-5",at:"right top",of:this,collision:"flipfit fit"}).css("display",""):(t={top:-9,left:this.outerWidth()-5},e.css(t)))},zIndex:1,animation:{duration:50,show:"slideDown",hide:"slideUp"},events:{preShow:d.noop,show:d.noop,hide:d.noop,activated:d.noop},callback:null,items:{}},i={timer:null,pageX:null,pageY:null},b={abortevent:function(e){e.preventDefault(),e.stopImmediatePropagation()},contextmenu:function(e){var t=d(this);if(!1!==e.data.events.preShow(t,e)&&("right"===e.data.trigger&&(e.preventDefault(),e.stopImmediatePropagation()),!("right"!==e.data.trigger&&"demand"!==e.data.trigger&&e.originalEvent||!(void 0===e.mouseButton||!e.data||"left"===e.data.trigger&&0===e.mouseButton||"right"===e.data.trigger&&2===e.mouseButton)||t.hasClass("context-menu-active")||t.hasClass("context-menu-disabled")))){if(s=t,e.data.build){var n=e.data.build(s,e);if(!1===n)return;if(e.data=d.extend(!0,{},v,e.data,n||{}),!e.data.items||d.isEmptyObject(e.data.items))throw window.console&&(console.error||console.log).call(console,"No items specified to show in contextMenu"),new Error("No Items specified");e.data.$trigger=s,$.create(e.data)}$.show.call(t,e.data,e.pageX,e.pageY)}},click:function(e){e.preventDefault(),e.stopImmediatePropagation(),d(this).trigger(d.Event("contextmenu",{data:e.data,pageX:e.pageX,pageY:e.pageY}))},mousedown:function(e){var t=d(this);s&&s.length&&!s.is(t)&&b.hideMenu.call(s.data("contextMenu").$menu),2===e.button&&(s=t.data("contextMenuActive",!0))},mouseup:function(e){var t=d(this);t.data("contextMenuActive")&&s&&s.length&&s.is(t)&&!t.hasClass("context-menu-disabled")&&(e.preventDefault(),e.stopImmediatePropagation(),(s=t).trigger(d.Event("contextmenu",{data:e.data,pageX:e.pageX,pageY:e.pageY}))),t.removeData("contextMenuActive")},mouseenter:function(e){var t=d(this),n=d(e.relatedTarget),o=d(document);n.is(".context-menu-list")||n.closest(".context-menu-list").length||s&&s.length||(i.pageX=e.pageX,i.pageY=e.pageY,i.data=e.data,o.on("mousemove.contextMenuShow",b.mousemove),i.timer=setTimeout(function(){i.timer=null,o.off("mousemove.contextMenuShow"),(s=t).trigger(d.Event("contextmenu",{data:i.data,pageX:i.pageX,pageY:i.pageY}))},e.data.delay))},mousemove:function(e){i.pageX=e.pageX,i.pageY=e.pageY},mouseleave:function(e){var t=d(e.relatedTarget);if(!t.is(".context-menu-list")&&!t.closest(".context-menu-list").length){try{clearTimeout(i.timer)}catch(e){}i.timer=null}},layerClick:function(o){var a,s,i=d(this).data("contextMenuRoot"),c=o.button,l=o.pageX,r=o.pageY,u=void 0===l;if(o.preventDefault(),i.async)setTimeout(function(){if(u)null!=i&&null!=i.$menu&&b.hideMenu.call(i.$menu);else{var e,t,n="left"===i.trigger&&0===c||"right"===i.trigger&&2===c;if(document.elementFromPoint&&i.$layer&&(i.$layer.hide(),null!==(a=document.elementFromPoint(l-p.scrollLeft(),r-p.scrollTop()))&&a.isContentEditable&&(e=document.createRange(),t=window.getSelection(),e.selectNode(a),e.collapse(!0),t.removeAllRanges(),t.addRange(e)),d(a).trigger(o),i.$layer.show()),i.hideOnSecondTrigger&&n&&null!=i.$menu)b.hideMenu.call(i.$menu);else{if(i.reposition&&n)if(document.elementFromPoint){if(i.$trigger.is(a))return void i.position.call(i.$trigger,i,l,r)}else if(s=i.$trigger.offset(),t=d(window),s.top+=t.scrollTop(),s.top<=o.pageY&&(s.left+=t.scrollLeft(),s.left<=o.pageX)&&(s.bottom=s.top+i.$trigger.outerHeight(),s.bottom>=o.pageY)&&(s.right=s.left+i.$trigger.outerWidth(),s.right>=o.pageX))return void i.position.call(i.$trigger,i,l,r);a&&n&&i.$trigger.one("contextmenu:hidden",function(){d(a).contextMenu({x:l,y:r,button:c})}),null!=i&&null!=i.$menu&&b.hideMenu.call(i.$menu)}}},50);else if(u)null!=i&&null!=i.$menu&&b.hideMenu.call(i.$menu);else{var e,t,n="left"===i.trigger&&0===c||"right"===i.trigger&&2===c;if(document.elementFromPoint&&i.$layer&&(i.$layer.hide(),null!==(a=document.elementFromPoint(l-p.scrollLeft(),r-p.scrollTop()))&&a.isContentEditable&&(e=document.createRange(),t=window.getSelection(),e.selectNode(a),e.collapse(!0),t.removeAllRanges(),t.addRange(e)),d(a).trigger(o),i.$layer.show()),i.hideOnSecondTrigger&&n&&null!=i.$menu)b.hideMenu.call(i.$menu);else{if(i.reposition&&n)if(document.elementFromPoint){if(i.$trigger.is(a))return void i.position.call(i.$trigger,i,l,r)}else if(s=i.$trigger.offset(),t=d(window),s.top+=t.scrollTop(),s.top<=o.pageY&&(s.left+=t.scrollLeft(),s.left<=o.pageX)&&(s.bottom=s.top+i.$trigger.outerHeight(),s.bottom>=o.pageY)&&(s.right=s.left+i.$trigger.outerWidth(),s.right>=o.pageX))return void i.position.call(i.$trigger,i,l,r);a&&n&&i.$trigger.one("contextmenu:hidden",function(){d(a).contextMenu({x:l,y:r,button:c})}),null!=i&&null!=i.$menu&&b.hideMenu.call(i.$menu)}}},keyStop:function(e,t){t.isInput||e.preventDefault(),e.stopPropagation()},key:function(e){function t(e){""!==e.style.zIndex?o=e.style.zIndex:null!=e.offsetParent?t(e.offsetParent):null!=e.parentElement&&t(e.parentElement)}var n={},o=(void 0===(n=s?s.data("contextMenu")||{}:n).zIndex&&(n.zIndex=0),0);if(t(e.target),!(n.$menu&&parseInt(o,10)>parseInt(n.$menu.css("zIndex"),10))){switch(e.keyCode){case 9:case 38:if(b.keyStop(e,n),n.isInput){if(9===e.keyCode&&e.shiftKey)return e.preventDefault(),n.$selected&&n.$selected.find("input, textarea, select").blur(),void(null!=n.$menu&&b.prevItem.call(n.$menu));if(38===e.keyCode&&"checkbox"===n.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault()}else if(9!==e.keyCode||e.shiftKey)return void(null!=n.$menu&&b.prevItem.call(n.$menu));break;case 40:if(b.keyStop(e,n),!n.isInput)return void(null!=n.$menu&&b.nextItem.call(n.$menu));if(9===e.keyCode)return e.preventDefault(),n.$selected&&n.$selected.find("input, textarea, select").blur(),void(null!=n.$menu&&b.nextItem.call(n.$menu));if(40===e.keyCode&&"checkbox"===n.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault();break;case 37:if(b.keyStop(e,n),n.isInput||!n.$selected||!n.$selected.length)break;if(n.$selected.parent().hasClass("context-menu-root"))break;return a=n.$selected.parent().parent(),n.$selected.trigger("contextmenu:blur"),void(n.$selected=a);case 39:if(b.keyStop(e,n),!n.isInput&&n.$selected&&n.$selected.length){var a=n.$selected.data("contextMenu")||{};if(a.$menu&&n.$selected.hasClass("context-menu-submenu"))return n.$selected=null,a.$selected=null,void b.nextItem.call(a.$menu)}break;case 35:case 36:return n.$selected&&n.$selected.find("input, textarea, select").length?void 0:((n.$selected&&n.$selected.parent()||n.$menu).children(":not(."+n.classNames.disabled+", ."+n.classNames.notSelectable+")")[36===e.keyCode?"first":"last"]().trigger("contextmenu:focus"),void e.preventDefault());case 13:if(b.keyStop(e,n),n.isInput){if(n.$selected&&!n.$selected.is("textarea, select"))return void e.preventDefault();break}return void(null!=n.$selected&&n.$selected.trigger("mouseup"));case 32:case 33:case 34:return void b.keyStop(e,n);case 27:return b.keyStop(e,n),void(null!=n.$menu&&b.hideMenu.call(n.$menu));default:a=String.fromCharCode(e.keyCode).toUpperCase();if(n.accesskeys&&n.accesskeys[a])return void n.accesskeys[a].$node.trigger(n.accesskeys[a].$menu?"contextmenu:focus":"mouseup")}e.stopPropagation(),null!=n.$selected&&n.$selected.trigger(e)}},prevItem:function(e){e.stopPropagation();for(var t=d(this).data("contextMenu")||{},n=d(this).data("contextMenuRoot")||{},o=(t.$selected&&(i=t.$selected,(t=t.$selected.parent().data("contextMenu")||{}).$selected=i),t.$menu.children()),a=t.$selected&&t.$selected.prev().length?t.$selected.prev():o.last(),s=a;a.hasClass(n.classNames.disabled)||a.hasClass(n.classNames.notSelectable)||a.is(":hidden");)if((a=a.prev().length?a.prev():o.last()).is(s))return;t.$selected&&b.itemMouseleave.call(t.$selected.get(0),e),b.itemMouseenter.call(a.get(0),e);var i=a.find("input, textarea, select");i.length&&i.focus()},nextItem:function(e){e.stopPropagation();for(var t=d(this).data("contextMenu")||{},n=d(this).data("contextMenuRoot")||{},o=(t.$selected&&(i=t.$selected,(t=t.$selected.parent().data("contextMenu")||{}).$selected=i),t.$menu.children()),a=t.$selected&&t.$selected.next().length?t.$selected.next():o.first(),s=a;a.hasClass(n.classNames.disabled)||a.hasClass(n.classNames.notSelectable)||a.is(":hidden");)if((a=a.next().length?a.next():o.first()).is(s))return;t.$selected&&b.itemMouseleave.call(t.$selected.get(0),e),b.itemMouseenter.call(a.get(0),e);var i=a.find("input, textarea, select");i.length&&i.focus()},focusInput:function(){var e=d(this).closest(".context-menu-item"),t=e.data(),n=t.contextMenu,t=t.contextMenuRoot;t.$selected=n.$selected=e,t.isInput=n.isInput=!0},blurInput:function(){var e=d(this).closest(".context-menu-item").data(),t=e.contextMenu;e.contextMenuRoot.isInput=t.isInput=!1},menuMouseenter:function(){d(this).data().contextMenuRoot.hovering=!0},menuMouseleave:function(e){var t=d(this).data().contextMenuRoot;t.$layer&&t.$layer.is(e.relatedTarget)&&(t.hovering=!1)},itemMouseenter:function(e){var t=d(this),n=t.data(),o=n.contextMenu,n=n.contextMenuRoot;n.hovering=!0,e&&n.$layer&&n.$layer.is(e.relatedTarget)&&(e.preventDefault(),e.stopImmediatePropagation()),(o.$menu?o:n).$menu.children("."+n.classNames.hover).trigger("contextmenu:blur").children(".hover").trigger("contextmenu:blur"),t.hasClass(n.classNames.disabled)||t.hasClass(n.classNames.notSelectable)?o.$selected=null:t.trigger("contextmenu:focus")},itemMouseleave:function(e){var t=d(this),n=t.data(),o=n.contextMenu,n=n.contextMenuRoot;n!==o&&n.$layer&&n.$layer.is(e.relatedTarget)?(null!=n.$selected&&n.$selected.trigger("contextmenu:blur"),e.preventDefault(),e.stopImmediatePropagation(),n.$selected=o.$selected=o.$node):o&&o.$menu&&o.$menu.hasClass("context-menu-visible")||t.trigger("contextmenu:blur")},itemClick:function(e){var t,n=d(this),o=n.data(),a=o.contextMenu,s=o.contextMenuRoot,o=o.contextMenuKey;if(!(!a.items[o]||n.is("."+s.classNames.disabled+", .context-menu-separator, ."+s.classNames.notSelectable)||n.is(".context-menu-submenu")&&!1===s.selectableSubMenu)){if(e.preventDefault(),e.stopImmediatePropagation(),d.isFunction(a.callbacks[o])&&Object.prototype.hasOwnProperty.call(a.callbacks,o))t=a.callbacks[o];else{if(!d.isFunction(s.callback))return;t=s.callback}!1!==t.call(s.$trigger,o,s,e)?b.hideMenu.call(s.$menu):s.$menu.parent().length&&$.update.call(s.$trigger,s)}},inputClick:function(e){e.stopImmediatePropagation()},hideMenu:function(e,t){var n=d(this).data("contextMenuRoot");$.hide.call(n.$trigger,n,t&&t.force)},focusItem:function(e){e.stopPropagation();var e=d(this),t=e.data(),n=t.contextMenu,t=t.contextMenuRoot;e.hasClass(t.classNames.disabled)||e.hasClass(t.classNames.notSelectable)||(e.addClass([t.classNames.hover,t.classNames.visible].join(" ")).parent().find(".context-menu-item").not(e).removeClass(t.classNames.visible).filter("."+t.classNames.hover).trigger("contextmenu:blur"),n.$selected=t.$selected=e,n&&n.$node&&n.$node.hasClass("context-menu-submenu")&&n.$node.addClass(t.classNames.hover),n.$node&&t.positionSubmenu.call(n.$node,n.$menu))},blurItem:function(e){e.stopPropagation();var e=d(this),t=e.data(),n=t.contextMenu,t=t.contextMenuRoot;n.autoHide&&e.removeClass(t.classNames.visible),e.removeClass(t.classNames.hover),n.$selected=null}},$={show:function(n,e,t){var o=d(this),a={};n.shadow||d("#context-menu-layer").trigger("mousedown"),n.$trigger=o,!1===n.events.show.call(o,n)||!1===$.update.call(o,n)?s=null:(n.position.call(o,n,e,t),n.zIndex&&(e=n.zIndex,"function"==typeof n.zIndex&&(e=n.zIndex.call(o,n)),a.zIndex=(e=>{for(var t=0,n=e;t=Math.max(t,parseInt(n.css("z-index"),10)||0),(n=n.parent())&&n.length&&!(-1<"html body".indexOf(n.prop("nodeName").toLowerCase())););return t})(o)+e),$.layer.call(n.$menu,n,a.zIndex),n.$menu.find("ul").css("zIndex",a.zIndex+1),n.async?n.$menu.css(a)[n.animation.show](n.animation.duration,function(){o.trigger("contextmenu:visible"),$.activated(n),n.events.activated(n)}):(n.$menu.show(),o.trigger("contextmenu:visible"),$.activated(n),n.events.activated(n)),o.data("contextMenu",n).addClass("context-menu-active"),d(document).off("keydown.contextMenu").on("keydown.contextMenu",b.key),n.autoHide&&d(document).on("mousemove.contextMenuAutoHide",function(e){var t=o.offset();t.right=t.left+o.outerWidth(),t.bottom=t.top+o.outerHeight(),!n.$layer||n.hovering||e.pageX>=t.left&&e.pageX<=t.right&&e.pageY>=t.top&&e.pageY<=t.bottom||setTimeout(function(){n.hovering||null==n.$menu||b.hideMenu.call(n.$menu)},50)}))},hide:function(t,e){var n,o=d(this);if(t=t||o.data("contextMenu")||{},e||!t.events||!1!==t.events.hide.call(o,t)){if(o.removeData("contextMenu").removeClass("context-menu-active"),t.$layer){t.async?setTimeout((n=t.$layer,function(){n.remove()}),10):t.$layer.remove();try{delete t.$layer}catch(e){t.$layer=null}}s=null,t.$menu.find("."+t.classNames.hover).trigger("contextmenu:blur"),t.$selected=null,t.$menu.find("."+t.classNames.visible).removeClass(t.classNames.visible),d(document).off(".contextMenuAutoHide").off("keydown.contextMenu"),t.$menu&&(t.async?t.$menu[t.animation.hide](t.animation.duration,function(){t.build&&(t.$menu.remove(),d.each(t,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(){o.trigger("contextmenu:hidden")},10)}):(t.build&&(t.$menu.remove(),d.each(t,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}})),o.trigger("contextmenu:hidden")))}},create:function(l,r){function u(e){var t=d("<span></span>");if(e._accesskey)e._beforeAccesskey&&t.append(document.createTextNode(e._beforeAccesskey)),d("<span></span>").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}void 0===r&&(r=l),l.$menu=d('<ul class="context-menu-list"></ul>').addClass(l.className||"").data({contextMenu:l,contextMenuRoot:r}),l.dataAttr&&d.each(l.dataAttr,function(e,t){l.$menu.attr("data-"+l.key,t)}),d.each(["callbacks","commands","inputs"],function(e,t){l[t]={},r[t]||(r[t]={})}),r.accesskeys||(r.accesskeys={}),d.each(l.items,function(n,o){var e=d('<li class="context-menu-item"></li>').addClass(o.className||""),t=null,a=null;if(e.on("click",d.noop),(o="string"!=typeof o&&"cm_separator"!==o.type?o:{type:"cm_seperator"}).$node=e.data({contextMenu:l,contextMenuRoot:r,contextMenuKey:n}),void 0!==o.accesskey)for(var s=(e=>{for(var t,n=e.split(/\s+/),o=[],a=0;t=n[a];a++)t=t.charAt(0).toUpperCase(),o.push(t);return o})(o.accesskey),i=0;c=s[i];i++)if(!r.accesskeys[c]){var c=(r.accesskeys[c]=o).name.match(new RegExp("^(.*?)("+c+")(.*)$","i"));c&&(o._beforeAccesskey=c[1],o._accesskey=c[2],o._afterAccesskey=c[3]);break}if(o.type&&x[o.type])x[o.type].call(e,o,l,r),d.each([l,r],function(e,t){t.commands[n]=o,!d.isFunction(o.callback)||void 0!==t.callbacks[n]&&void 0!==l.type||(t.callbacks[n]=o.callback)});else{switch("cm_seperator"===o.type?e.addClass("context-menu-separator "+r.classNames.notSelectable):"html"===o.type?e.addClass("context-menu-html "+r.classNames.notSelectable):"sub"!==o.type&&o.type?(t=d("<label></label>").appendTo(e),u(o).appendTo(t),e.addClass("context-menu-input"),l.hasTypes=!0,d.each([l,r],function(e,t){t.commands[n]=o,t.inputs[n]=o})):o.items&&(o.type="sub"),o.type){case"cm_seperator":break;case"text":a=d('<input type="text" value="1" name="" />').attr("name","context-menu-input-"+n).val(o.value||"").appendTo(t);break;case"textarea":a=d('<textarea name=""></textarea>').attr("name","context-menu-input-"+n).val(o.value||"").appendTo(t),o.height&&a.height(o.height);break;case"checkbox":a=d('<input type="checkbox" value="1" name="" />').attr("name","context-menu-input-"+n).val(o.value||"").prop("checked",!!o.selected).prependTo(t);break;case"radio":a=d('<input type="radio" value="1" name="" />').attr("name","context-menu-input-"+o.radio).val(o.value||"").prop("checked",!!o.selected).prependTo(t);break;case"select":a=d('<select name=""></select>').attr("name","context-menu-input-"+n).appendTo(t),o.options&&(d.each(o.options,function(e,t){d("<option></option>").val(e).text(t).appendTo(a)}),a.val(o.selected));break;case"sub":u(o).appendTo(e),o.appendTo=o.$node,e.data("contextMenu",o).addClass("context-menu-submenu"),o.callback=null,"function"==typeof o.items.then?$.processPromises(o,r,o.items):$.create(o,r);break;case"html":d(o.html).appendTo(e);break;default:d.each([l,r],function(e,t){t.commands[n]=o,!d.isFunction(o.callback)||void 0!==t.callbacks[n]&&void 0!==l.type||(t.callbacks[n]=o.callback)}),u(o).appendTo(e)}o.type&&"sub"!==o.type&&"html"!==o.type&&"cm_seperator"!==o.type&&(a.on("focus",b.focusInput).on("blur",b.blurInput),o.events)&&a.on(o.events,l),o.icon&&(d.isFunction(o.icon)?o._icon=o.icon.call(this,this,e,n,o):"string"!=typeof o.icon||"fab "!==o.icon.substring(0,4)&&"fas "!==o.icon.substring(0,4)&&"fad "!==o.icon.substring(0,4)&&"far "!==o.icon.substring(0,4)&&"fal "!==o.icon.substring(0,4)?"string"==typeof o.icon&&"fa-"===o.icon.substring(0,3)?o._icon=r.classNames.icon+" "+r.classNames.icon+"--fa fa "+o.icon:o._icon=r.classNames.icon+" "+r.classNames.icon+"-"+o.icon:(e.addClass(r.classNames.icon+" "+r.classNames.icon+"--fa5"),o._icon=d('<i class="'+o.icon+'"></i>')),"string"==typeof o._icon?e.addClass(o._icon):e.prepend(o._icon))}o.$input=a,o.$label=t,e.appendTo(l.$menu),!l.hasTypes&&d.support.eventSelectstart&&e.on("selectstart.disableTextSelect",b.abortevent)}),l.$node||l.$menu.css("display","none").addClass("context-menu-root"),l.$menu.appendTo(l.appendTo||document.body)},resize:function(e,t){var n;e.css({position:"absolute",display:"block"}),e.data("width",(n=e.get(0)).getBoundingClientRect?Math.ceil(n.getBoundingClientRect().width):e.outerWidth()+1),e.css({position:"static",minWidth:"0px",maxWidth:"100000px"}),e.find("> li > ul").each(function(){$.resize(d(this),!0)}),t||e.find("ul").addBack().css({position:"",display:"",minWidth:"",maxWidth:""}).outerWidth(function(){return d(this).data("width")})},update:function(s,i){var c=this,l=(void 0===i&&(i=s,$.resize(s.$menu)),!1);return s.$menu.children().each(function(){var e=d(this),t=e.data("contextMenuKey"),n=s.items[t],o=d.isFunction(n.disabled)&&n.disabled.call(c,t,i)||!0===n.disabled,a=d.isFunction(n.visible)?n.visible.call(c,t,i):void 0===n.visible||!0===n.visible;if(a&&(l=!0),e[a?"show":"hide"](),e[o?"addClass":"removeClass"](i.classNames.disabled),d.isFunction(n.icon)&&(e.removeClass(n._icon),"string"==typeof(a=n.icon.call(this,c,e,t,n))?e.addClass(a):e.prepend(a)),n.type)switch(e.find("input, select, textarea").prop("disabled",o),n.type){case"text":case"textarea":n.$input.val(n.value||"");break;case"checkbox":case"radio":n.$input.val(n.value||"").prop("checked",!!n.selected);break;case"select":n.$input.val((0===n.selected?"0":n.selected)||"")}n.$menu&&$.update.call(c,n,i)&&(l=!0)}),l},layer:function(e,t){return e.shadow?(t=e.$layer=d('<div id="context-menu-layer"></div>').css({height:"100%",width:"100%",display:"block",position:"fixed","z-index":t-1,top:0,left:0,opacity:0,filter:"alpha(opacity=0)","background-color":"#000"}).data("contextMenuRoot",e).appendTo(document.body).on("contextmenu",b.abortevent).on("mousedown",b.layerClick),void 0===document.body.style.maxWidth&&t.css({position:"absolute",height:d(document).height()}),t):null},processPromises:function(e,t,n){function o(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}}),a(e,t,n)}function a(e,t,n){void 0!==t.$menu&&t.$menu.is(":visible")&&(e.$node.removeClass(t.classNames.iconLoadingClass),e.items=n,$.create(e,t,!0),$.update(e,t),t.positionSubmenu.call(e.$node,e.$menu))}e.$node.addClass(t.classNames.iconLoadingClass),n.then(function(e,t,n){void 0===n&&o(void 0),a(e,t,n)}.bind(this,e,t),o.bind(this,e,t))},activated:function(e){var e=e.$menu,t=e.offset(),n=d(window).height(),o=d(window).width(),a=d(window).scrollTop(),s=d(window).scrollLeft(),i=e.height(),c=e.outerHeight(),l=e.outerWidth();n<i?e.css({height:n+"px","overflow-x":"hidden","overflow-y":"auto",top:a+"px"}):t.top<a?e.css({top:a+"px"}):t.top+c>a+n&&e.css({top:t.top-(t.top+c-(a+n))+"px"}),t.left+l>s+o&&e.css({left:t.left-(t.left+l-(s+o))+"px"})}};function l(e){return e.id&&d('label[for="'+e.id+'"]').val()||e.name}d.fn.contextMenu=function(e){var t,n=this,o=e;return 0<this.length?void 0===e?this.first().trigger("contextmenu"):void 0!==e.x&&void 0!==e.y?this.first().trigger(d.Event("contextmenu",{pageX:e.x,pageY:e.y,mouseButton:e.button})):"hide"===e?(t=this.first().data("contextMenu")?this.first().data("contextMenu").$menu:null)&&b.hideMenu.call(t):"destroy"===e?d.contextMenu("destroy",{context:this}):d.isPlainObject(e)?(e.context=this,d.contextMenu("create",e)):e?this.removeClass("context-menu-disabled"):this.addClass("context-menu-disabled"):(d.each(g,function(){this.selector===n.selector&&(o.data=this,d.extend(o.data,{trigger:"demand"}))}),b.contextmenu.call(o.target,o)),this},d.contextMenu=function(e,t){"string"!=typeof e&&(t=e,e="create"),"string"==typeof t?t={selector:t}:void 0===t&&(t={});var n,o,a,s=d.extend(!0,{},v,t||{}),i=d(document),c=i,l=!1;switch(s.context&&s.context.length?(c=d(s.context).first(),s.context=c.get(0),l=!d(s.context).is(document)):s.context=document,e){case"update":if(l)$.update(c);else for(var r in g)g.hasOwnProperty(r)&&$.update(g[r]);break;case"create":if(!s.selector)throw new Error("No selector specified");if(s.selector.match(/.context-menu-(list|item|input)($|\s)/))throw new Error('Cannot bind to selector "'+s.selector+'" as it contains a reserved className');if(!s.build&&(!s.items||d.isEmptyObject(s.items)))throw new Error("No Items specified");switch(h++,s.ns=".contextMenu"+h,l||(f[s.selector]=s.ns),(g[s.ns]=s).trigger||(s.trigger="right"),m||(n="click"===s.itemClickEvent?"click.contextMenu":"mouseup.contextMenu",(o={"contextmenu:focus.contextMenu":b.focusItem,"contextmenu:blur.contextMenu":b.blurItem,"contextmenu.contextMenu":b.abortevent,"mouseenter.contextMenu":b.itemMouseenter,"mouseleave.contextMenu":b.itemMouseleave})[n]=b.itemClick,i.on({"contextmenu.contextMenu":b.abortevent,"mouseenter.contextMenu":b.menuMouseenter,"mouseleave.contextMenu":b.menuMouseleave},".context-menu-list").on("mouseup.contextMenu",".context-menu-input",b.inputClick).on(o,".context-menu-item"),m=!0),c.on("contextmenu"+s.ns,s.selector,s,b.contextmenu),l&&c.on("remove"+s.ns,function(){d(this).contextMenu("destroy")}),s.trigger){case"hover":c.on("mouseenter"+s.ns,s.selector,s,b.mouseenter).on("mouseleave"+s.ns,s.selector,s,b.mouseleave);break;case"left":c.on("click"+s.ns,s.selector,s,b.click);break;case"touchstart":c.on("touchstart"+s.ns,s.selector,s,b.click)}s.build||$.create(s);break;case"destroy":if(l){var u=s.context;d.each(g,function(e,t){if(t&&d(u).is(t.selector)){(a=d(".context-menu-list").filter(":visible")).length&&a.data().contextMenuRoot.$trigger.is(d(t.context).find(t.selector))&&b.hideMenu(null,{force:!0}).call(a);try{g[t.ns].$menu&&g[t.ns].$menu.remove(),delete g[t.ns]}catch(e){g[t.ns]=null}d(t.context).off(t.ns)}return!0})}else if(s.selector){if(f[s.selector]){(a=d(".context-menu-list").filter(":visible")).length&&a.data().contextMenuRoot.$trigger.is(s.selector)&&b.hideMenu(null,{force:!0}).call(a);try{g[f[s.selector]].$menu&&g[f[s.selector]].$menu.remove(),delete g[f[s.selector]]}catch(e){g[f[s.selector]]=null}i.off(f[s.selector])}}else i.off(".contextMenu .contextMenuAutoHide"),d.each(g,function(e,t){d(t.context).off(t.ns)}),f={},h=0,m=!(g={}),d("#context-menu-layer, .context-menu-list").remove();break;case"html5":(!d.support.htmlCommand&&!d.support.htmlMenuitem||"boolean"==typeof t&&t)&&d('menu[type="context"]').each(function(){this.id&&d.contextMenu({selector:"[contextmenu="+this.id+"]",items:d.contextMenu.fromMenu(this)})}).css("display","none");break;default:throw new Error('Unknown operation "'+e+'"')}return this},d.contextMenu.setInputValues=function(e,n){void 0===n&&(n={}),d.each(e.inputs,function(e,t){switch(t.type){case"text":case"textarea":t.value=n[e]||"";break;case"checkbox":t.selected=!!n[e];break;case"radio":t.selected=(n[t.radio]||"")===t.value;break;case"select":t.selected=n[e]||""}})},d.contextMenu.getInputValues=function(e,n){return void 0===n&&(n={}),d.each(e.inputs,function(e,t){switch(t.type){case"text":case"textarea":case"select":n[e]=t.$input.val();break;case"checkbox":n[e]=t.$input.prop("checked");break;case"radio":t.$input.prop("checked")&&(n[t.radio]=t.value)}}),n},d.contextMenu.fromMenu=function(e){var t={};return function s(i,e,c){return c=c||0,e.each(function(){var e,t,n=d(this),o=this,a=this.nodeName.toLowerCase();switch("label"===a&&n.find("input, textarea, select").length&&(e=n.text(),a=(o=(n=n.children().first()).get(0)).nodeName.toLowerCase()),a){case"menu":t={name:n.attr("label"),items:{}},c=s(t.items,n.children(),c);break;case"a":case"button":t={name:n.text(),disabled:!!n.attr("disabled"),callback:function(){n.get(0).click()}};break;case"menuitem":case"command":switch(n.attr("type")){case void 0:case"command":case"menuitem":t={name:n.attr("label"),disabled:!!n.attr("disabled"),icon:n.attr("icon"),callback:function(){n.get(0).click()}};break;case"checkbox":t={type:"checkbox",disabled:!!n.attr("disabled"),name:n.attr("label"),selected:!!n.attr("checked")};break;case"radio":t={type:"radio",disabled:!!n.attr("disabled"),name:n.attr("label"),radio:n.attr("radiogroup"),value:n.attr("id"),selected:!!n.attr("checked")};break;default:t=void 0}break;case"hr":t="-------";break;case"input":switch(n.attr("type")){case"text":t={type:"text",name:e||l(o),disabled:!!n.attr("disabled"),value:n.val()};break;case"checkbox":t={type:"checkbox",name:e||l(o),disabled:!!n.attr("disabled"),selected:!!n.attr("checked")};break;case"radio":t={type:"radio",name:e||l(o),disabled:!!n.attr("disabled"),radio:!!n.attr("name"),value:n.val(),selected:!!n.attr("checked")};break;default:t=void 0}break;case"select":t={type:"select",name:e||l(o),disabled:!!n.attr("disabled"),selected:n.val(),options:{}},n.children().each(function(){t.options[this.value]=d(this).text()});break;case"textarea":t={type:"textarea",name:e||l(o),disabled:!!n.attr("disabled"),value:n.val()};break;case"label":break;default:t={type:"html",html:n.clone(!0)}}t&&(i["key"+ ++c]=t)}),c}(t,d(e).children()),t},d.contextMenu.defaults=v,d.contextMenu.types=x,d.contextMenu.handle=b,d.contextMenu.op=$,d.contextMenu.menus=g}); |