slickgrid
Version:
A lightning fast JavaScript grid/spreadsheet
9 lines • 7.02 kB
JavaScript
/**
* SlickGrid v3.0.2
* (c) 2009-present Michael Leibman
* homepage: http://github.com/mleibman/slickgrid
* license: MIT
* date: 2022-11-14
* file: ./plugins/slick.contextmenu.js
*/
!function(V){V.extend(!0,window,{Slick:{Plugins:{ContextMenu:function(t){var T,M,c,r,D=-1,A=-1,E="",o=new Slick.EventHandler,j=this,n={autoAdjustDrop:!0,autoAlignSide:!0,autoAdjustDropOffset:-4,autoAlignSideOffset:0,hideMenuOnScroll:!1,maxHeight:"none",width:"auto",optionShownOverColumnIds:[],commandShownOverColumnIds:[]};function u(e){var t=e.touches?e.touches[0]:e,o=M.getCellFromEvent(e),o=(D=o&&o.cell,A=o&&o.row,M.getColumns()[D]),n=M.getDataItem(A),i=P(T.optionShownOverColumnIds,o.id),s=P(T.commandShownOverColumnIds,o.id),l=T.commandItems||[],a=T.optionItems||[];if(o&&(s||i)&&(l.length||a.length)&&(H(e),0!=j.onBeforeMenuShow.notify({cell:D,row:A,grid:M},e,j))){var d=isNaN(T.maxHeight)?T.maxHeight:T.maxHeight+"px",c=isNaN(T.width)?T.width:T.width+"px",c=V('<div class="slick-context-menu '+E+'" style="'+("width: "+c+"; max-height: "+d)+'" />').css("top",t.pageY).css("left",t.pageX).css("display","none"),d='<button type="button" class="close" data-dismiss="slick-context-menu" aria-label="Close"><span class="close" aria-hidden="true">×</span></button>';if(!T.hideOptionSection&&i&&0<a.length){var t=V('<div class="slick-context-menu-option-list" />'),r=(T.hideCloseButton||V(d).on("click",B).appendTo(c),t.appendTo(c),T),u=t,m=a,p={cell:D,row:A,column:o,dataContext:n,grid:M};if(p&&m&&r){r&&r.optionTitle&&V('<div class="title"/>').append(r.optionTitle).appendTo(u);for(var h=0,v=m.length;h<v;h++){var f=m[h],C=F(f.itemVisibilityOverride,p),g=F(f.itemUsabilityOverride,p);C&&(Object.prototype.hasOwnProperty.call(f,"itemUsabilityOverride")&&(f.disabled=!g),C=V('<div class="slick-context-menu-item"></div>').data("option",void 0!==f.option?f.option:"").data("item",f).on("click",N).appendTo(u),f.divider||"divider"===f?C.addClass("slick-context-menu-item-divider"):(!f.disabled&&g||C.addClass("slick-context-menu-item-disabled"),f.hidden&&C.addClass("slick-context-menu-item-hidden"),f.cssClass&&C.addClass(f.cssClass),f.tooltip&&C.attr("title",f.tooltip),g=V('<div class="slick-context-menu-icon"></div>').appendTo(C),f.iconCssClass&&g.addClass(f.iconCssClass),f.iconImage&&g.css("background-image","url("+f.iconImage+")"),g=V('<span class="slick-context-menu-content"></span>').text(f.title).appendTo(C),f.textCssClass&&g.addClass(f.textCssClass)))}}}if(!T.hideCommandSection&&s&&0<l.length){var t=V('<div class="slick-context-menu-command-list" />'),r=(T.hideCloseButton||i&&0!==a.length&&!T.hideOptionSection||V(d).on("click",B).appendTo(c),t.appendTo(c),T),w=t,b=l,x={cell:D,row:A,column:o,dataContext:n,grid:M};if(x&&b&&r){r&&r.commandTitle&&V('<div class="title"/>').append(r.commandTitle).appendTo(w);for(var O=0,S=b.length;O<S;O++){var k=b[O],y=F(k.itemVisibilityOverride,x),I=F(k.itemUsabilityOverride,x);y&&(Object.prototype.hasOwnProperty.call(k,"itemUsabilityOverride")&&(k.disabled=!I),y=V('<div class="slick-context-menu-item"></div>').data("command",void 0!==k.command?k.command:"").data("item",k).on("click",U).appendTo(w),k.divider||"divider"===k?y.addClass("slick-context-menu-item-divider"):(!k.disabled&&I||y.addClass("slick-context-menu-item-disabled"),k.hidden&&y.addClass("slick-context-menu-item-hidden"),k.cssClass&&y.addClass(k.cssClass),k.tooltip&&y.attr("title",k.tooltip),I=V('<div class="slick-context-menu-icon"></div>').appendTo(y),k.iconCssClass&&I.addClass(k.iconCssClass),k.iconImage&&I.css("background-image","url("+k.iconImage+")"),I=V('<span class="slick-context-menu-content"></span>').text(k.title).appendTo(y),k.textCssClass&&I.addClass(k.textCssClass)))}}}if(c.show(),c.appendTo("body"),0!=j.onAfterMenuShow.notify({cell:D,row:A,grid:M},e,j))return c}}function B(e){e.isDefaultPrevented()||H(e)}function H(e,t){(r=r||V(".slick-context-menu."+E))&&0<r.length&&0!=j.onBeforeMenuClose.notify({cell:t&&t.cell,row:t&&t.row,grid:M,menu:r},e,j)&&r&&r.remove&&(r.remove(),r=null)}function P(e,t){var o=!1;if(e&&0<e.length)for(var n=0,i=e.length;n<i;n++)e[n]===t&&(o=!0);else o=!0;return o}function i(e,t){e.preventDefault();var o,n,i,s,l=M.getCellFromEvent(e),a=M.getColumns()[l.cell],d=M.getDataItem(l.row);(t=t||{}).cell=l.cell,t.row=l.row,t.columnDef=a,t.dataContext=d,t.grid=M,F(T.menuUsabilityOverride,t)&&((r=u(e))&&(a=(l=e).touches?l.touches[0]:l,l=V(l.target).closest(".slick-cell"),d=a.pageX,a=l?l.offset().top:a.pageY,t=r.outerHeight()||0,e=r.outerWidth()||T.width||0,o=c.rowHeight,n=T.autoAdjustDropOffset,i=T.autoAlignSideOffset,T.autoAdjustDrop&&(s=function(e){var t=V(window).innerHeight()||0,o=V(window).scrollTop()||0;return e&&e.offset&&0<e.length?t-(e.offset().top-o):0}(l),l=(l=function(e){var t=V(window).scrollTop()||0;return e&&e.offset&&0<e.length?e.offset().top-t:0}(l))-n+o,a="top"==((s=s+n-o)<t&&s<l?"top":"bottom")?(r.removeClass("dropdown").addClass("dropup"),a-t-n):(r.removeClass("dropup").addClass("dropdown"),a+o+n)),T.autoAlignSide&&(s=M.getGridPosition(),"left"==(d+e>=s.width?"left":"right")?(r.removeClass("dropright").addClass("dropleft"),d=d-e-i):(r.removeClass("dropleft").addClass("dropright"),d+=i)),r.css("top",a),r.css("left",d),r.data("cell",D).data("row",A).show()),V("body").one("click",function(e){e.isDefaultPrevented()||H(e,{cell:D,row:A})}))}function U(e){var t,o,n,i,s,l=V(this).data("command"),a=V(this).data("item");!a||a.disabled||a.divider||(t=r.data("row"),s=r.data("cell"),o=M.getColumns()[s],n=M.getDataItem(t),Object.prototype.hasOwnProperty.call(n,o&&o.field)&&(i=n[o.field]),null!=l&&""!==l&&(s={cell:s,row:t,grid:M,command:l,item:a,column:o,dataContext:n,value:i},j.onCommand.notify(s,e,j),"function"==typeof a.action&&a.action.call(this,e,s)))}function N(e){var t,o,n,i,s=V(this).data("option"),l=V(this).data("item");l.disabled||l.divider||M.getEditorLock().commitCurrentEdit()&&(t=r.data("row"),i=r.data("cell"),o=M.getColumns()[i],n=M.getDataItem(t),void 0!==s&&(i={cell:i,row:t,grid:M,option:s,item:l,column:o,dataContext:n},j.onOptionSelected.notify(i,e,j),"function"==typeof l.action&&l.action.call(this,e,i)))}function F(e,t){return"function"!=typeof e||e.call(this,t)}V.extend(this,{init:function(e){c=(M=e).getOptions(),T=V.extend({},n,t),E=e&&e.getUID?e.getUID():"",o.subscribe(M.onContextMenu,i),T.hideMenuOnScroll&&o.subscribe(M.onScroll,H)},closeMenu:H,destroy:function(){j.onAfterMenuShow.unsubscribe(),j.onBeforeMenuShow.unsubscribe(),j.onBeforeMenuClose.unsubscribe(),j.onCommand.unsubscribe(),j.onOptionSelected.unsubscribe(),o.unsubscribeAll(),r&&r.remove&&r.remove(),r=null},pluginName:"ContextMenu",setOptions:function(e){T=V.extend({},T,e),e.commandShownOverColumnIds&&(T.commandShownOverColumnIds=e.commandShownOverColumnIds),e.optionShownOverColumnIds&&(T.optionShownOverColumnIds=e.optionShownOverColumnIds)},onAfterMenuShow:new Slick.Event,onBeforeMenuShow:new Slick.Event,onBeforeMenuClose:new Slick.Event,onCommand:new Slick.Event,onOptionSelected:new Slick.Event})}}}})}(jQuery);