slickgrid
Version:
A lightning fast JavaScript grid/spreadsheet
9 lines • 8.25 kB
JavaScript
/**
* SlickGrid v3.0.2
* (c) 2009-present Michael Leibman
* homepage: http://github.com/mleibman/slickgrid
* license: MIT
* date: 2022-11-14
* file: ./controls/slick.gridmenu.js
*/
;!function(F){F.extend(!0,window,{Slick:{Controls:{GridMenu:function(m,e,n){var p,u,i,h,t,f,o,M,C,b=e,v=e&&e.getUID?e.getUID():"",k=!1,y=n,w=this,T={showButton:!0,hideForceFitButton:!1,hideSyncResizeButton:!1,forceFitTitle:"Force fit columns",marginBottom:15,menuWidth:18,contentMinWidth:0,resizeOnShowHeaderRow:!1,syncResizeTitle:"Synchronous resize",useClickToRepositionMenu:!0,headerColumnValueExtractor:function(e){return e.name}};function s(e){p=e.getOptions();var n=y.gridMenu&&y.gridMenu.menuWidth||T.menuWidth;(t=p&&p.hasOwnProperty("frozenColumn")&&0<=p.frozenColumn?F("."+v+" .slick-header-right"):F("."+v+" .slick-header-left")).attr("style","width: calc(100% - "+n+"px)"),(y.gridMenu&&null!=y.gridMenu.resizeOnShowHeaderRow?y.gridMenu:T).resizeOnShowHeaderRow&&y.showHeaderRow&&F("."+v+".slick-headerrow").attr("style","width: calc(100% - "+n+"px)"),(y.gridMenu&&void 0!==y.gridMenu.showButton?y.gridMenu:T).showButton&&(o=F('<button class="slick-gridmenu-button"/>'),y.gridMenu&&y.gridMenu.iconCssClass?o.addClass(y.gridMenu.iconCssClass):(n=y.gridMenu&&y.gridMenu.iconImage?y.gridMenu.iconImage:"../images/drag-handle.png",F('<img src="'+n+'"/>').appendTo(o)),o.insertBefore(t),o.on("click."+v,c)),M=F('<div class="slick-gridmenu '+v+'" style="display: none" />').appendTo(document.body),F('<button type="button" class="close" data-dismiss="slick-gridmenu" aria-label="Close"><span class="close" aria-hidden="true">×</span></button>').appendTo(M),(h=F('<div class="slick-gridmenu-custom" />')).appendTo(M),x(y,h),b.onColumnsReordered.subscribe(S),(y=F.extend({},T,y)).gridMenu&&y.gridMenu.columnTitle&&(i=F('<div class="title"/>').append(y.gridMenu.columnTitle)).appendTo(M),M.on("click",B),f=F('<span class="slick-gridmenu-list" />'),F(document.body).on("mousedown."+v,a),F(window).on("beforeunload",d),e.onBeforeDestroy.subscribe(d)}function d(){w.onAfterMenuShow.unsubscribe(),w.onBeforeMenuShow.unsubscribe(),w.onMenuClose.unsubscribe(),w.onCommand.unsubscribe(),w.onColumnsChanged.unsubscribe(),b.onColumnsReordered.unsubscribe(S),b.onBeforeDestroy.unsubscribe(),b.onSetOptions.unsubscribe(),F("div.slick-gridmenu."+v).remove(),r(),F(window).off("beforeunload")}function r(){F(document.body).off("mousedown."+v,a),F("div.slick-gridmenu."+v).hide(),o&&o.remove(),M&&M.remove(),h&&h.remove(),t&&t.attr("style","width: 100%"),M=o=f=t=h=i=u=null}function x(e,n){if(e.gridMenu&&e.gridMenu.customItems){y.gridMenu&&y.gridMenu.customTitle&&(u=F('<div class="title"/>').append(y.gridMenu.customTitle)).appendTo(n);for(var i=0,t=e.gridMenu.customItems.length;i<t;i++){var o,s=e.gridMenu.customItems[i],d={grid:b,menu:M,columns:m,visibleColumns:O()},r=R(s.itemVisibilityOverride,d),d=R(s.itemUsabilityOverride,d);r&&(Object.prototype.hasOwnProperty.call(s,"itemUsabilityOverride")&&(s.disabled=!d),r=F("<div class='slick-gridmenu-item'></div>").data("command",void 0!==s.command?s.command:"").data("item",s).on("click",g).appendTo(n),s.divider||"divider"===s?r.addClass("slick-gridmenu-item-divider"):(s.disabled&&r.addClass("slick-gridmenu-item-disabled"),s.hidden&&r.addClass("slick-gridmenu-item-hidden"),s.cssClass&&r.addClass(s.cssClass),s.tooltip&&r.attr("title",s.tooltip),d=F("<div class='slick-gridmenu-icon'></div>").appendTo(r),s.iconCssClass&&d.addClass(s.iconCssClass),s.iconImage&&d.css("background-image","url("+s.iconImage+")"),o=F("<span class='slick-gridmenu-content'></span>").text(s.title).appendTo(r),s.textCssClass&&o.addClass(s.textCssClass),o=r=d=null))}}}function l(){r(),s(b)}function c(e){var n=e.touches?e.touches[0]:e,i=(e.preventDefault(),f.empty(),h.empty(),x(y,h),S(),C=[],{grid:b,menu:M,allColumns:m,visibleColumns:O()});if((!y||!y.gridMenu||R(y.gridMenu.menuUsabilityOverride,i))&&("function"!=typeof e.isPropagationStopped||0!=w.onBeforeMenuShow.notify(i,e,w))){for(var t,o,s,d,r=0;r<m.length;r++)t=m[r].id,o=m[r].excludeFromGridMenu?"hidden":"",s=F('<li class="'+o+'" />').appendTo(f),d=F("<input type='checkbox' id='"+v+"-gridmenu-colpicker-"+t+"' />").data("column-id",m[r].id).appendTo(s),C.push(d),null!=b.getColumnIndex(m[r].id)&&d.attr("checked","checked"),o=(y&&y.gridMenu&&y.gridMenu.headerColumnValueExtractor?y.gridMenu:T).headerColumnValueExtractor(m[r],p),F("<label for='"+v+"-gridmenu-colpicker-"+t+"' />").html(o).appendTo(s);!y.gridMenu||y.gridMenu.hideForceFitButton&&y.gridMenu.hideSyncResizeButton||F("<hr/>").appendTo(f),y.gridMenu&&y.gridMenu.hideForceFitButton||(u=y.gridMenu&&y.gridMenu.forceFitTitle||T.forceFitTitle,s=F("<li />").appendTo(f),d=F("<input type='checkbox' id='"+v+"-gridmenu-colpicker-forcefit' />").data("option","autoresize").appendTo(s),F("<label for='"+v+"-gridmenu-colpicker-forcefit' />").text(u).appendTo(s),b.getOptions().forceFitColumns&&d.attr("checked","checked")),y.gridMenu&&y.gridMenu.hideSyncResizeButton||(u=y.gridMenu&&y.gridMenu.syncResizeTitle||T.syncResizeTitle,s=F("<li />").appendTo(f),d=F("<input type='checkbox' id='"+v+"-gridmenu-colpicker-syncresize' />").data("option","syncresize").appendTo(s),F("<label for='"+v+"-gridmenu-colpicker-syncresize' />").text(u).appendTo(s),b.getOptions().syncColumnCellResize&&d.attr("checked","checked"));var u=(u=("button"==F(e.target).prop("nodeName")?F(e.target):F(e.target).parent("button")).offset())||F(e.target).offset(),l=M.width(),c=(y.gridMenu&&void 0!==y.gridMenu.useClickToRepositionMenu?y.gridMenu:T).useClickToRepositionMenu,a=y.gridMenu&&y.gridMenu.menuWidth||T.menuWidth,g=(y.gridMenu&&y.gridMenu.contentMinWidth?y.gridMenu:T).contentMinWidth,l=l<g?g:l+a,a=c&&0<n.pageY?n.pageY:u.top+10,c=c&&0<n.pageX?n.pageX:u.left+10,u=(y.gridMenu&&void 0!==y.gridMenu.marginBottom?y.gridMenu:T).marginBottom;M.css("top",a+10).css("left",c-l+10),0<g&&M.css("min-width",g),y.gridMenu&&void 0!==y.gridMenu.height?M.css("height",y.gridMenu.height):M.css("max-height",F(window).height()-n.clientY-u),M.show(),f.appendTo(M),k=!0,"function"==typeof e.isPropagationStopped&&w.onAfterMenuShow.notify(i,e,w)}}function a(e){(M&&M[0]!=e.target&&!F.contains(M[0],e.target)&&k||"close"==e.target.className)&&z(e)}function g(e){var n=F(this).data("command"),i=F(this).data("item");i.disabled||i.divider||"divider"===i||(null!=n&&""!=n&&(n={grid:b,command:n,item:i,allColumns:m,visibleColumns:O()},w.onCommand.notify(n,e,w),"function"==typeof i.action&&i.action.call(this,e,n)),y.gridMenu&&y.gridMenu.leaveOpen||e.isDefaultPrevented()||z(e),e.preventDefault(),e.stopPropagation())}function z(e){var n;M&&(M.hide(),k=!1,n={grid:b,menu:M,allColumns:m,visibleColumns:O()},w.onMenuClose.notify(n,e,w))}function S(){for(var e=b.getColumns().slice(0),n=new Array(m.length),i=0;i<n.length;i++)void 0===b.getColumnIndex(m[i].id)?n[i]=m[i]:n[i]=e.shift();m=n}function B(e){var n,i,t;"autoresize"==F(e.target).data("option")?(t=O(),n=e.target.checked,b.setOptions({forceFitColumns:n}),b.setColumns(t)):"syncresize"==F(e.target).data("option")?e.target.checked?b.setOptions({syncColumnCellResize:!0}):b.setOptions({syncColumnCellResize:!1}):F(e.target).is(":checkbox")&&(n=e.target.checked,t=F(e.target).data("column-id")||"",i=[],F.each(C,function(e){F(this).is(":checked")&&i.push(m[e])}),i.length?(t={columnId:t,showing:n,grid:b,allColumns:m,columns:i},b.setColumns(i),w.onColumnsChanged.notify(t,e,w)):F(e.target).attr("checked","checked"))}function O(){return b.getColumns()}function R(e,n){return"function"!=typeof e||e.call(this,n)}e.onSetOptions.subscribe(function(e,n){var i;n&&n.optionsBefore&&n.optionsAfter&&(i=0<=n.optionsBefore.frozenColumn&&-1===n.optionsAfter.frozenColumn,n=-1===n.optionsBefore.frozenColumn&&0<=n.optionsAfter.frozenColumn,(i||n)&&l())}),s(b),F.extend(this,{init:s,getAllColumns:function(){return m},getVisibleColumns:O,destroy:d,deleteMenu:r,recreateGridMenu:l,showGridMenu:c,setOptions:function(e){n=F.extend({},n,e)},updateAllTitles:function(e){u&&u.text&&u.text(e.customTitle),i&&i.text&&i.text(e.columnTitle)},hideMenu:z,onAfterMenuShow:new Slick.Event,onBeforeMenuShow:new Slick.Event,onMenuClose:new Slick.Event,onCommand:new Slick.Event,onColumnsChanged:new Slick.Event})}}}})}(jQuery);