Browse Source

Improve Context Menu UI.

- Prevent multiple context menus from being open
- Close context menu when clicking on empty space on screen

Signed-off-by: Gleb Aronsky <gleb.aronsky@lexisnexis.com>
Gleb Aronsky 13 years ago
parent
commit
a173761d26
2 changed files with 27 additions and 6 deletions
  1. 13 1
      esp/files/scripts/configmgr/configmgr.js
  2. 14 5
      esp/files/scripts/configmgr/navtree.js

+ 13 - 1
esp/files/scripts/configmgr/configmgr.js

@@ -418,6 +418,8 @@ function createTable(rows, tabDivName, index, compName) {
 
       oContextMenu.dt = myDataTable;
       oContextMenu.subscribe("beforeShow", onContextMenuBeforeShowRegular);
+      top.document.ContextMenuCenter = oContextMenu;
+
       myDataTable.tt = new YAHOO.widget.Tooltip(tabDivName + "tooltip");
 
       myDataTable.subscribe("cellMouseoverEvent", function(oArgs) {
@@ -1609,7 +1611,7 @@ function createMultiColTreeCtrlForComp(rows, compName, subRecordIndex) {
         lazyload: true
       });
 
-      top.document.ContextMenu = oContextMenu;
+      top.document.ContextMenuCenter = oContextMenu;
 
       oContextMenu.dt = dt;
       oContextMenu.subscribe("beforeShow", onContextMenuBeforeShow);
@@ -2003,6 +2005,8 @@ function createEnvXmlView(allrows, compName, subRecordIndex) {
         lazyload: true
       });
 
+      top.document.ContextMenuCenter = oContextMenu;
+
       oContextMenu.dt = dt;
       oContextMenu.subscribe("beforeShow", onContextMenuBeforeShow);
       dt.expandRecord = function(id) {
@@ -2387,6 +2391,9 @@ function onMenuItemClickThorTopology(p_sType, p_aArgs, p_oValue) {
   top.document.navDT.promptThorTopology(top.document.navDT, type, slavesPresent, slavesPerNode);
 }
 function onContextMenuBeforeShow(p_sType, p_aArgs) {
+  if (top.document.ContextMenuLeft != null)
+    top.document.ContextMenuLeft.clearContent();
+
   if (!this.configContextMenuItems) {
     this.configContextMenuItems = {
       "Roxie Cluster": [
@@ -3138,7 +3145,10 @@ function onContextMenuBeforeShowRegular(p_sType, p_aArgs) {
     }
 
     if( record && record.getData('_not_in_env') === 1 && record.getData(column.key + '_ctrlType') !== 0)
+    {
+      top.document.ContextMenuCenter = this;
       this.addItems(oContextMenuItems["WriteToEnvironment"]);
+    }
 
     if( record && record.getData(column.key + '_ctrlType') !== 0 ) {
         var defaultValue=dt.getDefault(oTarget, record);
@@ -3366,6 +3376,8 @@ function handlekeydown(event) {
 
 function handlemousedown(event) {
 top.document.navDT.fireEvent("tableBlurEvent");
+if (top.document.ContextMenuLeft != null)
+  top.document.ContextMenuLeft.clearContent();
 }
 
 function getAttrName(datatable, column, record, isComplex) {

+ 14 - 5
esp/files/scripts/configmgr/navtree.js

@@ -55,14 +55,18 @@
       if (typeof(addEventListener) != 'undefined')
       {
         document.getElementById('top1').addEventListener("click", function() {
-          if (top.document.ContextMenu != null)
-            top.document.ContextMenu.clearContent() } );
+          if (top.document.ContextMenuCenter != null)
+            top.document.ContextMenuCenter.clearContent();
+          if (top.document.ContextMenuLeft != null)
+            top.document.ContextMenuLeft.clearContent() } );
       }
       else
       {
         document.getElementById('top1').attachEvent('onclick',function() {
-          if (top.document.ContextMenu != null)
-            top.document.ContextMenu.clearContent() } );
+          if (top.document.ContextMenuCenter != null)
+            top.document.ContextMenuCenter.clearContent();
+          if (top.document.ContextMenuLeft != null)
+            top.document.ContextMenuLeft.clearContent() } );
       }
 
       getWaitDlg().show();
@@ -655,7 +659,9 @@ function createNavigationTree(navTreeData) {
     for (var idx = 0; idx < selRows.length; idx++) {
       Dom.addClass(this.getTrEl(selRows[idx]), 'outoffocus');
     }
-  });  
+    if (top.document.ContextMenuCenter != null)
+      top.document.ContextMenuCenter.clearContent();
+  });
 
 
   Dom.removeClass(navDT.getTrEl(0), 'hidden');
@@ -1186,6 +1192,7 @@ function createNavigationTree(navTreeData) {
         return false;
 
       this.addItems(aMenuItems);
+      top.document.ContextMenuLeft = oContextMenu;
 
       if (record.getData('Name') === 'Software' || record.getData('Name') === 'Directories'){
         this.getItem(2).cfg.setProperty("disabled", true);
@@ -1220,6 +1227,8 @@ function createNavigationTree(navTreeData) {
       subMenuItems[2].checked = (!navDT.getColumn("BuildSet").hidden);*/
       // Render the ContextMenu instance with the new content
       this.render();
+      if (top.document.ContextMenuCenter != null)
+        top.document.ContextMenuCenter.clearContent();
     }
   }