File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
/* Tabulator v4.9.3 (c) Oliver Folkerd */
var Menu=function(e){this.table=e,this.menuElements=[],this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1,this.positionReversedX=!1};Menu.prototype.initializeColumnHeader=function(e){var t,n=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",function(t){t.stopPropagation(),t.preventDefault(),n.LoadMenuEvent(e,e.definition.headerMenu,t)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.LoadMenuEvent=function(e,t,n){t="function"==typeof t?t.call(this.table,e.getComponent(),n):t,this.loadMenu(n,e,t)},Menu.prototype.tapHold=function(e,t){var n=this,i=e.getElement(),o=null,s=!1;i.addEventListener("touchstart",function(i){clearTimeout(o),s=!1,o=setTimeout(function(){clearTimeout(o),o=null,s=!0,n.LoadMenuEvent(e,t,i)},1e3)},{passive:!0}),i.addEventListener("touchend",function(e){clearTimeout(o),o=null,s&&e.preventDefault()})},Menu.prototype.initializeCell=function(e){e.column.definition.contextMenu&&(e.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))},Menu.prototype.initializeRow=function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))},Menu.prototype.initializeGroup=function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))},Menu.prototype.loadMenu=function(e,t,n,i){var o=this,s=!(e instanceof MouseEvent),u=document.createElement("div");if(u.classList.add("tabulator-menu"),s||e.preventDefault(),n&&n.length){if(!i){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){o.nestedMenuBlock=!1},100);this.hideMenu(),this.menuElements=[]}n.forEach(function(e){var n=document.createElement("div"),i=e.label,s=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i.call(o.table,t.getComponent())),i instanceof Node?n.appendChild(i):n.innerHTML=i,"function"==typeof s&&(s=s.call(o.table,t.getComponent())),s?(n.classList.add("tabulator-menu-item-disabled"),n.addEventListener("click",function(e){e.stopPropagation()})):e.menu&&e.menu.length?n.addEventListener("click",function(i){i.stopPropagation(),o.hideOldSubMenus(u),o.loadMenu(i,t,e.menu,n)}):e.action&&n.addEventListener("click",function(n){e.action(n,t.getComponent())}),e.menu&&e.menu.length&&n.classList.add("tabulator-menu-item-submenu")),u.appendChild(n)}),u.addEventListener("click",function(e){o.hideMenu()}),this.menuElements.push(u),this.positionMenu(u,i,s,e)}},Menu.prototype.hideOldSubMenus=function(e){var t=this.menuElements.indexOf(e);if(t>-1)for(var n=this.menuElements.length-1;n>t;n--){var i=this.menuElements[n];i.parentNode&&i.parentNode.removeChild(i),this.menuElements.pop()}},Menu.prototype.positionMenu=function(e,t,n,i){var o,s,u,d=this,l=Math.max(document.body.offsetHeight,window.innerHeight);t?(u=Tabulator.prototype.helpers.elOffset(t),o=u.left+t.offsetWidth,s=u.top-1):(o=n?i.touches[0].pageX:i.pageX,s=n?i.touches[0].pageY:i.pageY,this.positionReversedX=!1),e.style.top=s+"px",e.style.left=o+"px",setTimeout(function(){d.table.rowManager.element.addEventListener("scroll",d.blurEvent),document.body.addEventListener("click",d.blurEvent),document.body.addEventListener("contextmenu",d.blurEvent),window.addEventListener("resize",d.blurEvent),document.body.addEventListener("keydown",d.escEvent)},100),document.body.appendChild(e),s+e.offsetHeight>=l&&(e.style.top="",e.style.bottom=t?l-u.top-t.offsetHeight-1+"px":l-s+"px"),(o+e.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(e.style.left="",e.style.right=t?document.documentElement.offsetWidth-u.left+"px":document.documentElement.offsetWidth-o+"px",this.positionReversedX=!0)},Menu.prototype.isOpen=function(){return!!this.menuElements.length},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuElements.forEach(function(e){e.parentNode&&e.parentNode.removeChild(e)}),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);