blob: 3be66e3d96d4b5930b58e5c525721f0dd233e937 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2011 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
// Tree code specific to the help toc
var showExpanders = true;
var ajaxPath = "tocfragment";
var pendingSynchTopic = null; // Should the toc be synchronized when the view becomes visible
// The default value of ajaxPath works from jsp files but needs to be overridden to
// a non relative path to work from scripts launched from any page
function setAjaxPrefix(prefix) {
ajaxPath = prefix + "/tocfragment";
}
/*
* Returns the currently selected topic's href, or null if no
* topic is selected.
*/
function getSelectedTopic() {
var node = getActiveAnchor();
if (node != null) {
var href = node.href;
var index = href.indexOf("/topic/");
if (index != -1) {
return href.substring(index + 6);
}
index = href.indexOf("/nav/");
if (index != -1) {
return "/.." + href.substring(index);
}
}
// no selection
return null;
}
function isVisible()
{
var visibility = parent.parent.getVisibility("toc");
return visibility == "visible";
}
function selectTopic(topic, isAutosynch)
{
if (isAutosynch && !isVisible()) {
pendingSynchTopic = topic;
return;
}
// Is the highlighted node the same as the href? In that case no need to call the server.
if (oldActive && sameTopic(stripParams(topic), stripParams(oldActive.href))) {
focusOnItem(getTreeItem(oldActive), true);
return;
}
pendingSynchTopic = null;
var indexAnchor=topic.indexOf('#');
var parameters;
var anchorParam = "";
if (indexAnchor!=-1) {
anchorParam="&anchor=" + topic.substr(indexAnchor+1);
topic=topic.substr(0,indexAnchor);
}
var indexQuery = topic.indexOf('?');
if ( indexQuery > 0 ) {
parameters = "?topic="+topic.substr(0, indexQuery) + '&' + topic.substr(indexQuery + 1);
} else {
parameters = "?topic="+topic;
}
parameters = parameters + anchorParam;
if (isAutosynch) {
parameters += "&errorSuppress=true";
}
makeShowInTocRequest(parameters);
return true;
}
/*
Strip off any parameters and any anchor
*/
function stripParams(href) {
var qMark = href.indexOf('?');
if (qMark >= 0 ) {
return href.substring(0, qMark);
}
var anchor = href.indexOf('#');
if (anchor >= 0 ) {
return href.substring(0, anchor);
}
return href;
}
function sameTopic(topicHref, oldActiveHref) {
if (topicHref == oldActiveHref) {
return 1;
}
// Sometimes the oldActiveHref will start with '../', compare everything from /help on
if (oldActiveHref.indexOf('../') == 0) {
var fixedOldActive = oldActiveHref.substring(2);
var result = topicHref.indexOf(fixedOldActive) >= 0;
return result;
}
return 0;
}
function collapseAll() {
window.location.replace("tocView.jsp?collapse=true");
return true;
}
function setShowAll(isShowAll, href) {
var showAllParam = isShowAll ? "on" : "off";
window.location.replace("tocView.jsp?showAll=" + showAllParam);
}
function setImage(imageNode, image) {
var imageFile = imagesDirectory + "/" + image + ".gif";
imageNode.src = imageFile;
imageNode.alt = getAltText(image);
}
function getAltText(image) {
if (image == "plus") {
return altPlus;
} else if (image == "minus") {
return altMinus;
} else if (image == "toc_open") {
return altBookOpen;
} else if (image == "toc_closed") {
return altBookClosed;
} else if (image == "container_obj") {
return altContainer;
} else if (image == "container_topic") {
return altContainerTopic;
} else if (image == "topic") {
return altTopic;
} else {
return "";
}
}
function updateImage(imageNode, isExpanded) {
var src = imageNode.src;
if (isExpanded) {
if (imageNode.openImage) {
imageNode.src = imageNode.openImage;
} else if (src.match( /toc_closed.gif$/)) {
setImage(imageNode, "toc_open");
}
} else {
if (imageNode.closedImage) {
imageNode.src = imageNode.closedImage;
} else if (src.match( /toc_open.gif$/)) {
setImage(imageNode, "toc_closed");
}
}
}
function loadChildren(treeItem) {
var parameters = "";
if (treeItem !== null && treeItem.nodeid !== null) {
setLoadingMessage(treeItem, loadingMessage);
var topAncestor = getTopAncestor(treeItem);
parameters += "?toc=";
parameters += topAncestor.nodeid;
if (topAncestor !== treeItem) {
parameters += "&path=";
parameters += treeItem.nodeid;
}
}
makeNodeRequest(parameters);
}
function updateTocTree(xml) {
updateTree(xml);
}
function makeNodeRequest(parameters) {
var href;
href = ajaxPath +parameters;
var callback = function(xml) { updateTocTree(xml);};
var errorCallback = function() {
// alert("ajax error");
};
ajaxRequest(href, callback, errorCallback);
}
function makeShowInTocRequest(parameters) {
var href;
href = ajaxPath +parameters;
var callback = function(xml) { showInToc(xml);};
var errorCallback = function() {
// alert("ajax error");
};
ajaxRequest(href, callback, errorCallback);
}
function showInToc(xml) {
var tocData = xml.documentElement;
if (tocData.tagName != "tree_data") {
return;
}
if (showErrors(xml)) {
return;
}
var errorTags = xml.getElementsByTagName ("error");
var treeRoot = document.getElementById("tree_root");
var nodes = tocData.childNodes;
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
if (node.tagName == "numeric_path") {
var selectedChild = findChild(treeRoot, "DIV");
var path = node.getAttribute("path");
var isShowing = openPath(selectedChild, path);
if (!isShowing) {
makeNodeRequest("?expandPath=" + path + "&errorSuppress=true");
}
return;
}
}
}
function openPath(containerNode, path) {
if (!containerNode) {
return false;
}
var index = path.indexOf("_");
var segment;
if (index == -1) {
segment = path;
} else {
segment = path.substr(0, index);
}
for (var i = 0; i < segment; i++) {
containerNode = containerNode.nextSibling;
if (!containerNode) {
return false;
}
}
if (index == -1) {
focusOnItem(containerNode, true);
return true;
} else {
return openPath(findChild(findChild(containerNode, "DIV"), "DIV"), path.substr(index + 1));
}
}
function isAutosynchEnabled() {
var value = getCookie("synchToc");
return value ? value == "true" : false;
}
function setAutosynchEnabled(value) {
setCookie("synchToc", value);
var newValue = isAutosynchEnabled();
parent.tocToolbarFrame.setButtonState("synchnav", newValue);
if (value != newValue) {
alert(cookiesRequired);
}
}
function toggleAutosynch() {
setAutosynchEnabled(!isAutosynchEnabled());
}
function repaint() {
var selected = getSelectedTopic();
var href = "tocView.jsp";
if (selected) {
href += '?topic=';
href += selected;
}
location.replace(href);
}
function onShow() {
if ( isAutosynchEnabled() && pendingSynchTopic !== null ) {
selectTopic(pendingSynchTopic, true);
}
}
if (isInternetExplorer){
document.onclick = treeMouseClickHandler;
document.ondblclick = treeMouseDblClickHandler;
document.onkeydown = treeKeyDownHandler;
} else {
document.addEventListener('click', treeMouseClickHandler, true);
document.addEventListener('dblclick', treeMouseDblClickHandler, true);
//document.ondblclick = treeMouseDblClickHandler;
document.addEventListener('keydown', treeKeyDownHandler, true);
}