// // We need to make an array of popupitems // var isMenu = false; var menuSelObj = null; var overpopupmenu = false; var menuState=0; var gPopupMenuActive = true; var gPopupItemsCount = 0; // this needs to be updated when a menu item is added. function PopUp_ClearItems(PopupMenuID) { var oTable = document.getElementById(PopupMenuID); if (oTable) { try { var oTBody = oTable.getElementsByTagName("TBODY")[0]; var oUL = oTBody.getElementsByTagName("UL")[0]; if (oUL) { clearChildNodes(oUL); gPopupItemsCount = 0; } } catch (ex) { } } } function PopUp_AddItem(PopupMenuID, Index, Command, Text, IconClass) { // add the following popup row item //
var oTable = document.getElementById(PopupMenuID); if (oTable) { try { var oTBody = oTable.getElementsByTagName("TBODY")[0]; var oUL = oTBody.getElementsByTagName("UL")[0]; if (oUL) { var oDiv = document.createElement("DIV"); var oLI = document.createElement("LI"); oDiv.id = "MEPUR_" + Index; oDiv.className = "rightClickMenu_item"; oLI.className = IconClass; oLI.appendChild(document.createTextNode(Text)); oDiv.appendChild(oLI); addEvent(oDiv, 'click', function () { ProcessPopUp(Command); }, true); oUL.appendChild(oDiv); gPopupItemsCount += 1; return 1; } } catch (ex) { console.log('PopUp_AddItem::Exception: ' + ex.message); } } else { console.log('PopUp_AddItem::Item not found'); } return 0; } function PopUp_AddSeparator(PopupMenuID) { // add the following separator/divider element //
var oTable = document.getElementById(PopupMenuID); if (oTable) { try { var oTBody = oTable.getElementsByTagName("TBODY")[0]; var oUL = oTBody.getElementsByTagName("UL")[0]; if (oUL) { var oDiv = document.createElement("DIV"); oDiv.className = "rightClickMenu_hr"; oUL.appendChild(oDiv); return 1; } } catch (ex) { } } return 0; } function PopUp_MenuSetState(menuMode) { // console.log("PopUp_MenuSetState: " + menuMode) if (menuMode==1) { // we are in a state where the menu has been brought up, but no one has accessed if (menuState==0) { menuState=1; } } if (menuMode==2) { // we are in a state where the menu has been brought up, but no one has accessed overpopupmenu=true; } return false; } function PopUp_MenuOutOfScope(evt, menudivID) { //console.log('PopUp_MenuOutOfScope: ' + menudivID); var lclientX, lclientY; var menuLeft, menuTop; var menuHeight, menuWidth; var ns6 = document.getElementById && !document.all; // special case of IE9 if (IsIE(gBrowserType) && GetIEVerNum() >= 9) { // even though IE9 passes the event object we still need to reference window.event // in order to get the clientX/clientY values evt = window.event; } var item = document.getElementById(menudivID); if (ns6) { // All browsers other than IE lclientX = evt.clientX; lclientY = evt.clientY; menuLeft = item.style.left; menuTop = item.style.top; menuWidth = item.clientWidth; menuHeight = item.clientHeight; menuLeft = parseInt(menuLeft.replace('px', '')); menuTop = parseInt(menuTop.replace('px', '')); } else { // IE browser lclientX = event.clientX; lclientY = event.clientY; menuLeft = item.style.pixelLeft; menuTop = item.style.pixelTop; menuWidth = item.clientWidth; menuHeight = item.clientHeight; } overpopmenu = false; if ((lclientX + document.body.scrollLeft) < menuLeft) { PopUp_HideMenu(menudivID); } if ((lclientX + document.body.scrollLeft) > menuLeft + (menuWidth - 1)) { PopUp_HideMenu(menudivID); } if ((lclientY + document.body.scrollTop) < menuTop) { PopUp_HideMenu(menudivID); } if ((lclientY + document.body.scrollTop) > (menuTop + (menuHeight - 1))) { PopUp_HideMenu(menudivID); } return true; } function DropDown_ShowMenu(menudivID, sKey) { var active; var menuItemNode; gPopupItemID = sKey; for (var i = 0; i < 22; i++) { active = IsPopupMenuCommandActive(sKey, i); menuItemNode = document.getElementById('MEDD_' + i); if (menuItemNode) { menuItemNode.style.display = active ? 'block' : 'none'; } } return; } function PopUp_ShowMenu(evt, menudivID, oSourceObj, sKey) { // // This function shows the Context Menu popup; // with only the relevant/applicable actions. // evt = evt || window.event; // special case of IE9 if (IsIE(gBrowserType) && GetIEVerNum() >= 9) { // even though IE9 passes the event object we still need to reference window.event // in order to get the clientX/clientY values evt = window.event; } oTarget = evt.target || evt.srcElement; if (gPopupMenuActive && IsPopupMenuActive(oTarget)) { var ns6 = document.getElementById&&!document.all; gPopupItemID = sKey; menuState=0; menuSelObj = oSourceObj; var omenu = document.getElementById(menudivID); var left = evt.clientX + document.body.scrollLeft; var top = evt.clientY + document.body.scrollTop; if (!omenu) return false; // N.B. we subtract 10 because of padding if (ns6) { omenu.style.left = left - 10 + "px"; omenu.style.top = top - 10 + "px"; } else { omenu.style.pixelLeft = left - 10; omenu.style.pixelTop = top - 10; } var bAllInactive = true; var bFolderOptions1stExist = false; // whether 1st batch of popup menu options (Create / Rename folder) exists var bFolderOptions2ndExist = false; // whether 2nd batch of popup menu options (Delete / Empty folder) exists var bFolderOptions3rdExist = false; // whether 3rd batch of popup menu options (Share Folder / Empty folder) exists var bMsgOptions1stExist = false; // whether 1st batch of popup menu options (for message) exists var bMsgOptions2ndExist = false; // whether 2nd batch of popup menu options (for message) exists var bMsgOptions3rdExist = false; // whether 3rd batch of popup menu options (for message) exists var bMsgOptions4thExist = false; // whether 4th batch of popup menu options (for message) exists // Hide any context menu actions that are NOT applicable to the selected item(s) for (var i = 0; i < gPopupItemsCount; i++) { menuItemNode = document.getElementById('MEPUR_' + i); if (IsElementAAncestorOfElementB(omenu, menuItemNode)) { var active = IsPopupMenuCommandActive(sKey, i); if ( (menudivID == "folderTreeContextMenuDiv") && document.getElementById("MEPUHR_0") ) { if (active) { switch (i) { case POPUP_MENU_ID_CREATE_FOLDER: case POPUP_MENU_ID_RENAME_FOLDER: bFolderOptions1stExist = true; break; case POPUP_MENU_ID_DELETE_FOLDER: case POPUP_MENU_ID_EMPTY_FOLDER: bFolderOptions2ndExist = true; break; case POPUP_MENU_ID_SHARE_FOLDER: case POPUP_MENU_ID_UNSHARE_FOLDER: case POPUP_MENU_ID_SET_PERMISSIONS: case POPUP_MENU_ID_DISCONNECT: case POPUP_MENU_ID_PASTE_INTO_FOLDER: bFolderOptions3rdExist = true; break; } } } else if ( (menudivID == "menudiv") && document.getElementById("menudiv_hr0") ) { // message list popup menu items if (active) { switch (i) { case POPUP_MENU_ID_MARK_AS_READ: case POPUP_MENU_ID_MARK_AS_UNREAD: bMsgOptions1stExist = true; break; case POPUP_MENU_ID_DELETE: bMsgOptions2ndExist = true; break; case POPUP_MENU_ID_ADD_CONTACT: case POPUP_MENU_ID_WHITELIST: case POPUP_MENU_ID_VIEW_HEADERS: bMsgOptions3rdExist = true; break; case POPUP_MENU_ID_COPY: bMsgOptions4thExist = true; break; } } } bAllInactive = bAllInactive && !active; menuItemNode.style.display = active ? 'block' : 'none'; } } if ( (menudivID == "folderTreeContextMenuDiv") && document.getElementById("MEPUHR_0") ) { document.getElementById("MEPUHR_0").style.display = (bFolderOptions1stExist && bFolderOptions2ndExist) ? "" : "none"; document.getElementById("MEPUHR_1").style.display = (bFolderOptions2ndExist && bFolderOptions3rdExist) ? "" : "none"; } if ( (menudivID == "menudiv") && document.getElementById("menudiv_hr0") ) { document.getElementById("menudiv_hr0").style.display = (bMsgOptions1stExist && bMsgOptions2ndExist) ? "" : "none"; document.getElementById("menudiv_hr1").style.display = (bMsgOptions2ndExist && bMsgOptions3rdExist) ? "" : "none"; document.getElementById("menudiv_hr2").style.display = ((bMsgOptions2ndExist || bMsgOptions3rdExist) && bMsgOptions4thExist) ? "" : "none"; } if (!bAllInactive) { PopUp_Show(menudivID); } PopUp_SetPosition(menudivID,evt); isMenu = true; } return true; } function PopUp_Show(menudivID) { // show the Context Menu var item = document.getElementById(menudivID); if (item) { item.style.display = ""; } else { console.log('PopUp_Show::Item not found'); } } function PopUp_SetPosition(menudivID, evt) { if (IsIE(gBrowserType) && GetIEVerNum() >= 9) { // even though IE9 passes the event object we still need to reference window.event // in order to get the clientX/clientY values evt = window.event; } else { evt = evt || window.event; } var omenu = document.getElementById(menudivID); if (omenu) { var left = evt.clientX + document.body.scrollLeft; var top = evt.clientY + document.body.scrollTop; var ns6 = document.getElementById && !document.all; // N.B. we subtract 10 because of padding if (ns6) { omenu.style.left = left - 10 + "px"; omenu.style.top = top - 10 + "px"; } else { omenu.style.pixelLeft = left - 10; omenu.style.pixelTop = top - 10; } // We also need to adjust the position of the menu to // make sure all of it is visible; especially when // the mouse cursor is too close to the bottom of the screen. var menuHeight = omenu.offsetHeight; var windowHeight = getWindowHeight(); var posY = evt.clientY; // console.log('ypos:' + posY); if ((posY + menuHeight) >= windowHeight) { // Set the vertical position of the Context Menu popup // to be above the mouse cursor's vertical position. top = top + 10 - menuHeight; if (top < 0) top = 0; if (ns6) { omenu.style.top = top + "px"; } else { omenu.style.pixelTop = top; } } // console.log('toppos2:' + top); } else { console.log('PopUp_SetPosition::Item not found'); } } function PopUp_HideMenu(menudivID) { // console.log('PopUp_HideMenu: ' + menudivID); overpopupmenu = false; document.getElementById(menudivID).style.display = "none"; return true; }