Add RDF command separator support.

This commit is contained in:
rjc%netscape.com 2006-07-27 14:49:11 +00:00
Родитель 6d2eb21346
Коммит 5ae3e2fbc8
1 изменённых файлов: 40 добавлений и 2 удалений

Просмотреть файл

@ -36,6 +36,9 @@ function fillContextMenu(name, treeName)
var select_list = treeNode.selectedItems;
var separatorResource = rdf.GetResource("http://home.netscape.com/NC-rdf#BookmarkSeparator");
if (!separatorResource) return(false);
// perform intersection of commands over selected nodes
var cmdArray = new Array();
var selectLength = select_list.length;
@ -91,9 +94,13 @@ function fillContextMenu(name, treeName)
break;
}
}
if (cmdFound == false)
if ((cmdFound == false) && (cmdArray[cmdIndex]))
{
cmdArray[cmdIndex] = null;
var cmdResource = cmdArray[cmdIndex].QueryInterface(Components.interfaces.nsIRDFResource);
if ((cmdResource) && (cmdResource != separatorResource))
{
cmdArray[cmdIndex] = null;
}
}
}
}
@ -106,12 +113,29 @@ function fillContextMenu(name, treeName)
// build up menu items
if (cmdArray.length < 1) return(false);
var lastWasSep = false;
for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++)
{
var cmd = cmdArray[cmdIndex];
if (!cmd) continue;
var cmdResource = cmd.QueryInterface(Components.interfaces.nsIRDFResource);
if (!cmdResource) break;
// handle separators
if (cmdResource == separatorResource)
{
if (lastWasSep != true)
{
lastWasSep = true;
var menuItem = document.createElement("menuseparator");
popupNode.appendChild(menuItem);
}
continue;
}
lastWasSep = false;
var cmdNameNode = compositeDB.GetTarget(cmdResource, rdfNameResource, true);
if (!cmdNameNode) break;
cmdNameLiteral = cmdNameNode.QueryInterface(Components.interfaces.nsIRDFLiteral);
@ -126,6 +150,20 @@ function fillContextMenu(name, treeName)
menuItem.setAttribute("oncommand", "return doContextCmd('" + cmdResource.Value + "', '" + treeName + "');");
}
// strip off leading/trailing menuseparators
while (popupNode.childNodes.length > 0)
{
if (popupNode.childNodes[0].tagName != "menuseparator")
break;
popupNode.removeChild(popupNode.childNodes[0]);
}
while (popupNode.childNodes.length > 0)
{
if (popupNode.childNodes[popupNode.childNodes.length - 1].tagName != "menuseparator")
break;
popupNode.removeChild(popupNode.childNodes[popupNode.childNodes.length - 1]);
}
return(true);
}