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