diff --git a/suite/common/bookmarks/bookmarks.js b/suite/common/bookmarks/bookmarks.js index fba165881ed..93897587b54 100644 --- a/suite/common/bookmarks/bookmarks.js +++ b/suite/common/bookmarks/bookmarks.js @@ -35,230 +35,236 @@ function BookmarkProperties() function OpenURL(event, node) { - // clear any single-click/edit timeouts - if (timerID != null) - { - gEditNode = null; - clearTimeout(timerID); - timerID = null; - } + // clear any single-click/edit timeouts + if (timerID != null) + { + gEditNode = null; + clearTimeout(timerID); + timerID = null; + } - if (node.getAttribute('container') == "true") - { - return(false); - } + if (node.getAttribute('container') == "true") + { + return(false); + } - var url = node.getAttribute('id'); + var url = node.getAttribute('id'); - // Ignore "NC:" urls. - if (url.substring(0, 3) == "NC:") - { - return(false); - } + // Ignore "NC:" urls. + if (url.substring(0, 3) == "NC:") + { + return(false); + } - window.open(url,'bookmarks'); - dump("OpenURL(" + url + ")\n"); + window.open(url,'bookmarks'); + dump("OpenURL(" + url + ")\n"); - return(true); + return(true); } - var htmlInput = null; - var saveNode = null; - var newValue = ""; - var timerID = null; - var gEditNode = null; +var htmlInput = null; +var saveNode = null; +var newValue = ""; +var timerID = null; +var gEditNode = null; function DoSingleClick(event, node) { - var type = node.parentNode.parentNode.getAttribute('type'); - if (type == "http://home.netscape.com/NC-rdf#BookmarkSeparator") - { - // don't allow inline editing of separators - return(false); - } - - gEditNode = node; - - // edit node if we don't get a double-click in less than 1/2 second - timerID = setTimeout("OpenEditNode()", 500); - return(true); + var type = node.parentNode.parentNode.getAttribute('type'); + var selected = node.parentNode.parentNode.getAttribute('selected'); + + if (gEditNode == node) { + // Only start an inline edit if it is the second consecutive click + // on the same node that is not already editing or a separator. + if (!htmlInput && + type != "http://home.netscape.com/NC-rdf#BookmarkSeparator") { + // Edit node if we don't get a double-click in less than 1/2 second + timerID = setTimeout("OpenEditNode()", 500); + } + } else { + if (htmlInput) { + // Clicked during an edit + // Save the changes and move on + CloseEditNode(true); + } + gEditNode = node; + } + return false; } function OpenEditNode() { - dump("OpenEditNode entered.\n"); + dump("OpenEditNode entered.\n"); - // clear any single-click/edit timeouts - if (timerID != null) - { - clearTimeout(timerID); - timerID = null; - } + // clear any single-click/edit timeouts + if (timerID != null) + { + clearTimeout(timerID); + timerID = null; + } - // XXX uncomment the following line to replace the whole input row we do this - // (and, therefore, only allow editing on the name column) until we can - // arbitrarily change the content model (bugs prevent this at the moment) - gEditNode = gEditNode.parentNode; + // XXX uncomment the following line to replace the whole input row we do this + // (and, therefore, only allow editing on the name column) until we can + // arbitrarily change the content model (bugs prevent this at the moment) + gEditNode = gEditNode.parentNode; - var name = gEditNode.parentNode.getAttribute("Name"); - dump("Single click on '" + name + "'\n"); + var name = gEditNode.parentNode.getAttribute("Name"); + dump("Single click on '" + name + "'\n"); - CloseEditNode(); + var theParent = gEditNode.parentNode; + dump("Parent node is a " + theParent.nodeName + "\n\n"); - var theParent = gEditNode.parentNode; - dump("Parent node is a " + theParent.nodeName + "\n\n"); + saveNode = gEditNode; - saveNode = gEditNode; + // unselect all nodes! + var select_list = document.getElementsByAttribute("selected", "true"); + dump("# of Nodes selected: " + select_list.length + "\n\n"); + for (var nodeIndex=0; nodeIndex 0) - { - // perform command intersection calculation - for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++) - { - var cmdFound = false; - for (var nextCmdIndex = 0; nextCmdIndex < nextCmdArray.length; nextCmdIndex++) - { - if (nextCmdArray[nextCmdIndex] == cmdArray[cmdIndex]) - { - cmdFound = true; - break; - } - } - if (cmdFound == false) - { - cmdArray[cmdIndex] = null; - } - } - } - } + var nextCmdArray = new Array(); + while (cmdEnum.HasMoreElements()) + { + var cmd = cmdEnum.GetNext(); + if (!cmd) break; + if (nodeIndex == 0) + { + cmdArray[cmdArray.length] = cmd; + } + else + { + nextCmdArray[cmdArray.length] = cmd; + } + } + if (nodeIndex > 0) + { + // perform command intersection calculation + for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++) + { + var cmdFound = false; + for (var nextCmdIndex = 0; nextCmdIndex < nextCmdArray.length; nextCmdIndex++) + { + if (nextCmdArray[nextCmdIndex] == cmdArray[cmdIndex]) + { + cmdFound = true; + break; + } + } + if (cmdFound == false) + { + cmdArray[cmdIndex] = null; + } + } + } + } - // need a resource to ask RDF for each command's name - var rdfNameResource = rdf.GetResource("http://home.netscape.com/NC-rdf#Name"); - if (!rdfNameResource) return(false); + // need a resource to ask RDF for each command's name + var rdfNameResource = rdf.GetResource("http://home.netscape.com/NC-rdf#Name"); + if (!rdfNameResource) return(false); - // build up menu items - if (cmdArray.length < 1) return(false); + // build up menu items + if (cmdArray.length < 1) return(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; - var cmdNameNode = compositeDB.GetTarget(cmdResource, rdfNameResource, true); - if (!cmdNameNode) break; - cmdNameLiteral = cmdNameNode.QueryInterface(Components.interfaces.nsIRDFLiteral); - if (!cmdNameLiteral) break; - cmdName = cmdNameLiteral.Value; - if (!cmdName) break; + 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; + var cmdNameNode = compositeDB.GetTarget(cmdResource, rdfNameResource, true); + if (!cmdNameNode) break; + cmdNameLiteral = cmdNameNode.QueryInterface(Components.interfaces.nsIRDFLiteral); + if (!cmdNameLiteral) break; + cmdName = cmdNameLiteral.Value; + if (!cmdName) break; - dump("Command #" + cmdIndex + ": id='" + cmdResource.Value + "' name='" + cmdName + "'\n\n"); + dump("Command #" + cmdIndex + ": id='" + cmdResource.Value + "' name='" + cmdName + "'\n\n"); - var menuItem = document.createElement("menuitem"); - menuItem.setAttribute("name", cmdName); - menuItem.setAttribute("onclick", "return doContextCmd('" + cmdResource.Value + "');"); - - menuNode.appendChild(menuItem); - } + var menuItem = document.createElement("menuitem"); + menuItem.setAttribute("name", cmdName); + menuItem.setAttribute("onclick", "return doContextCmd('" + cmdResource.Value + "');"); + + menuNode.appendChild(menuItem); + } - return(true); + return(true); } function doContextCmd(cmdName) { - dump("doContextCmd start: cmd='" + cmdName + "'\n"); + dump("doContextCmd start: cmd='" + cmdName + "'\n"); - var treeNode = document.getElementById("bookmarksTree"); - if (!treeNode) return(false); - var db = treeNode.database; - if (!db) return(false); - - var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource); - if (!compositeDB) return(false); + var treeNode = document.getElementById("bookmarksTree"); + if (!treeNode) return(false); + var db = treeNode.database; + if (!db) return(false); + + var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource); + if (!compositeDB) return(false); - var isupports = Components.classes["component://netscape/rdf/rdf-service"].getService(); - if (!isupports) return(false); - var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService); - if (!rdf) return(false); + var isupports = Components.classes["component://netscape/rdf/rdf-service"].getService(); + if (!isupports) return(false); + var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService); + if (!rdf) return(false); - // need a resource for the command - var cmdResource = rdf.GetResource(cmdName); - if (!cmdResource) return(false); - cmdResource = cmdResource.QueryInterface(Components.interfaces.nsIRDFResource); - if (!cmdResource) return(false); + // need a resource for the command + var cmdResource = rdf.GetResource(cmdName); + if (!cmdResource) return(false); + cmdResource = cmdResource.QueryInterface(Components.interfaces.nsIRDFResource); + if (!cmdResource) return(false); - var select_list = treeNode.getElementsByAttribute("selected", "true"); - if (select_list.length < 1) return(false); - - dump("# of Nodes selected: " + select_list.length + "\n\n"); + var select_list = treeNode.getElementsByAttribute("selected", "true"); + if (select_list.length < 1) return(false); + + dump("# of Nodes selected: " + select_list.length + "\n\n"); - // build up selection nsISupportsArray - var selectionInstance = Components.classes["component://netscape/supports-array"].createInstance(); - if (!selectionInstance) - { - dump("unable to create selectionInstance.\n"); - return(false); - } - var selectionArray = selectionInstance.QueryInterface(Components.interfaces.nsISupportsArray); - if (!selectionArray) - { - dump("unable to QI to selectionArray.\n"); - return(false); - } + // build up selection nsISupportsArray + var selectionInstance = Components.classes["component://netscape/supports-array"].createInstance(); + if (!selectionInstance) + { + dump("unable to create selectionInstance.\n"); + return(false); + } + var selectionArray = selectionInstance.QueryInterface(Components.interfaces.nsISupportsArray); + if (!selectionArray) + { + dump("unable to QI to selectionArray.\n"); + return(false); + } - for (var nodeIndex=0; nodeIndex 0) - { - // perform command intersection calculation - for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++) - { - var cmdFound = false; - for (var nextCmdIndex = 0; nextCmdIndex < nextCmdArray.length; nextCmdIndex++) - { - if (nextCmdArray[nextCmdIndex] == cmdArray[cmdIndex]) - { - cmdFound = true; - break; - } - } - if (cmdFound == false) - { - cmdArray[cmdIndex] = null; - } - } - } - } + var nextCmdArray = new Array(); + while (cmdEnum.HasMoreElements()) + { + var cmd = cmdEnum.GetNext(); + if (!cmd) break; + if (nodeIndex == 0) + { + cmdArray[cmdArray.length] = cmd; + } + else + { + nextCmdArray[cmdArray.length] = cmd; + } + } + if (nodeIndex > 0) + { + // perform command intersection calculation + for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++) + { + var cmdFound = false; + for (var nextCmdIndex = 0; nextCmdIndex < nextCmdArray.length; nextCmdIndex++) + { + if (nextCmdArray[nextCmdIndex] == cmdArray[cmdIndex]) + { + cmdFound = true; + break; + } + } + if (cmdFound == false) + { + cmdArray[cmdIndex] = null; + } + } + } + } - // need a resource to ask RDF for each command's name - var rdfNameResource = rdf.GetResource("http://home.netscape.com/NC-rdf#Name"); - if (!rdfNameResource) return(false); + // need a resource to ask RDF for each command's name + var rdfNameResource = rdf.GetResource("http://home.netscape.com/NC-rdf#Name"); + if (!rdfNameResource) return(false); - // build up menu items - if (cmdArray.length < 1) return(false); + // build up menu items + if (cmdArray.length < 1) return(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; - var cmdNameNode = compositeDB.GetTarget(cmdResource, rdfNameResource, true); - if (!cmdNameNode) break; - cmdNameLiteral = cmdNameNode.QueryInterface(Components.interfaces.nsIRDFLiteral); - if (!cmdNameLiteral) break; - cmdName = cmdNameLiteral.Value; - if (!cmdName) break; + 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; + var cmdNameNode = compositeDB.GetTarget(cmdResource, rdfNameResource, true); + if (!cmdNameNode) break; + cmdNameLiteral = cmdNameNode.QueryInterface(Components.interfaces.nsIRDFLiteral); + if (!cmdNameLiteral) break; + cmdName = cmdNameLiteral.Value; + if (!cmdName) break; - dump("Command #" + cmdIndex + ": id='" + cmdResource.Value + "' name='" + cmdName + "'\n\n"); + dump("Command #" + cmdIndex + ": id='" + cmdResource.Value + "' name='" + cmdName + "'\n\n"); - var menuItem = document.createElement("menuitem"); - menuItem.setAttribute("name", cmdName); - menuItem.setAttribute("onclick", "return doContextCmd('" + cmdResource.Value + "');"); - - menuNode.appendChild(menuItem); - } + var menuItem = document.createElement("menuitem"); + menuItem.setAttribute("name", cmdName); + menuItem.setAttribute("onclick", "return doContextCmd('" + cmdResource.Value + "');"); + + menuNode.appendChild(menuItem); + } - return(true); + return(true); } function doContextCmd(cmdName) { - dump("doContextCmd start: cmd='" + cmdName + "'\n"); + dump("doContextCmd start: cmd='" + cmdName + "'\n"); - var treeNode = document.getElementById("bookmarksTree"); - if (!treeNode) return(false); - var db = treeNode.database; - if (!db) return(false); - - var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource); - if (!compositeDB) return(false); + var treeNode = document.getElementById("bookmarksTree"); + if (!treeNode) return(false); + var db = treeNode.database; + if (!db) return(false); + + var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource); + if (!compositeDB) return(false); - var isupports = Components.classes["component://netscape/rdf/rdf-service"].getService(); - if (!isupports) return(false); - var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService); - if (!rdf) return(false); + var isupports = Components.classes["component://netscape/rdf/rdf-service"].getService(); + if (!isupports) return(false); + var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService); + if (!rdf) return(false); - // need a resource for the command - var cmdResource = rdf.GetResource(cmdName); - if (!cmdResource) return(false); - cmdResource = cmdResource.QueryInterface(Components.interfaces.nsIRDFResource); - if (!cmdResource) return(false); + // need a resource for the command + var cmdResource = rdf.GetResource(cmdName); + if (!cmdResource) return(false); + cmdResource = cmdResource.QueryInterface(Components.interfaces.nsIRDFResource); + if (!cmdResource) return(false); - var select_list = treeNode.getElementsByAttribute("selected", "true"); - if (select_list.length < 1) return(false); - - dump("# of Nodes selected: " + select_list.length + "\n\n"); + var select_list = treeNode.getElementsByAttribute("selected", "true"); + if (select_list.length < 1) return(false); + + dump("# of Nodes selected: " + select_list.length + "\n\n"); - // build up selection nsISupportsArray - var selectionInstance = Components.classes["component://netscape/supports-array"].createInstance(); - if (!selectionInstance) - { - dump("unable to create selectionInstance.\n"); - return(false); - } - var selectionArray = selectionInstance.QueryInterface(Components.interfaces.nsISupportsArray); - if (!selectionArray) - { - dump("unable to QI to selectionArray.\n"); - return(false); - } + // build up selection nsISupportsArray + var selectionInstance = Components.classes["component://netscape/supports-array"].createInstance(); + if (!selectionInstance) + { + dump("unable to create selectionInstance.\n"); + return(false); + } + var selectionArray = selectionInstance.QueryInterface(Components.interfaces.nsISupportsArray); + if (!selectionArray) + { + dump("unable to QI to selectionArray.\n"); + return(false); + } - for (var nodeIndex=0; nodeIndex