diff options
author | Chris Goldthorpe | 2009-06-24 19:10:53 +0000 |
---|---|---|
committer | Chris Goldthorpe | 2009-06-24 19:10:53 +0000 |
commit | 6fcb803ca357fbbb3d3089a37c2e7574d5de137d (patch) | |
tree | cbc4d989e945b8a2f43ad0ebd170aa7303b52644 /org.eclipse.help.webapp | |
parent | 43af184a6363a22ef8fb3d3ca0b462d2904e52cf (diff) | |
download | eclipse.platform.ua-6fcb803ca357fbbb3d3089a37c2e7574d5de137d.tar.gz eclipse.platform.ua-6fcb803ca357fbbb3d3089a37c2e7574d5de137d.tar.xz eclipse.platform.ua-6fcb803ca357fbbb3d3089a37c2e7574d5de137d.zip |
Bug 272850 [Webapp] TOC expand too slow for when there are 3000+ sub topics
Diffstat (limited to 'org.eclipse.help.webapp')
-rw-r--r-- | org.eclipse.help.webapp/advanced/helptreechildren.js | 85 |
1 files changed, 55 insertions, 30 deletions
diff --git a/org.eclipse.help.webapp/advanced/helptreechildren.js b/org.eclipse.help.webapp/advanced/helptreechildren.js index c0d83f4b5..369757b38 100644 --- a/org.eclipse.help.webapp/advanced/helptreechildren.js +++ b/org.eclipse.help.webapp/advanced/helptreechildren.js @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2008 IBM Corporation and others. + * Copyright (c) 2006, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -25,7 +25,7 @@ function updateTree(xml) { var nodes = tocData.childNodes; selectedNode = null; mergeChildren(treeRoot, nodes); - if (selectedNode != null) { + if (selectedNode !== null) { // Focusing on the last child will increase the chance that it is visible if (!highlightSelectedNode) { focusOnDeepestVisibleChild(selectedNode, false); @@ -57,11 +57,14 @@ function mergeChildren(treeItem, nodes) { childContainer = findChild(treeItem, "DIV"); } var childAdded = false; - var hasPlaceholder = childContainer != null && childContainer.className == "unopened"; + var hasPlaceholder = childContainer !== null && childContainer.className == "unopened"; + var existingChildren = hasExistingChildren(childContainer); if (nodes) { for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; - if (node.tagName == "node") { + // If the children of this node have already been evaluated + // and the child XML node has no children we can safely skip it + if (node.tagName == "node" && (!existingChildren || node.childNodes.length > 0)) { if (hasPlaceholder) { // Remove the loading message treeItem.removeChild(childContainer); @@ -74,37 +77,44 @@ function mergeChildren(treeItem, nodes) { setAccessibilityRole(childContainer, WAI_GROUP); treeItem.appendChild(childContainer); } - var title = node.getAttribute("title"); + var id = node.getAttribute("id"); + var childItem = null; var isLeaf = node.getAttribute("is_leaf"); - var href = node.getAttribute("href"); - var id = node.getAttribute("id"); - var openImage = null; - var closedImage = null; - var imageAltText = ""; - if (node.getAttribute("openImage")) { - openImage = "../topic" + node.getAttribute("openImage"); - imageAltText = node.getAttribute("imageAlt"); - } else { - openImage = node.getAttribute("image"); - if (openImage) { - imageAltText = getAltText(openImage); - openImage = imagesDirectory + "/" + openImage + ".gif"; - } - } - if (node.getAttribute("closedImage")) { - closedImage = "../topic" + node.getAttribute("closedImage"); + if (existingChildren) { + childItem = findChildById(childContainer, id); } - var childItem = mergeChild(childContainer, id, title, href, openImage, closedImage, imageAltText, isLeaf); - var isSelected = node.getAttribute("is_selected"); + if (childItem === null) { + var title = node.getAttribute("title"); + var href = node.getAttribute("href"); + var openImage = null; + var closedImage = null; + var imageAltText = ""; + if (node.getAttribute("openImage")) { + openImage = "../topic" + node.getAttribute("openImage"); + imageAltText = node.getAttribute("imageAlt"); + } else { + openImage = node.getAttribute("image"); + if (openImage) { + imageAltText = getAltText(openImage); + openImage = imagesDirectory + "/" + openImage + ".gif"; + } + } + if (node.getAttribute("closedImage")) { + closedImage = "../topic" + node.getAttribute("closedImage"); + } + childItem = addChild(childContainer, id, title, href, openImage, closedImage, imageAltText, isLeaf); + } + if (!isLeaf) { mergeChildren(childItem, node.childNodes); - } + } + var isSelected = node.getAttribute("is_selected"); if (isSelected) { selectedNode = childItem; highlightSelectedNode = node.getAttribute("is_highlighted"); } childAdded = true; - } + } } } @@ -120,8 +130,19 @@ function mergeChildren(treeItem, nodes) { } } -// Create a child if one with this if does not exist -function mergeChild(treeItem, id, name, href, image, closedImage, imageAltText, isLeaf) { +function hasExistingChildren(container) { + var children = container.childNodes; + if (children !== null) { + for (var i = 0; i < children.length; i++) { + if (children[i].nodeid) { + return true; + } + } + } + return false; +} + +function findChildById(treeItem, id) { var children = treeItem.childNodes; if (children !== null) { for (var i = 0; i < children.length; i++) { @@ -130,7 +151,11 @@ function mergeChild(treeItem, id, name, href, image, closedImage, imageAltText, } } } - + return null; +} + +// Create a child of treeItem +function addChild(treeItem, id, name, href, image, closedImage, imageAltText, isLeaf) { var childItem = document.createElement("DIV"); // roots should have a className of "root" to prevent indentation if (treeItem.id == "tree_root") { @@ -200,7 +225,7 @@ function mergeChild(treeItem, id, name, href, image, closedImage, imageAltText, function setLoadingMessage(treeItem, message) { var placeholderDiv = findChild(treeItem, "DIV"); - if (placeholderDiv !== null && placeholderDiv.childNodes.length == 0) { + if (placeholderDiv !== null && placeholderDiv.childNodes.length === 0) { var msg = document.createTextNode(message); placeholderDiv.appendChild(msg); } |